- Infrared Slotted Optical LM-393 Speed Sensor Module
- Pagsukat sa Bilis at Distansya na Naglakbay upang Kalkulahin ang Pamasahe
Ngayon ang mga digital meter ay pinapalitan ang mga analog meter sa bawat sektor maging ang metro ng kuryente o metro ng pamasahe ng taxi. Ang pangunahing dahilan para doon ay ang mga metro ng analog ay may mga bahagi ng mekanikal na may posibilidad na magsuot kapag ginamit nang mahabang panahon at hindi sila tumpak tulad ng mga digital na Metro.
Ang isang magandang halimbawa para dito ay ang analog speedometer at odometer na ginagamit sa mga lumang motor bikes para sa pagsukat ng bilis at distansya na nalakbay. Mayroon silang mga espesyal na bahagi na tinatawag na pinion at pag-aayos ng rack kung saan ginagamit ang isang cable upang paikutin ang pin ng speedometer kapag pinaikot ang gulong. Masisira ito kapag gumagamit ng mahabang panahon at nangangailangan din ng kapalit at pagpapanatili.
Sa digital meter, sa halip na gumamit ng mga piyesa ng makina, ang ilang mga sensor tulad ng optical interrupter o hall sensor ay ginagamit upang makalkula ang bilis at distansya. Ito ay mas tumpak kaysa sa mga metro ng analog at hindi nangangailangan ng anumang pagpapanatili sa mahabang panahon. Nakagawa kami dati ng maraming mga digital na proyekto ng speedometer na gumagamit ng iba't ibang mga sensor:
- DIY Speedometer gamit ang Arduino at Pagproseso ng Android App
- Digital Speedometer at Odometer Circuit gamit ang PIC Microcontroller
- Pagsukat sa Bilis, Distansya at Angle para sa Mga Mobile Robots gamit ang LM393 Sensor (H206)
Ngayon, sa tutorial na ito gagawa kami ng isang prototype ng isang Digital Taxi Fare Meter gamit ang Arduino. Kinakalkula ng proyektong ito ang bilis at distansya na naglakbay ng gulong ng taxi at patuloy na ipinapakita sa 16x2 LCD display. At batay sa paglalakbay sa distansya ay bumubuo ito ng halaga ng pamasahe kapag pinindot namin ang pindutan ng push.
Ipinapakita ng imahe sa ibaba ang kumpletong pag-set up ng Digital Taxi Meter Project
Ang prototype na ito ay may isang RC car chassis na may module ng Speed sensor at isang encoder wheel na nakakabit sa motor. Kapag nasusukat ang bilis, masusukat natin ang distansya na nalakbay at hanapin ang halaga ng halaga ng pamasahe sa pamamagitan ng pagpindot sa pindutan ng push. Maaari naming itakda ang bilis ng gulong gamit ang potentiometer. Upang matuto nang higit pa tungkol sa paggamit ng LM-393 Speed Sensor module na may Arduino, sundin ang link. Tingnan natin ang isang maikling pagpapakilala ng module ng Speed sensor.
Infrared Slotted Optical LM-393 Speed Sensor Module
Ito ay isang module ng uri ng slot na maaaring magamit para sa pagsukat ng bilis ng pag-ikot ng mga gulong ng encoder. Gumagana ang module ng Speed sensor na ito batay sa uri ng slot na optical interrupter na kilala rin bilang optical source sensor. Ang modyul na ito ay nangangailangan ng boltahe na 3.3V hanggang 5V at gumagawa ng digital output. Kaya maaari itong i-interfaced sa anumang microcontroller.
Ang sensor ng Infrared Light ay binubuo ng light source (IR-LED) at isang phototransistor sensor. Parehong inilalagay na may isang maliit na puwang sa pagitan nila. Kapag ang isang bagay ay inilalagay sa pagitan ng puwang ng IR LED at phototransistor ay makagambala nito ang ilaw na sinag na sanhi ng phototransistor na huminto sa pagdaan ng kasalukuyang.
Kaya sa sensor na ito isang slotted disc (Encoder Wheel) ang ginagamit na maaaring mai-attach sa isang motor at kapag umiikot ang gulong gamit ang motor ay nakakagambala ng light beam sa pagitan ng IR LED at phototransistor na gumagawa ng output On and Off (Lumilikha ng Pulses).
Sa gayon gumagawa ito ng TAAS na output kapag mayroong nakakagambala sa pagitan ng mapagkukunan at sensor (Kapag ang anumang bagay ay inilalagay sa pagitan) at gumagawa ng LOW output kapag walang inilagay na bagay. Sa modyul mayroon kaming isang LED upang ipahiwatig na sanhi ng optikal na pagkagambala.
Ang modyul na ito ay may kasamang LM393 Comparator IC na ginagamit upang makabuo ng tumpak na HIGH at LOW signal sa OUTPUT. Sa gayon ang modyul na ito ay tinatawag na minsan bilang LM393 Speed sensor.
Pagsukat sa Bilis at Distansya na Naglakbay upang Kalkulahin ang Pamasahe
Upang masukat ang bilis ng pag-ikot kailangan nating malaman ang bilang ng mga puwang na naroroon sa encoder wheel. Mayroon akong isang encoder wheel na may 20 puwang dito. Kapag paikutin nila ang isang kumpletong pag-ikot mayroon kaming 20 pulso sa output. Kaya upang makalkula ang bilis kailangan namin ng bilang ng mga pulso na ginawa bawat segundo.
Halimbawa
Kung mayroong 40 pulso sa isang segundo, kung gayon
Bilis = Noo. Ng mga pulso / Bilang ng mga puwang = 40/20 = 2RPS (Rebolusyon bawat segundo)
Para sa pagkalkula ng bilis sa RPM (Mga Rebolusyon bawat Minuto) magparami sa 60.
Bilis sa RPM = 2 X 60 = 120 RPM (Mga Rebolusyon bawat Minuto)
Pagsukat sa Distansya
Ang pagsukat sa distansya na nilalakbay ng gulong ay napakasimple. Bago ang pagkalkula ng distansya, dapat malaman ang bilog ng gulong.
Libot ng gulong = π * d
Kung saan d ang diameter ng gulong.
Halaga ng π ay 3.14.
Mayroon akong isang gulong (RC car wheel) na may lapad na 6.60 cm kaya ang paligid ay (20.7 cm).
Kaya upang makalkula ang distansya na nilakbay, i-multiply lamang ang hindi ng mga pulso na nakita na may bilog.
Naglakbay sa Distansya = Pag-ikot ng Gulong x (Bilang ng Mga Pulso / Bilang ng mga puwang)
Kaya't kapag ang isang gulong ng Lupon na 20.7cm ay tumatagal ng 20 pulso na isang pag-ikot ng encoder wheel pagkatapos ang distansya na nilakbay ng gulong ay kinakalkula ng
Distansya ng paglalakbay = 20.7 x (20/20) = 20.7cm
Upang makalkula ang distansya sa metro hatiin ang distansya sa halagang cm sa pamamagitan ng 100.
Tandaan: Ito ay isang maliit na gulong ng kotseng RC, sa real time na ang mga kotse ay may mas malaking gulong kaysa dito. Kaya't ipinapalagay ko na ang paligid ng gulong ay magiging 230cm sa tutorial na ito.
Kinakalkula ang Pamasahe Batay sa Paglalakbay sa Distansya
Upang makuha ang kabuuang halaga ng pamasahe, i-multiply ang distansya na nalakbay gamit ang rate ng pamasahe (halaga / metro).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Susunod na maglakip ng dalawang panlabas na pagkagambala. Ginagawa ng unang makagambala ang Arduino pin 2 bilang makagambala na pin at tumatawag sa ISR (bilang) kapag may nakita na RISING (LOW TO HIGH) sa pin 2. Ang pin 2 na ito ay konektado sa output ng D0 ng module ng bilis ng sensor.
At ang pangalawa ay ginagawang Arduino pin 3 bilang nakakagambala na pin at tumatawag sa ISR (generageage) kapag ang HIGH ay napansin sa pin3. Ang pin na ito ay konektado sa pindutan ng push na may isang pull down risistor.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Susunod na tingnan natin ang tungkol sa ISR na ginamit namin dito:
ISR1- count () Ang ISR ay tinawag kapag ang isang RISING (LOW TO HIGH) ay nangyari sa pin 2 (konektado sa speed sensor).
void count () // ISR para sa mga bilang mula sa speed sensor { counter ++; // taasan ang halaga ng counter ng isang pag- ikot ++; // Taasan ang halaga ng pag-ikot ng isang pagkaantala (10); }
Ang ISR2- timerIsr () ISR ay tinatawag na bawat segundo at isagawa ang mga linyang naroroon sa loob ng ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); bilis ng float = (counter / 20.0) * 60.0; float rotations = 230 * (pag-ikot / 20); rotationinm = rotations / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Bilis (RPM):"); lcd.print (bilis); counter = 0; int analogip = analogRead (A0); int motorspeed = mapa (analogip, 0,1023,0,255); analogWrite (5, motorspeed); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Naglalaman ang pagpapaandar na ito ng mga linya na talagang naalis muna ang Timer1 at Interrupt pin2 muna dahil mayroon kaming mga LCD na pahayag na naka-print sa loob ng ISR.
Para sa pagkalkula ng SPEED sa RPM ginagamit namin sa ibaba ang code kung saan ang 20.0 ay ang no ng mga puwang na naka-preset sa encoder wheel.
bilis ng float = (counter / 20.0) * 60.0;
At para sa pagkalkula ng distansya sa ibaba ng code ay ginagamit:
float rotations = 230 * (pag-ikot / 20);
Narito ang bilog ng gulong ay ipinapalagay bilang 230cm (dahil normal ito para sa mga real time na kotse)
Susunod na i-convert ang distansya sa m sa pamamagitan ng paghahati ng distansya ng 100
rotationinm = rotations / 100;
Pagkatapos nito ay ipinapakita namin ang SPEED at DISTANCE sa LCD display
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Bilis (RPM):"); lcd.print (bilis);
MAHALAGA: Kailangan naming i-reset ang counter sa 0 dahil kailangan naming makakuha ng bilang ng mga plus na nakita para sa bawat segundo kaya ginagamit namin ang linyang ito
counter = 0;
Susunod na basahin ang analog pin A0 at i-convert ito sa digital na halaga (0 hanggang 1023) at karagdagang mapa ang mga halagang iyon sa 0-255 para sa output ng PWM (Ang bilis ng pagtatakda ng motor) at sa wakas isulat ang mga halagang PWM na iyon gamit ang analogWrite function na konektado sa ULN2003 Motor IC.
int analogip = analogRead (A0); int motorspeed = mapa (analogip, 0,1023,0,255); analogWrite (5, motorspeed);
ISR3: ngahasilkeun () Ang ISR ay ginagamit upang makabuo ng halaga ng pamasahe batay sa distansya na nilakbay. Ang ISR na ito ay tinawag kapag ang nakakagambala na pin 3 ay napansin MATAAS (Kapag pinindot ang pindutan ng push). Ang pagpapaandar na ito ay nagtatanggal ng nakakagambala sa pin 2 at gumagambala ang timer at pagkatapos ay i-clear ang LCD.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); i-pin sa 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); float rupees = rotationinm * 5; lcd.print (rupees); lcd.setCursor (0,1); lcd.print ("Rs 5 bawat metro"); }
Matapos ang distansya na iyon ay naglakbay ay pinarami ng 5 (Gumamit ako ng 5 para sa rate na INR 5 / meter). Maaari kang magbago alinsunod sa iyong nais.
float rupees = rotationinm * 5;
Matapos ang pagkalkula ng halaga ng halaga ipakita ito sa LCD display na konektado sa Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupees); lcd.setCursor (0,1); lcd.print ("Rs 5 bawat metro");
Kumpletong code at pagpapakita Ang video ay ibinibigay sa ibaba.
Maaari mo pang pagbutihin ang prototype na ito sa pamamagitan ng pagtaas ng kawastuhan, katatagan at pagdaragdag ng higit pang mga tampok tulad ng android app, digital na pagbabayad atbp at paunlarin ito bilang isang produkto.