Badtemperatur till Internet
Version 2.0Syfte:
Förse badsugna i Kåseberga med aktuell temperatur i vattnet via Internet.
Teknisk lösning:
Med hjälp av solcellsdriven termometer skicka temperaturen via radiolänk till mitt hus 200 meter bort och sen vidare ut på webbplatsen hoppaiplurret.se Förra året körde jag med en esp8266 via wifi, men då denna enhet drar relativt mycket ström och hade lite för dålig räckvidd har jag i år en ny teknisk lösning med Arduinos och HC-12 radiolänk. Det gamla bygget finns dokumenterat här
Så här är själva sändaren kopplad:
Mottagaren ser ut så här:
Här är en komplett lista över komponenter till bygget:
1st Arduino Mini Pro 3.3v 8 MHz https://www.aliexpress.com/item/Thinary-Pro-Mini-168-Mini-3-3V-8M-ATMEGA168-ATMEGA168P-AU-3-3V-8MHz-for-Arduino/32865761346.html
1 st Arduino Nano
https://www.aliexpress.com/item/Freeshipping-Nano-3-0-controller-compatible-for-arduino-nano-CH340-USB-driver-NO-CABLE/32341832857.html
2 st HC-12 radiosändare
https://www.aliexpress.com/item/433Mhz-HC-12-SI4463-Wireless-Serial-Port-Module-1000m-Replace-Bluetooth-HC12/32972555012.html
1 st DS18B20 temperatursensor med lång sladd
https://www.aliexpress.com/item/Waterproof-DS18B20-stainless-steel-encapsulated-temperature-sensor-4M-Cable/32661438772.html
1 st solpanel
https://www.aliexpress.com/item/Solar-Panel-5V-6V-12V-Mini-Solar-System-DIY-For-Battery-Cell-Phone-Chargers-Portable-Solar/32823762479.html
1 st uppladdningsbart batteri
https://www.aliexpress.com/item/3-7V-1100mAH-Lipo-Battery-For-SYMA-X5SC-X5SW-X5uw-x5uc-x5hw-x5hc-H11D-H11C-3/32845769788.html
1 st TP4056 batteriladdare
https://www.aliexpress.com/item/5-pcs-Micro-USB-5V-1A-18650-TP4056-Lithium-Battery-Charger-Module-Charging-Board-With-Protection/32797834680.html
1 st diod
https://www.aliexpress.com/item/50Pcs-x-1N5819-5819-1A-40V-SCHOTTKY-DIODE-NEW/32216810320.html
1 st vattentät låda
https://www.aliexpress.com/item/SONOFF-IP66-Junction-Box-Waterproof-Cover-Case-Water-Resistant-for-SONOFF-Basic-RF-TH16-TH10-POW/32856717327.html
1 st prototyp pcb
https://www.aliexpress.com/item/2pcs-lot-DIY-2-5x6-4-2-5-6-4CM-Prototype-Paper-PCB-Universal-Experiment-Matrix/32998839659.html
1 st basic kit Breadboard, kablar och motstånd
https://www.aliexpress.com/item/Electronic-Fun-Kit-Bundle-with-Breadboard-Cable-Resistor-Capacitor-LED-Potentiometer-Free-Shipping/32818715185.html
1 st FTDI USB to TTL 3.3V 5.5V Serial Adapter
https://www.aliexpress.com/item/FT232RL-FT232-USB-TO-TTL-5V-3-3V-Download-Cable-To-Serial-Adapter-Module-For-USB/32634246159.html
1 st Raspberry Pi
https://www.electrokit.com/produkt/raspberry-pi-3-1gb-model-b-2/
1 st Extern antennkabel
https://www.aliexpress.com/item/Mini-PCI-U-FL-to-SMA-Female-Connector-Antenna-WiFi-1-13-Pigtail-Cable-IPX-to/32807394006.html
1 st Extern antenn
https://www.aliexpress.com/item/1pcs-5dbi-433Mhz-GSM-Antenna-SMA-Male-Connector-Straight-with-Magnetic-base-for-Ham-Radio-Signal/32830177545.html
1st Mini USB-kabel
https://www.aliexpress.com/item/Ugreen-USB-2-0-Male-A-to-Mini-USB-B-5-Pin-Sync-Data-Charger-Cable/32393576557.html
1 st smältlimpistol
https://www.aliexpress.com/item/40W-110V-240V-hot-Melt-Glue-Gun-With-7MM-100MM-Glue-Sticks-DIY-Thermo-Mini-Adhesive/32926061871.html
Hur bygget fungerar gällande solcellen, batteriet och laddningen kan ni läsa på denna sajten. Jag har byggt enligt samma princip
https://www.instructables.com/id/Solar-Powered-WiFi-Weather-Station/
Jag har velat bygga strömsnålt och låter den lilla Arduino Pron gå ner i vila i två timmar mellan varje uppdatering, då den alltså vaknar till liv och sänder över tempen med hjälp av HC-12an. Det skulle kunna gå att göra denna enhet ännu mer strömsnål genom att plocka bort spänningsregulatorn samt en led på Arduinon, men i denna version kör jag arduinon utan modifieringar då jag tror att solpanelen hjälper till att ladda batteriet tillräckligt.
Mottagaren i huset som tar emot temperaturen består av en Arduino Nano, ytterligare en HC-12 long range radiomottagare, en raspberry pi 3, en extern antenn, en miniusb-kabel och lite kablar och övrigt jox.
Köp HC-12 enheterna parvis från samma tillverkare. Jag har haft problem när jag blandat olika versioner. Programmera HC-12orna så de får bättre räckvidd. Detta görs genom att ge AT-kommandon via ett seriellt interface. Man kommer in i programmeringsläget genom att koppla en FTDI USB-adapter till HC12an och sätter SET->GROUND förutom de vanliga TX, RX, 5V och ground. Du kan programmera via serial monitorn i arduinoprogramvaran eller via ett separat win32 program som finns en googling bort. Jag kör följande inställningar: AT+FU2 AT+B2400 8 databitar 1 stoppbit ingen paritet samt kanal 1
Ladda ner manualen till HC-12 för att lära er mer om dessa enheter.
Då jag vill få plats med hela sändaren i den vattentäta lådan kör jag den lilla medföljande antennen med sändaren. Löd den på plats i det avsedda hålet.
På mottagarsidan har jag dock en större antenn för att få bättre räckvidd. Tänk på att du får bäst resultat om antennerna är riktade åt samma håll. I mitt fall betydde det att den externa antennen i huset är placerad vågrätt då det var enklast att få in den lilla antennen i lådan så att den pekar vågrätt. Jag har ca: 200 meter från sändare och mottagare och det funkar fint nu när allt är intrimmat.
Denna arduinokod körs på Arduino Pro 3.3v som är transceivern:
//HC-12 Transceiver. Temp en gång varannan timme
#include <LowPower.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8); // RX, TX
#define ONE_WIRE_BUS 11
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int dsPower = 10;
int dsGround = 9;
int temptx;
int radioPower = 5;
int radioGround = 6;
void setup() {
mySerial.begin(2400);
pinMode(dsPower, OUTPUT);
pinMode(dsGround, OUTPUT);
pinMode(radioPower, OUTPUT);
pinMode(radioGround, OUTPUT);
digitalWrite(dsGround, LOW);
digitalWrite(radioGround, LOW);
digitalWrite(dsPower, HIGH);
}
void sleepTwoHours()
{
for (int i = 0; i < 900; i++) {
LowPower.powerDown(SLEEP_8S,
ADC_OFF, BOD_OFF);
}}
void loop(){
digitalWrite(radioPower, LOW);
sleepTwoHours();
digitalWrite(radioPower, HIGH);
sensors.begin();
delay(1000);
sensors.requestTemperatures(); // Send the command
to get temperatures
float tempF =
DallasTemperature::toFahrenheit(sensors.getTempCByIndex(0));
float tempC = sensors.getTempCByIndex(0);
delay(100);
temptx = tempF+0.5;
// Serial.println(tempF);
// Serial.println(temptx);
if (mySerial.available());
{
mySerial.println(tempC);
//mySerial.write("\n");
//Serial.println(sensors.getTempCByIndex(0));
}
delay(50);
}
Denna kod körs på Arduino nanon som tar emot temperaturen:
//HC-12 reciever.
#include <SoftwareSerial.h>
SoftwareSerial HC12(8, 7); // HC-12 TX Pin, HC-12 RX Pin
void setup() {
Serial.begin(2400);
// Serial port to computer
HC12.begin(2400);
// Serial port to HC12
}
void loop() {
while (HC12.available())
{ // If HC-12
has data
//Serial.write("TaskValueSet,1,1,");
//espeasy dummy switch test
Serial.write(HC12.read());
// Send the data to Serial monitor
}
while (Serial.available())
{ // If Serial monitor has
data
HC12.write(Serial.read());
// Send that data to HC-12
}
}
Koppla Arduino nanon till din Raspberry pi med hjälp
av USB-kabeln och gå in i raspi-config och se till att det
serialla interfacet är på. Du ska kunna ta emot data via
/dev/ttyUSB0 Jag gör detta genom att köra programmet ttylog
enligt följande.I /etc/rc.local kör jag följande: /usr/bin/screen -dmS bash /home/pi/ttylog.sh
Scriptet ttylog.sh ser ut så här:
#!/bin/sh
ttylog -f -b 2400 -d /dev/ttyUSB0 >>
/home/pi/temp.txt
Slutligen kör jag ett curlscript i cron som
regelbundet postar datan till Internet. Det ser ut så här: #!/bin/bash
tail -n2 /home/pi/temp.txt | head -n1 >
/home/pi/temp2.txt
sleep 2s
curl --user USER:PASSWORD -F 'fileToUpload=@/home/pi/temp2.txt' http://www.hoppaiplurret.se/cgi-bin/uploadsidan.php
Några saker att tänka på
Observera att kommunikationen alltså sker med låga 2400 baud överallt. Raspberryn inställningar måste ställas in för detta.
När ni labbar och bygger ihop konstruktionen så är det smart att kommentera bort koden som gör at sändaren går ner i vila i två timmar mellan uppdateringarna.
Typ så här:
// void loop(){
// digitalWrite(radioPower, LOW);
// sleepTwoHours();
Om det strular med datamottagningen, kontrollera så ni kopplat RX->TX portarna rätt. RX på arduinon skall alltå vara TX på HC-12an överallt.
Jag är medveten om att Arduino Nanon borde kunna uteslutas helt och att HC12an kan kopplas in direkt på GPIO-portarna på Raspberryn. Jag började dock labba med två Arduinos vid starten av projektet och är för lat för att ändra det hela nu.
Bygg en webbsida
Jag utgick från koden som används på vecka.nu Finns att hämta här: https://github.com/veckanu/webFör grafer och historik kör jag cacti. https://www.cacti.net/