- Potrebné materiály
- Výpočet rýchlosti a jej zobrazenie na analógovom rýchlomeri
- Schéma zapojenia a zapojenia
- Vysvetlenie programovania
Meranie rýchlosti / otáčok vozidla alebo motora bolo vždy fascinujúcim projektom, ktorý bolo možné vyskúšať. V tomto projekte sa chystáme vybudovať analógový rýchlomer pomocou Arduina. Na meranie rýchlosti použijeme modul IR senzora. Existujú ďalšie spôsoby / senzory, ako napríklad Hallov senzor na meranie rýchlosti, ale použitie infračerveného senzora je jednoduché, pretože modul infračerveného senzora je veľmi bežné zariadenie a môžeme ho ľahko získať z trhu a tiež ho možno použiť na akýkoľvek typ motorové vozidlo.
V tomto projekte ukážeme rýchlosť v analógovej aj digitálnej podobe. Realizáciou tohto projektu tiež zdokonalíme naše zručnosti pri učení Arduina a Stepperova motora, pretože tento projekt zahŕňa použitie prerušenia a časovača. Na konci tohto projektu budete môcť vypočítať rýchlosť a vzdialenosť prejdenú akýmkoľvek rotujúcim predmetom a zobraziť ich na 16x2 LCD obrazovke v digitálnom formáte a tiež na analógovom meradle. Začnime teda týmto okruhom rýchlomera a počítadla kilometrov s Arduino
Potrebné materiály
- Arduino
- Bipolárny krokový motor (4-vodičový)
- Budič krokového motora (modul L298n)
- Modul IR snímača
- 16 * 2 LCD displej
- 2,2k rezistor
- Pripojovacie vodiče
- Nepál.
- Zdroj
- Výtlačok obrázka rýchlomera
Výpočet rýchlosti a jej zobrazenie na analógovom rýchlomeri
IR senzor je zariadenie, ktoré dokáže detekovať prítomnosť predmetu pred ním. Použili sme dva lopatkové rotory (ventilátory) a umiestnili sme infračervený senzor do jeho blízkosti takým spôsobom, aby zakaždým, keď lopatky rotujú, infračervený senzor to zistí. Potom použijeme pomoc časovačov a prerušenia v Arduine na výpočet času potrebného na jedno úplné otočenie motora.
Tu v tomto projekte sme použili prerušenie s najvyššou prioritou na detekciu otáčok za minútu a nakonfigurovali sme ho v stúpajúcom režime. Takže vždy, keď výstup senzora klesne na LOW (nízky), High (vysoký ), bude vykonaná funkcia RPMCount () . A keďže sme použili dvojlistový rotor, znamená to, že táto funkcia bude vyvolaná 4-krát za jednu otáčku.
Akonáhle je známy čas, ktorý môžeme zistiť, môžeme vypočítať otáčky pomocou nasledujúcich vzorcov. Kde 1 000 / čas nám poskytne RPS (otáčky za sekundu) a ďalšie vynásobenie číslom 60 vám poskytne otáčky za minútu
ot / min = (60/2) * (1 000 / (millis () - čas)) * REV / bladeInFan;
Po získaní otáčok sa dá rýchlosť vypočítať podľa vzorca:
Otáčky = ot / min * (2 * Pi * polomer) / 1 000
Vieme, že Pi = 3,14 a polomer je 4,7 palca
Najprv však musíme previesť polomer na metre z palcov:
polomer = ((polomer * 2,54) / 100,0) metrov Rýchlosť = ot / min * 60,0 * (2,0 * 3,14 * polomer) / 1000,0) v kilometroch za hodinu
Tu sme vynásobili otáčky za minútu o 60 na prevod otáčok za minútu na otáčky za minútu (otáčka za hodinu) a delené o 1000, aby sme prepočítali metre / hodinu na kilometre / hodinu.
Po dosiahnutí rýchlosti v kmh môžeme tieto hodnoty zobraziť priamo na LCD v digitálnej podobe, ale aby sme zobrazili rýchlosť v analógovej podobe, musíme urobiť ešte jeden výpočet, aby sme zistili č. z krokov by sa mal krokový motor pohybovať, aby ukazoval rýchlosť na analógovom merači.
Tu sme použili 4-vodičový bipolárny krokový motor pre analógový merač, ktorý má 1,8 stupňa, čo znamená 200 krokov na otáčku.
Teraz musíme na rýchlomeri ukázať 280 km / h. Aby sa ukázal, že krokový motor s rýchlosťou 280 km / h sa musí posunúť o 280 stupňov
Takže máme maxSpeed = 280
A maxSteps budú
maxSteps = 280 / 1,8 = 155 krokov
Teraz máme v našom kóde Arduino funkciu, konkrétne mapovú funkciu, ktorá sa tu používa na mapovanie rýchlosti do krokov.
Kroky = mapa (rýchlosť, 0, maxSpeed , 0, maxSteps);
Takže teraz máme
kroky = mapa (rýchlosť, 0,280,0,155);
Po výpočte krokov môžeme tieto kroky priamo použiť vo funkcii krokového motora na presun krokového motora. Pomocou daných výpočtov sa tiež musíme postarať o aktuálne kroky alebo uhol krokového motora
currSteps = kroky kroky = currSteps-preSteps preSteps = currSteps
tu currentSteps sú aktuálne kroky, ktoré vychádzajú z posledného výpočtu, a preSteps sú posledné vykonané kroky.
Schéma zapojenia a zapojenia
Schéma zapojenia tohto analógového rýchlomera je jednoduchá, tu sme použili 16x2 LCD displej na zobrazenie rýchlosti v digitálnej podobe a krokový motor na otáčanie analógového rýchlomeru.
16x2 LCD je pripojený na nasledujúce analógové piny Arduina.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Na nastavenie jasu LCD sa používa 2,2k rezistor. Modul infračerveného senzora, ktorý sa používa na detekciu lopatiek ventilátora na výpočet otáčok, je pripojený k prerušeniu 0, čo znamená, že pin D2 Arduina.
Tu sme použili ovládač krokového motora, konkrétne modul L293N. Pin IN1, IN2, IN3 a IN4 pin budiča krokového motora je priamo pripojený k D8, D9, D10 a D11 Arduina. Ostatné zapojenia sú uvedené v schéme zapojenia.
Vysvetlenie programovania
Kompletný kód pre Arduino Speedomete r je uvedený na konci, tu vysvetľujeme niekoľko jeho dôležitých častí.
V programovacej časti sme zahrnuli všetky požadované knižnice, ako je knižnica krokových motorov, knižnica LiquidCrystal LCD a deklarované kolíky pre ne.
#include
Potom sme zobrali niekoľko premenných a makier na vykonávanie výpočtov. Výpočty sú už vysvetlené v predchádzajúcej časti.
volatilný bajt REV; nepodpísané dlhé int ot./min, RPM; nepodpísané dlhé očko = 0; nepodpísaný dlhý čas; int ledPin = 13; int led = 0, RPMlen, prevRPM; príznak int = 0; int príznak1 = 1; #define bladesInFan 2 rádius plaváka = 4,7; // inch int preSteps = 0; float stepAngle = 360,0 / (float) stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280,0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Potom vo funkcii nastavenia inicializujeme LCD, sériový, prerušovací a krokový motor
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.začiatok (16,2); lcd.print ("rýchlomer"); meškanie (2000); attachInterrupt (0, RPMCount, RISING); }
Potom prečítame funkciu otáčok v slučke a vykonáme výpočet na získanie rýchlosti a prevedieme ju na kroky, aby sme spustili krokový motor na zobrazenie rýchlosti v analógovej podobe.
void loop () { readRPM (); polomer = ((polomer * 2,54) / 100,0); // prepočet na meter int Speed = ((float) RPM * 60.0 * (2.0 * 3.14 * radius) /1000.0); // RPM za 60 minút, priemer pneumatiky (2pi r) r je polomer, 1 000 pre prevod v km int Kroky = mapa (rýchlosť, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Rýchlosť); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Rýchlosť:"); lcd.print (rýchlosť); lcd.print ("Km / h"); flag1 = 0; } intcurSteps = Kroky;int kroky = currentSteps-preSteps; preSteps = currentSteps; myStepper.step (kroky); }
Tu máme funkciu reapRPM () na výpočet RPM.
int readRPM () { if (REV> = 10 alebo millis ()> = st + 1000) // BUDE AKTUALIZOVANÉ AFETR KAŽDÝCH 10 ČÍTANÍ alebo 1 sekundu v nečinnosti { if (flag == 0) flag = 1; ot / min = (60/2) * (1 000 / (millis () - čas)) * REV / bladeInFan; čas = millis (); REV = 0; int x = ot / min; while (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = ot / min; oneskorenie (500); st = millis (); flag1 = 1; } }
Nakoniec máme rutinu prerušenia, ktorá je zodpovedná za meranie revolúcie objektu
void RPMCount () { REV ++; if (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
Takto môžete jednoducho zostaviť analógový rýchlomer pomocou Arduina. To je možné zostaviť aj pomocou Hallovho snímača a rýchlosť je možné zobraziť na inteligentnom telefóne, rovnako postupujte podľa tohto návodu na používanie rýchlomeru Arduino.