- Potrebni materijali
- Izračunavanje brzine i prikaz na analognom brzinomjeru
- Kružni dijagram i veze
- Objašnjenje programiranja
Mjerenje brzine / okretaja u minuti vozila ili motora uvijek je bio fascinantan projekt za isprobavanje. U ovom projektu gradit ćemo analogni brzinomjer pomoću Arduina. Za mjerenje brzine koristit ćemo modul IR senzora. Postoje i drugi načini / senzori za to, poput Hallovog senzora za mjerenje brzine, ali korištenje IC senzora je jednostavno jer je IC senzorski modul vrlo čest uređaj i možemo ga lako nabaviti na tržištu, a također se može koristiti na bilo kojoj vrsti motorno vozilo.
U ovom ćemo projektu pokazati brzinu i u analognom i u digitalnom obliku. Radeći ovaj projekt, također ćemo poboljšati svoje vještine u učenju Arduino i Stepper motora jer ovaj projekt uključuje upotrebu prekida i tajmera. Na kraju ovog projekta moći ćete izračunati brzinu i udaljenost koju prelazi bilo koji rotirajući objekt i prikazati ih na LCD zaslonu 16x2 u digitalnom formatu i na analognom mjeraču. Počnimo s ovim krugom brzinomjera i odometra s Arduinom
Potrebni materijali
- Arduino
- Bipolarni koračni motor (4 žice)
- Vozač koračnog motora (modul L298n)
- Modul IR senzora
- LCD zaslon od 16 * 2
- Otpor 2.2k
- Spajanje žica
- Breadboard.
- Napajanje
- Ispis slike brzinomjera

Izračunavanje brzine i prikaz na analognom brzinomjeru
IR senzor je uređaj koji može otkriti prisutnost predmeta ispred sebe. Koristili smo dva rotora oštrice (ventilator) i postavili smo IR senzor u njegovu blizinu na takav način da ga svaki put kad okreću lopatice IR senzor prepozna. Zatim koristimo pomoć tajmera i prekida u Arduinu da izračunamo vrijeme potrebno za jedno potpuno okretanje motora.

Ovdje u ovom projektu koristili smo prekid najvišeg prioriteta za otkrivanje broja okretaja u minuti i konfigurirali smo ga u porastu. Tako da kad god izlaz senzora pređe LOW u High, izvršava se funkcija RPMCount () . A kako smo koristili rotor s dvije oštrice, to znači da će se funkcija pozvati 4 puta u jednom okretu.
Jednom kada se zna potrebno vrijeme, možemo izračunati RPM koristeći dolje navedene formule, gdje će nam 1000 / potrošeno vrijeme dati RPS (okretanje u sekundi), a daljnje množenje sa 60 dat će vam RPM (okretanje u minuti)
o / min = (60/2) * (1000 / (milis () - vrijeme)) * REV / lopaticeInFan;
Nakon dobivanja broja okretaja, brzina se može izračunati prema zadanoj formuli:
Brzina = o / min * (radijus 2 * Pi *) / 1000
Znamo da je Pi = 3,14, a polumjer 4,7 inča
Ali prvo moramo pretvoriti polumjer u metre iz inča:
radijus = ((radijus * 2,54) /100,0) metara Brzina = o / min * 60,0 * (2,0 * 3,14 * radijus) / 1000,0) u kilometrima na sat
Ovdje smo pomnožili broj okretaja u minuti sa 60 za pretvaranje broja okretaja u min-1 (okretaj po satu) i podijelili sa 1000 za pretvaranje metara / sata u Kilometre / sat.
Nakon brzine u kmh, ove vrijednosti možemo prikazati izravno preko LCD-a u digitalnom obliku, ali da bismo prikazali brzinu u analognom obliku, moramo napraviti još jedan izračun kako bismo saznali br. koraka, koračni bi se motor trebao kretati kako bi prikazao brzinu na analognom mjeraču.
Ovdje smo za analogni mjerač koristili 4-žični bipolarni koračni motor, koji ima 1,8 stupnjeva i znači 200 koraka po okretu.

Sada na brzinomjeru moramo pokazati 280 km / h. Dakle, da bi pokazao koračni motor od 280 kmh, mora se pomaknuti za 280 stupnjeva
Dakle, imamo maxSpeed = 280
I maxSteps će biti
maxSteps = 280 / 1,8 = 155 koraka
Sada u našem Arduino kodu imamo funkciju, naime funkciju karte koja se ovdje koristi za mapiranje brzine u korake.
Koraci = karta (brzina, 0, maxSpeed , 0, maxSteps);
Pa sad imamo
koraci = karta (brzina, 0,280,0,155);
Nakon izračuna koraka te korake možemo izravno primijeniti u funkciji koračnog motora za pomicanje koračnog motora. Također trebamo voditi računa o trenutnim koracima ili kutu koračnog motora koristeći zadane izračune
currSteps = koraci korake = currSteps-preSteps preSteps = currSteps
ovdje currSteps su trenutni koraci koji dolaze iz zadnjeg izračuna, a preSteps su zadnji izvedeni koraci.
Kružni dijagram i veze
Shema kruga za ovaj analogni brzinomjer je jednostavna, ovdje smo koristili LCD 16x2 za prikaz brzine u digitalnom obliku i koračni motor za rotaciju igle analognog brzinomera.
LCD 16x2 povezan je na sljedeće analogne pinove Arduina.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0

Otpor od 2,2k koristi se za podešavanje svjetline LCD-a. Modul IR senzora, koji se koristi za otkrivanje lopatice ventilatora za izračunavanje broja okretaja, povezan je na prekid 0, znači D2 pin Arduina.
Ovdje smo koristili pokretački program koračnog motora, odnosno modul L293N. IN1, IN2, IN3 i IN4 pin upravljača koračnog motora izravno je povezan s D8, D9, D10 i D11 Arduina. Ostali spojevi dati su u krugovnom dijagramu.

Objašnjenje programiranja
Kompletni kod za Arduino Speedomete r dan je na kraju, ovdje objašnjavamo nekoliko njegovih važnih dijelova.
U programski dio uključili smo sve potrebne knjižnice poput biblioteke koračnih motora, LiquidCrystal LCD knjižnicu i deklarirane igle za njih.
#include
Nakon toga uzeli smo neke varijable i makronaredbe za izvođenje izračuna. Izračuni su već objašnjeni u prethodnom odjeljku.
hlapljivi bajt REV; nepotpisani long int rpm, RPM; nepotpisano dugo st = 0; nepotpisano dugo vremena; int ledPin = 13; int led = 0, RPMlen, prevRPM; zastavica int = 0; int zastava1 = 1; #define lopaticeInFan 2 radijus plovka = 4,7; // inč int preSteps = 0; float stepAngle = 360,0 / (float) stepsPerRevolution; plutajuća minSpeed = 0; plutajuća maxSpeed = 280,0; plutajuća minSteps = 0; plutajuće maxSteps = maxSpeed / stepAngle;
Nakon toga inicijaliziramo LCD, serijski, prekidni i koračni motor u funkciji postavljanja
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, IZLAZ); lcd.početak (16,2); lcd.print ("Brzinomjer"); kašnjenje (2000); attachInterrupt (0, RPMCount, RISING); }
Nakon toga očitamo brzinu okretaja u krugu i izvodimo proračun da bismo dobili brzinu i pretvorili je u korake za pokretanje koračnog motora za prikaz brzine u analognom obliku.
petlja void () { readRPM (); radijus = ((radijus * 2,54) /100,0); // pretvaranje u metar int Brzina = ((plutajući) RPM * 60,0 * (2,0 * 3,14 * radijus) /1000,0); // RPM za 60 minuta, promjer gume (2pi r) r je polumjer, 1000 za pretvaranje u km int Koraci = karta (Brzina, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (brzina); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Brzina:"); lcd.print (brzina); lcd.print ("Km / h"); zastava1 = 0; } int currSteps = Koraci;int koraci = currSteps-preSteps; preSteps = currSteps; myStepper.step (koraci); }
Ovdje imamo funkciju reapRPM () za izračunavanje RPM-a.
int readRPM () { if (REV> = 10 ili milis ()> = st + 1000) // AŽURIRAT ĆE SE SVAKIH 10 ČITANJA ili 1 sekundu u praznom hodu { if (flag == 0) flag = 1; o / min = (60/2) * (1000 / (milis () - vrijeme)) * REV / lopaticeInFan; vrijeme = milis (); REV = 0; int x = o / min; dok je (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (o / min, DEC); O / min = o / min; kašnjenje (500); st = milis (); zastava1 = 1; } }
Napokon, imamo rutinu prekida koja je odgovorna za mjerenje revolucije objekta
void RPMCount () { REV ++; if (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
Na ovaj način možete jednostavno izraditi analogni brzinomjer pomoću Arduina. To se također može izraditi pomoću Hall senzora, a brzina se može prikazati na pametnom telefonu, slijedite ove upute za Arduino brzinometar.
