- Potrebni materiali
- Izračunavanje hitrosti in prikaz na analognem merilniku hitrosti
- Shema vezja in povezave
- Pojasnilo programiranja
Merjenje hitrosti / vrt / min vozila ali motorja je bil vedno zanimiv projekt. V tem projektu bomo izdelali analogni merilnik hitrosti z uporabo Arduina. Za merjenje hitrosti bomo uporabili modul IR senzorja. Za to obstajajo tudi drugi načini / senzorji, na primer senzor dvorane za merjenje hitrosti, vendar je uporaba IR senzorja enostavna, ker je modul IR senzorja zelo pogosta naprava in ga lahko enostavno dobimo s trga in ga lahko uporabimo tudi na vseh vrstah motorno vozilo.
V tem projektu bomo pokazali hitrost v analogni in digitalni obliki. S tem projektom bomo tudi izboljšali svoje sposobnosti pri učenju Arduino in Stepper motorja, saj ta projekt vključuje uporabo prekinitev in časovnikov. Na koncu tega projekta boste lahko izračunali hitrost in razdaljo, ki jo prevozi kateri koli vrtljivi predmet, in jih prikazali na 16x2 LCD zaslonu v digitalni obliki in tudi na analognem števcu. Začnimo torej s tem vezjem merilnika hitrosti in števca kilometrov z Arduinom
Potrebni materiali
- Arduino
- Bipolarni koračni motor (4 žice)
- Gonilnik koračnega motorja (modul L298n)
- Modul IR senzorja
- 16 * 2 LCD zaslon
- 2.2k upor
- Priključne žice
- Breadboard.
- Napajanje
- Izpis slike merilnika hitrosti
Izračunavanje hitrosti in prikaz na analognem merilniku hitrosti
IR senzor je naprava, ki lahko zazna prisotnost predmeta pred seboj. Uporabili smo dva rotorja (ventilator) in IR senzor postavili v njegovo bližino tako, da ga IR senzor zazna vsakič, ko se rezila zarotijo. Nato s pomočjo časovnikov in prekinitev v Arduinu izračunamo čas, potreben za eno popolno vrtenje motorja.
V tem projektu smo uporabili prekinitev z najvišjo prioriteto za zaznavanje vrtljajev v minuti in smo jo konfigurirali v naraščajočem načinu. Tako da se bo, kadar bo izhod senzorja NIZKO na Visoko, izvedla funkcija RPMCount () . In ker smo uporabili rotor z dvema lopaticama, to pomeni, da se bo funkcija v enem obratu poklicala 4-krat.
Ko je potreben čas znan, lahko izračunamo RPM z uporabo spodnjih formul. Kjer 1000 / čas nam bo dal RPS (vrtljaj na sekundo) in nadaljnje množenje s 60 vam bo dalo RPM (vrtljaj na minuto)
rpm = (60/2) * (1000 / (milis () - čas)) * REV / rezilaInFan;
Po doseganju vrtljajev na minuto lahko hitrost izračunamo po dani formuli:
Hitrost = vrt / min * (polmer 2 * Pi *) / 1000
Vemo, da je Pi = 3,14 in polmer 4,7 palca
Najprej pa moramo radij pretvoriti v metre iz palcev:
radij = ((radij * 2,54) /100,0) metrov Hitrost = vrt / min * 60,0 * (2,0 * 3,14 * radij) / 1000,0) v kilometrih na uro
Tu smo pomnožili število vrtljajev na minuto za 60 za pretvorbo vrtljajev na minuto (vrtljaji na uro) in delili s 1000 za pretvorbo metrov / uro v kilometre / uro.
Po hitrosti v kmh lahko te vrednosti prikažemo neposredno na LCD-prikazovalniku v digitalni obliki, za prikaz hitrosti v analogni obliki pa moramo narediti še en izračun, da ugotovimo št. korakov se mora koračni motor premakniti, da prikaže hitrost na analognem števcu.
Tu smo za analogni merilnik uporabili 4-žični bipolarni koračni motor, ki ima 1,8 stopinje pomeni 200 korakov na vrtljaj.
Zdaj moramo na merilniku hitrosti pokazati 280 km / h. Za prikaz 280 kmh koračnega motorja se mora premakniti za 280 stopinj
Torej imamo maxSpeed = 280
In maxSteps bo
maxSteps = 280 / 1,8 = 155 korakov
Zdaj imamo v naši kodi Arduino funkcijo, in sicer funkcijo map, ki se tukaj uporablja za preslikavo hitrosti v korake.
Koraki = zemljevid (hitrost, 0, maxSpeed , 0, maxSteps);
Torej zdaj imamo
koraki = zemljevid (hitrost, 0,280,0,155);
Po izračunu korakov lahko te korake neposredno uporabimo v funkciji koračnega motorja za premikanje koračnega motorja. Prav tako moramo z uporabo danih izračunov poskrbeti za trenutne korake ali kot koračnega motorja
currSteps = koraki koraki = currSteps-preSteps preSteps = currSteps
tukaj currSteps so trenutni koraki, ki prihajajo iz zadnjega izračuna, preSteps pa zadnji izvedeni koraki.
Shema vezja in povezave
Shema vezja za ta analogni merilnik hitrosti je preprosta, tu smo uporabili LCD 16x2 za prikaz hitrosti v digitalni obliki in koračni motor za vrtenje igle analognega merilnika hitrosti.
LCD 16x2 je priključen na naslednje analogne nožice Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
2.2k upor se uporablja za nastavitev svetlosti LCD. Modul IR senzorja, ki se uporablja za zaznavanje lopatice ventilatorja za izračun vrtljajev v minuto, je povezan s prekinitvijo 0 pomeni D2 pin Arduino.
Tu smo uporabili gonilnik koračnega motorja, in sicer modul L293N. Zatiči gonilnika koračnega motorja IN1, IN2, IN3 in IN4 so neposredno povezani z D8, D9, D10 in D11 Arduina. Ostale povezave so podane v vezju.
Pojasnilo programiranja
Popolna koda za Arduino Speedomete r je podana na koncu, tukaj razlagamo nekaj njenih pomembnih delov.
V programski del smo vključili vse potrebne knjižnice, kot so knjižnica koračnih motorjev, knjižnica LiquidCrystal LCD in zanje prijavljene nožice.
#include
Po tem smo za izvedbo izračunov uporabili nekaj spremenljivk in makrov. Izračuni so že pojasnjeni v prejšnjem poglavju.
hlapni bajt REV; nepodpisani dolgi int rpm, RPM; nepodpisana dolga st = 0; dolgo nepodpisano; int ledPin = 13; int led = 0, RPMlen, prevRPM; int zastava = 0; int zastava1 = 1; #define lopaticeInFan 2 polmer plovca = 4,7; // palec int preSteps = 0; float stepAngle = 360,0 / (float) stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280,0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Po tem v nastavitveni funkciji inicializiramo LCD, serijski, prekinitveni in koračni motor
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, IZHOD); lcd.begin (16,2); lcd.print ("Merilnik hitrosti"); zamuda (2000); attachInterrupt (0, RPMCount, RISING); }
Po tem preberemo število vrtljajev v funkciji zanke in izvedemo izračun, da dobimo hitrost, in to pretvorimo v korake za zagon koračnega motorja za prikaz hitrosti v analogni obliki.
void loop () { readRPM (); polmer = ((polmer * 2,54) /100,0); // pretvorba v meter int Hitrost = ((float) RPM * 60,0 * (2,0 * 3,14 * radij) / 1000,0); // RPM v 60 minutah, premer pnevmatike (2pi r) r je polmer, 1000 za pretvorbo v km int Koraki = zemljevid (hitrost, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Speed); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Hitrost:"); lcd.print (hitrost); lcd.print ("Km / h"); zastavica1 = 0; } int currSteps = Koraki;int koraki = currSteps-preSteps; preSteps = currSteps; myStepper.step (koraki); }
Tu imamo funkcijo reapRPM () za izračun RPM.
int readRPM () { if (REV> = 10 ali milis ()> = st + 1000) // POSODOBIL BO AFETR VSAKIH 10 BRANJ ali 1 sekundo v prostem teku { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (milis () - čas)) * REV / rezilaInFan; čas = milis (); REV = 0; int x = vrt / min; medtem ko (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = vrt / min; zamuda (500); st = milis (); zastavica1 = 1; } }
Na koncu imamo še prekinitveno rutino, ki je odgovorna za merjenje revolucije predmeta
void RPMCount () { REV ++; če (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
Tako lahko preprosto ustvarite analogni merilnik hitrosti z uporabo Arduina. To je mogoče izdelati tudi s pomočjo Hallovega senzorja, hitrost pa je mogoče prikazati na pametnem telefonu, za to sledite tej vadnici Arduino Speedometer.