Arduino GPRS väderstation - del 1 (12 / 23 steg)
Steg 12: Vind och regn sensorerna Layout
Vind och regn sensorer, på ytan, är lätta att installera. Men när vi tittar på dem mer i detalj, har de sina problem.
Det enklaste är hastighet vindmätaren, men detta har övervakas utan med någon "försening" funktioner i koden för att undvika eventuella uppgifter som saknas.
Regnmätaren måste utan dröjsmål kod, men behöver "debouncing" kod och en 1 mikro farad kondensator.
Vindgivaren riktning är en total smärta i den ökända och behöver mappas efter det värde som plockade upp på A0 och varje särskild vindriktning. Det måste också vara pulsade med en kort mängd kraft att spara energi och detta har att göra med funktionen "millis" och inte "försening" funktion, som gör det lite mer komplicerat att koden.
Pulserande riktning vindgivaren:
< p > / / / < br > om (currentMillis - previousShortMillis < = veryShortInterval) / / / detta skickar en 5V puls till vindgivaren riktning för en mycket kort intervall.
{
digitalWrite(powerToWindDirPin,HIGH);
windDirection3 = analogRead(0);
Tone(6,(windDirection3+300));
}
annat
{
digitalWrite(powerToWindDirPin,LOW);
noTone(6);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</p>
Några mer kod utdrag ges här:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
void windCounter() {val = digitalRead(windSpeedInputPin);
om (val == hög) {
om (windCounterStatus == låg)
{
windCounterStatus = hög;
digitalWrite(ledPin,HIGH);
råttor = råttor + 1;
}
}
annat
{
om (windCounterStatus == hög)
{
windCounterStatus = låg;
digitalWrite(ledPin,LOW);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
void rainCounter () {värde2 = digitalRead(rainInputPin); / / Läs indatavärde
om (värde2 == hög) {/ / kontrollera om ingången är hög
om (rainCounterStatus == låg)
{/ / Vi har bara aktiverat
rainCounterStatus = hög;
digitalWrite(ledPin,HIGH);
möss = Möss + 1;
}
}
annat
{
om (rainCounterStatus == hög)
{
rainCounterStatus = låg;
digitalWrite(ledPin,LOW);
}
}
Debounce (vi misstänker att möss är för hög):
osignerade långa currentMillis = millis();
om ((mice > 0) & & ((currentMillis - previousShortMillis) > (shortInterval - 10)))
{
regn = regn + 1.
möss = 0;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
void windDirectionCalc () {
om ((windDirection3 > -1) & & (windDirection3 < 20))
{
windDirection2 = 1;
}
om ((windDirection3 > 20) & & (windDirection3 < 60))
{
windDirection2 = 2;
}
om ((windDirection3 > 60) & & (windDirection3 < 120))
{
windDirection2 = 3;
}
om ((windDirection3 > 200) & & (windDirection3 < 250))
{
windDirection2 = 4;
}
om ((windDirection3 > 345) & & (windDirection3 < 400))
{
windDirection2 = 5;
}
om ((windDirection3 > 310) & & (windDirection3 < 345))
{
windDirection2 = 6;
}
om ((windDirection3 > 250) & & (windDirection3 < 310))
{
windDirection2 = 7.
}
om ((windDirection3 > 120) & & (windDirection3 < 200))
{
windDirection2 = 8;
}
}