Sterowanie roletami - Arduino MEGA

furia
Posts: 33
Joined: Sun May 08, 2016 5:59 pm

Sun Jul 03, 2016 7:33 pm

Witam.
Powracam do tematu...
Za pomocą chłopaków z tego forum udało mi się wykonać sterowanie przekaźnikami w systemie "ROLETY"
Postaram się wyjaśnić jak to zrobiłem jak najjaśniej. Tak jak dla mnie (czyli kompletnego leszcza w programowaniu :) :D )
Co nam będzie potrzebne:
- Arduino (w moim przypadku MEGA)
- karta EthernetShield
- Płytka z przekaźnikami w tym przypadku 8 (czyli sterowanie 4 roletami - jeden przekaźnik otwiera roletę drugi ją zamyka)
- Okablowanie (kabel USB - do programowania arduino, kilka kabelków z pinami żeńsko - męskimi, do podłączenia arduno i płytki z przekaźnikami. Kabel LAN podłączony do rutera)



Zaczynamy.
1. Bierzemy płytkę arduino i podłączamy do niej EthernetShield.
Image

2. podłączamy okablowanie - przekaźniki.
Uwaga! Numeracja pinów jest bardzo elastyczna - spisujemy sobie na kartce lub zapamiętujemy numery pinów do których podłączamy kartę z przekaźnikami - Będzie nam to potrzebne aby wpisać numery do programu. Oczywiście GND i 5V też podłączamy do płytki przekaźnikó.
Image

3. Teraz włączamy program do arduino.
4. ściągamy potrzebne biblioteki ze strony https://www.supla.org/download lub bezpośrednio https://drive.google.com/file/d/0B3DJSA ... lLcWc/view
5. dodajemy ściągnięte wcześniej biblioteki (co to są biblioteki do arduino i jak je dodać znajdziesz na google.pl)
6. wchodzimy na https://www.supla.org/ i zakładamy konto aby uzyskać ID oraz HASŁO do naszej chmury
7. wchodzimy na stronę https://www.supla.org/arduino/get-guid aby uzyskać GUID - gdzie je wkleić napiszę poniżej.
8. Ze sklepu google ściągam,y darmową aplikację SUPLA

9. Teraz gotowy program:

Code: Select all

#include <SPI.h>
#include <Ethernet.h>
#include <SuplaDevice.h>

/*
 * SUPLA DEVICE - ARDUINO - ETHERNET SHIELD
 * Author: Przemyslaw Zygmunt <przemek@supla.org>
 *
 */

void setup() {

  Serial.begin(9600);
 
  // Replace the falowing GUID
  char GUID[SUPLA_GUID_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid


  // Ethernet MAC address
  uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};


  /*
   * Having your device already registered at cloud.supla.org,
   * you want to change CHANNEL sequence or remove any of them,
   * then you must also remove the device itself from cloud.supla.org.
   * Otherwise you will get "Channel conflict!" error.
   */
    
  // CHANNEL0 - RELAY

 SuplaDevice.addRollerShutterRelays(23, 25, true);
  SuplaDevice.addRollerShutterRelays(27, 29, true);
   SuplaDevice.addRollerShutterRelays(31, 33, true);
    SuplaDevice.addRollerShutterRelays(35, 37, true);
    
        
  /*
   * SuplaDevice Initialization.
   * Server address, LocationID and LocationPassword are available at https://cloud.supla.org 
   * If you do not have an account, you can create it at https://cloud.supla.org/account/create
   * SUPLA and SUPLA CLOUD are free of charge
   * 
   */
 
  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svr1.supla.org",  // SUPLA server address
                    0000,                // Location ID - TU, w miejsce 0000 WKLEJASZ SWÓJ ID
                    "0000");           // Location Password - W miejsce 0000 WKLEJASZ HASŁO
    
}

void loop() {
  SuplaDevice.iterate();
}
10. W programie do arduino klikamy "Wgraj" i powinno już zadziałać

W zasadzie tu jest koniec a resztę możnaby było się domyśleć lub poszukać na tym forum ale objaśnienie co i jak:

A.
na początku programu mamy:

Code: Select all

 // Replace the falowing GUID
  char GUID[SUPLA_GUID_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid
W miejscu "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00" wklejamy kod który wygenerowaliśmy na stronie z pkt 7.

B.
Później mamy kawałek kodu:

Code: Select all

SuplaDevice.addRollerShutterRelays(23, 25, true);
  SuplaDevice.addRollerShutterRelays(27, 29, true);
   SuplaDevice.addRollerShutterRelays(31, 33, true);
    SuplaDevice.addRollerShutterRelays(35, 37, true);
Tak jak opisywałem na początku mamy 4 rolety. Każda z rolet ma przypisane 2 numery pinów. jeden do otwierania drógi do zamykania Do tych pinów podłączamy przekaźniki. jak w pkt 2.
Ilość rolet można oczywiście zmieniać trzeba tylko pamiętać aby odpowiednio je ponumerować w programie.

C.
Teraz nasze konto:
W trakcie jego zakładania na stronie https://www.supla.org/ Wyświetli się instrukcja jak będzie wyglądało Hasło i ID do SUPLA. (nie potrafię jaśniej wytłumaczyć jak to się robi)

Code: Select all

  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svr1.supla.org",  // SUPLA server address
                    0000,                // Location ID 
                    "0000");           // Location Password 
    
Location ID - TU, w miejsce 0000 WKLEJASZ SWÓJ ID
Location Password - W miejsce 0000 WKLEJASZ HASŁO

Gdy już wszystko zrobione to:
1. podłączamy zasilanie do arduino
2. Podłączamy kabel ethernet
3. podłączamy kartę przekaźników
4. wchodzimy w przeglądarkę wpisujemy https://www.supla.org/ logujemy się.
pokazuje się:
Image
(ilość rolet w tym przypadku jest 7 ale tu powinno być 4)

Image

Image

Na smartfonie:
Image
(teraz oznaczenia są czerwone - dla tego, że wszystko rozłączyłem do zrobienia zdjęć, ale wszystko działa)
furia
Posts: 33
Joined: Sun May 08, 2016 5:59 pm

Mon Jul 04, 2016 7:48 pm

Nikt nie pisze...
To ja będę pierwszy.

Mam pytanie.
1) Jak zrobić aby sterowanie było takie ze kliknę na "otwórz" to roleta się otwiera (nie muszę trzymać wciśniętego przycisku) jak kliknę jeszcze raz "otwórz" (w trakcie otwierania) to roleta stanie. Podobnie w trakcie zamykania.
2) jak zrobić aby wszystkie rolety zamknąć / otworzyć jednym przyciskiem.
3) jak zrobić aby to zdziałało na przyciski w ścianie - naciskam przycisk na ścianie który idzie do pinów na arduino
User avatar
pzygmunt
Posts: 3854
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Mon Jul 04, 2016 8:12 pm

1. Będzie taka opcja do ustawienia w cloudzie
2. Będą "sceny"
3. Musisz dopisać kilka linijek kodu. Z głowy teraz nie podam gotowca.
furia
Posts: 33
Joined: Sun May 08, 2016 5:59 pm

Mon Jul 04, 2016 8:22 pm

było by fajnie jakby można było robić to z cloud.

Jesteś w stanie podać przybliżony termin? :) (Przepraszam za wkurzające pytanie)
furia
Posts: 33
Joined: Sun May 08, 2016 5:59 pm

Tue Jul 05, 2016 7:34 pm

Jakby nie było...
Mam zamiar na tym postawić całą chałupę :)
Jako, że mam zamiar skończyć jeszcze w tym roku to zrobię MAM NADZIEJE Z WASZĄ POMOCĄ sterowanie roletami, poprzez włączanie świateł na zewnątrz, furtka, brama i kilka czujników...
Bardzo chętnie nagram parę filmików i chętnie zrobię z siebie reklamę dla SUPLI!
kubayashi
Posts: 34
Joined: Wed Dec 14, 2016 4:45 pm

Thu Jan 19, 2017 7:09 pm

Przyłączam się do pytania numer 3.
Wiem że jest to rozwiązane w WeMos_Roller_Shutter_4M_v1.8.2.rar ( sam testowałem)
Jednakże jestem zmuszony użyć arduino mega.
Jakieś postępy w tym temacie?
Której części kodu ewentualnie się przyjrzeć?
Mile widziane jakieś wskazówki.
Demark
Posts: 16
Joined: Sat Dec 23, 2017 5:42 am

Tue Apr 24, 2018 8:51 pm

Witam.
Pytanie do posiadaczy arduino mega, jak ze stabilnością układu.
Pytam się ponieważ u mnie różnie to bywa, co jakiś czas (kilka razy dziennie), traci połączenie z serwerem. Logując sie ponownie traci ustawienia przełączników w aplikacji, i już nie wiadomo który jest aktualnie załączony, wszystkie widnieją jako OFF, a są np. załączone. Rolety przechodzą w stan kalibracji, ale wstarczy "ruszyć" roletą i wskakuje procent zamkniecia.
kubayashi
Posts: 34
Joined: Wed Dec 14, 2016 4:45 pm

Thu Apr 26, 2018 2:10 pm

Demark wrote:
Tue Apr 24, 2018 8:51 pm
Witam.
Pytanie do posiadaczy arduino mega, jak ze stabilnością układu.
Pytam się ponieważ u mnie różnie to bywa, co jakiś czas (kilka razy dziennie), traci połączenie z serwerem. Logując sie ponownie traci ustawienia przełączników w aplikacji, i już nie wiadomo który jest aktualnie załączony, wszystkie widnieją jako OFF, a są np. załączone. Rolety przechodzą w stan kalibracji, ale wstarczy "ruszyć" roletą i wskakuje procent zamkniecia.
Na mega mam podłączone kilka rolet. Nie mam żadnego problemu ze stabilnością. Niekiedy konieczna jest ponowna kalibracja czasów.
User avatar
pzygmunt
Posts: 3854
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Contact:

Thu Apr 26, 2018 3:54 pm

kubayashi wrote:
Thu Apr 26, 2018 2:10 pm
Demark wrote:
Tue Apr 24, 2018 8:51 pm
Witam.
Pytanie do posiadaczy arduino mega, jak ze stabilnością układu.
Pytam się ponieważ u mnie różnie to bywa, co jakiś czas (kilka razy dziennie), traci połączenie z serwerem. Logując sie ponownie traci ustawienia przełączników w aplikacji, i już nie wiadomo który jest aktualnie załączony, wszystkie widnieją jako OFF, a są np. załączone. Rolety przechodzą w stan kalibracji, ale wstarczy "ruszyć" roletą i wskakuje procent zamkniecia.
Na mega mam podłączone kilka rolet. Nie mam żadnego problemu ze stabilnością. Niekiedy konieczna jest ponowna kalibracja czasów.
Najwyraźniej dlatego, że nie zapisujesz w trwałym miejscu ustawień.
Demark
Posts: 16
Joined: Sat Dec 23, 2017 5:42 am

Thu Apr 26, 2018 8:41 pm

pzygmunt wrote:
Thu Apr 26, 2018 3:54 pm
kubayashi wrote:
Thu Apr 26, 2018 2:10 pm
Demark wrote:
Tue Apr 24, 2018 8:51 pm
Witam.
Pytanie do posiadaczy arduino mega, jak ze stabilnością układu.
Pytam się ponieważ u mnie różnie to bywa, co jakiś czas (kilka razy dziennie), traci połączenie z serwerem. Logując sie ponownie traci ustawienia przełączników w aplikacji, i już nie wiadomo który jest aktualnie załączony, wszystkie widnieją jako OFF, a są np. załączone. Rolety przechodzą w stan kalibracji, ale wstarczy "ruszyć" roletą i wskakuje procent zamkniecia.
Na mega mam podłączone kilka rolet. Nie mam żadnego problemu ze stabilnością. Niekiedy konieczna jest ponowna kalibracja czasów.
Najwyraźniej dlatego, że nie zapisujesz w trwałym miejscu ustawień.
Przemku poprawiłem szkic według Twoich wskazówek do zapisu we flash'u, i nic mi to nie pomogło jest tak samo. Widocznie coś źle zrobilem.
Mój szkic wygląda tak jak poniżej. Może ktoś mi wytłumaczy gdzie mam błąd.

Code: Select all

#include <SPI.h>
#include <Ethernet.h>
#include <DHT.h>
#include <OneWire.h >
#include <DallasTemperature.h >
#include <SuplaDevice.h>

#define DHTPIN 38
#define DHTTYPE DHT22

// Setup a DHT instance
DHT dht(DHTPIN, DHTTYPE);



// DS18B20 Sensor read implementation
void get_temperature_and_humidity(int channelNumber, double *temp, double *humidity) {

    *temp = dht.readTemperature();
    *humidity = dht.readHumidity();

    if ( isnan(*temp) || isnan(*humidity) ) {
      *temp = -275;
      *humidity = -1;
    }

}

 // Setup a oneWire instance
OneWire oneWire(40); // 40 - Pin number

// Pass oneWire reference to Dallas Temperature
DallasTemperature sensors(&oneWire);

// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {

    double t = -275;
    
    if ( sensors.getDeviceCount() > 0 )
      {
         sensors.requestTemperatures();
         t = sensors.getTempCByIndex(0);
      };

    return t;  
}   

void supla_rs_SavePosition(int channelNumber, int position) {
    // Save roller shutter position on flash memory.
    // *Arduino EEPROM is not recommended because of write cycle limits.
}

void supla_rs_LoadPosition(int channelNumber, int *position) {
    // Load roller shutter position from flash memory
}

void supla_rs_SaveSettings(int channelNumber, unsigned int full_opening_time, unsigned int full_closing_time) {
    // Save roller shutter settings on flash memory.
    // *Arduino EEPROM is not recommended because of write cycle limits.
}

void supla_rs_LoadSettings(int channelNumber, unsigned int *full_opening_time, unsigned int *full_closing_time) {
    // Load roller shutter settings from flash memory
}

void setup() {

  Serial.begin(9600);

  // Init DHT library 
  dht.begin(); 
  
  // Set temperature/humidity callback
  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);
 
 // Init DS18B20 library 
  sensors.begin();
  
  // Set temperature callback
  SuplaDevice.setTemperatureCallback(&get_temperature); 
  
  
  // Replace the falowing GUID
  char GUID[SUPLA_GUID_SIZE] = 
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid


  // Ethernet MAC address
  uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};


  
    
  // CHANNEL0 - RELAY
 SuplaDevice.addRollerShutterRelays(22, 23, LOW);

 SuplaDevice. setRollerShutterButtons ( 0 ,     // 0 - Numer kanału
                                      2 , 3 );
 // CHANNEL1 - RELAY
  SuplaDevice.addRollerShutterRelays(24, 25, LOW);

  SuplaDevice. setRollerShutterButtons ( 1 ,     // 0 - Numer kanału
                                      4 , 5 );
 // CHANNEL2 - RELAY
   SuplaDevice.addRollerShutterRelays(26, 27, LOW);

  SuplaDevice. setRollerShutterButtons ( 2 ,     // 0 - Numer kanału
                                      6 , 7 );
  SuplaDevice.setRollerShutterFuncImpl(&supla_rs_SavePosition, &supla_rs_LoadPosition, &supla_rs_SaveSettings, &supla_rs_LoadSettings);

  // CHANNEL3 - RELAY
  SuplaDevice.addRelay(28, LOW); 
  // CHANNEL4 - RELAY
  SuplaDevice.addRelay(29, LOW); 
  // CHANNEL5 - RELAY
  SuplaDevice.addRelay(30, true); 
  // CHANNEL6 - RELAY
  SuplaDevice.addRelay(31, true); 
  // CHANNEL7 - RELAY
  SuplaDevice.addRelay(32, true); 
  // CHANNEL8 - RELAY
  SuplaDevice.addRelay(33, true);
  // CHANNEL9 - RELAY
  SuplaDevice.addRelay(34, true);
  // CHANNEL10 - RELAY
  SuplaDevice.addRelay(35, true);
  // CHANNEL11 - RELAY
  SuplaDevice.addRelay(36, true);
  // CHANNEL12 - RELAY
  SuplaDevice.addRelay(37, true);
  // CHANNEL13 - DHT22 Sensor
  // SuplaDevice.addDHT11();
  // SuplaDevice.addAM2302();
  SuplaDevice.addDHT22();
  // CHANNEL14 - Thermometer DS18B20
  SuplaDevice.addDS18B20Thermometer();
    

  SuplaDevice.begin(GUID,              // Global Unique Identifier 
            
    
}

void loop() {
  SuplaDevice.iterate();
}

Dziękuję za pomoc.
Post Reply