Lange tijd wilde ik een mini-weerstation maken, moe van het uit het raam kijken om naar een thermometer achter het glas te kijken. Dit apparaat vervangt de hygrometer, barometer en thermometer en geeft ook de huidige tijd weer. In deze post zal ik je vertellen hoe je snel en eenvoudig een klein weerstation in elkaar zet op basis van Arduino. De basis is het bestuur Arduino Nano kan andere kaarten gebruiken - Arduino Uno, Arduino Pro mini). We zullen atmosferische druk- en temperatuurgegevens ontvangen van de BMP180-sensor en vochtigheid en buitentemperatuur van de DHT11-sensor. De realtime klok DS1302 geeft de huidige tijd aan. Alle informatie wordt weergegeven op een tweelijns LCD1602-display.
De DHT11 verzendt informatie via een enkele draad naar een arduino. Het wordt aangedreven door een spanning van 5 V. Het meet vochtigheid in het bereik van 20 tot 80%. Temperatuurmetingen in het bereik van 0 tot 50ongeveerC.
De BMP180-sensor meet de atmosferische druk in het bereik van 300-1100 hPa, de temperatuur in het bereik van -40 +85ongeveerC. De voedingsspanning is 3,3 V. Deze is aangesloten via het I2C-communicatieprotocol.
De realtime klok DS1302 wordt gevoed door 5 V en is aangesloten via het I2C-communicatieprotocol. Indien geïnstalleerd in de juiste sleuf, ondersteunen CR2032-batterijen de klok wanneer de stroom is uitgeschakeld.
Het LCD1602-display wordt gevoed door een spanning van 5 Volt en is ook aangesloten via het I2C-communicatieprotocol.
Dit zelfgemaakt gemaakt op basis van kant-en-klare borden en sensoren, zodat het voor iedere beginnende liefhebber kan herhaald worden om met een soldeerbout te werken. Tegelijkertijd kunt u de basisprincipes van het programmeren van Arduino krijgen. Ik programmeerde dit weerstation in het visuele programmeerprogramma FLPROG in 15 minuten. U hoeft niet urenlang handmatig te schetsen, dit programma helpt beginners (en niet alleen) om snel de basisprincipes van programmeerapparatuur te leren op basis van het Arduino-platform.
Wie is er te lui om aan het programma te sleutelen - een schets (alleen is het nodig om de huidige tijd van de klok in te stellen):
#include
#inclusief "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;
boolean _isNeedClearDisp1;
DHT _dht1;
iarduino_RTC _RTC1 (RTC_DS1302, 7, 5, 6);
niet-ondertekend lang _dht1LRT = 0UL;
niet-ondertekend lang _dht1Tti = 0UL;
int _disp1oldLength = 0;
niet-ondertekend lang _bmp0852Tti = 0UL;
String _RTC1_GetTime2_StrOut;
int _disp2oldLength = 0;
ongeldige setup ()
{
Wire.begin ();
vertraging (10);
_bmp085.init (MODE_ULTRA_HIGHRES, 116, waar);
_RTC1.begin ();
_RTC1.period (1);
_lcd1.init ();
_lcd1.backlight ();
_dht1.setup (4);
_dht1LRT = millis ();
_dht1Tti = millis ();
}
leegte lus ()
{if (_isNeedClearDisp1) {_lcd1.clear (); _isNeedClearDisp1 = 0;}
if (_isTimer (_bmp0852Tti, 1000)) {
_bmp0852Tti = millis ();
_bmp085.getAltitude (& _ bmp085A);
_bmp085.getPressure (& _ bmp085P);
_bmp085.getTemperature (& _ bmp085T);
}
// Vergoeding: 1
als (1) {
_dispTempLength1 = ((((((String ("T:"))) + ((_floatToStringWitRaz ((_ bmp085T) / (10.00), 1))) + (String ("*")))) + (((String ( "P:")) + ((_floatToStringWitRaz ((_ bmp085P) / (133.3), 0))) + (String ("*"))) + (((String ("")) + ((_floatToStringWitRaz (_dht1 .humidity, 0))) + (String ("%"))))). length ();
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.humidity, 0))) + (String ("%")))));
} anders {
if (_disp1oldLength> 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;}
}
if (_isTimer (_dht1Tti, 2000)) {
if (_isTimer (_dht1LRT, (_dht1.getMinimumSamplingPeriod ()))) {
_dht1.readSensor ();
_dht1LRT = millis ();
_dht1Tti = millis ();
}
}
als (1) {
_dispTempLength1 = ((((((String ("t:"))) + ((_floatToStringWitRaz (_dht1.temperature, 0))) + (String ("*")))) + (_RTC1_GetTime2_StrOut))). length ( );
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)));
} anders {
if (_disp2oldLength> 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
_RTC1_GetTime2_StrOut = _RTC1.gettime ("H: i: sD");
}
String _floatToStringWitRaz (zwevende waarde, int raz)
{
Return String (waarde, raz);
}
bool _isTimer (ongetekende lange starttijd, ongetekende lange periode)
{
ongetekende lange huidige tijd;
currentTime = millis ();
if (currentTime> = startTime) {return (currentTime> = (startTime + period));} else {return (currentTime> = (4294967295-startTime + period));}
}
Je kunt zo'n apparaat overal of thuis gebruiken, in de natuur of in een auto. Het is mogelijk om het circuit via de batterijen van stroom te voorzien met behulp van een laadbord, dat uiteindelijk draagbaar zal zijn het model weerstations.
Alle informatie kan worden verkregen door naar de video te kijken:
Lijst met materialen en gereedschappen
Arduino Nano Board
tweeregelig LCD1602-display;
- realtime klok DS1302;
- atmosferische druk- en temperatuursensor BMP180;
- temperatuur- en vochtigheidssensor DHT11;
-blokkeer het opladen vanaf de telefoon;
- elke geschikte behuizing
pincet;
schaar;
soldeerbout;
Cambridge;
tester;
-verbindende draden;
Vierdraads voor afstandssensor.
Eerste stap. Een gebouw maken voor een weerstation
Ik heb een plastic doos opgehaald bij de winkel met vaste prijs (totaal 17 p). Voorgesneden venster voor weergave in het deksel. Vervolgens heeft hij de partities in de doos gedeeltelijk uitgesneden, gaten gemaakt voor de USB-connector van het Arduino-bord, de opening voor de BMP180-sensor De BMP180-sensor bevindt zich aan de buitenkant van de behuizing om overmatige verhitting te voorkomen e toppings binnen. Nadat ik het lichaam van het zelfgemaakte product van binnenuit heb geverfd omdat het plastic transparant is. De doos sluit met een grendel en daarin passen alle elementen mooi in.
Stap twee Montageschema van het apparaat.
Fotoschema
Vervolgens moet u alle kaarten en sensoren van het weerstation volgens het schema aansluiten. Dit doen we met montagedraden met de juiste connectoren. Ik heb geen soldeerverbinding gemaakt, dus in de toekomst, wanneer een module uitvalt (of om andere redenen), kunt u deze gemakkelijk vervangen. Op de schroefconnector is de DHT11-sensorkabel die naar de straat gaat aangesloten. Stroom kan worden geleverd via de USB-connector van het Arduino-bord naar een computer, of door een spanning van 7-12 V te leveren aan de VIN- en GND-pin.
Eerst monteerde ik het circuit buiten de behuizing en programmeerde en debugde het in het FLPROG-programma.
Fotoblokschema in het FLPROG-programma.
Toen ik voor het eerst het circuit van het weerstation programmeerde en inschakelde, werkte het. Het is nu mogelijk geworden om weergegevens over boord en in de kamer te hebben. Over het algemeen bleek een interessant huisweerstation met veel verschillende functies.
Foto compleet
In het weekend is er een goed huisgemaakt ontwerp gemaakt. Het was spannend om zelf een interessant en nuttig apparaat te maken. Om zo'n apparaat zelf te maken, denk ik dat zelfs een beginner het kan, het kost niet veel tijd en geld. Je kunt het overal toepassen in een huis in een chalet. Voor het hele werk gingen er twee weekendnachten, ik nam alle elektronica mee naar Aliexpress. De rest van de materialen vond ik op de hakmolen. Op basis van het Arduino-platform kun je een breed scala aan handige apparaten samenstellen.
Ik dank u allen voor uw aandacht, ik wens u veel succes en succes in uw leven en in uw werk!