Anemometr z DC motoru?
Úvodní stránka › Fórum › Hardware › Arduino › Anemometr z DC motoru?
- Toto téma obsahuje celkem 12 odpovědí. Do diskuze (4 diskutující) se naposledy zapojil uživatel
Mikky a poslední změna proběhla před 7 roky a 8 měsíci.
-
AutorPříspěvky
-
25.8.2016 v 11:16 #8162
Bojkas
ÚčastníkAhoj,
Existuje nějaký jednoduchý hack, jak použít nějaký DC motor nebo třeba PC větrák, abych jen mohl použít jako anemometr?
Plast bych si vytiskl na 3D tiskárně, ale chci nějak velice levně vyřešit co bych mohl připojit a počítat otáčky. Chci vytvořit levnou meteostanici na baterie na modelarske letiště s tím, že když to někdo ukradne, tak v tom nebudu mít tisícovku, ale třeba jen dvě stovky.
Ideálně by bylo nějaké schéma a část kódu.
Děkuji
25.8.2016 v 11:37 #8163Aleš
ÚčastníkLepší je koupit tohle:
http://www.hadex.cz/t114-anemometr-k-meteostanicim-wh1080-a-wh1090/
Program je potom už dost jednoduchý 🙂25.8.2016 v 11:55 #8164Aleš
ÚčastníkTady máš potom návod, jak se to kalibruje 🙂
14.9.2016 v 10:17 #8370Bojkas
ÚčastníkAhoj,
tak jsem nakonec použil IR bránu, která měří otáčky.
Jaký vzorec použít na přepočet z otáček na km/h? Zkusil jsem do kódu zakomponovat „v = 2πr × RPM × (60/1000) km/hr“, nevím proč, ale měří to v násobcích 1,13. :-/
Celý kód:
// Compute the RPM of a simple DC Motor using a photomicrosensor(PMS) #include <Wire.h> #include <LCD.h> #include <LiquidCrystal_I2C.h> #define PMS_PIN A0 // Pin for signal from Photomicrosensor #define LED_PIN 13 //Using Arduino's Internal LED; just as an indicator boolean counted=false; int t1=0,t2=0; int hits=0; int rps=0; LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); void setup(){ pinMode(PMS_PIN, INPUT); pinMode(LED_PIN, OUTPUT); lcd.setBacklightPin(3,POSITIVE); lcd.setBacklight(HIGH); // NOTE: You can turn the backlight off by setting it to LOW instead of HIGH lcd.begin(16, 2); lcd.clear(); } void loop(){ t2 = millis(); if(t2 >= (t1 + 1000)){ rps = hits; hits = 0; t1=t2; rpm = (rps*60); lcd.clear(); lcd.print("Vitr: "); lcd.print(0.3142*rpm*0.06); lcd.print(" km/h"); } if(digitalRead(PMS_PIN) == HIGH){ if(!counted){ counted = true; hits++; } } else { counted = false; } digitalWrite(LED_PIN, digitalRead(PMS_PIN)); }
14.9.2016 v 11:10 #8371Aleš
ÚčastníkA ta IR brána snímá otáčky čeho?
14.9.2016 v 11:18 #8372Bojkas
ÚčastníkZatím je to simulované na kolo o průměru 0,1m tzn obvod je 0,31m. zkoušel jsem to přerušovat papírem, zatím jsem na začátku.
14.9.2016 v 11:30 #8374Aleš
ÚčastníkZkus to prohodit takto:
if(digitalRead(PMS_PIN) == HIGH){
if(!counted){
counted = true;
hits++;
}
} else {
counted = false;
}digitalWrite(LED_PIN, digitalRead(PMS_PIN));
}rpm = (rps*60);
lcd.clear();
lcd.print(„Vitr: „);
lcd.print(0.3142*rpm*0.06);
lcd.print(“ km/h“);
}(závorky jsem nepočítal)
14.9.2016 v 11:35 #8375Bojkas
ÚčastníkVečer zkusím, děkuji.
Každopádně bych rád znal důvod, abych zjistil, kde mohla být případně chyba?
14.9.2016 v 12:47 #8376BlindP
ÚčastníkAhoj, protože 1*60*0.3142*0.06 = 1.13112 (jeden puls)
B.
14.9.2016 v 13:14 #8377Bojkas
ÚčastníkAhoj,
ach tak, to mě nenapadlo.
Aleš: zdá se, že závorek je tam dost, vzorec jsem upravil, ale píše mi to, že „rmp“ není deklarované.
exit status 1
‚rpm‘ was not declared in this scope
http://fii.cz/zxfbym// Compute the RPM of a simple DC Motor using a photomicrosensor(PMS) #include <Wire.h> #include <LCD.h> #include <LiquidCrystal_I2C.h> #define PMS_PIN A0 // Pin for signal from Photomicrosensor #define LED_PIN 13 //Using Arduino's Internal LED; just as an indicator boolean counted=false; int t1=0,t2=0; int hits=0; int rps=0; LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); void setup(){ pinMode(PMS_PIN, INPUT); pinMode(LED_PIN, OUTPUT); lcd.setBacklightPin(3,POSITIVE); lcd.setBacklight(HIGH); // NOTE: You can turn the backlight off by setting it to LOW instead of HIGH lcd.begin(16, 2); lcd.clear(); } void loop(){ t2 = millis(); if(t2 >= (t1 + 1000)){ rps = hits; hits = 0; t1=t2; } if(digitalRead(PMS_PIN) == HIGH){ if(!counted){ counted = true; hits++; } } else { counted = false; } digitalWrite(LED_PIN, digitalRead(PMS_PIN)); rpm = (rps*60); lcd.clear(); lcd.print("Vitr: "); lcd.print(0.3142*rpm*0.06); lcd.print(" km/h"); }
14.9.2016 v 13:16 #8378Bojkas
ÚčastníkPS: stačí, když ji deklaruji?
int rpm;
rpm = (rps*60);
lcd.clear();
lcd.print(„Vitr: „);
lcd.print(0.3142*rpm*0.06);
lcd.print(“ km/h“);14.9.2016 v 18:35 #8404Bojkas
ÚčastníkTak to dělá pořád to stejné, jen s tím, že mi nevím proč propisuje jen polovina displaye. Pokud to vrátím na ten původní kód, tak je to zase v pořádku.
10.1.2017 v 22:46 #9992Mikky
ÚčastníkAhoj,
aký výstup má ten anemometer? Akým senzorom, resp. snímačom (modulom) by som to dokázal snímať?Ďakujem
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.