- Potřebné materiály
- Výpočet rychlosti a její zobrazení na analogovém rychloměru
- Schéma zapojení a zapojení
- Vysvětlení programování
Měření rychlosti / otáček vozidla nebo motoru bylo vždy fascinujícím projektem, který bylo možné vyzkoušet. V tomto projektu budeme stavět analogový rychloměr pomocí Arduina. K měření rychlosti použijeme modul IR senzoru. Existují i jiné způsoby / senzory, jako je Hallův senzor pro měření rychlosti, ale použití IR senzoru je snadné, protože modul IR senzoru je velmi běžné zařízení a můžeme ho snadno získat z trhu a také ho lze použít na jakýkoli motorové vozidlo.
V tomto projektu ukážeme rychlost v analogové i digitální podobě. Tím, že provedeme tento projekt, také zdokonalíme naše dovednosti při učení Arduina a krokového motoru, protože tento projekt zahrnuje použití přerušení a časovačů. Na konci tohoto projektu budete schopni vypočítat rychlost a vzdálenosti ujeté jakýmkoli rotujícím objektem a zobrazit je na 16x2 LCD obrazovce v digitálním formátu a také na analogovém měřiči. Začněme tedy s tímto obvodem rychloměru a počítadla kilometrů s Arduinem
Potřebné materiály
- Arduino
- Bipolární krokový motor (4 vodiče)
- Budič krokového motoru (modul L298n)
- Modul infračerveného senzoru
- 16 * 2 LCD displej
- 2,2k rezistor
- Připojovací vodiče
- Nepájivá deska.
- Zdroj napájení
- Výtisk obrázku rychloměru
Výpočet rychlosti a její zobrazení na analogovém rychloměru
IR senzor je zařízení, které dokáže detekovat přítomnost předmětu před ním. Použili jsme dva lopatkové rotory (ventilátory) a umístili jsme infračervený senzor do jeho blízkosti takovým způsobem, že pokaždé, když lopatky rotují, IR senzor to detekuje. Poté použijeme pomoc časovačů a přerušení v Arduinu k výpočtu času potřebného pro jedno úplné otočení motoru.
Tady v tomto projektu jsme použili přerušení s nejvyšší prioritou k detekci otáček za minutu a nakonfigurovali jsme ho ve vzestupném režimu. Takže kdykoli výstup senzoru klesne na LOW na High, bude provedena funkce RPMCount () . A protože jsme použili dvoulistý rotor, znamená to, že tato funkce bude vyvolána 4krát za jednu otáčku.
Jakmile je známý čas, můžeme vypočítat RPM pomocí níže uvedených vzorců, kde 1000 / čas potřebný nám dá RPS (otáčky za sekundu) a další násobení s 60 vám dá RPM (otáčky za minutu)
ot / min = (60/2) * (1000 / (millis () - čas)) * REV / bladesInFan;
Po získání RPM lze rychlost vypočítat podle daného vzorce:
Rychlost = ot / min * (2 * Pi * poloměr) / 1000
Víme, že Pi = 3,14 a poloměr je 4,7 palce
Nejprve však musíme převést poloměr na metry z palců:
poloměr = ((poloměr * 2,54) / 100,0) metrů Rychlost = ot / min * 60,0 * (2,0 * 3,14 * poloměr) / 1000,0) v kilometrech za hodinu
Zde jsme vynásobili počet otáček za minutu o 60, abychom převedli otáčky za minutu na otáčky za minutu, a vydělili jsme 1000, abychom převedli metry / hodinu na kilometry / hodinu.
Poté, co máme rychlost v kmh, můžeme tyto hodnoty zobrazit přímo na LCD v digitální podobě, ale abychom ukázali rychlost v analogové formě, musíme udělat ještě jeden výpočet, abychom zjistili ne. kroků by se měl krokový motor pohybovat, aby ukazoval rychlost na analogovém měřiči.
Zde jsme použili 4vodičový bipolární krokový motor pro analogový měřič, který má 1,8 stupně znamená 200 kroků na otáčku.
Nyní musíme na rychloměru ukázat 280 km / h. Aby bylo možné ukázat, že krokový motor 280 km / h se musí pohybovat o 280 stupňů
Takže máme maxSpeed = 280
A maxSteps bude
maxSteps = 280 / 1,8 = 155 kroků
Nyní máme funkci v našem Arduino kódu a to mapovat funkci, která je zde použit k mapování rychlost do jednotlivých kroků.
Kroky = mapa (rychlost, 0, maxSpeed , 0, maxSteps);
Takže teď máme
kroky = mapa (rychlost, 0,280,0,155);
Po výpočtu kroků můžeme tyto kroky přímo použít ve funkci krokového motoru k pohybu krokového motoru. Musíme se také postarat o aktuální kroky nebo úhel krokového motoru pomocí daných výpočtů
currSteps = kroky kroky = currSteps-preSteps preSteps = currSteps
Zde currSteps je aktuální kroky, které pochází z posledního výpočtu a preSteps je poslední provedené kroky.
Schéma zapojení a zapojení
Schéma zapojení tohoto analogového rychloměru je jednoduché, zde jsme použili 16x2 LCD k zobrazení rychlosti v digitální podobě a krokový motor k otáčení analogové jehly rychloměru.
16x2 LCD je připojen na následující analogové piny Arduina.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
K nastavení jasu LCD se používá rezistor 2,2k. Modul infračerveného senzoru, který se používá k detekci lopatek ventilátoru pro výpočet otáček za minutu, je připojen k přerušení 0 znamená D2 pin Arduino.
Zde jsme použili ovladač krokového motoru, jmenovitě modul L293N. Pin IN1, IN2, IN3 a IN4 budiče krokového motoru je přímo připojen k D8, D9, D10 a D11 Arduina. Zbytek připojení je uveden v schématu zapojení.
Vysvětlení programování
Na konci je uveden kompletní kód pro Arduino Speedomete r, zde vysvětlujeme několik jeho důležitých částí.
V programovací části jsme zahrnuli všechny požadované knihovny, jako je knihovna krokových motorů, knihovna LiquidCrystal LCD a deklarované piny pro ně.
#zahrnout
Poté jsme vzali několik proměnných a maker pro provádění výpočtů. Výpočty jsou již vysvětleny v předchozí části.
volatilní byte REV; unsigned long int rpm, RPM; bez znaménka dlouhé st = 0; dlouho nepodepsaný; int ledPin = 13; int led = 0, RPMlen, prevRPM; příznak int = 0; int flag1 = 1; #define bladesInFan 2 float radius = 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;
Poté jsme inicializovat LCD, sériový přerušení a krokového motoru v nastavení funkcí
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Rychloměr"); zpoždění (2000); attachInterrupt (0, RPMCount, RISING); }
Poté načteme otáčky ve funkci smyčky a provedeme výpočet, abychom získali rychlost a převedli ji na kroky, abychom spustili krokový motor a zobrazili rychlost v analogové formě.
void loop () { readRPM (); poloměr = ((poloměr * 2,54) / 100,0); // převod v metru int Rychlost = ((plovoucí) RPM * 60,0 * (2,0 * 3,14 * poloměr) / 1000,0); // RPM za 60 minut, průměr pneumatiky (2pi r) r je poloměr, 1000 k převodu v km int Kroky = mapa (rychlost, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Rychlost); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Rychlost:"); lcd.print (rychlost); lcd.print ("Km / h"); flag1 = 0; } intcurSteps = kroky;int kroky = currentSteps-preSteps; preSteps = proudSteps; myStepper.step (kroky); }
Zde máme funkci reapRPM () pro výpočet RPM.
int readRPM () { if (REV> = 10 nebo millis ()> = st + 1000) // BUDE AKTUALIZOVAT AFETR KAŽDÝCH 10 ČTENÍ nebo 1 sekundu v nečinnosti { if (flag == 0) flag = 1; ot / min = (60/2) * (1000 / (millis () - čas)) * REV / bladesInFan; čas = millis (); REV = 0; int x = ot / min; while (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = ot / min; zpoždění (500); st = millis (); flag1 = 1; } }
Nakonec máme přerušovací rutinu, která je zodpovědná za měření otáček objektu
void RPMCount () { REV ++; if (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
Takto můžete jednoduše postavit analogový rychloměr pomocí Arduina. To lze také vytvořit pomocí Hallova senzoru a rychlost lze zobrazit na chytrém telefonu, stejně postupujte podle tohoto návodu k rychloměru Arduino.