I lang tid ønskede jeg at lave en mini vejrstation, træt af at kigge ud af vinduet for at se på et termometer bag glasset. Denne enhed erstatter hygrometer, barometer og termometer og viser også den aktuelle tid. I dette indlæg vil jeg fortælle dig, hvordan du hurtigt og nemt samler en lille vejrstation baseret på Arduino. Grundlaget vil være bestyrelsen Arduino Nano kan bruge andre tavler - Arduino Uno, Arduino Pro mini). Vi modtager atmosfærisk tryk og temperaturdata fra BMP180-sensoren og fugtighed og udetemperatur fra DHT11-sensoren. DS1302 realtidsur viser den aktuelle tid. Alle oplysninger vises på et to-line LCD1602 display.
DHT11 transmitterer information over en enkelt ledning til en arduino. Den drives af en spænding på 5 V. Den måler fugtighed i området fra 20 til 80%. Temperatur måler i området fra 0 til 50cirkaS.
BMP180-sensoren måler atmosfæretryk i området 300-1100 hPa, temperatur i området -40 +85cirkaC. Forsyningsspændingen er 3,3 V. Den er tilsluttet via I2C-kommunikationsprotokollen.
DS1302 realtidsur drives af 5 V og forbindes via I2C-kommunikationsprotokollen. Når de er installeret i den passende slot, understøtter CR2032-batterier uret, når hovedstrømmen er slukket.
LCD1602-displayet drives af en spænding på 5 volt og er også tilsluttet via I2C-kommunikationsprotokollen.
dette hjemmelavet produkt lavet på basis af færdige plader og sensorer, så det kan gentages til enhver begyndere, der elsker at arbejde med et loddejern. På samme tid kan du få det grundlæggende ved programmering af Arduino. Jeg programmerede denne vejrstation i det visuelle programmeringsprogram FLPROG på 15 minutter. Ingen grund til at manuelt tegne i timevis, dette program hjælper begyndere (og ikke kun) hurtigt med at lære det grundlæggende i programmeringsenheder baseret på Arduino-platformen.
Hvem er for doven til at tænke over programmet - en skitse (kun det er nødvendigt at indstille det aktuelle klokkeslæt):
#include
# inkluder "DHT_NEW.h"
#include
#include
#include
BMP085 _bmp085 = BMP085 ();
lang _bmp085P = 0;
lang _bmp085T = 0;
lang _bmp085A = 0;
LiquidCrystal_I2C _lcd1 (0x3f, 16, 2);
int _dispTempLength1 = 0;
boolsk _isNeedClearDisp1;
DHT _dht1;
iarduino_RTC _RTC1 (RTC_DS1302, 7, 5, 6);
usigneret lang _dht1LRT = 0UL;
usigneret lang _dht1Tti = 0UL;
int _disp1oldLength = 0;
usigneret lang _bmp0852Tti = 0UL;
Streng _RTC1_GetTime2_StrOut;
int _disp2oldLength = 0;
ugyldig opsætning ()
{
Wire.begin ();
forsinkelse (10);
_bmp085.init (MODE_ULTRA_HIGHRES, 116, sand);
_RTC1.begin ();
_RTC1. periode (1);
_lcd1.init ();
_lcd1.backlight ();
_dht1.setup (4);
_dht1LRT = millis ();
_dht1Tti = millis ();
}
void loop ()
{if (_isNeedClearDisp1) {_lcd1.clear (); _isNeedClearDisp1 = 0;}
if (_isTimer (_bmp0852Tti, 1000)) {
_bmp0852Tti = millis ();
_bmp085.getAltitude (& _ bmp085A);
_bmp085.getPressure (& _ bmp085P);
_bmp085.getTemperature (& _ bmp085T);
}
// Gebyr: 1
hvis (1) {
_dispTempLength1 = (((((((String ("T:")) + ((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) + (String ("*")))) + (((String ( "P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (String ("*"))) + (((String ("")) + ((_floatToStringWitRaz (_dht1 .fugtighed, 0))) + (streng ("%"))))). længde ();
if (_disp1oldLength> _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor (int ((16 - _dispTempLength1) / 2), 0);
_lcd1.print ((((((String ("T:")) + ((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) + (String ("*")))) + (((String ("P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (String ("*")))) + (((String ("")) + ((_floatToStringWitRaz ( _dht1.fugtighed, 0))) + (streng ("%")))));
} andet {
if (_disp1oldLength> 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
if (_isTimer (_dht1Tti, 2000)) {
if (_isTimer (_dht1LRT, (_dht1.getMinimumSamplingPeriod ()))) {
_dht1.readSensor ();
_dht1LRT = millis ();
_dht1Tti = millis ();
}
}
hvis (1) {
_dispTempLength1 = (((((((String ("t:")) + ((_floatToStringWitRaz (_dht1.temperature, 0))) + (String ("*")))) + (_RTC1_GetTime2_StrOut)))). længde ( );
if (_disp2oldLength> _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor (int ((16 - _dispTempLength1) / 2), 1);
_lcd1.print ((((((String ("t:"))) + ((_floatToStringWitRaz (_dht1.temperature, 0))) + (String ("*")))) + (_RTC1_GetTime2_StrOut))));
} andet {
if (_disp2oldLength> 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
_RTC1_GetTime2_StrOut = _RTC1.gettime ("H: i: sD");
}
Streng _floatToStringWitRaz (floatværdi, int raz)
{
returstreng (værdi, raz);
}
bool _isTimer (usigneret lang starttid, usigneret lang periode)
{
usigneret lang aktuelle tid;
strømtid = millis ();
hvis (nuværende tid> = starttid) {retur (nuværende tid> = (starttid + periode));} ellers {tilbagevenden (nuværende tid> = (4294967295-starttid + periode));}
}
Du kan bruge en sådan enhed overalt eller hjemme, i naturen eller placere i en bil. Det er muligt at strømme kredsløbet fra batterierne ved hjælp af et opladningskort til sidst vil være bærbart modellen vejrstationer.
Alle oplysninger kan fås ved at se på videoen:
Liste over materialer og værktøjer
Arduino Nano bestyrelse
to-line LCD1602 display;
- realtid ur DS1302;
- atmosfærisk tryk og temperatursensor BMP180;
- temperatur- og fugtighedsføler DHT11;
-blokerer opladning fra telefonen;
- ethvert passende hus
-pintset;
saks;
lodning jern;
-kembrik;
A tester;
-forbindende ledninger;
Fire ledninger til fjernsensor.
Første trin. At lave en bygning til en vejrstation
Jeg hentede en plastkasse fra Fix Price-butikken (i alt 17p). Forudskåret vindue til visning i låget. Derefter skar han delvist skillevægge ud i kassen, lavede huller til USB-stikket på Arduino-kortet, åbningen til BMP180-sensoren. BMP180-sensoren vil være placeret på ydersiden af sagen for at forhindre overdreven opvarmning fra elektronisk toppings indeni. Efter at jeg malede kroppen af det hjemmelavede produkt indefra, fordi plasten er gennemsigtig. Kassen lukkes med en spærring, og i den passer alle elementer pænt.
Trin to Samlingsdiagram over enheden.
Fotografering
Dernæst skal du forbinde alle brædder og sensorer i vejrstationen i henhold til ordningen. Vi gør dette ved hjælp af monteringsledninger med de passende stik. Jeg oprettede ikke en loddetilslutning, så i fremtiden, når et modul mislykkes (eller af andre grunde), kan du nemt udskifte det. På skruestikket er DHT11-sensorkablet, der går til gaden, tilsluttet. Strøm kan leveres fra USB-stikket på Arduino-kortet til en computer eller ved at levere en spænding på 7-12V til VIN- og GND-stiften.
Først monterede jeg kredsløbet uden for kabinettet og programmerede og debuggerede det i FLPROG-programmet.
Billedblokdiagram i FLPROG-programmet.
Da jeg først programmerede og tændte for vejrstationskredsløb, fungerede det. Nu er det blevet muligt at have vejrdata overbord og i rummet. Generelt viste det sig at en interessant hjemmevejrstation med mange forskellige funktioner.
Foto komplet
Et godt hjemmelavet design blev samlet i weekenden. Det var spændende at lave et interessant og nyttigt apparat selv. For selv at lave en sådan enhed tror jeg, selv en nybegynder kan gøre det. Det kræver ikke meget tid og penge. Du kan anvende det hvor du vil i et hus i et landsted. For hele arbejdet gik der to weekendnavne, jeg tog al elektronikken til Aliexpress. Resten af materialerne fandt jeg på tarmen Baseret på Arduino-platformen kan du samle en lang række nyttige enheder.
Tak alle for din opmærksomhed, jeg ønsker Dem succes og held og lykke både i dit liv og i dit arbejde!