- Mga Materyal na Kinakailangan
- Kinakalkula ang Bilis at Ipinapakita ito sa Analog Speedometer
- Circuit Diagram at Mga Koneksyon
- Paliwanag sa Programming
Ang pagsukat sa bilis / rpm ng isang Sasakyan o isang motor ay palaging isang kamangha-manghang proyekto upang subukan. Sa proyektong ito, magtatayo kami ng isang Analog Speedometer gamit ang Arduino. Gagamitin namin ang module ng IR Sensor upang sukatin ang bilis. Mayroong iba pang mga paraan / sensor para dito, tulad ng sensor ng hall upang sukatin ang bilis, ngunit ang paggamit ng isang IR sensor ay madali sapagkat ang module ng IR sensor ay napaka-karaniwang aparato at madali natin itong makukuha mula sa merkado at maaari din itong magamit sa anumang uri ng sasakyan.
Sa proyektong ito, magpapakita kami ng bilis sa parehong analog at digital form. Sa pamamagitan ng paggawa sa proyektong ito, mapapahusay din namin ang aming mga kasanayan sa pag-aaral ng Arduino at Stepper motor dahil ang proyektong ito ay nagsasangkot ng paggamit ng Mga Nakagagambala at Mga Timer. Sa, pagtatapos ng proyektong ito magagawa mong kalkulahin ang bilis at distansya na sakop ng anumang umiikot na bagay at ipakita ang mga ito sa isang 16x2 LCD screen sa digital format at din sa analog meter. Kaya't magsimula tayo sa Speedometer at Odometer Circuit na ito kasama ang Arduino
Mga Materyal na Kinakailangan
- Arduino
- Isang bipolar stepper motor (4 wire)
- Stepper motor driver (L298n Module)
- Module ng IR sensor
- 16 * 2 LCD display
- 2.2k risistor
- Mga kumokonekta na mga wire
- Breadboard.
- Supply ng kuryente
- Printout ng larawan ng Speedometer
Kinakalkula ang Bilis at Ipinapakita ito sa Analog Speedometer
Ang isang IR Sensor ay isang aparato na maaaring makita ang pagkakaroon ng isang bagay sa harap nito. Gumamit kami ng dalawang talim ng rotor (fan) at inilagay ang IR sensor malapit dito sa paraang sa tuwing paikutin ng mga talim ay makikita ito ng IR sensor. Ginagamit namin pagkatapos ang tulong ng mga timer at Interrupts sa Arduino upang makalkula ang oras na kinuha para sa isang kumpletong pag-ikot ng motor.
Dito sa proyektong ito, ginamit namin ang pinakamataas na priyoridad na makagambala upang makita ang rpm at na-configure namin ito sa tumataas na mode. Kaya't tuwing ang output ng sensor ay napakababa sa Mataas, ang pagpapaandar ng RPMCount () ay papatayin. At dahil gumamit kami ng dalawang talim ng talim, Nangangahulugan ito na ang pagpapaandar ay tatawaging 4 na beses sa isang rebolusyon.
Kapag ang oras na ginugol ay nalalaman maaari nating kalkulahin ang RPM sa pamamagitan ng paggamit ng mga formula sa ibaba, Kung saan bibigyan kami ng 1000 / oras na RPS (rebolusyon bawat segundo) at karagdagang pagpaparami nito ng 60 ay magbibigay sa iyo ng RPM (rebolusyon bawat minuto)
rpm = (60/2) * (1000 / (millis () - oras)) * REV / bladesInFan;
Matapos makuha ang RPM, ang bilis ay maaaring makalkula sa pamamagitan ng naibigay na formula:
Bilis = rpm * (2 * Pi * radius) / 1000
Alam namin na ang Pi = 3.14 at radius ay 4.7 pulgada
Ngunit kailangan muna nating baguhin ang radius sa metro mula sa pulgada:
radius = ((radius * 2.54) /100.0) metro Bilis = rpm * 60.0 * (2.0 * 3.14 * radius) / 1000.0) sa mga kilometro bawat oras
Dito pinarami namin ang rpm ng 60 upang i-convert ang rpm sa rph (rebolusyon bawat oras) at hinati ng 1000 upang i-convert ang metro / oras sa Kilometro / oras.
Matapos ang pagkakaroon ng bilis sa kmh maaari nating ipakita ang mga halagang ito nang direkta sa LCD sa digital form ngunit upang maipakita ang bilis sa analog form na kailangan nating gumawa ng isa pang pagkalkula upang malaman ang hindi. ng mga hakbang, stepper motor dapat ilipat upang ipakita ang bilis sa analog meter.
Dito nagamit namin ang isang 4 wire bipolar stepper motor para sa analog meter, na kung saan ay ang pagkakaroon ng 1.8 degree ay nangangahulugang 200 hakbang bawat rebolusyon.
Ngayon kailangan nating ipakita ang 280 Kmh sa speedometer. Kaya upang maipakita ang 280 Kmh stepper motor na kailangang ilipat ang 280 degree
Kaya mayroon kaming maxSpeed = 280
At ang maxSteps ay magiging
maxSteps = 280 / 1.8 = 155 na mga hakbang
Ngayon ay mayroon kaming pagpapaandar sa aming Arduino code katulad ng pagpapaandar ng mapa na ginagamit dito upang mapabilis ang mapa sa mga hakbang.
Mga Hakbang = mapa (bilis, 0, maxSpeed , 0, maxSteps);
Kaya ngayon mayroon kami
mga hakbang = mapa (bilis, 0,280,0,155);
Pagkatapos ng pagkalkula ng mga hakbang maaari naming direktang mailapat ang mga hakbang na ito sa stepper motor function upang ilipat ang stepper motor. Kailangan din naming alagaan ang mga kasalukuyang hakbang o anggulo ng stepper motor sa pamamagitan ng paggamit ng mga ibinigay na kalkulasyon
currSteps = Mga hakbang hakbang = currSteps-preSteps preSteps = currSteps
narito ang currSteps ay kasalukuyang mga hakbang na nagmumula sa huling pagkalkula at ang preSteps ay huling ginawang mga hakbang.
Circuit Diagram at Mga Koneksyon
Ang diagram ng circuit para sa Analog Speedometer na ito ay simple, dito ginamit namin ang 16x2 LCD upang ipakita ang bilis sa digital form at stepper motor upang paikutin ang karayom ng analog speedometer.
Ang 16x2 LCD ay konektado sa pagsunod sa mga analog pin ng Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Ginagamit ang isang resistor na 2.2k upang maitakda ang ningning ng LCD. Ang isang module ng IR sensor, na ginagamit upang makita ang talim ng fan upang makalkula ang rpm, ay konektado upang makagambala sa 0 ay nangangahulugang D2 pin ng Arduino.
Dito namin ginamit ang isang stepper motor driver na L293N module. Ang IN1, IN2, IN3 at IN4 na pin ng stepper motor driver ay direktang konektado sa D8, D9, D10, at D11 ng Arduino. Ang natitirang mga koneksyon ay ibinibigay sa Circuit Diagram.
Paliwanag sa Programming
Ang kumpletong code para sa Arduino Speedomete r ay ibinibigay sa dulo, narito ipinapaliwanag namin ang ilang mahahalagang bahagi nito.
Sa bahagi ng programa, isinama namin ang lahat ng kinakailangang mga silid- aklatan tulad ng stepper motor library, LiquidCrystal LCD library at idineklara na mga pin para sa kanila.
# isama
Pagkatapos nito, kumuha kami ng ilang mga variable at macros para sa pagsasagawa ng mga kalkulasyon. Ang mga kalkulasyon ay ipinaliwanag na sa naunang seksyon.
pabagu-bago ng isip byte REV; unsigned mahabang int rpm, RPM; unsigned long st = 0; matagal na hindi pinirmahan; int ledPin = 13; int led = 0, RPMlen, prevRPM; int flag = 0; int flag1 = 1; # tukuyin ang mga bladesInFan 2 float radius = 4.7; // inch int preStep = 0; float stepAngle = 360.0 / (float) stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280.0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Pagkatapos nito, pinasimulan namin ang LCD, Serial, makagambala at Stepper motor sa pag- andar ng pag- setup
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Speedometer"); pagkaantala (2000); attachInterrupt (0, RPMCount, RISING); }
Pagkatapos nito, nabasa namin ang rpm sa pag- andar ng loop at nagsasagawa ng isang pagkalkula upang makuha ang bilis at i-convert iyon sa mga hakbang upang patakbuhin ang stepper motor upang maipakita ang bilis sa analog form.
void loop () { readRPM (); radius = ((radius * 2.54) /100.0); // nagko-convert sa meter int Bilis = ((float) RPM * 60.0 * (2.0 * 3.14 * radius) /1000.0); // RPM sa 60 minuto, diameter ng gulong (2pi r) r ay radius, 1000 upang i-convert sa km int Hakbang = mapa (Bilis, minSpeed, maxSpeed, minStep, maxSteps); kung (flag1) { Serial.print (Bilis); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Bilis:"); lcd.print (Bilis); lcd.print ("Km / h"); flag1 = 0; } int currSteps = Mga Hakbang;int mga hakbang = currSteps-preSteps; preSteps = currSteps; myStepper.step (mga hakbang); }
Narito mayroon kaming pag- andar ngRRPM () upang makalkula ang RPM.
int readRPM () { if (REV> = 10 or millis ()> = st + 1000) // IT UPDATE AFETR EVERY 10 READINGS or 1 segundo in idle { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (millis () - oras)) * REV / bladesInFan; oras = millis (); REV = 0; int x = rpm; habang (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; pagkaantala (500); st = millis (); watawat1 = 1; } }
Panghuli, mayroon kaming gumagambala na gawain na responsable upang masukat ang rebolusyon ng bagay
walang bisa ang RPMCount () { REV ++; kung (humantong == LOW) { led = MATAAS; } iba pa { led = LOW; } digitalWrite (ledPin, led); }
Ito ay kung paano mo simpleng maitatayo ang isang Analog Speedometer gamit ang Arduino. Maaari rin itong maitayo gamit ang sensor ng Hall at ang bilis ay maipakita sa smart phone, sundin ang Arduino Speedometer tutorial na pareho.