Under lång tid ville jag skapa en mini väderstation, trött på att titta ut genom fönstret för att titta på en termometer bakom glaset. Denna enhet kommer att ersätta hygrometer, barometer och termometer och visar också aktuell tid. I det här inlägget ska jag berätta hur du snabbt och enkelt kan montera en liten väderstation baserad på Arduino. Grunden kommer att vara styrelsen Arduino Nano kan använda andra brädor - Arduino Uno, Arduino Pro mini). Vi kommer att ta emot atmosfärstryck och temperaturdata från BMP180-sensorn och fuktighet och utomhustemperatur från DHT11-sensorn. DS1302 realtidsklocka indikerar aktuell tid. All information visas på en tvåradig LCD1602-skärm.
DHT11 sänder information över en enda tråd till en arduino. Den drivs av en spänning på 5 V. Den mäter fuktighet i området 20 till 80%. Temperaturen mäter i intervallet 0 till 50omS.
BMP180-sensorn mäter atmosfärstrycket i intervallet 300-1100 hPa, temperatur i intervallet -40 +85omC. Matningsspänningen är 3,3 V. Den är ansluten via I2C-kommunikationsprotokollet.
DS1302 realtidsklocka drivs med 5 V och är ansluten via I2C-kommunikationsprotokollet. När CR2032-batterier är installerade i rätt plats, stöder klockan när huvudströmmen stängs av.
LCD1602-displayen drivs av en spänning på 5 volt och är också ansluten via I2C-kommunikationsprotokollet.
detta hemgjorda produkt tillverkade på basis av färdiga brädor och sensorer, så det kan upprepas till alla nybörjare som arbetar med lödkolv. Samtidigt kan du få grunderna för att programmera Arduino. Jag programmerade denna väderstation i det visuella programmeringsprogrammet FLPROG på 15 minuter. Inget behov att manuellt skissa i timmar, detta program hjälper nybörjare (och inte bara) att snabbt lära sig grunderna i programmeringsenheter baserade på Arduino-plattformen.
Vem är för lat för att tänka på programmet - en skiss (bara det är nödvändigt att ställa in klockans nuvarande tid):
#include
# inkludera "DHT_NEW.h"
#include
#include
#include
BMP085 _bmp085 = BMP085 ();
lång _bmp085P = 0;
lång _bmp085T = 0;
lång _bmp085A = 0;
LiquidCrystal_I2C _lcd1 (0x3f, 16, 2);
int _dispTempLength1 = 0;
booleska _isNeedClearDisp1;
DHT _dht1;
iarduino_RTC _RTC1 (RTC_DS1302, 7, 5, 6);
osignerad lång _dht1LRT = 0UL;
osignerad lång _dht1Tti = 0UL;
int _disp1oldLength = 0;
osignerad lång _bmp0852Tti = 0UL;
Sträng _RTC1_GetTime2_StrOut;
int _disp2oldLength = 0;
ogiltig installation ()
{
Wire.begin ();
fördröjning (10);
_bmp085.init (MODE_ULTRA_HIGHRES, 116, true);
_RTC1.begin ();
_RTC1.period (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);
}
// Avgift: 1
om (1) {
_dispTempLength1 = (((((((String ("T:")) + ((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) + (String ("*")))) + (((String ( "P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (String ("*"))) + (((String ("")) + ((_floatToStringWitRaz (_dht1 .fuktighet, 0))) + (sträng ("%"))))). längd ();
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.fuktighet, 0))) + (sträng ("%")))));
} annat {
if (_disp1oldLength> 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
if (_isTimer (_dht1Tti, 2000)) {
if (_isTimer (_dht1LRT, (_dht1.getMinimumSamplingPeriod ()))) {
_dht1.readSensor ();
_dht1LRT = millis ();
_dht1Tti = millis ();
}
}
om (1) {
_dispTempLength1 = (((((((String ("t:")) + ((_floatToStringWitRaz (_dht1.temperature, 0))) + (String ("*")))) + (_RTC1_GetTime2_StrOut)))). längd ( );
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))));
} annat {
if (_disp2oldLength> 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
_RTC1_GetTime2_StrOut = _RTC1.gettime ("H: i: sD");
}
Sträng _floatToStringWitRaz (floatvärde, int raz)
{
return String (värde, raz);
}
bool _isTimer (osignerad lång starttid, osignerad lång period)
{
osignerad långströmstid;
strömtid = millis ();
if (currentTime> = startTime) {return (currentTime> = (startTime + period));} annars {return (currentTime> = (4294967295-startTime + period));}
}
Du kan använda en sådan enhet var som helst eller hemma, i naturen eller plats i en bil. Det är möjligt att driva kretsen från batterierna med ett laddningskort i slutändan kommer att vara portabelt modellen väderstationer.
All information kan erhållas genom att titta på videon:
Lista över material och verktyg
Arduino Nano styrelse
två-linjers LCD1602-skärm;
- realtidsklocka DS1302;
- Atmosfäriskt tryck och temperatursensor BMP180;
- temperatur- och fuktighetssensor DHT11;
-blockera laddning från telefonen;
- alla lämpliga bostäder
-pintset;
saxar,
lödkolv;
-kembrik;
En testare;
-anslutande ledningar;
Fyra trådar för fjärrsensor.
Första steget. Att skapa en byggnad för en väderstation
Jag plockade upp en plastlåda från Fix Price-butiken (totalt 17p). Förklippt fönster för visning i locket. Sedan klippte han delvis ut skiljeväggarna i lådan, gjorde hål för USB-anslutningen på Arduino-kortet, öppningen för BMP180-sensorn. BMP180-sensorn kommer att vara placerad på utsidan av höljet för att förhindra överdriven uppvärmning från elektronisk toppings inuti. Efter att jag målade kroppen på den hemmagjorda produkten från insidan eftersom plasten är transparent. Lådan stängs med en spärr och i den passar alla element fint.
Steg två Monteringsschema över enheten.
Bildschema
Därefter måste du ansluta alla väderstationens brädor och sensorer enligt schemat. Vi gör detta med monteringsledningar med lämpliga anslutningar. Jag skapade ingen lödanslutning, så i framtiden, när en modul misslyckas (eller av andra skäl), kan du enkelt byta ut den. På skruvkontakten är DHT11-sensorkabeln som går till gatan ansluten. Ström kan matas från USB-kontakten på Arduino-kortet till en dator eller genom att mata en spänning på 7-12V till VIN- och GND-stiftet.
Först monterade jag kretsen utanför skåpet och programmerade och felsöker den i FLPROG-programmet.
Fotoblockschema i FLPROG-programmet.
När jag först programmerade och slå på väderstationskretsen fungerade det. Nu har det blivit möjligt att ha väderdata överbord och i rummet. I allmänhet visade sig en intressant hemväderstation med många olika funktioner.
Bilden är klar
En bra hemmagjord design samlades på helgen. Det var spännande att göra en intressant och användbar apparat själv. För att göra en sådan enhet själv tror jag att även en nybörjare kan göra det. Det kräver inte mycket tid och pengar. Du kan använda den var du än vill i ett hus i en lantlig stuga. För hela arbetet gick två helgnätter, jag tog all elektronik till Aliexpress. Resten av materialen hittade jag på hackaren. Baserat på Arduino-plattformen kan du montera en mängd användbara enheter.
Tack alla för er uppmärksamhet, jag önskar er framgång och lycka både i ditt liv och i ditt arbete!