- Mga Materyal na Kinakailangan
- Paano gumagana ang isang Rotary Encoder?
- Mga uri ng Rotary Encoder
- KY-040 Rotary Encoder Pinout at paglalarawan
- Arduino Rotary Encoder Circuit Diagram
- Pag-program ng iyong Arduino para sa Rotary Encoder
- Paggawa ng Rotary Encoder kasama si Arduino
Ang Rotary encoder ay isang input device na makakatulong sa gumagamit na makipag-ugnay sa isang system. Mukhang mas katulad ng isang potensyomiter sa Radio ngunit naglalabas ito ng isang tren ng mga pulso na ginagawang natatangi ang application nito. Kapag pinaikot ang knob ng Encoder ay umiikot ito sa anyo ng maliliit na hakbang na tumutulong dito upang magamit para sa pagkontrol ng stepper / Servo motor, pag-navigate sa isang pagkakasunud-sunod ng menu at Pagtaas / pagbawas ng halaga ng isang numero at marami pa.
Sa artikulong ito matututunan natin ang tungkol sa iba't ibang uri ng Rotary Encoder at kung paano ito gumagana. Kami ay din interface ito sa Arduino at kontrolin ang halaga ng isang integer sa pamamagitan ng pag-ikot ng Encoder at ipakita ang halaga nito sa isang 16 * 2 LCD screen. Sa pagtatapos ng tutorial na ito magiging komportable ka sa paggamit ng isang Rotary Encoder para sa iyong mga proyekto. Magsimula na tayo…
Mga Materyal na Kinakailangan
- Rotary Encoder (KY-040)
- Arduino UNO
- 16 * 2 Alphanumeric LCD
- Potensyomiter 10k
- Breadboard
- Mga kumokonekta na mga wire
Paano gumagana ang isang Rotary Encoder?
Ang Rotary Encoder ay isang electromekanical transducer, nangangahulugang binabago nito ang mga paggalaw ng mekanikal sa mga elektronikong pulso. Binubuo ito ng isang knob kung saan kapag umiikot ay lilipat ng hakbang-hakbang at makakagawa ng isang pagkakasunud-sunod ng mga tren ng pulso na may paunang natukoy na lapad para sa bawat hakbang. Mayroong maraming mga uri ng Encoder bawat isa ay may sariling mekanismo sa pagtatrabaho, malalaman natin ang tungkol sa mga uri sa paglaon ngunit sa ngayon ipaalam lamang sa amin na mag-concentrate lamang sa KY040 Incremental Encoder dahil ginagamit namin ito para sa aming tutorial.
Ang panloob na istrakturang mekanikal para sa Encoder ay ipinapakita sa ibaba. Karaniwan itong binubuo ng isang pabilog na disc (kulay-abong kulay) na may conductive pad (kulay na tanso) na nakalagay sa tuktok ng pabilog na disc na ito. Ang mga conductive pad na ito ay inilalagay sa pantay na distansya tulad ng ipinakita sa ibaba. Ang Mga pin ng output ay naayos sa tuktok ng pabilog na disc na ito, sa paraang kapag umiikot ang knob ay nakikipag-ugnay ang mga conductive pad na nakikipag-ugnay sa mga output pin. Narito ang dalawang output pin, Output A at Output B tulad ng ipinakita sa figure sa ibaba.
Ang output waveform na ginawa ng Output pin A at Output B ay ipinapakita sa asul at berde na kulay ayon sa pagkakabanggit. Kapag ang conductive pad ay direkta sa ilalim ng pin napupunta ito mataas na nagreresulta sa oras at kapag gumagalaw ang conductive pad ang pin ay bumababa na nagreresulta sa off time ng waveform na ipinakita sa itaas. Ngayon, kung bibilangin namin ang bilang ng mga pulso magagawa nating matukoy kung gaano karaming mga hakbang ang inilipat ng Encoder.
Ngayon ay maaaring lumitaw ang tanong na, bakit kailangan natin ng dalawang signal ng pulso kung ang isa ay sapat na upang mabilang ang bilang ng mga hakbang na ginawa habang umiikot ang knob. Ito ay dahil kailangan nating kilalanin kung aling direksyon ang pinaikot na knob. Kung titingnan mo ang dalawang pulso maaari mong mapansin na pareho silang 90 ° wala sa phase. Samakatuwid kapag ang knob ay pinaikot nang pakanan sa oras ang Output A ay magiging mataas muna at kapag ang knob ay pinaikot na anti-clockwise ang Output B ay magiging mataas muna.
Mga uri ng Rotary Encoder
Maraming uri ng rotary encoder sa merkado na maaaring pumili ang taga-disenyo ng isa alinsunod sa kanyang aplikasyon. Ang mga pinakakaraniwang uri ay nakalista sa ibaba
- Karagdagang Encoder
- Ganap na Encoder
- Magnetic Encoder
- Optical Encoder
- Laser Encoder
Ang mga encoder na ito ay inuri batay sa signal ng Output at teknolohiya ng sensing, ang Incremental Encoder at Absolute Encoder ay inuri batay sa Output signal at ang Magnetic, Optical at Laser Encoder ay inuri batay sa Teknolohiya ng Sensing. Ang Encoder na ginamit dito ay isang Incremental type Encoder.
KY-040 Rotary Encoder Pinout at paglalarawan
Ang mga pinout ng KY-040 Incremental type rotary encoder ay ipinapakita sa ibaba
Ang unang dalawang pin (Ground at Vcc) ay ginagamit upang paandarin ang Encoder, karaniwang ginagamit ang supply ng 5V. Bukod sa pag-ikot ng knob sa orasan na matalino at laban sa pakaliwa na direksyon, ang encoder ay mayroon ding switch (Aktibo mababa) na maaaring mapindot sa pamamagitan ng pagpindot sa knob sa loob. Ang signal mula sa switch na ito ay nakuha sa pamamagitan ng pin 3 (Switch). Sa wakas mayroon itong dalawang mga output pin na gumagawa ng mga waveform tulad ng tinalakay na sa itaas. Alamin natin ngayon kung paano i-interface ito sa Arduino.
Arduino Rotary Encoder Circuit Diagram
Ang kumpletong diagram ng circuit para sa Interfacing Rotary Encoder na may Arduino ay ipinapakita sa larawan sa ibaba
Ang Rotary Encoder ay may 5 mga pin sa pagkakasunud-sunod na ipinakita sa label sa itaas. Ang unang dalawang pin ay Ground at Vcc na konektado sa Ground at + 5V pin ng Arduino. Ang switch ng encoder ay konektado sa digital pin D10 at mahila din nang mataas bagaman isang 1k risistor. Ang dalawang output pin ay konektado sa D9 at D8 ayon sa pagkakabanggit.
Upang maipakita ang halaga ng variable na tataas o babaan ng pag-ikot ng Rotary encoder kailangan namin ng isang module ng pagpapakita. Ang ginamit dito ay karaniwang magagamit na 16 * 2 Alpha numeric LCD display. Ikonekta namin ang display upang mapatakbo sa 4-bit mode at pinalakas ito gamit ang + 5V pin ng Arduino. Ginagamit ang Potentiometer upang ayusin ang kaibahan ng LCD display. Kung nais mong malaman ang tungkol sa pagpapakita ng Interfacing LCD sa Arduino sundin ang link. Ang kumpletong circuit ay maaaring maitayo sa tuktok ng isang breadboard, ang aking hitsura ng isang bagay na tulad nito sa ibaba kapag tapos na ang lahat ng mga koneksyon.
Pag-program ng iyong Arduino para sa Rotary Encoder
Ito ay medyo madali at tuwid na susulong upang mai-program ang Arduino board para sa interfacing ng isang Rotary Encoder dito kung naintindihan mo ang nagtatrabaho prinsipyo ng isang Rotary Encoder. Kailangan lang naming basahin ang bilang ng pulso upang matukoy kung gaano karaming mga liko ang ginawa ng encoder at suriin kung aling pulso ang tumaas nang una upang hanapin kung aling direksyon ang pinaikot na encoder. Sa tutorial na ito ipapakita namin ang bilang na nagdaragdag o nababawasan sa unang hilera ng LCD at ang direksyon ng Encoder sa pangalawang linya. Ang kumpletong programa para sa paggawa ng pareho ay matatagpuan sa ilalim ng pahinang ito gamit ang isang Demonstration Video, hindi ito nangangailangan ng anumang silid-aklatan. Ngayon, hatiin natin ang programa sa maliliit na tipak upang maunawaan ang gumagana.
Dahil gumamit kami ng isang LCD display, isinasama namin ang Liquid crystal library na kung saan ay bilang default na naroroon sa Arduino IDE. Pagkatapos ay tinutukoy namin ang mga pin para sa pagkonekta ng LCD sa Arduino. Sa wakas ay pinasimulan namin ang LCD display sa mga pin na iyon.
# isama
Susunod sa loob ng pag- andar ng pag- setup , nagpapakita kami ng isang pambungad na mensahe sa LCD screen, at pagkatapos ay maghintay ng 2 segundo upang ang mensahe na iyon ay mabasa ng gumagamit. Ito ay upang matiyak na gumagana nang maayos ang LCD.
lcd.print ("Rotary Encoder"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("With Arduino"); // Intro Message line 2 pagkaantala (2000); lcd.clear ();
Ang Rotary encoder ay may tatlong mga output pin na magiging isang INPUT pin para sa Arduino. Ang tatlong pin na ito ay ang Switch, Output A at Output B ayon sa pagkakabanggit. Ang mga ito ay ipinahayag bilang Input gamit ang pinMode pag-andar tulad ng ipinapakita sa ibaba.
// pin Mode deklarasyon pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Sa loob ng walang bisa na pag- andar ng pag- setup , binasa namin ang katayuan ng output Isang pin upang suriin ang huling katayuan ng pin. Gagamitin namin pagkatapos ang impormasyong ito upang ihambing sa bagong halaga upang suriin kung aling pin (Output A o Output B) ang naging mataas.
Nakaraan_Output = digitalRead (Encoder_OuputA); // Basahin ang inital na halaga ng Output A
Sa wakas sa loob ng pangunahing pag- andar ng loop , kailangan nating ihambing ang halaga ng Output A at Output B sa Naunang Output upang suriin kung alin ang unang mataas. Maaari itong magawa sa pamamagitan lamang ng paghahambing ng halaga ng kasalukuyang output ng A at B sa nakaraang output tulad ng ipinakita sa ibaba.
kung (digitalRead (Encoder_OuputA)! = Nakaraan_Output) { kung (digitalRead (Encoder_OuputB)! = Nakaraan_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Clockwise"); }
Sa code sa itaas ang pangalawa kung ang kundisyon ay naisakatuparan kung ang Output B ay nagbago mula sa nakaraang output. Sa kasong iyon ang halaga ng variable ng encoder ay nadagdagan at ipinapakita ng LCD na ang encoder ay paikutin sa direksyon sa orasan . Katulad din na kung na kung kundisyon nabigo, sa kasunod pa ang kalagayan namin pagbawas sa variable at display na ang encoder ay Pinaikot sa paikot sa kaliwa direksyon. Ang code para sa pareho ay ipinapakita sa ibaba.
iba pa ang { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Anti - Clockwise"); } }
Sa wakas, sa dulo ng pangunahing loop kailangan naming i-update ang nakaraang halaga ng output na may kasalukuyang halaga ng output upang ang loop ay maaaring ulitin sa parehong lohika. Ang sumusunod na code ay gumagawa ng pareho
Nakaraan_Output = digitalRead (Encoder_OuputA);
Ang isa pang opsyonal na bagay ay upang suriin kung ang switch sa Encoder ay pinindot. Maaari itong subaybayan sa pamamagitan ng pag-check sa switch pin sa rotary coder. Ang pin na ito ay isang aktibong mababang pin, nangangahulugang mabababa ito kapag pinindot ang pindutan. Kung hindi pinindot ang pin ay mananatiling mataas, gumamit din kami ng isang pull up risistor upang matiyak na ang pananatiling mataas kapag ang switch ay hindi pinindot sa gayon pag-iwas sa kondisyon ng lumulutang na punto.
kung (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Lumipat pinindot"); }
Paggawa ng Rotary Encoder kasama si Arduino
Kapag handa na ang hardware at code, i-upload lamang ang code sa Arduino board at palakasin ang Arduino Board. Maaari mo itong mai-power sa pamamagitan ng USB cable o gumamit ng 12V adapter. Kapag pinapagana ang LCD dapat ipakita ang intro message at pagkatapos ay blangko. Paikutin ang rotary encoder at dapat mong makita ang halagang magsimulang madagdagan o mabawasan batay sa direksyong paikutin mo. Ipapakita sa iyo ng pangalawang linya kung ang encoder ay paikutin sa direksyon pakanan o kontra-relo. Ang larawan sa ibaba ay nagpapakita ng pareho
Gayundin kapag pinindot ang pindutan, ipapakita ng pangalawang linya na pinindot ang pindutan. Ang kumpletong pagtatrabaho ay matatagpuan sa video sa ibaba. Ito ay isang sample na programa lamang upang mai-interface ang Encoder sa Arduino at suriin kung gumagana ito tulad ng inaasahan. Kapag nakarating ka dito dapat mong magamit ang encoder para sa anuman sa iyong mga proyekto at programa nang naaayon.
Inaasahan kong naintindihan mo ang tutorial at mga bagay na nagtrabaho tulad ng dapat. Kung mayroon kang anumang mga problema gamitin ang seksyon ng komento o ang mga forum para sa panteknikal na tulong.