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 11 měsíci.
-
AutorPříspěvky
-
25.8.2016 v 11:16 #8162BojkasÚčastník
Ahoj,
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.