Zegarek biurkowy z dodatkowymi funkcjami, projekt ma w założeniu pozwolić mi przeglądać stacje temperatury w każdym pomieszczeniu jeżeli będzie potrzebne, projekt ten ma mierzyć temperaturę na piętrze i w łatwy sposób wyświetlać.
Zegar domowy ma pokazywać datę, godzinę, temperaturę domową, temperaturę piętra(satelita).
„Zegar biurkowy” jest wyposażona w ekran 20×4 wraz z I2C, Arduino NANO, moduł zegara DS3231 z termometrem i moduł bezprzewodowy NRF24. Zegar biurkowy ma wyświetlać wartości 24h na dobę bez wyłączania. W nocy będzie święcił w biurze ale to jest plus.
„Satelita” umieszczona na piętrze będzie na bazie Arduino NANO, DS18b20(miał być DHT22 ale został uszkodzony).
Co będzie nam potrzebne :
Zegar Biurkowy
- NRF24 model PA+LN z anteną dodatkową,
- Moduł I2c,
- LCD 20×4 2004A,
- ZS-42 (DS3231),
- Bateria CR2032,
- Arduino NANO (klon),
- Gniazdo pinowe,
- Przewody do ścieżek.
Satelita Piętro (analogicznie satelita w piwnicy)
- Arduino NANO,
- DS18B20,
- Płytka uniwersalna,
- Przewody do lutowania,
- Gniazda pinowe,
- Kondensator 10uF.
Zacznijmy od rozwiązania kilku problemów,
- Moduł DS3231 (ZS-42) zasilany powinien być z akumulatora LIR2032 koszt takiej pastylki to ok. 6 zł, lepszym rozwianiem i znacznie tańszym jest zastosowanie zwykłej baterii CR2032 która na pewno będzie działać krócej i nie będzie ładowana jak LIR. Ale testuje od 3 miesięcy takie rozwiązanie i sprawdza się bateria działa. Bateria podtrzymuje odmierzanie czasu nawet jak moduł jest wyłączony. Moduł ten jest wyposażony w termometr który wykorzystamy. Żeby skorzystać z baterii trzeba odlutować diodę i 201, po tej czynności możemy korzystać z baterii CR(zdjęcie poniżej).
- Przygotowanie płytki pod cały moduł, najważniejsze to gniazdo dla Arduino NANO ja skorzystałem z kilku gniazd po kilka pinów, miejsce na I2c dla ekranu , dodatkowo piny dla modułu bezprzewodowego NRF24, z drugiej strony płyty uniwersalnej montujemy gniazda dla modułu czasu (ZS-42). Specjalnie tworzę wierzę z modułów by dobrze stało na biurku bez obudowy.
- Komunikacja bez przewodowa będzie odbywać za pomocą modułów NRF2401, „zegar biurkowy” posiada moduł Nrf2401 z dokręcaną anteną, „satelita” posiada moduł bez dodatkowej anteny, z tym drugim modułem miałem trochę problemów ze stabilnym zasilaniem w moim przypadku pomogło wlutowanie do pinów VCC i GND małego kondensatora w moim przypadku 10uF 25v taki miałem pod ręką ale sprawdza się problemy zniknęły.
- Zasilanie „satelity” i „zegara biurkowego” za pomocą zwykłych ładowarek 5v 1A bez akumulatorów. Całość będzie w domu więc nie będzie potrzeba akumulatorów. Cały moduł “satelity” poniżej.
Schemat połączenia :
„Zegar Biurkowy”
NRF24 = Arduino NANO
- VCC = 3,3v
- GND = GND
- CSN = PIN 10
- CE = PIN 9
- MOSI = PIN11
- SCK = PIN 13
- MISO = PIN12
- IRQ = nie podłączony
I2c(2004A)= Zs-42(DS3231) = Arduino Nano
- GND = GND = GND
- VCC = VCC = 5v
- SDA = SDA = A4
- SCL = SCL = A5
Moduł ZS-42 pozwala po podłączeniu przekazać piny “dalej” do innego modułu, dlatego pin SCL, SDA, VCC, GND są podłączone najpierw do ZS-42 wyprowadzone do I2c i wyświetlacza (2004A).
Drugi moduł układanki „Satelita”.
NRF24 = Arduino NANO
- VCC = 3,3v
- GND = GND
- CSN = PIN 10
- CE = PIN 9
- MOSI = PIN11
- SCK = PIN 13
- MISO = PIN12
- IRQ = nie podłączony
DS18b20
- VCC = 5v
- PIN = PIN6
- GND = GND
Oprogramowanie :
„ZegarBiurkowy”
#include <Wire.h>
#include <SPI.h>
#include “RF24.h”
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20,4);
#include <DS3231.h>
#include <EEPROM.h>DS3231 clock;
RTCDateTime dt;
#define CE_PIN 9
#define CSN_PIN 10
RF24 radio(CE_PIN, CSN_PIN);
const uint64_t pipes[3] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL };struct meteo {
float dht_t ;
} data;float rtc_t;
int i, z = 0;
int f;byte stopnie[8] = { //konfigurajca znaku stopnie
0b00100,
0b01010,
0b10001,
0b01010,
0b00100,
0b00000,
0b00000,
0b00000
};void setup() {
clock.begin();
radio.begin(); // włączenie radia
radio.setAutoAck(1);
radio.setRetries(15,15); // Opóźnienie maksymalne i liczba prób
radio.openReadingPipe(0, pipes[0]);
radio.openReadingPipe(1, pipes[1]);
radio.openReadingPipe(2, pipes[2]);
radio.startListening();
clock.begin();
clock.setDateTime(DATE, TIME);
lcd.begin(20, 4);
lcd.backlight();
lcd.createChar(0, stopnie);
lcd.clear();
lcd.print(“Laczenie….”);
delay(1000);
lcd.clear();
}void loop() {
lcd.setCursor(0, 0); //Poziom 1 data i godzina
dt = clock.getDateTime();
lcd.print(clock.dateFormat(“d-m-Y H:i “, dt));
lcd.setCursor(0, 1);
lcd.print(“Temperatura:”);
lcd.print(clock.readTemperature());
lcd.print((char)0);
lcd.print(“C”);lcd.setCursor(0,2);
lcd.print(“Temp pietro:”);
radio.read(&data, sizeof(data));
lcd.print(data.dht_t,0);
lcd.print((char)0);
lcd.print(“C”);
delay(5000);lcd.setCursor(0,3);
lcd.print(“#”);
delay(5000);
lcd.setCursor(0,3);
lcd.print(” “);}
„Satelita”
#include <SPI.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
#define CE_PIN 9
#define CSN_PIN 10
#include “RF24.h”
#include <OneWire.h>
#include <DS18B20.h>
#include “LowPower.h”
RF24 radio(CE_PIN, CSN_PIN);
const uint64_t pipes[3] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL };struct temp{
float temp_1;
} data_temp;#define ONEWIRE_PIN 6
byte address[8] = {0x28, 0xFF, 0x78, 0x43, 0x91, 0x16, 0x4, 0xD7}; //WAŻNE tutaj trzeba podać swój adres sensora, uzyskać go można w przykładach biblioteki ONEWIRE
OneWire onewire(ONEWIRE_PIN);
DS18B20 sensors(&onewire);void setup() {
radio.begin();
radio.setAutoAck(1);
radio.setRetries(15,15);
radio.openWritingPipe(pipes[2]);
radio.stopListening();
sensors.begin();
sensors.request(address);
}void loop(void){
data_temp.temp_1 = sensors.readTemperature(address);
radio.write( &data_temp, sizeof(temp) );
for(int i =0; i<=450;i++) {
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
i++; }
}
Programy nie obsługują błędów takich jak brak działającej satelity (wyświetli 0 stopni), jeżeli źle podamy adres naszego DS18b20 pokaże nam temp -273C itd. Oczywiście moduł DS3231 daje nam więcej możliwości i zegar można wyposażyć jeszcze w masę rzeczy takich jak budzik, alarm ostrzegający o zmianach temperatury dodatkowo stworzyć satelity z czujnikami gazu, czadu. Moduł ma pozwalać mi na kontrolę temperatury na piętrze w łatwy sposób.
Fajny projekt
Dzięki