Halusin pitkään tehdä mini sääaseman, kyllästyneenä katsomaan ikkunaa katsomaan lämpömittaria lasin takana. Tämä laite korvaa kosteusmittarin, barometrin ja lämpömittarin ja näyttää myös nykyisen ajan. Tässä postituksessa kerron sinulle kuinka nopeasti ja helposti koota pieni sääasema Arduinon perusteella. Perustana on hallitus Työläs Nano voi käyttää muita levyjä - Arduino Uno, Arduino Pro mini). Vastaanotamme ilmanpaine- ja lämpötiladataa BMP180-anturilta, kosteutta ja ulkolämpötilaa DHT11-anturilta. DS1302-reaaliaikakello näyttää nykyisen ajan. Kaikki tiedot näytetään kaksirivisellä LCD1602-näytöllä.
DHT11 välittää tietoja yhden johdon kautta arduinolle. Sen jännite on 5 V. Se mittaa kosteutta alueella 20 - 80%. Lämpötilan mitat välillä 0-50 ° CnoinS.
BMP180-anturi mittaa ilmanpainetta alueella 300-1100 hPa, lämpötila alueella -40 +85noinC. Syöttöjännite on 3,3 V. Se on kytketty I2C-tiedonsiirtoprotokollan kautta.
DS1302-reaaliaikakellon virta saa 5 V: n ja se on kytketty I2C-tiedonsiirtoprotokollan kautta. Asennettuna oikeaan paikkaan CR2032-akut tukevat kelloa, kun päävirta katkaistaan.
LCD1602-näyttö saa virtaa 5 voltin jännitteeltä, ja se on kytketty myös I2C-tiedonsiirtoprotokollan kautta.
tämä kotitekoinen tuote valmistettu valmiiden levyjen ja antureiden perusteella, joten se voidaan toistaa jokaiselle aloittelijalle rakastajalle työskennelläkseen juotosraudan kanssa. Samalla voit saada Arduinon ohjelmoinnin perusteet. Ohjelmoin tämän sääaseman visuaaliseen ohjelmointiohjelmaan FLPROG 15 minuutissa. Sinun ei tarvitse piirtää manuaalisesti tuntikausia, tämä ohjelma auttaa aloittelijoita (ja ei vain) nopeasti oppimaan Arduino-alustaan perustuvien ohjelmointilaitteiden perusteet.
Kuka on liian laiska harkitsemaan ohjelmaa - luonnos (vain se on tarpeen asettaa kellonajan nykyinen aika):
# sisällytä
# sisällytä "DHT_NEW.h"
# sisällytä
# sisällytä
# sisällytä
BMP085 _bmp085 = BMP085 ();
pitkä _bmp085P = 0;
pitkä _bmp085T = 0;
pitkä _bmp085A = 0;
LiquidCrystal_I2C _lcd1 (0x3f, 16, 2);
int _dispTempLength1 = 0;
boolean _isNeedClearDisp1;
DHT _dht1;
iarduino_RTC _RTC1 (RTC_DS1302, 7, 5, 6);
allekirjoittamaton pitkä _dht1LRT = 0UL;
allekirjoittamaton pitkä _dht1Tti = 0UL;
int _disp1oldLength = 0;
allekirjoittamaton pitkä _bmp0852Tti = 0UL;
Merkkijono _RTC1_GetTime2_StrOut;
int _disp2oldLength = 0;
tyhjä asennus ()
{
Wire.begin ();
viive (10);
_bmp085.init (MODE_ULTRA_HIGHRES, 116, tosi);
_RTC1.begin ();
_RTC1.period (1);
_lcd1.init ();
_lcd1. taustavalo ();
_dht1.setup (4);
_dht1LRT = millis ();
_dht1Tti = millis ();
}
tyhjä silmukka ()
{if (_isNeedClearDisp1) {_lcd1.clear (); _isNeedClearDisp1 = 0;}
if (_isTimer (_bmp0852Tti, 1000)) {
_bmp0852Tti = millis ();
_bmp085.getAltitude (& _ bmp085A);
_bmp085.getPressure (& _ bmp085P);
_bmp085.getTemperature (& _bmp085T);
}
// Maksu: 1
jos (1) {
_dispTempLength1 = (((((((merkkijono ("T:"))) + ((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) + (merkkijono ("*")))) + (((merkkijono ( "P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (merkkijono ("*"))) + (((merkkijono ("))) + ((_floatToStringWitRaz (_dht1 .kosteus, 0))) + (merkkijono ("%"))))) .pituus ();
if (_disp1oldLength> _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor (int ((16 - _dispTempLength1) / 2), 0);
_lcd1.print ((((((merkkijono ("T:"))) + ((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) + (merkkijono ("*")))) + (((merkkijono) ("P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (merkkijono ("*"))))) + (((merkkijono ("")) + ((_floatToStringWitRaz ( _dht1.kosteus, 0)))) (merkkijono ("%")))));
} muuta {
if (_disp1oldLength> 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
if (_isTimer (_dht1Tti, 2000)) {
if (_isTimer (_dht1LRT, (_dht1.getMinimumSamplingPeriod ()))))
_dht1.readSensor ();
_dht1LRT = millis ();
_dht1Tti = millis ();
}
}
jos (1) {
_dispTempLength1 = (((((((merkkijono ("t:"))) (((_floatToStringWitRaz (_dht1.lämpötila, 0))) + (merkkijono ("*"))))) (_RTC1_GetTime2_StrOut))). pituus () );
if (_disp2oldLength> _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor (int ((16 - _dispTempLength1) / 2), 1);
_lcd1.print ((((((merkkijono ("t:")))) (((_floatToStringWitRaz (_dht1.lämpötila, 0))) + (merkkijono ("*"))) + (_RTC1_GetTime2_StrOut))));)
} muuta {
if (_disp2oldLength> 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
_RTC1_GetTime2_StrOut = _RTC1.gettime ("H: i: sD");
}
Merkkijono _floatToStringWitRaz (kelluva arvo, int raz)
{
paluu merkkijono (arvo, RAZ);
}
bool _isTimer (allekirjoittamaton pitkä aloitusaika, allekirjoittamaton pitkä aika)
{
allekirjoittamaton pitkä nykyinen aika;
currentTime = millis ();
if (currentTime> = startTime) {return (currentTime> = (startTime + period));} else {return (currentTime> = (4294967295-startTime + period));}
}
Voit käyttää sellaista laitetta missä tahansa tai kotona, luonnossa tai paikassa auto. Piiri on mahdollista syöttää paristoista latauskortilla, lopulta kannettavissa malli sääasemat.
Kaikki tiedot saadaan katsomalla videota:
Materiaalien ja työkalujen luettelo
Arduino Nanon hallitus
kaksirivinen LCD1602-näyttö;
- reaaliaikakello DS1302;
- ilmanpaine- ja lämpötila-anturi BMP180;
- lämpötila- ja kosteusanturi DHT11;
- estä lataus puhelimelta;
- mikä tahansa sopiva kotelo
-pintset;
sakset;
juotosrauta;
-kembrik;
Testaaja;
-johdot;
Nelijohdin etäanturille.
Ensimmäinen askel. Rakennuksen tekeminen sääasemalle
Nousin muovikotelon Fix Price -kaupasta (yhteensä 17p). Valmiiksi leikattu ikkuna kannessa näytettäväksi. Sitten hän leikkasi osittain osiot laatikosta, teki reikiä Arduino-levyn USB-liittimeen, aukko BMP180-anturille. BMP180-anturi sijoitetaan kotelon ulkopuolelle, jotta estetään liiallinen lämmitys. elektroninen täyte sisäpuolella. Kun olen maalannut kotitekoisen tuotteen rungon sisältä, koska muovi on läpinäkyvää. Laatikko sulkeutuu salvalla ja siinä kaikki elementit sopivat hyvin.
Vaihe toinen Laitteen kokoonpanokaavio.
Kuvaohjelma
Seuraavaksi sinun on kytkettävä kaikki sääaseman levyt ja anturit järjestelmän mukaan. Teemme tämän asennusjohtimilla, joilla on asianmukaiset liittimet. En tehnyt juotosyhteyttä, joten tulevaisuudessa, kun moduuli epäonnistuu (tai muista syistä), voit helposti korvata sen. Ruuviliittimessä kadulle menevä DHT11-anturikaapeli on kytketty. Virta voidaan syöttää Arduino-kortin USB-liittimestä tietokoneelle tai syöttämällä 7–12 V: n jännite VIN- ja GND-nastaille.
Ensin kokoonpanin piirin kotelon ulkopuolelle ja ohjelmoin ja virheenkorjuin sen FLPROG-ohjelmassa.
Valokuvalohkokaavio FLPROG-ohjelmassa.
Kun ohjelmoin ja kytkein päälle sääaseman piirin, se toimi. Nyt on tullut mahdollista saada säätiedot yli laidan ja huoneeseen. Yleensä osoittautui mielenkiintoinen kotisääasema, jolla oli monia erilaisia toimintoja.
Kuva valmis
Hyvä kotitekoinen malli koottiin viikonloppuna. Oli mielenkiintoista tehdä itse mielenkiintoinen ja hyödyllinen laite. Jotta aloittelija voi tehdä tällaisen laitteen itse, se voi tehdä sen, se ei vaadi paljon aikaa ja rahaa. Voit käyttää sitä missä vain haluat talomökissä. Koko työn ajan meni kaksi viikonloppuyötä, vietin kaiken elektroniikan Aliexpressiin. Loput materiaalit löysin hakkurista. Arduino-alustan perusteella voit koota monenlaisia hyödyllisiä laitteita.
Kiitos kaikille huomiostamme, toivotan menestystä ja onnea sekä elämässäsi että työssäsi!