Čo robí každý s Arduinom? Predsa bliká s LEDkou a meria teplotu 🙂 Kto postúpi ďalej, môže merať aj tlak (BMP280) alebo vlhkosť (DHT21). Za pár euro sa dá prikúpiť aj anemometer a ku hotovej meteostanici už veľa nechýba. Tu je nejaké krátke know-how pre nalinkovaný anemometer.
Vnútri sa nachádzajú 2 paralelne zapojené jazýčkové kontakty, z čoho vyplýva že snímač na svojom výstupe dáva 2 impulzy na otáčku. Na čítanie je ideálne použiť digitálny vstup s aktivovaným pull-up rezistorom a HW prerušením – aby sme v programe mohli robiť aj iné veci, nie len čakať na impulz. Na Arduino UNO sú to D2 a D3. Zapojenie je triviálne, jeden vývod anemometra na GND a druhý na D3. Tu je kód ktorý na sériovú konzolu vypíše každú sekundu rýchlosť vetra.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
volatile int anemo_imp = 0; unsigned long last_imp, last_imp_millis = 0; void ISR_anemo_imp(){ if (millis() - last_imp > 50){ anemo_imp++; last_imp = millis(); } } void setup(){ Serial.begin(9600); pinMode(3, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(3), ISR_anemo_imp, FALLING); } void loop(){ if (millis() - last_imp_millis > 1000){ last_imp_millis = millis(); Serial.print("ot/s =\t"); Serial.print(anemo_imp); float kmh = 2.4 * (float)anemo_imp; Serial.print("\t km/h =\t"); Serial.println(kmh); anemo_imp = 0; } } |
V prípade potreby/záujmu sa dá doplniť aj funkcia na meranie sily poryvov vetra. No a tu je namontovaný na streche 🙂
Urobil som to s arduinom mini a nefunguje to. Zapisuje na seriovu konzolu stále 0,00 km aj keď sa anemometer otáča.
Neviem kde je chyba?
Ahoj, skúšal si s multimetrom merať, či zopína výstup anemometra? Alebo namiesto interruptu dať digitalRead alebo PulseIn… Je to veľmi jednoduchý príklad, nemá tam čo nefungovať 🙂
Áno zopína,ale asi nemám dobre zapojený anemometer k arduinu. Kompilácia je správna.
mám to takto:
jeden koniec anemometra je zapojený na GND a druhý na pin digital 3.
zajtra to vyskúšam s arduino uno. Príde nová funglovka.
Som začiatočník
Ďakujem
beznádejné nefunguje.
je potrebné použiť zapojenie pull-up s odporom ?
Alebo len prepojiť GND a pin 3?
Vyskúšal som obi dve varianty.
Napájanie mám z PC cez usb.
pinMode(3, INPUT_PULLUP) aktivuje interný pull-up, takže rezistor netreba. Vyskúšaj len digitalRead(3);delay(50); a pomaly otáčaj 🙂
Taky se mi nepodařilo tento ukázkový program zprovoznit. Impulsy chodí, vše je zapojeno normálně. Můj program mi funguje, jen jsem chtěl vyzkoušet jiný princip.
Tak jsem se ponořil do kódu a nesrovnalost je v tomto příkazu:
anemo_imp = 0;
Tohle musí bát provedeno až na konci cyklu loop, protože takhle si to vynuluješ a pak s tím počítáš. takže nejdříve počítat a nakonec vynulovat před dalším měřením.
Dík za info, upravil som to v kóde 🙂 Ja som ten ukážkový kód asi ani nekompiloval, len som ho upravil s existujúceho (iného) kódu.