Talaan ng mga Nilalaman:

Arduino at Touchpad Tic Tac Toe: 8 Hakbang (na may Mga Larawan)
Arduino at Touchpad Tic Tac Toe: 8 Hakbang (na may Mga Larawan)

Video: Arduino at Touchpad Tic Tac Toe: 8 Hakbang (na may Mga Larawan)

Video: Arduino at Touchpad Tic Tac Toe: 8 Hakbang (na may Mga Larawan)
Video: Arduino - Tic Tac Toe Game with Touchpad 2024, Setyembre
Anonim
Arduino at Touchpad Tic Tac Toe
Arduino at Touchpad Tic Tac Toe

O, isang ehersisyo sa input at output multiplexing, at nagtatrabaho kasama ang mga piraso. At isang pagsusumite para sa paligsahan ng Arduino.

Ito ay isang pagpapatupad ng isang laro ng tic tac toe gamit ang isang 3x3 na hanay ng mga bicoloured LEDs para sa isang display, isang simpleng resistive touchpad, at isang Arduino upang maitali ang lahat. Upang makita kung paano ito gumagana, suriin ang video: Ano ang hinihiling ng proyektong ito: Mga bahagi at magagamit Isang perf board (o strip board) Siyam na bicoloured LEDs, karaniwang cathode Siyam na magkaparehong resistors, sa saklaw na 100-220 ohm Anim na magkaparehong resistors, sa 10kohm - Saklaw na 500kohm Isang solong poste, doble na switch ng itapon Isang kumpol ng mga header pin Isang grupo ng wire na elektrikal Isang maliit na square sheet ng transparent acrylic, ~ 1 mm ang kapal, 8 cm sa gilid I-clear ang malagkit na tape Heatshrinks (opsyonal) Lahat ng nasa itaas ay karaniwang mga item, ang kabuuang gastos ay hindi dapat lumagpas sa USD $ 20. Ang Mga Talaan ng Isang Arduino setup (Arduino Duemilanove, Arduino IDE, computer, USB cable) Mga karaniwang kagamitang elektrikal (multimeter, solder gun, wire snips, wire cutter) Lahat ng nauugnay sa Arduino ay maaaring matatagpuan sa https://www.arduino.cc. Patuloy sa pagbuo!

Hakbang 1: Pag-kable sa Up ng LED Matrix

Pagkabit ng LED Matrix
Pagkabit ng LED Matrix
Pagkabit ng LED Matrix
Pagkabit ng LED Matrix

Para sa isang LED sa ilaw, ang parehong mga lead ay dapat na konektado. Kung dapat naming italaga ang isang pares ng mga pin sa bawat isa sa 18 LEDs (9 pula, 9 berde), mabilis naming mauubusan ng mga pin sa Arduino. Gayunpaman, sa multiplexing, matutugunan namin ang lahat ng mga LED na may lamang 9 na mga pin! Upang magawa ito, ang mga LED ay naka-wire sa isang crossbar fashion, tulad ng ipinakita sa unang pigura. Ang mga LED ay naka-grupo sa mga haligi ng tatlo, at ang kanilang mga cathode ay naka-grupo sa mga hilera ng anim. Sa pamamagitan ng pagtatakda ng isang partikular na linya ng anode na mataas, at isang partikular na linya ng katod na mababa, at pagkakaroon ng isang mataas na impedance sa lahat ng iba pang mga linya ng anode at cathode, maaari nating piliin kung aling LED ang nais nating naiilawan, dahil mayroon lamang isang posibleng landas na maaaring gawin ng kasalukuyang. Halimbawa, sa pangalawang pigura, itinatakda ang berdeng anode 1 linya na mataas, at ang linya ng cathode 1 na mababa, ang ilaw sa kaliwang berdeng LED ay ilaw.. Ang kasalukuyang landas sa kasong ito ay ipinapakita sa asul. Ngunit paano kung nais mong sindihan ang higit sa isang LED sa iba't ibang mga linya? Gagamitin namin ang pagtitiyaga ng paningin upang makamit ito. Sa pamamagitan ng pagpili ng mga pares ng mga linya ng LED nang napakabilis, nagbibigay ito ng ilusyon na ang lahat ng mga napiling LEDs ay naiilawan nang sabay.

Hakbang 2: LED Matrix Layout

Layout ng Matrix ng LED
Layout ng Matrix ng LED
Layout ng Matrix ng LED
Layout ng Matrix ng LED

Ipinapakita ng diagram ng circuit sa ibaba kung paano pisikal na naka-wire ang mga LED (G1-G9: berdeng LEDs, R1-R9: pulang LEDs). Ang diagram na ito ay para sa solong pula at berde na mga LED, kung gumagamit ka ng bicoloured na karaniwang cathode red / green LEDs, mayroon lamang isang cathode leg bawat pula / berde na pares na kailangan mong mag-wire up. Ang pula at berdeng mga linya ng anode ay papunta sa mga PWM na pin. ng Arduino (mga pin 3, 5, 6, 9, 10, 11 sa Duemilanove), upang magkaroon tayo ng mga epekto tulad ng pagkupas sa paglaon. Ang mga linya ng katod ay papunta sa mga pin 4, 7 at 8. Ang bawat isa sa mga linya ng katod at anode ay may 100 ohm resistors para sa proteksyon.

Hakbang 3: Pagtugon sa LED Matrix

Para sa tic tac toe code, kakailanganin nating maiimbak ang sumusunod na impormasyon tungkol sa mga LED: - kung ang isang LED ay naiilawan o hindi - kung naiilawan, kung pula o berde Ang isang paraan ng paggawa nito ay ang pag-iimbak ng estado sa isang 9-cell array, gamit ang tatlong mga digit upang kumatawan sa estado (0 = off, 1 = pula sa, 2 = berde sa). Sa tuwing kailangan nating suriin ang mga estado ng LED, halimbawa, upang suriin kung mayroong kondisyon sa panalo, kakailanganin nating mag-ikot sa pamamagitan ng array. Ito ay isang magagamit na pamamaraan, ngunit sa halip clunky. Ang isang mas streamline na pamamaraan ay ang paggamit ng dalawang grupo ng siyam na piraso. Ang unang pangkat ng siyam na piraso ay nag-iimbak ng katayuan na on-off ng mga LED, at ang pangalawang pangkat ng siyam na piraso ay nag-iimbak ng kulay. Pagkatapos, ang pagmamanipula ng mga estado ng LED ay nagiging isang bagay ng kaunting aritmetika at paglilipat. Narito ang isang nagawang halimbawa. Sabihin nating iguhit natin ang aming tic tac toe grid na graphic, at unang gamitin ang 1s at 0 upang kumatawan sa katayuan na on-off (1 ay nasa, 0 ay naka-off): 000 000 = matrix na may ilalim na kaliwang LED na naiilawan 100 100 010 = matrix na may dayagonal Ang mga LED ay naiilawan 001 Kung binibilang namin ang mga cell mula sa kaliwang bahagi sa ibaba, maaari naming isulat ang mga representasyon sa itaas bilang isang serye ng mga piraso. Sa unang kaso, iyon ay 100000000, at sa pangalawang kaso, ito ay 001010100. Kung isasaalang-alang natin ito bilang mga binary na representasyon, kung gayon ang bawat serye ng mga bit ay maaaring ibigay sa isang solong numero (256 sa unang kaso, 84 sa pangalawang kaso). Kaya sa halip na gumamit ng isang array upang maiimbak ang estado ng matrix, maaari lamang kaming gumamit ng isang solong numero! Katulad nito, maaari nating katawanin ang kulay ng LED sa parehong paraan (ang 1 ay pula, ang 0 ay berde). Ipagpalagay muna natin na ang lahat ng mga LED ay naiilawan (kaya ang katayuan na on-off ay kinakatawan ng 511). Pagkatapos ay kinakatawan ng matrix sa ibaba ang estado ng kulay ng mga LED: 010 berde, pula, berde 101 pula, berde, pula 010 berde, pula, berde Ngayon, kapag ipinapakita ang LED matrix, kailangan lang nating paikutin ang bawat isa sa mga piraso, una sa on-off na estado, at pagkatapos ay sa estado ng kulay. Halimbawa, sabihin nating ang aming on-off na estado ay 100100100, at ang estado ng kulay ay 010101010. Narito ang aming algorithm para sa pag-iilaw ng LED matrix: Hakbang 1. Gumawa ng isang medyo bahagyang karagdagan ng on-off na estado na may isang binary 1 (ie bit masking). Hakbang 2. Kung totoo, ang LED ay naiilawan. Gumawa ngayon ng kaunting pagdaragdag ng estado ng kulay na may isang binary 1. Hakbang 3. Kung totoo ito, sindihan ang pulang LED. Kung ito ay mali, sindihan ang berdeng LED. Hakbang 4. Paglipat ng parehong estado ng on-off at estado ng kulay, isang piraso sa kanan (ie medyo paglilipat). Hakbang 5. Ulitin ang Hakbang 1 - 4 hanggang sa mabasa ang lahat ng siyam na piraso. Tandaan na pinupunan namin ang matrix paatras - nagsisimula kami sa cell 9, pagkatapos ay magpatuloy pababa sa cell 1. Gayundin, ang mga on-off at kulay na estado ay nakaimbak bilang isang hindi naka-sign na uri ng integer (salita) sa halip na isang naka-sign na uri ng integer. Iyon ay dahil sa medyo paglilipat, kung hindi kami nag-iingat, maaaring hindi sinasadyang mabago natin ang palatandaan ng variable. Nakalakip ang code para sa pag-iilaw ng LED matrix.

Hakbang 4: Pagbubuo ng Touch Pad

Pagbuo ng Touch Pad
Pagbuo ng Touch Pad
Pagbuo ng Touch Pad
Pagbuo ng Touch Pad
Pagbuo ng Touch Pad
Pagbuo ng Touch Pad
Pagbuo ng Touch Pad
Pagbuo ng Touch Pad

Ang touchpad ay itinayo mula sa isang sheet ng manipis na acrylic, sapat na malaki upang mai-overlay ang LED matrix. Pagkatapos, i-tape pababa ang mga wire ng hilera at haligi papunta sa sheet ng acrylic, gamit ang malinaw na tape. Ginagamit din ang malinaw na tape bilang insulate spacer sa pagitan ng mga wires, sa mga interseksyon. Siguraduhing gumamit ng malinis na tool, upang maiwasan ang pagdulas ng daliri mula sa malagkit na bahagi ng tape. Ang mga mantsa ng fingerprint ay hindi lamang mukhang pangit, ngunit gawin ang tape na hindi gaanong malagkit. Tanggalin ang isang dulo ng bawat linya, at solder ang kabilang dulo sa isang mas mahabang kawad. Maghinang ng isang resistor na in-line sa mga wires, bago maghinang sa mga konektor. Ang mga resistor na ginamit dito ay 674k, ngunit ang anumang halaga sa pagitan ng 10k at 1M ay dapat na pagmultahin. Ang mga koneksyon sa Arduino ay ginawa gamit ang 6 na mga analog na pin, na may mga pin na 14-16 na konektado sa mga wire grid row, at mga pin na 17-19 na konektado ang mga haligi.

Hakbang 5: Ang Touch Pad - Paano Ito Gumagana

Ang Touch Pad - Paano Ito Gumagana
Ang Touch Pad - Paano Ito Gumagana
Ang Touch Pad - Paano Ito Gumagana
Ang Touch Pad - Paano Ito Gumagana

Tulad ng paggamit namin ng isang crossbar multiplexer upang mag-set up ng isang LED matrix na may kaunting mga pin, maaari naming gamitin ang isang katulad na crossbar multiplexer upang mag-set up ng isang touch sensor array, na maaari naming magamit upang maisaaktibo ang mga LED. Ang konsepto para sa touch pad na ito ay simple. Mahalaga ito ay isang wire grid, na may tatlong hubad na mga wire na tumatakbo sa mga hilera, at tatlong hubad na mga wire na tumatakbo sa mga haligi sa itaas ng mga hilera. Sa bawat punto ng intersection ay isang maliit na parisukat ng pagkakabukod na pumipigil sa pagdikit ng dalawang wires. Ang isang daliri na hawakan ang intersection ay makikipag-ugnay sa parehong mga wire, na nagreresulta sa isang malaking, ngunit may wakas na paglaban sa pagitan ng dalawang mga wire. Ang isang maliit na kasalukuyang, ngunit napapansin, kasalukuyang ay maaaring gawin upang dumaloy mula sa isang kawad patungo sa susunod, sa pamamagitan ng daliri. Upang matukoy kung aling intersection ang pinindot, ginamit ang sumusunod na pamamaraan: Hakbang 1: Itakda ang lahat ng mga linya ng haligi sa LABAS NA LABAS. Hakbang 2: Itakda ang mga linya ng hilera sa INPUT, na pinapagana ang panloob na mga pullup. Hakbang 3: Kumuha ng isang analog na basahin sa bawat linya ng hilera hanggang sa bumaba ang halaga sa ibaba ng isang naibigay na threshold. Sasabihin sa iyo kung aling hilera ang pinindot na intersection. Hakbang 4: Ulitin ang Hakbang 1-3, ngunit ngayon ay may mga haligi bilang mga input at ang mga hilera bilang mga output. Sinasabi nito sa iyo kung aling haligi ang pinindot na intersection. Upang i-minimize ang mga epekto ng ingay, isang bilang ng mga pagbasa ang kinuha at pagkatapos ay i-average. Ang average na resulta ay ihinahambing kumpara sa isang threshold. Dahil ang pamamaraang ito ay sumusuri lamang laban sa isang threshold, hindi ito angkop para sa pagtuklas ng sabay-sabay na pagpindot. Gayunpaman, dahil ang tic tac toe ay nagpapatuloy sa pagliko, ang pagbabasa ng isang solong pindutin ay sapat. Ang naka-attach ay isang sketch na naglalarawan kung paano gumagana ang touchpad. Tulad ng LED matrix, ginagamit ang mga bits upang kumatawan sa aling intersection ang pinindot.

Hakbang 6: Pagsasama-sama sa Lahat

Pinagsasama ang Lahat
Pinagsasama ang Lahat

Ngayon na tapos na ang lahat ng mga indibidwal na sangkap, oras na upang magkasama silang lahat. I-overlay ang wire grid sa LED matrix. Maaaring kailanganin mong ayusin muli ang mga pag-number ng pin sa LED matrix code upang maipagsabay ito sa wire grid sensor. I-secure ang wire grid sa lugar na may mga pangkabit o adhesive na iyong pinili, at dumikit sa isang magandang board ng pagdaragdag. Magdagdag ng isang switch sa pagitan ng pin 12 at lupa ng Arduino. Ang switch na ito ay upang magpalipat-lipat sa pagitan ng 2 player mode, at 1 player mode (kumpara sa microcontroller).

Hakbang 7: Programming Tic Tac Toe

Nakalakip ang code para sa laro. Una nating sirain ang laro ng tic tac toe sa iba't ibang mga hakbang nito, sa mode ng dalawang manlalaro: Hakbang 1: Ang Player A ay pumili ng isang walang laman na cell sa pamamagitan ng pagpindot sa isang intersection. Hakbang 2: Ang LED para sa cell na iyon ay nagniningning na may kulay A. Hakbang 3: Suriin upang makita kung nanalo ang Player A. Hakbang 4: Ang Player B ay pumili ng isang hindi napunan na cell. Hakbang 5: Ang LED para sa cell na iyon ay may ilaw na may kulay B. Hakbang 6: Suriin upang makita kung nanalo ang Player B. Hakbang 7: Ulitin ang 1-6 hanggang sa mayroong kondisyon sa panalo, o kung napunan ang lahat ng mga cell. Basahin ang mga cell: Ang mga loop ng programa sa pagitan ng pagbabasa ng grid at pagpapakita ng LED matrix. Hangga't ang sensor ng grid ay hindi nagrehistro ng isang hindi-zero na halaga, magpapatuloy ang loop na ito. Kapag ang isang intersection ay pinindot, ang variable ng Pressed ay nag-iimbak ng posisyon ng pinindot na cell. Sinusuri kung ang cell ay hindi napunan: Kapag nakuha ang isang pagbabasa ng posisyon (variable na Pinindot), inihambing ito laban sa kasalukuyang katayuan ng cell (nakaimbak sa variable na GridOnOff) gamit ang isang maliit na karagdagan. Kung ang Pressed cell ay hindi napunan, pagkatapos ay magpatuloy sa pag-iilaw ng LED, kung hindi man bumalik sa pagbabasa ng mga cell. Pag-i-rotate ng mga kulay: Ang isang variable ng boolean, Turn, ay ginagamit upang maitala kaninong turn ito. Ang kulay na LED na pinili kapag ang isang cell ay pinili ay natutukoy ng variable na ito, na kahalili sa tuwing pipiliin ang isang cell. Sinusuri ang isang kondisyon sa panalo: 8 lamang ang posibleng mga kondisyon sa panalo, at ang mga ito ay nakaimbak bilang mga variable ng salita sa isang array (winArray). Ginagamit ang dalawang bitwise na karagdagan upang ihambing ang mga puno ng posisyon ng cell ng manlalaro sa mga kundisyon ng panalo. Kung mayroong isang tugma, pagkatapos ay nagpapakita ang programa ng isang nakagawiang panalo, at pagkatapos ay nagsisimula ito ng isang bagong laro. Pagsusuri para sa isang kundisyon ng pagguhit: Kapag naitala ang siyam na liko at wala pa ring kondisyon sa panalo, kung gayon ang laro ay isang draw. Pagkatapos ay mawala ang mga LED at nagsimula ang isang bagong laro. Paglipat sa isang mode ng manlalaro: Kung ang switch ay nasa posisyon, ang programa ay papunta sa isang player mode, na may unang manlalaro na nagsisimula. Sa pagtatapos ng pagliko ng manlalaro, ang programa ay pipili lamang ng isang random na cell. Malinaw na, hindi ito ang pinakamatalinong diskarte!

Hakbang 8: Mga Puna at Karagdagang Mga Pagpapabuti

Narito ang isang video na ipinapakita ang isang mode ng manlalaro, kasama ang program na nagpapatugtog ng ganap na mga random na paggalaw: Ang program na ipinakita dito ay isang maliit lamang, hubad na bersyon ng buto. Maraming iba pang mga bagay na maaaring magawa dito: 1) Pag-iilaw ng mga LED ng tatlo nang paisa-isa. Ang kasalukuyang code ay nagpapakita lamang ng isang LED nang sabay-sabay. Gayunpaman, sa mga ipinakitang mga kable dito, posible na sindihan ang lahat ng mga LED na konektado sa isang linya ng cathode nang sabay. Kaya, sa halip na pagbibisikleta sa lahat ng siyam na posisyon, ang kailangan mo lang gawin ay ikot sa tatlong linya ng codeode.2) Gumamit ng mga interrupts upang maipakita ang LEDs Depende sa LED display routine at ang dami ng pagproseso, maaaring magpakita ang mga LED ng ilang antas ng kumikislap. Sa pamamagitan ng paggamit ng mga nakakagambala, ang tiyempo ng mga LED ay maaaring kontrolin nang tumpak at hahantong sa isang mas maayos na pagpapakita.3) Isang mas matalinong computer player Ang code ng currrent ay tatagal ng ilang kb, na nag-iiwan ng medyo higit pa para sa pagpapatupad ng isang mas matalinong computer tic tac manlalaro ng daliri. Sana nasiyahan ka sa pagbabasa ng itinuturo na ito hangga't masaya ako sa pagtatrabaho nito!

Inirerekumendang: