Talaan ng mga Nilalaman:
- Hakbang 1: Ano ang Isang Suliranin sa Pagkilala sa Larawan at Paano Ko Ito nalutas
- Hakbang 2: Paano Gumagana ang Mga Bagay
- Hakbang 3: Mga Tool at Component
- Hakbang 4: Schematics (Fritzing)
- Hakbang 5: Proseso
- Hakbang 6: Ang Ilang Mga Larawan at Video Mula sa Iba't Ibang Mga Yugto
- Hakbang 7: Source Code
Video: 4x4 Demo ng isang Electronic Chessboard / Sa Arduino Mega + RFID Reader + Hall-effect Sensors: 7 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Kumusta mga gumagawa, Ako si Tahir Miriyev, nagtapos sa 2018 mula sa Middle East Technical University, Ankara / Turkey. Nag-major ako sa Applied Mathematics, ngunit palagi kong gustung-gusto ang paggawa ng mga bagay-bagay, lalo na kung kasangkot ang ilang gawaing kamay sa electronics, disenyo at programa. Salamat sa isang natatanging kurso sa prototyping, na inaalok sa aming kagawaran ng Disenyong Pang-industriya, nagkaroon ako ng pagkakataong gumawa ng isang bagay na talagang kawili-wili. Ang proyekto ay maaaring tratuhin bilang isang Term Project, tumagal sa tagal ng isang buong semester (4 na buwan). Ang mga mag-aaral ay naatasan ng isang gawain upang makahanap ng isang malikhaing diskarte sa pagdidisenyo ng mayroon nang mga produkto / demo at mapagtanto ang kanilang mga ideya gamit ang Arduino microcontrollers at sensor. Iniisip ko ang tungkol sa chess, at pagkatapos gumawa ng ilang pagsasaliksik sa mga matagumpay na proyekto, napansin ko na sa mga nakaraang tagagawa ng proyekto ay karaniwang ginagamit ang mga naka-set na engine ng chess (kung saan ang lahat ng mga galaw ng bawat pigura ay na-program sa core), kasama ang Raspberry Pi, ilang MUX 'es, mga switch ng LED at tambo. Gayunpaman, sa aking proyekto, nagpasiya akong alisin ang anumang panlabas na software sa mga tuntunin ng isang chess engine, at upang makahanap ng isang malikhaing solusyon para sa problema sa Pagkilala ng Larawan, gamit ang RFID reader, Hall-effect sensors at Arduino Mega.
Hakbang 1: Ano ang Isang Suliranin sa Pagkilala sa Larawan at Paano Ko Ito nalutas
Upang ilagay ito nang simple, ipagpalagay na mayroon kang isang chessboard na may isang "utak" = microcontroller, at kailangan mong maunawaan ang iyong board kung aling figure ang hawak mo sa iyong kamay at kung saan mo inilagay. Ito ang problema ng Pagkilala sa Larawan. Ang solusyon sa problemang ito ay walang halaga kapag mayroon kang isang chess engine na may lahat ng mga piraso na nakatayo sa kanilang mga paunang posisyon sa pisara. Bago ko ipaliwanag kung bakit ito totoo, hayaan mo akong gumawa ng mga pangungusap.
Para sa mga taong masigasig sa kung paano gumagana ang mga bagay dito, kailangan kong gumawa ng isang paglilinaw sa kung bakit kailangan namin ng mga switch ng tambo (o sa aking kaso, gumamit ako ng mga sensor ng Hall-effect): kung maglalagay ka ng isang magnet sa ilalim ng bawat piraso at kunin ito mula sa isang parisukat sa board (ipinapalagay na mayroong isang tambo switch sa ilalim ng bawat parisukat) dahil sa pagkakaroon / hindi pagkakaroon ng magnetic field sa itaas ng sensor, maaari mong maunawaan ang iyong tagapamahala kung mayroong / ay hindi isang piraso na nakatayo sa parisukat. Gayunpaman, hindi pa rin nito sinasabi sa microcontroller ang anumang bagay tungkol sa eksaktong piraso na nakatayo sa parisukat. Sinasabi lamang nito na mayroong / hindi isang piraso sa isang parisukat. Sa puntong ito, harap-harapan kaming may problema sa Pagkilala sa Larawan, na malulutas gamit ang isang chess engine, kasama ang lahat ng mga piraso na nakalagay sa kanilang mga paunang posisyon kapag nagsimula ang laro ng chess. Sa ganitong paraan "alam" ng microcontroller kung saan ang bawat piraso ay nakatayo mula sa simula, kasama ang lahat ng mga address na naayos sa memorya. Gayunpaman, nagdadala ito sa amin ng isang malaking limitasyon: hindi mo mapipili, sabihin natin, ang anumang bilang ng mga piraso at ilagay ang mga ito nang random kahit saan sa board at simulang pag-aralan ang laro. Palagi kang dapat magsimula mula sa simula, ang lahat ng mga piraso ay dapat na nasa board nang orihinal, dahil ito ang tanging paraan upang subaybayan ng microcontroller ang kanilang mga lokasyon kapag naangat mo ang isang piraso at inilagay sa ilang iba pang parisukat. Sa esensya, ito ang problemang napansin ko at nagpasyang gumana.
Ang aking solusyon ay medyo simple, bagaman malikhain. Naglagay ako ng isang RFID reader sa harap na bahagi ng isang board. Samantala, ikinabit ko hindi lamang isang pang-akit sa ilalim ng mga piraso ngunit may isang tag din ng RFID, na ang bawat piraso ay mayroong isang natatanging ID. Samakatuwid, bago ka maglagay ng figure sa anumang nais na parisukat, maaari mo munang hawakan ang piraso malapit sa RFID reader at hayaang mabasa nito ang ID, kilalanin ang piraso, i-save ito sa memorya, at pagkatapos ay mailalagay mo ito kung saan mo nais. Gayundin, sa halip na gamitin ang mga switch ng tambo, upang gawing simple ang disenyo ng circuit, gumamit ako ng mga sensor ng hall-effect, na gumagana nang katulad, na may pagkakaiba lamang sa pagpapadala ng 0 o 1 sa isang microcontroller bilang isang digital na data, na nangangahulugang "mayroong" o "walang" anumang piraso sa parisukat, ayon sa pagkakabanggit. Nagdagdag din ako ng mga LED (sa kasamaang palad ay hindi magkapareho ang kulay, walang mga), upang kapag itinaas mo ang piraso, lahat ng mga lokasyon na parisukat, kung saan mailalagay ang isang nakataas na piraso, ay magaan. Isipin ito bilang isang kasanayan sa pang-edukasyon para sa mga nag-aaral sa chess:)
Panghuli, nais kong tandaan na sa kabila ng katotohanang gumamit ako ng maraming mga diskarte, ang proyekto ay mananatiling simple at naiintindihan, hindi malalim na nagtrabaho o masalimuot. Wala akong sapat na oras upang magpatuloy sa 8x8 chessboard (din dahil ang 64 na mga sensor ng hall-effect ay magastos sa Turkey, sinakop ko ang lahat ng mga gastos na nauugnay sa projec), kaya't gumawa ako ng 4x4 na bersyon ng demo na may dalawang piraso lamang na nasubukan: Pawn at Queen. Sa halip na gumamit ng isang chess engine, nagsulat ako ng isang source code para sa Arduino, na bumubuo ng lahat ng makikita mo sa video sa ibaba.
Hakbang 2: Paano Gumagana ang Mga Bagay
Bago kami pumasa sa sunud-sunod na paliwanag kung paano nagawa ang proyekto, sa palagay ko mas mahusay na manuod ng isang nakalarawan na video at makakuha ng ilang madaling maunawaan na ideya sa pinag-uusapan ko.
Tandaan # 1: ang isa sa mga pulang LED (una sa hilera / mula kaliwa hanggang kanan) ay nasunog, hindi bale.
Tandaan # 2: kahit na malawakang ginagamit, mula sa aking karanasan masasabi ko na ang RFID Technology ay hindi ang pinakamahusay na ideya na gagamitin sa mga application ng DIY (syempre kung mayroon kang mga kahalili). Bago gumana ang lahat, gumawa ako ng maraming pagsubok sa paglalagay ng mga piraso ng chess na malapit sa mambabasa at maghintay hanggang sa mabasa nito nang tama ang ID. Ang serial port ay dapat na i-set up para doon dahil ang paraan ng pagbasa ng RFID reader sa ID ay isang sakit lamang sa ulo. Dapat subukan ng isa sa kanyang sarili upang maunawaan ang isyu. Kung kailangan mo ng karagdagang tulong, mangyaring ipadala sa akin ([email protected]) o idagdag sa skype (tahir.miriyev9r1), upang makapag-iskedyul kami ng isang pag-uusap at talakayin ang mga bagay sa mga detalye, maipapaliwanag ko nang buo ang lahat.
Hakbang 3: Mga Tool at Component
Narito ang listahan ng lahat ng mga tool na ginamit ko para sa proyekto: Mga elektronikong sangkap:
- Breadboard (x1)
- Omnidirectional A1126LUA-T (IC-1126 SW OMNI 3-SIP ALLEGRO) Mga sensor ng epekto sa hall (x16)
- Pangunahing 5 mm LEDs (x16)
- Jumper wires
- 125 kHz RFID Reader at Antenna (x1)
- Arduino Mega (x1)
- Mga RFID 3M na Tag (x2)
Iba pang mga materyales:
- Plexiglass
- Makintab na papel
- maikling tabla (kahoy)
- Acrylic na pintura (madilim na berde at creme) x2
- Manipis na karton
- 10 mm na bilog na magnet (x2)
- Mga piraso ng Pawn at Queen
- Mga materyal na panghinang at panghinang
Hakbang 4: Schematics (Fritzing)
Ang mga iskematika ay medyo kumplikado, alam ko, ngunit ang ideya ay dapat na malinaw. Ito ang unang pagkakataon na ginamit ko ang Fritzing (lubos na inirerekomenda ng paraan), marahil ang mga koneksyon ay maaaring iginuhit nang mas tumpak. Gayunpaman, nabanggit ko ang lahat sa loob ng mga iskema. Tandaan: Hindi ko mahanap ang eksaktong modelo ng RDIF Reader sa mga bahagi sa database ng Fritzing. Ang ginamit kong modelo ay 125Khz RFID module - UART. Maaari kang makahanap ng mga tutorial sa Youtube tungkol sa kung paano itakda ang modyul na ito gamit ang Arduino.
Hakbang 5: Proseso
Oras upang ipaliwanag kung paano ginawa ang mga bagay. Mangyaring sundin ang sunud-sunod na paglalarawan:
1. Kumuha ng isang 21x21 cm na karton, pati na rin ang ilang labis na karton upang i-cut at idikit ang mga dingding ng itaas na bahagi ng board, upang makagawa ng 16 na mga parisukat na may bilang na A B C D 1 2 3 4. Dahil manipis ang karton, maaari mong idikit ang 16 na mga sensor ng hall-effect sa bawat parisukat, na may 3 mga paa bawat isa at 16 na mga LED na may 2 mga binti bawat isa.
2. Matapos mong itakda ang mga bahagi, kakailanganin mong gumawa ng ilang paghihinang, upang maghinang ang mga binti ng mga sensor ng Hall-effect at mga LED sa mga jumper wires. Sa puntong ito, inirerekumenda ko ang pagpili ng mga may kulay na mga wire sa isang matalinong paraan, upang hindi ka malito sa mga + at - binti ng mga LED, pati na rin ang mga binti ng VCC, GND at PIN ng mga sensor ng Hall-effect. Siyempre, maaaring mag-print ang isang PCB na may mga sensor at kahit na ang WS2812 na uri ng LED na na-solder, ngunit nagpasya akong panatilihing simple ang proyekto at gumawa ng mas maraming "gawaing kamay". Sa puntong ito, ang kailangan mo lang gawin ay upang maghanda ng mga lubid at sensor, sa mga susunod na yugto na sumusunod mula sa Fritzing scheme na maaari mong makita kung saan mo dapat ikabit ang dulo ng bawat kawad. Sa ilang sandali, ang ilan sa kanila ay direktang pupunta sa mga PIN sa Arduino Mega (may sapat na sa kanila sa Arduino), ang iba sa breadboard at lahat ng mga GND ay maaaring solder sa isang solong piraso ng kurdon (paggawa ng karaniwang batayan) na kung saan sa paglaon dapat na konektado sa GND sa Arduino board. Isang mahalagang tala dito: Ang mga sensor ng epekto ng Hall ay OMNIDIRECTIONAL, na nangangahulugang hindi mahalaga kung aling poste ng isang pang-akit ang gaganapin malapit sa sensor, magpapadala ito ng 0 data habang mayroong ilang magnetic field na malapit at 1 kapag wala, katulad, ang magnet ay malayo (karagdagang kaysa sa sabihin nating 5 sm) mula sa sensor.
3. Maghanda ng katulad na 21x21 cm na karton at ayusin ang Arduino Mega at isang mahabang breadboard dito. Maaari mo ring i-cut ang 4 na pader ng anumang nais na taas mula sa karton muli, at idikit ito patayo sa dalawang layer ng 21x21 cm square boards. Pagkatapos ay sundin ang Fritzing Schematics upang i-set up ang mga bagay. Maaari mo ring itakda ang RFID reader pagkatapos mong magawa sa mga LED at sensor ng Hall-effect.
4. Subukan kung gumagana ang lahat ng mga LED at sensor, sa pamamagitan ng pagpapadala ng mga signal gamit ang mga pangunahing code. Huwag iwasan ang hakbang na ito dahil hahayaan ka nitong subukan kung gumagana ang lahat nang maayos at pumasa sa karagdagang konstruksyon ng board.
5. Ihanda ang Pawn at Queen, na may dalawang magneto ng isang 10 cm radius na nakakabit sa ibaba, pati na rin ang mga bilog na RFID tag. Sa paglaon, kakailanganin mong basahin ang mga ID ng mga tag na iyon mula sa Serial Screen sa Arduino IDE.
6. Kung ang lahat ay gumagana nang mahusay, maaari mong simulan ang pangunahing code at subukan ang mga bagay!
7 (opsyonal). Maaari kang gumawa ng ilang masining na gawa sa kahoy na magbibigay sa iyong demo ng isang mas natural na pagtingin. Nasa kalooban at imahinasyon mo iyan.
Hakbang 6: Ang Ilang Mga Larawan at Video Mula sa Iba't Ibang Mga Yugto
Hakbang 7: Source Code
Ngayon, kapag tapos na kami sa isang prototype, handa na kaming buhayin ito gamit ang Arduino code sa ibaba. Sinubukan kong mag-iwan ng maraming mga puna hangga't maaari, upang maunawaan ang proseso ng pagtatasa ng code. Upang maging matapat, ang lohika ay maaaring mukhang medyo kumplikado mula sa unang paningin, ngunit kung maghukay ka ng mas malalim sa lohika ng code, ito ay magiging mas masaklaw.
Tandaan: Katulad ng totoong chessboard, abstractly binilang ko ang mga parisukat bilang A1, A2, A3, A4, B1,…, C1,…, D1,.., D4. Gayunpaman, sa code, hindi praktikal na gamitin ang notasyong ito. Samakatuwid gumamit ako ng mga arrays at kinatawan ng mga parisukat bilang 00, 01, 02, 03, 10, 11, 12, 13,…, 32, 33 ayon sa pagkakabanggit.
Salamat sa iyong atensyon! Subukan ang lahat at maging malayang magsulat sa mga komento tungkol sa anumang uri ng mga pagkakamali na hindi ko nasagot, mga pagpapabuti, mungkahi atbp Inaasahan na marinig ang ilang mga opinyon tungkol sa proyekto. Kung kailangan mo ng anumang uri ng tulong sa proyekto, ipadala sa akin (miriyevt @ gmail.com) o idagdag sa skype (tahir.miriyev9r1), upang makapag-iskedyul kami ng isang pag-uusap at talakayin ang mga bagay sa mga detalye. Pinakamahusay ng swerte!