Talaan ng mga Nilalaman:

Talaan ng Raspberry Pi IoT Foosball: 11 Mga Hakbang
Talaan ng Raspberry Pi IoT Foosball: 11 Mga Hakbang

Video: Talaan ng Raspberry Pi IoT Foosball: 11 Mga Hakbang

Video: Talaan ng Raspberry Pi IoT Foosball: 11 Mga Hakbang
Video: talai wahi zangigi pashto new song (slowed + Reverb) 2024, Nobyembre
Anonim
Talaan ng Raspberry Pi IoT Foosball
Talaan ng Raspberry Pi IoT Foosball

Maligayang pagdating sa aking bersyon ng isang na-hack na talahanayan ng foosball, bilang bahagi ng isang proyekto ng mag-aaral para sa teknolohiya ng New Media at Komunikasyon. Karaniwang lumaki ako sa paligid ng foosball at pool tables kaya naisip kong magiging mahusay na subukang ikonekta ang isa sa mga aparatong ito sa internet.

Ang pangunahing pag-set up ay ang paggamit ng isang mayroon nang mesa ng foosball na konektado sa isang Raspberry Pi na maaaring gawin ang lahat ng mga sumusunod na gawain:

  • Gumagamit ng mga GPIO pin upang himukin ang IR LED / Receivers at ang 8x8 dot matrix modules
  • Nagpapatakbo ng isang Flask website gamit ang nginx
  • Nagpapatakbo ng isang MySQL / MariaDB database para sa imbakan ng data

Upang muling likhain ang proyektong ito kakailanganin mo ang mga sumusunod na kasanayan:

Backend:

  • Pag-unawa sa HTML / CSS / Javascript para sa kliyente ng website
  • Pag-unawa sa Python sa Flask / Flask-SocketIO / Jinja2 para sa panig ng server ng website
  • Pangunahing kaalaman sa MySQL
  • Alam kung paano magpatakbo ng isang webserver

Prototype

  • Pangunahing kaalaman sa kung paano mag-wire ng isang de-koryenteng circuit
  • Paghihinang
  • Pangunahing pag-unawa sa kung paano magsulat ng isang script sa Python
  • Paggawa gamit ang Linux (Raspbian)
  • Ang pagkakaroon ng maraming pasensya dahil magkakaroon ng maraming kasangkot sa pag-debug

Hakbang 1: Ang Mga Kagamitan

Narito ang listahan kasama ang lahat ng kinakailangang mga bahagi para sa talahanayan:

  • Raspberry Pi Model 3 (may pambalot)
  • T-Cobbler para sa pagkonekta sa Pi sa breadboard
  • Talahanayan ng Foosball (Gumamit ako ng napakatandang mesa na katulad ng sa ito. Dapat maging handa na mag-drill ng mga butas dito)
  • MAX7219 Arduino Dot Matrix Module (2)
  • Mga IR LED Emitter (2+ dahil masira ang mga ito, pareho sa isang ito)
  • Mga IR Receivers (2+ dahil masira rin sila, katulad ng isang ito)
  • Pangunahing solderless breadboard
  • Maraming at maraming kawad (nakasalalay sa laki ng foosball table)
  • mga lalaki na konektor (30+)
  • mga babaeng konektor (10+)
  • 100-220 Ohm Resistors (4+)
  • mga materyales na panghinang
  • mga strap ng kawad
  • Mga may hawak ng LED
  • ilang mga kahoy / turnilyo kung nais mong i-relay ang bola sa kanal

Ang kabuuang halaga ng proyektong ito ay ganap na nakasalalay sa gastos ng iyong foosball table (mahal). Bukod sa talahanayan ang mga materyales ay magiging maximum na 150 euro.

Hakbang 2: Ang Electrical Circuit

Ang Electrical Circuit
Ang Electrical Circuit
Ang Electrical Circuit
Ang Electrical Circuit
Ang Electrical Circuit
Ang Electrical Circuit

Bago mo tangkaing maghinang, tipunin ang lahat ng mga sangkap na inirerekumenda kong subukan mo muna ito sa isang breadboard. Mas madaling palitan ang mga maling bahagi bago mo ginugol ang mga oras na paghihinang sa kanila.

Sa una sinubukan kong ipatupad ang 8x8 LED Matrix na may 74HC595 shift register (unang imahe) at transistor array ngunit dahil sa maraming mga wires at napakababang output ay lumipat ako sa MAX7219 Dot Matrix Module dahil tumatagal lamang ito ng 5 wires at direktang hinihimok ng isang SPI bus.

Ang circuit na huli kong ginamit ay iginuhit kay Fritzing. Mangyaring tandaan na ang IR LEDS at Receivers ay maaaring konektado sa anuman sa iyong libreng GPIO Pins.

Ang IR Receivers at LED ay dapat na direkta sa bawat isa at ang tuktok ng LED ay dapat na itinuro patungo sa tatanggap. Dahil nais naming gayahin ang isang direktang sinag na maaaring masira ng paggalaw ng bola kung saan magkakaroon ng pagbabago sa estado ng linya ng DATA ng tatanggap mula 0 hanggang 1.

Hakbang 3: Pag-coding ng Mga Sensor

Coding ang Sensors
Coding ang Sensors

Na-code ko ang karamihan sa proyektong ito gamit ang Pycharm dahil pinapayagan nito ang madaling pag-deploy ng SSH sa iyong Raspberry Pi gamit ang isang remote interpreter. Hindi ko na idetalye kung paano gumagana ang program na ito ngunit maraming impormasyon ang matatagpuan sa pycharm website.

Kasalukuyan pa rin akong nagtatrabaho sa proyekto ngunit sa sandaling tapos na ang lahat, ang buong proyekto ay magagamit sa aking profile sa github

Ang code para sa mga sensor ay binubuo ng 3 mga klase na pinapatakbo sa isang background thread sa aking Flask server (na ipapaliwanag sa ibang pagkakataon):

  1. Ang Goal Class (link) -Nasimulan ng file na ito ang lahat ng magkakahiwalay na mga bahagi, na maaaring tawagan sa pamamagitan ng pagpasok ng tamang aparato / bus at numero ng SPI
  2. Ang Matrix Class (link) -ito ang pangunahing klase upang mapalakas ang module na MAX7219
  3. Ang LED at Receiver Class (link) - Ito ang pangunahing klase upang mapalakas ang infrared break-beam gamit ang magkakahiwalay na Mga Thread upang mabawasan ang pagkarga ng CPU ng RPi

Ang LED at receiver ay parehong gumagana sa isang dalas ng 38kHz at palaging inaasahan ng mga tatanggap ang isang 50% pataas at isang 50% down na pulso upang gumana nang maayos.

Hakbang 4: Paghahanda at paglalagay ng Mga Sensor

Paghahanda at paglalagay ng mga Sensor
Paghahanda at paglalagay ng mga Sensor
Paghahanda at paglalagay ng mga Sensor
Paghahanda at paglalagay ng mga Sensor
Paghahanda at paglalagay ng mga Sensor
Paghahanda at paglalagay ng mga Sensor

Ngayon ay ihahanda namin ang IR LED at tatanggap. Sa larawan ng talahanayan maaari mong hanapin ang mga lokasyon kung saan dapat mailagay ang RPi at mga sensor.

Ngunit kailangan muna naming ihanda ang mga kable:

  1. Tiyaking sukatin mo ang dami ng kawad na kinakailangan mula sa lokasyon ng RPi / breadboard patungo sa lokasyon ng sensor
  2. Paghinang ng mga pin ng IR receiver sa isang dulo ng kawad (COM / GND / V +)
  3. Paghinang ng mga piraso ng konektor ng lalaki sa kabilang dulo ng kawad

Ngayon ay ihahanda na namin ang mesa:

  1. Gumawa ng isang pangunahing pagguhit (batay sa larawan) kung saan mag-drill. Napakahalaga na ang 2 butas ay nakahanay sa bawat isa dahil ito ang magiging lokasyon ng sinag.
  2. I-drill ang mga butas
  3. Kung mayroon kang ilang mga may hawak ng LED (link) maaari mong ilagay ang mga ito sa loob ng butas upang gawin itong mas matibay
  4. Ipasok + i-tape ang LED + na tatanggap sa magkabilang panig
  5. I-strap ang mga wire + i-tape ang mga ito sa kahoy upang hindi sila masyadong tumawid
  6. Ipasok ang mga male pin sa breadboard ayon sa naunang ibinigay na circuit

Hakbang 5: Paghahanda at paglalagay ng Modyul na Matrix

Paghahanda at paglalagay ng Modyul na Matrix
Paghahanda at paglalagay ng Modyul na Matrix

Susunod na ikokonekta namin ang 2 LED matrix modules

Tandaan:

Dahil gumamit ako ng isang lumang foosball table mayroon nang mga butas na umaakyat patungo sa itaas na bahagi dahil sa mga may hawak ng sigarilyo. Kung wala kang mga ito kakailanganin mong likhain ang mga ito.

Upang ihanda ang mga wire:

  1. Sukatin ang kawad mula sa breadboard patungo sa tuktok na bahagi ng talahanayan
  2. Maghinang ng ilang mga babaeng konektor sa unang dulo ng kawad
  3. Naghinang ng ilang mga lalakeng konektor sa kabilang dulo ng kawad

Ang paglalagay ng matrix:

  1. Ilabas ang matrix sa pamamagitan ng butas sa tuktok
  2. I-strap + i-tape ang mga wire sa loob ng kahoy upang maiwasan ang tawiran
  3. Ipasok ang mga male pin sa breadboard ayon sa naunang ibinigay na circui

Sa ilang mga punto ay magdagdag ako ng isang maliit na hakbang sa DIY upang magdagdag ng isang pambalot para sa matrix module, ngunit sa ngayon ay hubad sila.

Hakbang 6: Ginagawa Ito IoT

Ginagawa Ito IoT
Ginagawa Ito IoT

Kung nais mo lamang magparehistro at ipakita ang mga marka, maaari mong tapusin ang proyekto sa pamamagitan ng pagsulat ng isang maliit na tumatakbo na python script na mga loop hanggang sa ang isa sa mga marka ay umabot sa 9 at pagkatapos ay i-reset.

Gayunpaman kung nais mong ikonekta ang iyong talahanayan sa internet ang mga susunod na ilang hakbang ay dapat na pataas sa iyong eskinita.

Sa mga susunod na hakbang, tatalakayin namin ang sumusunod:

  • Ang pag-configure ng Raspberry Pi
  • Paggawa ng isang database para sa imbakan
  • Paglikha ng website
  • Paglalagay nito sa online

Sa puntong ito, kung pamilyar ka sa git, inirerekumenda kong gumawa ka ng isang imbakan sa GitHub / GitLab upang subaybayan ang iyong mga file. Kung ikaw ay hindi maaari kang lumikha ng isang folder na may parehong istraktura tulad ng sa larawan.

Ang buong proyekto ay magagamit sa lalong madaling panahon sa GitHub. Gayunpaman isang pansamantalang rar file na may lahat ng kinakailangang mga file ay magagamit.

Hakbang 7: Pagkonekta sa Raspberry Pi

Susunod na i-set up namin ang kapaligiran ng raspberry pi, upang gawin ito kailangan mong isagawa ang mga sumusunod na hakbang:

  • Kumonekta sa SSH sa iyong Rasberry Pi (maaari kang gumamit ng PuTTY)
  • Lumikha ng isang folder (halimbawa mkdir proyekto) at lumipat sa folder na ito gamit ang utos ng cd
  • Lumikha ng isang virtual na kapaligiran ng Python sa folder na ito gamit ang python3 -m venv --system-site-packages env command
  • I-aktibo ang virtual interpreter sa pinagmulan / env / bin / i-activate ang utos
  • I-install ang mga pakete mula sa mga kinakailangan.txt na may python -m pip i-install ang utos ng pangalan ng package
  • Ilipat ang mga file mula sa dating ibinigay na project_example.rar file sa SSH sa iyong folder ng proyekto

Ngayon ay dapat mo nang mapatakbo ang buong proyekto sa iyong Raspberry Pi. Pinapayuhan ko kayo na gumamit ng isang Python IDE tulad ng PyCharm na nagbibigay-daan sa iyo upang magamit ka upang mai-debug mula sa iyong remote interpreter sa SSH at direktang mag-upload ng mga pagbabago kung kinakailangan.

Hakbang 8: Pag-set up ng Database

Pag-set up ng Database
Pag-set up ng Database

Ngayon kailangan mong mag-set up ng isang napaka-pangunahing database, batay sa modelong ito.

Ang pinakamadaling paraan upang pumunta dito ay upang lumikha ng iyong database sa MySQL workbench kung saan maaari ka ring gumawa ng ilang pagsubok.

Sa sandaling tapos na maaari mong i-export ang isang dump ng iyong database at i-upload ito sa iyong RPi at pagkatapos ay ipatupad ito sa sudo mariadb <pathtofile / file.sql

Hakbang 9: Paglikha ng Website

Paglikha ng Website
Paglikha ng Website
Paglikha ng Website
Paglikha ng Website
Paglikha ng Website
Paglikha ng Website

Susunod na maaari mong pag-aralan (at gamitin) ang code na ibinigay sa project_example.rar file.

Ang pangunahing file ay ang Flask.py na kung saan ay ang tinapay at mantikilya ng proyektong ito:

  • Nagpapatakbo ng isang Flask-SocketIO app na humahawak sa backend ng website
  • Lumilikha ng isang koneksyon sa pagitan ng database at Flask
  • Nagbibigay ng pagpapatunay sa pag-login at pagpaparehistro ng gumagamit
  • Nagbibigay ng kinakailangang code sa kung paano maglaro ng isang laro ay gumagamit ng socketio upang ma-update ang realtime ng website sa panahon ng laro
  • Inilalagay ang mga resulta sa laro sa database

Sa mga static at template folder maaari mong hanapin ang HTML / CSS / JS na nagbibigay ng frontend na bahagi ng website. Huwag mag-atubiling baguhin ang mga ito ayon sa iyong sariling gusto.

Hakbang 10: Pagkonekta sa World Wide Web

Upang maiugnay ang aming website sa web gagamitin namin ang nginx at uwsgi. Sa halimbawa ng proyekto maaari mong mahanap ang kinakailangang mga file sa conf folder.

Una sa lahat kailangan mong i-update ang sumusunod sa mga file na ito:

  • Sa uwsgi-flask.ini kailangan mong baguhin ang landas ng virtualenv parameter sa iyong interpreter
  • Sa project1-flask.service kailangan mong i-update ang [Serbisyo] na bahagi ng file kasama ang iyong mga kredensyal at landas sa mga nauugnay na file
  • Sa nginx file kailangan mong i-update ang server at lokasyon / path sa iyong nauugnay na socket

Susunod na kailangan mong palitan ang default nginx webserver file sa lokasyon ng iyong nginx config file, sa ibaba ay isang halimbawa ng mga utos ng linux na gawin ito

  • me @ my-rpi: ~ / project1 $ sudo cp conf / nginx / etc / nginx / sites-available / project1
  • ako @ my-rpi: ~ / project1 $ sudo rm / etc / nginx / mga site-pinagana / defaul t
  • ako @ my-rpi: ~ / project1 $ sudo ln -s / etc / nginx / sites-available / project1 / etc / nginx / sites-pinagana / project1
  • me @ my-rpi: ~ / project1 $ sudo systemctl restart nginx.service

Sa wakas kailangan mong idagdag ang mga pasadyang serbisyo sa iyong systemd folder, ito ay isang halimbawa sa kung paano ito gawin:

  • me @ my-rpi: ~ / project1 $ sudo cp conf / project1 - *. service / etc / systemd / system /
  • ako @ my-rpi: ~ / project1 $ sudo systemctl daemon-reload
  • ako @ my-rpi: ~ / project1 $ sudo systemctl simulan ang proyekto1- *
  • ako @ my-rpi: ~ / project1 $ sudo systemctl status project1- *

Kung nais mong magsimula ang webserver sa boot ng iyong raspberry pi u kailangan mong gamitin ang sudo systemctl paganahin ang project1 - *. Utos ng serbisyo.

Kung nagawa nang tama, pagkatapos ng isang system na pag-reboot ang iyong website ay dapat na tumatakbo sa iyong IP address. Kung nais mong i-edit ang isa sa mga config file na laging kailangan mong ihinto ang serbisyo, muling i-upload ang mga file at gamitin ang daemon-reload na utos na sinusundan ng isang pagsisimula, kung hindi man ay hindi magiging epektibo ang mga pagbabago.

Hakbang 11: Tapos na

Tapos na
Tapos na

Habang nagta-type sa huling bahagi ng itinuturo na ito, ang maliit na proyekto sa paaralan na ito ay isinasagawa pa rin.

Gumugol ako ng hindi mabilang na oras upang magawa ko ito sa loob ng 2.5 linggo. Kahit na medyo sinugod ang lahat ay ipinagmamalaki ko pa rin ang aking mga nakamit. Sa panahon ng pagpupulong na nakatagpo ako ng hindi mabilang na mga bug / error / may sira na sensor kaya huwag masyadong panghinaan ng loob kung ang lahat ay hindi gumagana sa unang pagsubok.

Ang pinakamahusay na bagay na magagawa mo ay magtanong o maghanap ng tulong sa internet, maraming mga tao na may mas mahusay na kaalaman na sabik na tulungan ka.

Huling ngunit hindi pa huli nais kong pasalamatan ang aking mga guro mula sa New Media at Teknolohiya ng Komunikasyon para sa pagbibigay sa akin ng maraming payo at pagtulong sa akin na matapos ang proyektong ito.

Inirerekumendang: