Springen naar inhoud


Arduino

Weerstation

regen barometer temperatuur vochtigheid

Er zijn 22 reacties in dit onderwerp

#1 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 08 augustus 2020 - 12:15

Tijdens deze bizare tijden heb ik effe tijd om enkel arduino projecten te posten.
Dit project is een weerstation die de volgende functies bevatten:
  • barometer i2c (luchtdruk, altitude)
  • DHT22 (humidity, temperature)
  • tipping bucket (druppel teller, het reed contact werd vervangen door een Hall sensor, dit voor een correcter meeting)
  • RTC (real time clock om per kwartier de data door te sturen)
  • wemos D1R2 (data wordt verzonden naar een website, de webpagina insert de data in een mysql database)


werking:
Arduino meet de aantal pulsen van de tipping bucket, deze worden opgeslaan in drie variables
Pulse => kwartier pulse opslag
PulseH => pulsen van een gans uur
PulseD => aantal pulsen vangans de dag

De pulse variable wordt iedere 15 minuten terug op 0 geplaats, de andere eens per en eens per dag.
Iedere 15 minuten zend de arduino de data naar de website.


In het tweede deel voeg ik
  • light sensor (LUX, UV en IR)
  • Rain sensor (de tiping bucket registreerd pas bij een bepaalde regen hoeveelheid, de regensensor registreer wanneer en de hevigheid van de regen)
Deel 3 anometer (nog WIP)


TO DO
mysql query om aantal dagen zonder regen met notatie van start en eind datum (iemand die me hierbij kan helpen?)


Al deze data wordt dan in charts getoond op de website.
Hiervoor gebruik ik Apex charts en highcharts.
Met tijd wordt alles overgezet naar Highcharts.

Grtz Barre

Bijgevoegde miniaturen

  • RainGauge_bb.png

Bijgevoegde Bestanden



#2 RedThread

RedThread

    Beheerder VBIB

  • Beheerder
  • 3604 berichten
    Laatst bezocht 15 nov 2020 21:06
  • LocatieTongeren,Belgium.
Inzender

Geplaatst op 08 augustus 2020 - 14:20

Top !

Als ik de tijd vind ga ik dit ook eens proberen.
thx for the code.

#3 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 782 berichten
    Laatst bezocht gisteren, 10:51
  • LocatieMechelen (BE)

Geplaatst op 08 augustus 2020 - 21:58

Met het warme weer ben je je eigen station aan't bouwen :)

Was daarstraks ook aan't zien om zelfs iets te maken maar dan met remote zenders en kwam ik dit tegen: https://www.instruct...eather-Station/ saarna was ik gaan zien bij ome ali en heb dan maar beslist om 25€ te dokken voor een station met 3 zenders. Het isn iet zo fancy maar zolang het werkt ben ik blij.

#4 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 22 augustus 2020 - 13:30

Weerstation opstelling 2

Hierbij de nieuwe opstelling enkele toevoegingen op de eerste instelling zijn:
  • SI 1145 (UV, IR Visibility)
  • BH1750 (Lux)
  • YL-83 (raindrop)

De raindrop is een aanvulling op de raingauge.
Want de  raingauge werkt pas na een bepaalde hoeveelheid.
Met de YL-83 kan ik mot regen tot lichte regen reeds opvangen.
Er worden twee waarden door gestuurd naar de database, D0 (digitaal)  geeft aan aan of het al of niet regent, dus 1= No rain en dus 0 is Wet.
De analoge meeting geeft aan hoeveel het regent (0 tem 1024).
Hierop moet ik nog verder mee experimenteren hoeveel het regent t.o.v. een bepaalde waarde.

De code is ook aangepast zodat de arduino stabieler loopt.
In de vorige code liep de arduino soms vast en kwam hij in een bootloop terecht.
Er waren verschillende oorzaken die de loop veroorzaakten.
  • slechte library van de barometer (bmp280)
  • een slechte BMP280 (dat vermoed ik toch, sensor vervangen en moet nog getest worden op defect)

werking:
  • iedere 15 minuten ophalen van de sensor data en versturen naar een website voor de import in de database.
  • iedere 15 minuten de reset van de kwartier pulse variable (regen liter per m³ per uur)
  • iedere uur reset van de uur pulse variable (liter regen per m²)
  • iedere dag om middernacht reset van de dag pulse variable (regen liter per m²)



TO DO
  • toevoeging van Davis anometer
    • Windspeed
    • wind direction
  • Air quality sensors
    • I2C aansluiting
    • TVOC's
    • VOS
    • CO2
    • MOX

Grtz

#5 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 22 augustus 2020 - 13:30

Weerstation opstelling 2

Hierbij de nieuwe opstelling enkele toevoegingen op de eerste instelling zijn:
  • SI 1145 (UV, IR Visibility)
  • BH1750 (Lux)
  • YL-83 (raindrop)

De raindrop is een aanvulling op de raingauge.
Want de  raingauge werkt pas na een bepaalde hoeveelheid.
Met de YL-83 kan ik mot regen tot lichte regen reeds opvangen.
Er worden twee waarden door gestuurd naar de database, D0 (digitaal)  geeft aan aan of het al of niet regent, dus 1= No rain en dus 0 is Wet.
De analoge meeting geeft aan hoeveel het regent (0 tem 1024).
Hierop moet ik nog verder mee experimenteren hoeveel het regent t.o.v. een bepaalde waarde.

De code is ook aangepast zodat de arduino stabieler loopt.
In de vorige code liep de arduino soms vast en kwam hij in een bootloop terecht.
Er waren verschillende oorzaken die de loop veroorzaakten.
  • slechte library van de barometer (bmp280)
  • een slechte BMP280 (dat vermoed ik toch, sensor vervangen en moet nog getest worden op defect)

werking:
  • iedere 15 minuten ophalen van de sensor data en versturen naar een website voor de import in de database.
  • iedere 15 minuten de reset van de kwartier pulse variable (regen liter per m³ per uur)
  • iedere uur reset van de uur pulse variable (liter regen per m²)
  • iedere dag om middernacht reset van de dag pulse variable (regen liter per m²)



TO DO
  • toevoeging van Davis anometer
    • Windspeed
    • wind direction
  • Air quality sensors
    • I2C aansluiting
    • TVOC's
    • VOS
    • CO2
    • MOX

Grtz

Bijgevoegde miniaturen

  • RainGauge_opstelling_2.jpg

Bijgevoegde Bestanden



#6 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 782 berichten
    Laatst bezocht gisteren, 10:51
  • LocatieMechelen (BE)

Geplaatst op 22 augustus 2020 - 13:35

Zet je op je I2C extra weerstanden naar +5V (pull-up)? ook een extra condensator op je + en - op de sensor aftakkingen is geen overbodige luxe :)

#7 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 22 augustus 2020 - 13:44

Hey Damic, idd niet aan gedacht om condensators te plaatsen voor de stabiliteit.
De I2C werken allen op 3.3V, nodig om hierop pull-up te doen? Ik dacht dat de wemos D1R2 dat ingebouwd had.

Bedankt voor de reactie.
Help en suggesties zijn altijd welkom.

#8 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 22 augustus 2020 - 13:57

Hey effe nagedacht met de pull -ups bedoel over de sda en de scl zoals in afbeelding?

Bijgevoegde miniaturen

  • I2C pull-up.png


#9 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 782 berichten
    Laatst bezocht gisteren, 10:51
  • LocatieMechelen (BE)

Geplaatst op 22 augustus 2020 - 14:22

Normaal hebben de meeste µcontrollers pull-ups die je kan aanzetten, maar kan geen kwaad om er fysiek er een weerstand bij op te zetten minder kans dat de lijnen gaan zweven :)

>>Ja dat bedoel ik.

ben je code eens aan't bekijken, paar opmerkingen:

Setting flags }else if(){ kan ook
Code:
 ////// SET FLAG /////////
if (now.minute() >= 0 && now.minute() < 15 && first == 0)
{
flag = 0;
}else if (now.minute() >= 15 && now.minute() < 30 && first == 0) {
flag = 1;
}else if (now.minute() >= 30 && now.minute() < 45 && first == 0) {
flag = 2;
}else if ( now.minute() >= 45 && now.minute() <= 59 && first == 0) {
flag = 3;}

je kan het zelfs nog anders doen
Code:
//gaat nu pas checken als first=0 ;)
if(first == 0)
{
	if (now.minute() >= 0 && now.minute() <  15)
	{
		flag = 0;
	}else if (now.minute() >= 15 && now.minute() <  30 ) {
		flag = 1;
	}else if (now.minute() >= 30 && now.minute() <  45 ) {
		flag = 2;
	}else if ( now.minute() >= 45 && now.minute() <= 59) {
		flag = 3;
	}
}

vanaf lijn 492 tot 537 bouw je je url op, is er een reden dat je dit doet over meerdere lijnen, dit kan normaal vereenvoudige ;)
Code:
String url = "/P1/assets/import/rain2.php?locid=2&sensid=3";

url +="&temp1="+ tRTC; //tRTC
url +="&temp2="+ temp;//DHT22
url += "&hum2="+hum;//DHT22
url += "&pulse="+ pulse; //Hal
url += "&pulseH="+pulseH; //Hal
url += "&pulseD="+ pulseD; //Hall
url += "&press1="+ pressure; //BMP280
url += "&at1="+realAltidude; //BMP280
url += "&seal1="+seaLevel; //BMP280
url += "&seapress1="+ SLpressure_mB; //BMP280
url += "&wet1="+rainStatus; //raindrop
url += "&wetvalue1="+ rainValue; //raindrop
url += "&dew1="+dew; //DHT22 dewpoint
url += "&humidex1="+ humidex; //DHT22 humidex
url += "&uv1="+ UVindex; //SI1145 uv index
url += "&ir1=" + IR; //SI1145 Infrared
url += "&vis1="+Vis; //SI1145 visibility
url += "&lux1="+luxx; //BH170 lux
url += "&temp3="+temperature; //SI1145
url += "&SecCode="+SecCode;

Zelfde voor 655 tot 700, 817 tot 862, 978 tot 1023,1136 tot 1181 >> dit kan trouwens in een functie, maak je je code kleiner en overzichterlijker mee

Veranderd door Damic, 22 augustus 2020 - 14:25.


#10 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 22 augustus 2020 - 14:55

Thx voor de input

Ik ga de pull-ups toevoegen op de I2C (waarvoor dank)

De if  zal ik aanpassen, is idd netter geschreven (ligt aan mijn ervaring ;) )

voor de url opbouw heb ik bewust in de eerste opbouw zo gekozen.
Maar idd zoals je aangaf zou het beter in een functie gestoken worden.

Doe ik straks (eerst wat soldeerwerk om alles te assembleren) .

Reuze bedankt.

:woohoo: :woohoo:

#11 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 782 berichten
    Laatst bezocht gisteren, 10:51
  • LocatieMechelen (BE)

Geplaatst op 22 augustus 2020 - 14:57

Je moet denken: zodra je iets groots kopieert en hetzelfde laat, steek je het best in een functie of sub :)

#12 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 782 berichten
    Laatst bezocht gisteren, 10:51
  • LocatieMechelen (BE)

Geplaatst op 08 september 2020 - 20:13

En hoe is je code ondertussen?

#13 guest_Barre_*

guest_Barre_*
  • Gasten
    Laatst bezocht

Geplaatst op 08 september 2020 - 21:27

Momenteel de laatste aanpassingen aan het doen.
Alsook de raindrop sensor aan het optimaliseren.

Normaal deze week post ik de finals.

Juist 72 stress test laten draaien.
want wifi viel soms uit.

info volgt.

#14 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 11 september 2020 - 19:50

release final

Enkele aanpassingencode
  • functies ipv repeat text (thx Damic)
  • sda en scl met pull-up weerstanden voor stailteit
  • wifi reconnect functie
  • green led (controle led op wifi connect geplaatst als controle
  • raindrop met een logic mosfet => spanning is niet constant aanwezig op de raindrop module waardoor langere werking verzekerd
To Do
  • ventilator in temperatuur huis monteren om een constante flow te verzekeren.

Bijgevoegde miniaturen

  • RainGauge3_bb.png

Bijgevoegde Bestanden



#15 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 782 berichten
    Laatst bezocht gisteren, 10:51
  • LocatieMechelen (BE)

Geplaatst op 11 september 2020 - 20:07

Pull up moet je maar 1x plaatsen :)

Trouwens in de printdata doe je het volgende:
  double pressureBMP280 = bmx280.getPressure();
  double RTCtempBMP280 = bmx280.getTemperature();

maar voor de rest print je het alleen, dat is een beetje zonde van het ram geheugen. Kan goed zijn dat de compiler deze zelf al verzet.

ow in senddata heb je ook zoiets maar dan met
  double pressure = bmx280.getPressure();
  double RTCtemp = bmx280.getTemperature();

waarbij rtctemp zelfs niet gebruikt word
    float Vis = uv.readVisible();
    float IR = uv.readIR();
    float UVindex = uv.readUV()

Mmmh dit kan ook allemaal inline ;)

#16 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 12 september 2020 - 09:41

Hey Damic

ik tweemaal de pull ups geplaatst omdat de sensors op twee plaatsen bevinden langer dan een meter van de arduino.
Ik had ondervonden tijdens de stress test dat de i2c soms low blijf na de boot.

de RTC temp heb ik idd vergeten door te sturen.

bedankt voor de opmerking

#17 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 782 berichten
    Laatst bezocht gisteren, 10:51
  • LocatieMechelen (BE)

Geplaatst op 12 september 2020 - 09:46

Ha :) gebruik je gewone kabel of shielde of twisted pair?

Ook over grote afstanden is het soms handiger om lokaal nog een spanningsregelaar te gebruiken om van 5V naar 3.3V te gaan en/of lokaal een grote bulk condensator.

#18 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 12 september 2020 - 12:20

Twisted schielded pair cable..
Kan je wat info geven i.v.m. spanning regelaar en condensator?

#19 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 782 berichten
    Laatst bezocht gisteren, 10:51
  • LocatieMechelen (BE)

Geplaatst op 12 september 2020 - 12:38

Dus spanningsregelaar (LDO = low-dropout regelaar)
Je voed je 3V3 apparaten met 5V maar ter plaatsen zet je dan een LDO te regelen naar 3V3, dit heeft als voordeel dat je eventueel verder kunt gaan omdat je voedingsspanning verder kan vallen zonder problemen.

Een een condensator is eigenlijk een vat en hoe meer µF des te groter het vat, moest er toch even een dip zijn in de spannings aanvoer dan vangt de condensator dat tijdelijk op. Die zet je ook zo dicht mogelijk tegen je schakeling.

Die pull-ups zijn wel aan de lage kant, normaal is dat 1k of zelfs meer.

#20 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 12 september 2020 - 12:42

Damic top mercie

#21 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 21 september 2020 - 14:16

Een kleine hardware aanpassing.
  • 10V capacitor van 000UF toegevoegd op de 5V lijn.
    Dit bij het heropstarten van de wifi de brownout te vermijden

Bijgevoegde miniaturen

  • RainGauge4_bb.png


#22 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 782 berichten
    Laatst bezocht gisteren, 10:51
  • LocatieMechelen (BE)

Geplaatst op 26 september 2020 - 18:29

Hgeb je ook een foto van je bouwsel, Fritzing is leuk om te kijken maar hoe het werkelijk is opgebouwd is nog leuker :)

#23 barremans

barremans

    Professional Developer

  • Leden
  • PipPipPipPip
  • 282 berichten
    Laatst bezocht 23 okt 2020 19:34
  • LocatieKortrijk

Geplaatst op 26 september 2020 - 18:55

idd, alez regenjas aan en schoot
Op regenbuis de tipping bucket en light sensors.
Onderaan barometer en de dht22.
Onder het dak de arduino wemos D1R2

Bijgevoegde miniaturen

  • 20200926_185235.jpg
  • 20200926_185304.jpg




Reageer op dit onderwerp



  



Ook met taq Arduino, regen, barometer, temperatuur, vochtigheid voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[Arduino] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)