Ilgu laiku es gribēju izgatavot mini laika staciju, apnicis skatīties ārā pa logu, lai paskatītos termometru aiz stikla. Šī ierīce aizstās higrometru, barometru un termometru, kā arī parādīs pašreizējo laiku. Šajā amatā es jums pateiksšu, kā ātri un ērti salikt nelielu laika staciju, kuras pamatā ir Arduino. Pamats būs valde Arduino Nano var izmantot citus dēļus - Arduino Uno, Arduino Pro mini). Mēs saņemsim datus no atmosfēras spiediena un temperatūras no BMP180 sensora, kā arī par mitruma un āra temperatūru no DHT11 sensora. DS1302 reālā laika pulkstenis norāda pašreizējo laiku. Visa informācija tiek parādīta divu līniju LCD1602 displejā.
DHT11 pārraida informāciju arduino caur vienu vadu. To baro ar 5 V spriegumu. Tas mēra mitrumu diapazonā no 20 līdz 80%. Temperatūras rādītāji diapazonā no 0 līdz 50parC.
Sensors BMP180 mēra atmosfēras spiedienu diapazonā no 300 līdz 1100 hPa, temperatūru diapazonā no -40 +85.parC. Barošanas spriegums ir 3,3 V. Tas ir savienots, izmantojot I2C sakaru protokolu.
DS1302 reālā laika pulksteni darbina 5 V un tas ir savienots, izmantojot I2C sakaru protokolu. Kad CR2032 baterijas ir ievietotas attiecīgajā slotā, tās atbalsta pulksteni, kad tiek izslēgta galvenā strāva.
LCD1602 displeju baro ar 5 voltu spriegumu, un tas ir pievienots arī, izmantojot I2C sakaru protokolu.
Šis mājās gatavots izgatavots, pamatojoties uz gataviem dēļiem un sensoriem, tāpēc to var atkārtot jebkuram iesācēju cienītājam, lai strādātu ar lodāmuru. Tajā pašā laikā jūs varat iegūt Arduino programmēšanas pamatus. Es šo laika staciju ieprogrammēju vizuālās programmēšanas programmā FLPROG 15 minūtēs. Nav nepieciešams stundām ilgi manuāli skicēt, šī programma palīdz iesācējiem (un ne tikai) ātri apgūt programmēšanas ierīču pamatus, kuru pamatā ir Arduino platforma.
Kas ir pārāk slinks, lai domātu par programmu - skice (tikai būs nepieciešams iestatīt pašreizējo pulksteņa laiku):
# iekļaut
# iekļaut “DHT_NEW.h”
# iekļaut
# iekļaujiet
# iekļaut
BMP085 _bmp085 = BMP085 ();
garš _bmp085P = 0;
garš _bmp085T = 0;
garš _bmp085A = 0;
LiquidCrystal_I2C _lcd1 (0x3f, 16, 2);
int _dispTempLength1 = 0;
Būla _isNeedClearDisp1;
DHT _dht1;
iarduino_RTC _RTC1 (RTC_DS1302, 7, 5, 6);
neparakstīts garš _dht1LRT = 0UL;
neparakstīts garš _dht1Tti = 0UL;
int _disp1oldLength = 0;
neparakstīts garš _bmp0852Tti = 0UL;
Virkne _RTC1_GetTime2_StrOut;
int _disp2oldLength = 0;
iestatīšana nav spēkā ()
{
Wire.begin ();
kavēšanās (10);
_bmp085.init (MODE_ULTRA_HIGHRES, 116, taisnība);
_RTC1.begin ();
_RTC1.periods (1);
_lcd1.init ();
_lcd1.backlight ();
_dht1.setup (4);
_dht1LRT = milisi ();
_dht1Tti = millis ();
}
tukšs cilpa ()
{if (_isNeedClearDisp1) {_lcd1.clear (); _isNeedClearDisp1 = 0;}
if (_isTimer (_bmp0852Tti, 1000)) {
_bmp0852Tti = millis ();
_bmp085.getAltitude (& _ bmp085A);
_bmp085.getPressure (& _ bmp085P);
_bmp085.getTemperatūra (& _ bmp085T);
}
// Maksa: 1
ja (1) {
_dispTempLength1 = (((((((virkne ("T:"))) + (((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) + (stīga ("*")))) + (((virkne ( "P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (stīga ("*"))) + (((stīga ("")) + ((_floatToStringWitRaz (_dht1 . mitrums, 0))) + (stīgas ("%"))))). garums ();
if (_disp1oldLength> _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor (int ((16 - _dispTempLength1) / 2), 0);
_lcd1.print (((((((stīga ("T:"))) + ((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) + (stīga ("*")))) + (((stīga ("P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (stīga ("*")))) + (((virkne ("")) + ((_floatToStringWitRaz ( _dht1. mitrums, 0)))) (virkne ("%")))));
} cits {
ja (_disp1oldLength> 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
ja (_isTimer (_dht1Tti, 2000)) {
ja (_isTimer (_dht1LRT, (_dht1.getMinimumSamplingPeriod ()))))
_dht1.readSensor ();
_dht1LRT = milisi ();
_dht1Tti = millis ();
}
}
ja (1) {
_dispTempLength1 = (((((((stīgas ("t:")) + (((_floatToStringWitRaz (_dht1.temperatūra, 0))) + (stīgas ("*"))))) (_RTC1_GetTime2_StrOut))). garums (( );
if (_disp2oldLength> _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor (int ((16 - _dispTempLength1) / 2), 1);
_lcd1.print (((((((virkne ("t:")))) + ((_floatToStringWitRaz (_dht1.temperatūra, 0))) + (virkne ("*"))) + (_RTC1_GetTime2_StrOut))););
} cits {
ja (_disp2oldLength> 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
_RTC1_GetTime2_StrOut = _RTC1.gettime ("H: i: sD");
}
Virkne _floatToStringWitRaz (mainīgā vērtība, int raz)
{
atgriešanās virkne (vērtība, raz);
}
bool _isTimer (neparakstīts ilgs sākuma laiks, neparakstīts ilgs periods)
{
neparakstīts ilgs pašreizējais laiks;
currentTime = millis ();
if (currentTime> = startTime) {return (currentTime> = (startTime + period));} else {return (currentTime> = (4294967295-startTime + period));}
}
Šādu ierīci var izmantot jebkur, mājās, dabā vai vietā auto. Ir iespējams barot ķēdi no akumulatoriem, izmantojot uzlādes paneli, galu galā būs pārnēsājams modeli laika stacijas.
Visu informāciju var iegūt, apskatot video:
Materiālu un instrumentu saraksts
Arduino Nano valde
divrindu LCD1602 displejs;
- reālā laika pulkstenis DS1302;
- atmosfēras spiediena un temperatūras sensors BMP180;
- temperatūras un mitruma sensors DHT11;
-bloķēt uzlādi no tālruņa;
- jebkurš piemērots korpuss
pincetes;
šķēres;
lodāmurs;
Kembridža;
testētājs;
-savienojošie vadi;
Četru vadu tālvadības sensors.
Pirmais solis. Ēkas izgatavošana laika stacijai
Es paņēmu plastmasas kasti no veikala Fix Price (kopā 17p). Iepriekš izgriezts logs vāka parādīšanai. Tad viņš daļēji izgriezis nodalījumus kastē, izveidojis caurumus Arduino plates USB savienotājam, BMP180 sensora atverei. BMP180 sensors atradīsies korpusa ārpusē, lai novērstu pārmērīgu sildīšanu. e virskārtas iekšpusē. Pēc tam, kad no iekšpuses esmu krāsojis mājās gatavota izstrādājuma korpusu, jo plastmasa ir caurspīdīga. Kastīti aizver ar aizbīdni, un tajā visi elementi labi iederas.
Otrais solis Ierīces montāžas shēma.
Foto shēma
Tālāk jums jāpieslēdz visi laika stacijas dēļi un sensori saskaņā ar shēmu. Mēs to darām, izmantojot montāžas vadus ar atbilstošiem savienotājiem. Es neveicu lodēšanas savienojumu, tāpēc nākotnē, ja modulis neizdodas (vai citu iemeslu dēļ), jūs to varat viegli nomainīt. Skrūvju savienotājā ir savienots DHT11 sensora kabelis, kas iet uz ielu. Strāvu var piegādāt no Arduino plates USB savienotāja datoram vai, piegādājot 7-12 V spriegumu VIN un GND tapai.
Pirmkārt, es samontēju ķēdi ārpus korpusa un ieprogrammēju un atkļūdoju tajā FLPROG programmā.
Fotoattēlu blokshēma programmā FLPROG.
Kad es pirmo reizi ieprogrammēju un ieslēdzu meteoroloģiskās stacijas shēmu, tā darbojās. Tagad ir kļuvis iespējams iegūt laika apstākļu datus bortā un telpā. Kopumā izrādījās interesanta mājas laika stacija ar daudzām un dažādām funkcijām.
Foto ir pabeigts
Nedēļas nogalē tika salikts labs mājas dizains. Bija aizraujoši pats izgatavot interesantu un noderīgu ierīci. Lai pats izveidotu šādu ierīci, es domāju, ka to var izdarīt pat iesācējs. Tas neprasa daudz laika un naudas. Jūs to varat izmantot visur, kur vēlaties, lauku mājā. Visam darbam pagāja divas nedēļas nogales naktis, visu elektroniku aizvedu uz Aliexpress. Pārējos materiālus atradu uz smalcinātāja. Balstoties uz Arduino platformu, jūs varat salikt visdažādākās noderīgās ierīces.
Paldies visiem par uzmanību, vēlu veiksmi un veiksmi gan dzīvē, gan darbā!