Zegar biurkowy + temperatura na piętrze

Zegar biurkowy + temperatura na piętrze

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,

  1. 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).
  2. 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.
  3. 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.
  4. 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. 

Ocena: 4.88/5 (głosów: 8)

Podobne posty

2 komentarzy do “Zegar biurkowy + temperatura na piętrze

Odpowiedz

anuluj

Masz uwagi?