Mały, bezprzewodowy czujnik temperatury na radiu
Ja szukam pomysłu na zainstalowanie i zasilenie w jakiś sposób czujników temperatury z czujek od alarmu. Czy ktoś może mnie naprowadzić na właściwy tor? Oczywiście też bym chętnie kupił jakiegoś gotowca od was chłopaki
Mój czujnik pogodowy
https://krasnikgorny.aqi.eco/pl
https://krasnikgorny.aqi.eco/pl
- Robert Błaszczak
- Posty: 3970
- Rejestracja: sob gru 22, 2018 8:55 pm
- Lokalizacja: Zielona Góra
- Kontakt:
Nie posiadam tego czujnika, ale powinno działać:
Kod: Zaznacz cały
#include <Wire.h> //Zawarty w Arduino IDE (www.arduino.cc)
#include <SPI.h> //Zawarty w Arduino IDE (www.arduino.cc)
#include <RFM69_ATC.h> //Pobierz z: https://github.com/lowpowerlab/rfm69
#include <SPIFlash.h> //Pobierz z: https://github.com/lowpowerlab/spiflash
#include <Adafruit_HTU21DF.h> //Pobierz z: https://github.com/adafruit/Adafruit_HTU21DF_Library
#include <LowPower.h> //Pobierz z: https://github.com/lowpowerlab/lowpower
#define NODEID 1 // Unikalny numer transmitera (1 - 6) pracującego w sieci o takim samym ID, który jest jednocześnie numerem czujnika w SUPLA Cloud.
#define NETWORKID 100 // Numer sieci (1 - 254) w której działą bramka SUPLA oraz inne transmitery. Bramka oraz max. 6 transmiterów musi działać w sieci o takim samym ID.
#define GATEWAYID 1 // Numer bramki (0 - 254), do której łączy się transmiter.
#define FREQUENCY RF69_868MHZ //Jeśli posiadasz moduł radiowy pracujący z inną częstotliwością zamień parametr na RF69_433MHZ lub RF69_915MHZ.
//#define IS_RFM69HW_HCW //Usuń zacznik komentarza, jeśli posiadasz moduł radiowy w wersji RFM69HW/HCW.
#define ENCRYPTKEY "xxxxxxxxxxxxxxxx" //Klucz kodowania - 16 znaków (ani mniej, ani więcej) - identyczny w bramce SUPLA i we wszystkich transmiterach.
#define ENABLE_ATC //Wstaw znacznik komentarza jeśli chcesz wyłączyć automatyczną kontrolę transmisji (ATC).
#define ATC_RSSI -80 //Poziom sygnału radiowego (odcięcie) dla ATC.
period_t sleepTime = SLEEP_4S; //Zdefiniowany czas uśpienia transmitera 4 sekundy (zgodnie z LowPower library (LowPower.h)).
#define SEND_LOOPS 13 //Ilość pętli uśpienia transmitera (np. 4 sekundy * 15 = 60 sekund). Ilość pętli należy dobrać do konkretnej płytki Monteino.
#define BATT_READ_LOOPS SEND_LOOPS * 30 //Ilość pętli, po których wykonywany jest pomiar napięcia na baterii (np. 60 sekund * 30 = 30 minut).
//#define SERIAL_ENABLE //Usuń znaki komentarza '//' aby włączyć wyświetlanie na porcie szeregowym.
#define BATT0 730 //Odczytana wartość napięcia BATTx poniżej której poziom baterii ustawiany jest na wartość 0 (3.10V).
#define BATT1 1002 //Odczytana wartość napięcia BATTx poniżej której poziom baterii ustawiany jest na wartość 1 (3.20V).
#define BATT2 1008 //Odczytana wartość napięcia BATTx poniżej której poziom baterii ustawiany jest na wartość 2 (3.25V).
#ifdef SERIAL_ENABLE
#define SERIAL_BAUD 115200
#define SP(input) {Serial.print(input);}
#define SPln(input) {Serial.println(input);}
#define SFLUSH() {Serial.flush();}
#else
#define SERIAL_BAUD 115200
#define SP(input);
#define SPln(input);
#define SFLUSH();
#endif
RFM69_ATC radio;
SPIFlash flash(SS_FLASHMEM, 0xEF30);
Adafruit_HTU21DF HTU21 = Adafruit_HTU21DF();
char Tstr[10];
char Hstr[10];
char Bstr[10];
double T,H,B;
char buffer[60];
void setup() {
Serial.begin(SERIAL_BAUD);
radio.initialize(FREQUENCY, NODEID, NETWORKID);
#ifdef IS_RFM69HW_HCW
radio.setHighPower();
#endif
radio.encrypt(ENCRYPTKEY);
radio.enableAutoPower(ATC_RSSI);
HTU21.begin();
sprintf(buffer, "T/H SUPLA TRANSMITER RB-10 %d MHz.", FREQUENCY==RF69_433MHZ ? 433 : FREQUENCY==RF69_868MHZ ? 868 : 915);
SPln(buffer);
Wire.begin();
Wire.setClock(400000);
if (flash.initialize()) flash.sleep();
for (uint8_t i=0; i<=A5; i++)
{
if (i == RF69_SPI_CS) continue;
if (i == SS_FLASHMEM) continue;
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
pinMode(A1, INPUT);
SFLUSH();
}
char input = 0;
unsigned long sendLoops = 0;
unsigned long battReadLoops = 0;
word Battery1024 = 0;
byte BatteryLevel = 0;
byte sendLen;
void loop() {
if (battReadLoops--<=0) {
ReadBattery();
battReadLoops = BATT_READ_LOOPS-1;
}
if (sendLoops--<=0) {
sendLoops = SEND_LOOPS-1;
T = HTU21.readTemperature();
H = HTU21.readHumidity();
dtostrf(T, 3, 2, Tstr);
dtostrf(H, 3, 2, Hstr);
dtostrf(BatteryLevel, 0, 0, Bstr);
sprintf(buffer, "%s|%s|%s", Tstr, Hstr, Bstr);
sendLen = strlen(buffer);
radio.sendWithRetry(GATEWAYID, buffer, sendLen);
radio.send(GATEWAYID, buffer, sendLen);
SP("Wysłane dane: "); SP(buffer); SPln();
}
if (radio.receiveDone()) {
SPln();
}
SFLUSH();
flash.sleep();
radio.sleep();
LowPower.powerDown(sleepTime, ADC_OFF, BOD_OFF);
SPln("SLEEP");
}
void ReadBattery() {
unsigned int readings = 0;
analogWrite(A0, 1024);
for (byte i = 0; i < 6; i++)
readings += analogRead(A1);
analogWrite(A0, 0);
Battery1024 = (readings / 3);
if (Battery1024 >= BATT2) {
BatteryLevel = 3;
}
else if (Battery1024 < BATT2 && Battery1024 >= BATT1) {
BatteryLevel = 2;
}
else if (Battery1024 < BATT1 && Battery1024 >= BATT0) {
BatteryLevel = 1;
}
else if (Battery1024 < BATT0) {
BatteryLevel = 0;
}
SP("BATTx: "); SP(Battery1024); SP(" | Poziom baterii (0 - 3): ");SPln(BatteryLevel);
}
Pozdrawiam
Robert Błaszczak
Moja prywatna strona: www.blaszczak.pl
Robert Błaszczak
Moja prywatna strona: www.blaszczak.pl
Robert Błaszczak pisze: ↑śr sty 01, 2020 7:49 pm Nie posiadam tego czujnika, ale powinno działać:
Kod: Zaznacz cały
#include <Wire.h> //Zawarty w Arduino IDE (www.arduino.cc) #include <SPI.h> //Zawarty w Arduino IDE (www.arduino.cc) #include <RFM69_ATC.h> //Pobierz z: https://github.com/lowpowerlab/rfm69 #include <SPIFlash.h> //Pobierz z: https://github.com/lowpowerlab/spiflash #include <Adafruit_HTU21DF.h> //Pobierz z: https://github.com/adafruit/Adafruit_HTU21DF_Library #include <LowPower.h> //Pobierz z: https://github.com/lowpowerlab/lowpower #define NODEID 1 // Unikalny numer transmitera (1 - 6) pracującego w sieci o takim samym ID, który jest jednocześnie numerem czujnika w SUPLA Cloud. #define NETWORKID 100 // Numer sieci (1 - 254) w której działą bramka SUPLA oraz inne transmitery. Bramka oraz max. 6 transmiterów musi działać w sieci o takim samym ID. #define GATEWAYID 1 // Numer bramki (0 - 254), do której łączy się transmiter. #define FREQUENCY RF69_868MHZ //Jeśli posiadasz moduł radiowy pracujący z inną częstotliwością zamień parametr na RF69_433MHZ lub RF69_915MHZ. //#define IS_RFM69HW_HCW //Usuń zacznik komentarza, jeśli posiadasz moduł radiowy w wersji RFM69HW/HCW. #define ENCRYPTKEY "xxxxxxxxxxxxxxxx" //Klucz kodowania - 16 znaków (ani mniej, ani więcej) - identyczny w bramce SUPLA i we wszystkich transmiterach. #define ENABLE_ATC //Wstaw znacznik komentarza jeśli chcesz wyłączyć automatyczną kontrolę transmisji (ATC). #define ATC_RSSI -80 //Poziom sygnału radiowego (odcięcie) dla ATC. period_t sleepTime = SLEEP_4S; //Zdefiniowany czas uśpienia transmitera 4 sekundy (zgodnie z LowPower library (LowPower.h)). #define SEND_LOOPS 13 //Ilość pętli uśpienia transmitera (np. 4 sekundy * 15 = 60 sekund). Ilość pętli należy dobrać do konkretnej płytki Monteino. #define BATT_READ_LOOPS SEND_LOOPS * 30 //Ilość pętli, po których wykonywany jest pomiar napięcia na baterii (np. 60 sekund * 30 = 30 minut). //#define SERIAL_ENABLE //Usuń znaki komentarza '//' aby włączyć wyświetlanie na porcie szeregowym. #define BATT0 730 //Odczytana wartość napięcia BATTx poniżej której poziom baterii ustawiany jest na wartość 0 (3.10V). #define BATT1 1002 //Odczytana wartość napięcia BATTx poniżej której poziom baterii ustawiany jest na wartość 1 (3.20V). #define BATT2 1008 //Odczytana wartość napięcia BATTx poniżej której poziom baterii ustawiany jest na wartość 2 (3.25V). #ifdef SERIAL_ENABLE #define SERIAL_BAUD 115200 #define SP(input) {Serial.print(input);} #define SPln(input) {Serial.println(input);} #define SFLUSH() {Serial.flush();} #else #define SERIAL_BAUD 115200 #define SP(input); #define SPln(input); #define SFLUSH(); #endif RFM69_ATC radio; SPIFlash flash(SS_FLASHMEM, 0xEF30); Adafruit_HTU21DF HTU21 = Adafruit_HTU21DF(); char Tstr[10]; char Hstr[10]; char Bstr[10]; double T,H,B; char buffer[60]; void setup() { Serial.begin(SERIAL_BAUD); radio.initialize(FREQUENCY, NODEID, NETWORKID); #ifdef IS_RFM69HW_HCW radio.setHighPower(); #endif radio.encrypt(ENCRYPTKEY); radio.enableAutoPower(ATC_RSSI); HTU21.begin(); sprintf(buffer, "T/H SUPLA TRANSMITER RB-10 %d MHz.", FREQUENCY==RF69_433MHZ ? 433 : FREQUENCY==RF69_868MHZ ? 868 : 915); SPln(buffer); Wire.begin(); Wire.setClock(400000); if (flash.initialize()) flash.sleep(); for (uint8_t i=0; i<=A5; i++) { if (i == RF69_SPI_CS) continue; if (i == SS_FLASHMEM) continue; pinMode(i, OUTPUT); digitalWrite(i, LOW); } pinMode(A1, INPUT); SFLUSH(); } char input = 0; unsigned long sendLoops = 0; unsigned long battReadLoops = 0; word Battery1024 = 0; byte BatteryLevel = 0; byte sendLen; void loop() { if (battReadLoops--<=0) { ReadBattery(); battReadLoops = BATT_READ_LOOPS-1; } if (sendLoops--<=0) { sendLoops = SEND_LOOPS-1; T = HTU21.readTemperature(); H = HTU21.readHumidity(); dtostrf(T, 3, 2, Tstr); dtostrf(H, 3, 2, Hstr); dtostrf(BatteryLevel, 0, 0, Bstr); sprintf(buffer, "%s|%s|%s", Tstr, Hstr, Bstr); sendLen = strlen(buffer); radio.sendWithRetry(GATEWAYID, buffer, sendLen); radio.send(GATEWAYID, buffer, sendLen); SP("Wysłane dane: "); SP(buffer); SPln(); } if (radio.receiveDone()) { SPln(); } SFLUSH(); flash.sleep(); radio.sleep(); LowPower.powerDown(sleepTime, ADC_OFF, BOD_OFF); SPln("SLEEP"); } void ReadBattery() { unsigned int readings = 0; analogWrite(A0, 1024); for (byte i = 0; i < 6; i++) readings += analogRead(A1); analogWrite(A0, 0); Battery1024 = (readings / 3); if (Battery1024 >= BATT2) { BatteryLevel = 3; } else if (Battery1024 < BATT2 && Battery1024 >= BATT1) { BatteryLevel = 2; } else if (Battery1024 < BATT1 && Battery1024 >= BATT0) { BatteryLevel = 1; } else if (Battery1024 < BATT0) { BatteryLevel = 0; } SP("BATTx: "); SP(Battery1024); SP(" | Poziom baterii (0 - 3): ");SPln(BatteryLevel); }
Dzięki.
Jutro sprawdzę
Wykorzystujesz wspólną masę czujek ruchu i DS. Dajesz osobny plus 3.3V dla DS oraz osobny przewod na magistralę. Łączysz wszystko w gwiazde i gotowe. Ja tak mam u siebie. Wykorzystalem wolne żyły od czujek ruchu, a calość zasililem z centrali alarmowej przez jedną przetwornice 12->3.3V. Łącznie pracuje tak u mnie 13 czujników DS zainstalowanych pod czujnikami ruchu.
Np. taka:
https://tridex.pl/product/10140/przetwo ... -2a-mt3608
lub taka:
https://tridex.pl/product/10699/przetwo ... -lm2596-v2
DS-y są bardzo dobrymi czujnikami, więc nie wiem czy jest sens coś innego szukać.
https://tridex.pl/product/10140/przetwo ... -2a-mt3608
lub taka:
https://tridex.pl/product/10699/przetwo ... -lm2596-v2
DS-y są bardzo dobrymi czujnikami, więc nie wiem czy jest sens coś innego szukać.
Dzieki za linki. Jeszcze podpowiedz proszę którym softem obsłużyć 8 DS'ów. Stosujesz wemosa czy Sonoff?
Czy ten DS będzie ok? https://sklep.avt.pl/uklad-scalony-ds18s20-ds1820.html
Czy ten DS będzie ok? https://sklep.avt.pl/uklad-scalony-ds18s20-ds1820.html
Mój czujnik pogodowy
https://krasnikgorny.aqi.eco/pl
https://krasnikgorny.aqi.eco/pl
Znalazłem na Ali akumulatorki do transmiterów.
Specyfikacja: 3.7 V800 mAh 25C bateria li-po
Czas ładowania: około 240 min (pięć ładowania baterii razem)
Długość kabla: 35mm
Rozmiar baterii: 45x25x10mm
https://pl.aliexpress.com/item/32921774 ... 383caa02a6
Specyfikacja: 3.7 V800 mAh 25C bateria li-po
Czas ładowania: około 240 min (pięć ładowania baterii razem)
Długość kabla: 35mm
Rozmiar baterii: 45x25x10mm
https://pl.aliexpress.com/item/32921774 ... 383caa02a6
- Załączniki
-
- Battery_45x25x10_800mA.png (500.93 KiB) Przejrzano 2354 razy