- Szükséges anyagok
- A sebesség kiszámítása és megjelenítése analóg sebességmérőn
- Áramkör és kapcsolatok
- Programozási magyarázat
A jármű vagy motor sebességének / fordulatszámának mérése mindig is érdekes projekt volt. Ebben a projektben egy analóg sebességmérőt fogunk építeni az Arduino segítségével. Az IR Sensor modult használjuk a sebesség mérésére. Vannak erre más módszerek / érzékelők, például a Hall mérő a sebesség mérésére, de az IR érzékelő használata egyszerű, mert az IR érzékelő modul nagyon gyakori eszköz, és könnyen beszerezhetjük a piacról, és bármilyen típusú eszközön használható motor.
Ebben a projektben a sebességet analóg és digitális formában is megmutatjuk. A projekt megvalósításával tovább fejlesztjük az Arduino és a Stepper motor elsajátításának képességeit, mivel ez a projekt megszakítások és időzítők használatát foglalja magában. A projekt végén kiszámíthatja a forgó tárgyak által megtett sebességet és távolságokat, és megjelenítheti azokat egy 16x2-es LCD képernyőn digitális formátumban és analóg mérőn is. Kezdjük tehát ezzel a sebességmérővel és kilométer-számlálóval az Arduino-val
Szükséges anyagok
- Arduino
- Bipoláris léptetőmotor (4 vezetékes)
- Léptetőmotor-meghajtó (L298n modul)
- IR érzékelő modul
- 16 * 2 LCD kijelző
- 2,2k-os ellenállás
- Csatlakozó vezetékek
- Kenyérlemez.
- Tápegység
- Sebességmérő kép nyomtatása
A sebesség kiszámítása és megjelenítése analóg sebességmérőn
Az IR- érzékelő olyan eszköz, amely érzékeli az előtte lévő tárgy jelenlétét. Két lapátos rotort (ventilátort) használtunk, és az IR érzékelőt úgy helyeztük el a közelében, hogy minden alkalommal, amikor a kések elfordulnak, az IR érzékelő észleli. Ezután az Arduino időzítőinek és megszakításainak segítségével kiszámoljuk a motor teljes teljes forgatásához szükséges időt.
Ebben a projektben a legmagasabb prioritású megszakítást alkalmaztuk az fordulatszám észleléséhez, és növekvő módban konfiguráltuk. Annak érdekében, hogy amikor az érzékelő kimenete LOW-tól magasig halad, az RPMCount () függvény végrehajtásra kerül. És mivel két lapátos rotort használtunk, ez azt jelenti, hogy a funkciót négyszer hívják meg egy fordulat alatt.
Amint az elvárt idő ismeretes, az alábbi képletek segítségével kiszámíthatjuk az RPM-et: Ahol 1000 / vett idő megadja az RPS-t (másodpercenkénti fordulat), és további 60-zal megszorozva megkapja az RPM-et (fordulat percenként)
fordulat / perc = (60/2) * (1000 / (millis () - idő)) * REV / pengékInFan;
Az RPM megszerzése után a sebesség kiszámítható a következő képlettel:
Sebesség = fordulat / perc * (2 * Pi * sugár) / 1000
Tudjuk, hogy Pi = 3,14 és a sugár 4,7 hüvelyk
De először át kell alakítanunk a sugarat méterről hüvelykről:
sugár = ((sugár * 2,54) / 100,0) méter Sebesség = fordulat / perc * 60,0 * (2,0 * 3,14 * sugár) / 1000,0) kilométer per óra
Itt megszoroztuk a fordulatszámot 60-mal, hogy a fordulatszámot fordulatszámra (óránkénti fordulatszámra) fordítsuk, és elosztva 1000-vel a méter / óra kilométer / órára konvertálásához.
Miután km2-ben megadta a sebességet, ezeket az értékeket digitális formában közvetlenül az LCD-n tudjuk megmutatni, de a sebesség analóg formában való megjelenítéséhez még egy számítást kell végeznünk, hogy megtudjuk, hogy nem. lépésenként a léptető motornak mozognia kell, hogy az analóg mérőn mutassa a sebességet.
Itt egy 4 vezetékes bipoláris léptetőmotort használtunk az analóg mérőórához, amelynek 1,8 fokos jelentése 200 lépésenként fordulatonként.
Most 280 Kmh-t kell mutatnunk a sebességmérőn. Tehát a 280 Kmh léptetőmotor megjelenítéséhez 280 fokkal kell mozognia
Tehát maxSpeed = 280
És maxSteps lesz
maxSteps = 280 / 1,8 = 155 lépés
Most van egy funkciója a mi Arduino kód nevezetesen Térkép funkció, amely az itt használt feltérképezésére sebességgel a lépéseket.
Lépések = térkép (sebesség, 0, maxSpeed , 0, maxSteps);
Tehát most megvan
lépések = térkép (sebesség, 0,280,0, 155);
A lépések kiszámítása után ezeket a lépéseket közvetlenül alkalmazhatjuk a léptetőmotor funkcióban a léptetőmotor mozgatásához. Adott számítások segítségével gondoskodnunk kell a léptető motor aktuális lépéseiről vagy szögéről is
currSteps = lépések lépéseket = currSteps-preSteps preSteps = currSteps
itt a currSteps az aktuális lépések, amelyek az utolsó számításból származnak, és az preSteps az utolsó végrehajtott lépések.
Áramkör és kapcsolatok
Ennek az analóg sebességmérőnek a kapcsolási rajza egyszerű, itt a 16x2 LCD-t használtuk a sebesség digitális formában történő bemutatásához, és a léptetőmotort az analóg sebességmérő tűjének forgatásához.
A 16x2 LCD-t az Arduino következő analóg csapjain csatlakoztatják.
RS - A5
RW - GND
HU - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
2,2k-os ellenállást használnak az LCD fényerejének beállításához. Az IR szenzor modul, amelyet a ventilátor lapátjának észlelésére használnak a fordulatszám kiszámításához, a 0 megszakításhoz Arduino D2 tűt jelent.
Itt egy léptető motor meghajtót használtunk, nevezetesen az L293N modult. A léptetőmotor meghajtójának IN1, IN2, IN3 és IN4 tűje közvetlenül csatlakozik az Arduino D8, D9, D10 és D11 csatlakozóihoz. A többi csatlakozást az áramköri ábra mutatja.
Programozási magyarázat
Az Arduino Speedomete r teljes kódja a végén van megadva, itt néhány fontos részét elmagyarázzuk.
A programozási részbe belefoglaltuk az összes szükséges könyvtárat, például a léptető motoros könyvtárat, a LiquidCrystal LCD könyvtárat és a deklarált csapokat.
#include
Ezek után néhány változót és makrót vettünk a számítások elvégzéséhez. A számításokat már az előző szakasz ismerteti.
volatilis bájt REV; aláíratlan hosszú int rpm, RPM; előjel nélküli hosszú st = 0; hosszú ideig aláíratlan; int ledPin = 13; int led = 0, RPMlen, prevRPM; int zászló = 0; int zászló1 = 1; #define pengékInFan 2 úszó sugara = 4,7; // inch int preSteps = 0; float stepAngle = 360.0 / (float) stepsPerRevolution; úszó minSpeed = 0; úszó maxSpeed = 280,0; úszó minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Ezt követően inicializáljuk az LCD, soros, megszakító és léptető motort a beállítási funkcióban
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcdbegin (16,2); lcd.print ("Sebességmérő"); késés (2000); attachInterrupt (0, RPMCount, RISING); }
Ezt követően elolvassuk a fordulatszámot a hurok funkcióban, és elvégezünk egy számítást a sebesség megszerzéséhez, és ezt átalakítjuk lépésekké a léptető motor futtatásához, hogy a sebesség analóg formában jelenjen meg.
void loop () { readRPM (); sugár = ((sugár * 2,54) / 100,0); // konvertálás méterben int Sebesség = ((úszó) RPM * 60,0 * (2,0 * 3,14 * sugár) / 1000,0); // percenkénti fordulatszám 60 perc alatt, a gumiabroncs átmérője (2pi r) r sugár, 1000 konverzió km-ben int Lépések = térkép (Sebesség, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Soros.nyomtatás (Sebesség); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Sebesség:"); lcd.print (Sebesség); lcd.print ("Km / h"); zászló1 = 0; } int currSteps = Lépések;int lépések = currSteps-preSteps; preSteps = currSteps; myStepper.step (lépések); }
Itt van az reapRPM () függvény az RPM kiszámításához.
int readRPM () { if (REV> = 10 vagy millisz ()> = st + 1000) // MINDEN 10 OLVASATOT vagy 1 másodpercet üresjáratban frissíti az AFETR-t { if (flag == 0) flag = 1; fordulat / perc = (60/2) * (1000 / (millis () - idő)) * REV / pengékInFan; idő = millisz (); REV = 0; int x = fordulat / perc; míg (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (fordulat / perc, DEC); RPM = fordulat / perc; késés (500); st = millisz (); zászló1 = 1; } }
Végül megszakítottuk a rutint, amely felelős az objektum forradalmának méréséért
void RPMCount () { REV ++; if (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
Így egyszerűen felépíthet egy analóg sebességmérőt az Arduino segítségével. Ezt Hall szenzorával is fel lehet építeni, és a sebesség megjeleníthető okostelefonon, kövesse ugyanezt az Arduino sebességmérő oktatóanyagát.