Dziś na tapecie wyjątkowo precyzyjny moduł zegara. Chcę go wykorzystać w moim inteligentnym domu jako podstawowy zegar, który będzie sterował wszystkimi urządzeniami włączanymi lub wyłączanymi w określonym czasie. Na razie robimy prosty układ sterujący lampką w czasie.
Źródło to: Viral Science – DS3231 jako trigger
Łączenie modułu z nano:
Świetna biblioteka z porządną dokumentacją: http://www.rinkydinkelectronics.com/library.php?id=73
Kod programu dla Nano:
Uwaga, w czasie ładowania programu do płytki Nano, wybrać musiałem opcję (Old Bootloader). Tylko wtedy transmisja przebiegała prawidłowo. Moduł mam sprzed kilku lat. Arduino IDE 1.8.x
//VIRAL SCIENCE //SPECIFIC TIME TRIGGER RELAY #include <DS3231.h> int Relay = 2; //DS3231 rtc(SDA, SCL); //Arduino UNO DS3231 rtc(A5, A4); // Nano Time t; const int OnHour = 0; //SET TIME TO ON RELAY (24 HOUR FORMAT) const int OnMin = 1; const int OffHour = 0; //SET TIME TO OFF RELAY const int OffMin = 2; void setup() { Serial.begin(115200); rtc.begin(); pinMode(Relay, OUTPUT); digitalWrite(Relay, LOW); } void loop() { t = rtc.getTime(); Serial.print(t.hour); Serial.print(" hour(s), "); Serial.print(t.min); Serial.print(" minute(s)"); Serial.println(" "); delay (1000); if(t.hour == OnHour &amp;amp;&amp;amp; t.min == OnMin){ digitalWrite(Relay,HIGH); Serial.println("LIGHT ON"); } else if(t.hour == OffHour &amp;amp;&amp;amp; t.min == OffMin){ digitalWrite(Relay,LOW); Serial.println("LIGHT OFF"); } }Przesyłanie czasu modułem radiowym:
Teraz mały test jak daleko da się przesyłać aktualny czas pobrany z DS3231 za pomocą modułu radiowego nRF24L01. Otóż w obrębię mieszkania (10m + ściany) nie było żadnego problemu, transmisja przebiega bez zakłóceń. Ustawiłem radio.setPALevel(RF24_PA_HIGH). Przy RF24_PA_LOW w obrębie pokoju działało dobrze, poza transmisja się rwała.
Łączenia:
Kod dla TX i RX:
TX – nadajnik, moduł z zegarem
/* * Arduino Wireless Communication Tutorial * Example 1 - Transmitter Code * * by Dejan Nedelkovski, www.HowToMechatronics.com * * Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include &amp;lt;SPI.h&amp;gt; #include &amp;lt;nRF24L01.h&amp;gt; #include &amp;lt;RF24.h&amp;gt; #include &amp;lt;DS3231.h&amp;gt;; RF24 radio(7, 8); // CE, CSN #define SDA_PIN A5 // SDA for Nano #define SCL_PIN A4 // SCL for Nano DS3231 rtc(SDA_PIN, SCL_PIN); Time t; int dataTransmitted[3]; const byte address[5] = "00001"; void setup() { Serial.begin(9600); rtc.begin(); radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_HIGH); radio.stopListening(); } void loop() { t = rtc.getTime(); dataTransmitted[0] = t.hour; dataTransmitted[1] = t.min; dataTransmitted[2] = t.sec; radio.write(&amp;amp;amp;dataTransmitted, sizeof(dataTransmitted)); // Serial.print(t.hour); // Serial.print(" hour(s), "); // Serial.print(t.min); // Serial.println(" minute(s)"); Serial.println(" "); delay(1000); }RX – odbiornik
/* * Arduino Wireless Communication Tutorial * Example 1 - Receiver Code * * by Dejan Nedelkovski, www.HowToMechatronics.com * * Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ * * Odbiornik Arduino UNO */ #include &amp;lt;SPI.h&amp;gt; #include &amp;lt;nRF24L01.h&amp;gt; #include &amp;lt;RF24.h&amp;gt; RF24 radio(7, 8); // CE, CSN const byte address[5] = "00001"; void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_HIGH); radio.startListening(); } void loop() { if (radio.available()) { int dataReceived[3]; radio.read(&amp;amp;amp;dataReceived, sizeof(dataReceived)); Serial.print("Czas: "); Serial.print(dataReceived[0]); Serial.print(" : "); Serial.print(dataReceived[1]); Serial.print(" : "); Serial.println(dataReceived[2]); } }kod oryginalny: https://drive.google.com/open?id=1s3We_v7Plbq7HlEwKliaqWgKhNDqsBpG
połączenie: https://drive.google.com/file/d/1lifntAlxlamBx739VILh2TYvS0xDM-a_LINKI:
https://www.elec-cafe.com/arduino-wireless-temperature-lcd-display-nrf24l01-dht11/
Biblioteka Sodaq_DS3231
DS3231 Real Time Clock + Temperature Sensing using Arduino
David Watts
How to Electronics