Cuprins:

Raspberry Pi IoT Foosball Table: 11 pași
Raspberry Pi IoT Foosball Table: 11 pași

Video: Raspberry Pi IoT Foosball Table: 11 pași

Video: Raspberry Pi IoT Foosball Table: 11 pași
Video: Bar Top Arcade Cabinet with a Raspberry Pi (from a single sheet of plywood)// How-To 2024, Noiembrie
Anonim
Raspberry Pi IoT Foosball Table
Raspberry Pi IoT Foosball Table

Bine ați venit la versiunea mea de masă de fotbal piratată, ca parte a unui proiect studențesc pentru tehnologia New Media și Communication. Practic am crescut în jurul mesei de biliard și biliard, așa că m-am gândit că ar fi minunat să încerc să conectez unul dintre aceste dispozitive la internet.

Configurarea principală utilizează o masă de fotbal existentă conectată la un Raspberry Pi care poate îndeplini toate următoarele sarcini:

  • Folosește pini GPIO pentru a conduce LED-urile / receptoarele IR și modulele matrice de puncte 8x8
  • Rulează un site web Flask folosind nginx
  • Rulează o bază de date MySQL / MariaDB pentru stocarea datelor

Pentru a putea recrea acest proiect, veți avea nevoie de următoarele abilități:

Backend:

  • Înțelegerea HTML / CSS / Javascript pentru clientul site-ului web
  • Înțelegerea Python cu Flask / Flask-SocketIO / Jinja2 pentru partea server a site-ului web
  • Cunoștințe de bază despre MySQL
  • Știți cum să rulați un server web

Prototip

  • Cunoștințe de bază despre cum să conectați un circuit electric
  • Lipire
  • Înțelegere de bază despre cum să scrieți un script în Python
  • Lucrul cu Linux (Raspbian)
  • Având multă răbdare, pentru că va fi nevoie de multă depanare

Pasul 1: Materialele

Iată lista cu toate părțile necesare pentru tabel:

  • Raspberry Pi Model 3 (cu carcasă)
  • T-Cobbler pentru conectarea Pi-ului la panou
  • Masă de fotbal (am folosit o masă foarte veche asemănătoare cu aceasta. Trebuie să fiu dispus să fac găuri în ea)
  • MAX7219 Modul Arduino Dot Matrix (2)
  • Emițătoare cu LED IR (2+ pentru că se rup, asemănător cu acesta)
  • Receptoare IR (2+ pentru că se rup și ele, asemănător cu acesta)
  • Panou de bază fără lipire
  • Multă sârmă (depinde de mărimea mesei de fotbal)
  • conectori masculi (peste 30 de ani)
  • conectori de sex feminin (10+)
  • Rezistențe 100-220 Ohm (4+)
  • materiale de lipit
  • curele de sârmă
  • Suporturi LED
  • niște lemn / șuruburi în cazul în care doriți să retrageți mingea în jgheab

Costul total al acestui proiect depinde în totalitate de costul mesei de fotbal (scump). Pe lângă masă, materialele vor fi de maximum 150 de euro.

Pasul 2: Circuitul electric

Circuitul electric
Circuitul electric
Circuitul electric
Circuitul electric
Circuitul electric
Circuitul electric

Înainte de a încerca să lipiți, asamblați toate componentele, vă recomand să îl testați mai întâi pe o placă de verificare. Este mai ușor să înlocuiți componentele defecte înainte de a petrece ore întregi lipindu-le.

La început am încercat să pun în aplicare matricea LED 8x8 cu un registru de schimbare 74HC595 (prima imagine) și matrice de tranzistori, dar datorită numeroaselor fire și a ieșirii foarte mici, am trecut la modulul MAX7219 Dot Matrix, deoarece ia doar 5 fire și este acționat direct de un autobuz SPI.

Circuitul pe care l-am folosit în cele din urmă este desenat cu Fritzing. Vă rugăm să rețineți că LED-urile și receptoarele IR pot fi conectate la oricare dintre pinii GPIO gratuiți.

Receptoarele IR și LED-ul ar trebui să fie direct unul peste celălalt, iar partea de sus a LED-ului ar trebui să fie îndreptată către receptor. Pentru că vrem să simulăm un fascicul direct care poate fi rupt de mișcarea mingii, caz în care va exista o schimbare de stare a liniei de date a receptorului de la 0 la 1.

Pasul 3: Codificarea senzorilor

Codificarea senzorilor
Codificarea senzorilor

Am codificat majoritatea acestui proiect folosind Pycharm, deoarece permite implementarea ușoară SSH pe Raspberry Pi folosind un interpret de la distanță. Nu voi trece în detaliu cu privire la modul în care funcționează acest program, dar multe informații pot fi găsite pe site-ul pycharm.

În prezent, încă lucrez la proiect, dar odată ce totul este făcut, întregul proiect va fi disponibil pe profilul meu github

Codul pentru senzori constă din 3 clase care sunt rulate într-un fir de fundal pe serverul meu Flask (care va fi explicat mai târziu):

  1. Clasa obiectivului (link) - Acest fișier inițiază toate componentele separate, care pot fi apelate prin inserarea dispozitivului / magistralei SPI corecte și a numărului PIN
  2. Clasa Matrix (link) - Aceasta este clasa principală pentru alimentarea modulului MAX7219
  3. Clasa LED și receptor (link) - Aceasta este clasa principală pentru alimentarea razei de infraroșu folosind fire separate pentru a reduce sarcina procesorului RPi

LED-urile și receptorul funcționează pe o frecvență de 38 kHz, iar receptoarele se așteaptă întotdeauna ca un impuls de 50% în sus și un 50% în jos să funcționeze corect.

Pasul 4: Pregătirea și plasarea senzorilor

Pregătirea și plasarea senzorilor
Pregătirea și plasarea senzorilor
Pregătirea și plasarea senzorilor
Pregătirea și plasarea senzorilor
Pregătirea și plasarea senzorilor
Pregătirea și plasarea senzorilor

Acum vom pregăti LED-ul IR și receptorul. În imaginea tabelului puteți găsi locațiile unde trebuie amplasate RPi și senzori.

Dar mai întâi trebuie să pregătim cablajul:

  1. Asigurați-vă că măsurați cantitatea de sârmă necesară de la locația RPi / panoul de măsurare până la locația senzorului
  2. Lipiți pinii receptorului IR la un capăt al firului (COM / GND / V +)
  3. Lipiți piesele conectorului tată la celălalt capăt al firului

Acum vom pregăti masa:

  1. Faceți un desen de bază (bazat pe imagine) pe unde să găuriți. Este foarte important ca cele două găuri să fie aliniate între ele, deoarece aceasta va fi locația fasciculului.
  2. Găuriți găurile
  3. Dacă aveți niște suporturi de LED-uri (link), le puteți pune în interiorul orificiului pentru ao face mai robust
  4. Introduceți + bandă LED + receptor pe ambele părți
  5. Fixați firele + fixați-le pe lemn, astfel încât să nu se încrucișeze prea mult
  6. Introduceți știfturile tată pe panoul de control conform circuitului furnizat anterior

Pasul 5: Pregătirea și plasarea modulului Matrix

Pregătirea și plasarea modulului Matrix
Pregătirea și plasarea modulului Matrix

În continuare vom conecta cele 2 module matrice LED

Notă:

Deoarece am folosit o masă de foosball veche, erau deja găuri care urcau spre partea superioară din cauza suporturilor de țigări. Dacă nu le aveți, va trebui să le creați.

Pentru a pregăti firele:

  1. Măsurați firul de la panou spre partea de sus a mesei
  2. Lipiți niște conectori feminini la primul capăt al firului
  3. Lipiți niște conectori masculi la celălalt capăt al firului

Plasarea matricei:

  1. Scoateți matricea prin orificiul din partea de sus
  2. Curea + lipiți firele din interior pe lemn pentru a evita traversarea
  3. Introduceți știfturile masculine pe panoul de măsurare conform circuitului furnizat anterior

La un moment dat voi adăuga un mic pas DIY pentru a adăuga o carcasă pentru modulul matrice, dar deocamdată sunt goi.

Pasul 6: Realizarea IoT

Făcând-o IoT
Făcând-o IoT

Dacă doriți doar să vă înregistrați și să afișați scorurile, puteți finaliza proiectul scriind un mic script Python care rulează până când unul dintre scoruri ajunge la 9 și apoi se resetează.

Cu toate acestea, dacă doriți să vă conectați masa la internet, următorii pași ar trebui să vă îndrepte aleea.

În următorii pași vom aborda următoarele:

  • Configurarea Raspberry Pi
  • Realizarea unei baze de date pentru stocare
  • Crearea site-ului web
  • Punerea acestuia online

În acest moment, dacă sunteți familiarizat cu git, vă recomand să creați un depozit pe GitHub / GitLab pentru a vă urmări fișierele. Dacă nu sunteți, puteți crea un folder cu aceeași structură ca în imagine.

Proiectul complet va fi disponibil în curând pe GitHub. Cu toate acestea, este disponibil un fișier rar temporar cu toate fișierele necesare.

Pasul 7: Conectarea Raspberry Pi

În continuare vom configura mediul raspberry pi, pentru a face acest lucru trebuie să executați pașii următori:

  • Conectați-vă prin SSH la Rasberry Pi (puteți utiliza PuTTY)
  • Creați un folder (exemplu proiect mkdir) și mutați în acest folder folosind comanda cd
  • Creați un mediu Python virtual în acest folder folosind comanda python3 -m venv --system-site-packages env
  • Activați interpretul virtual cu comanda sursă / env / bin / activate
  • Instalați pachetele din requirements.txt cu comanda python -m pip install package-name
  • Transferați fișierele din fișierul project_example.rar furnizat anterior prin SSH în folderul proiectului

Acum ar trebui să puteți rula întregul proiect pe Raspberry Pi. Vă sfătuiesc să utilizați un IDE Python, cum ar fi PyCharm, care vă permite să vă utilizați pentru a depana de la interpretul de la distanță prin SSH și pentru a încărca direct modificările, dacă este necesar.

Pasul 8: Configurarea bazei de date

Configurarea bazei de date
Configurarea bazei de date

Acum trebuie să configurați o bază de date foarte simplă, bazată pe acest model.

Cel mai simplu mod de a merge cu aceasta este să vă creați baza de date în bancul de lucru MySQL, unde puteți face și câteva teste.

După ce ați terminat, puteți exporta o descărcare a bazei de date și o puteți încărca pe RPi și apoi o puteți executa cu sudo mariadb <pathtofile / file.sql

Pasul 9: Crearea site-ului web

Crearea site-ului web
Crearea site-ului web
Crearea site-ului web
Crearea site-ului web
Crearea site-ului web
Crearea site-ului web

În continuare puteți analiza (și utiliza) codul furnizat în fișierul project_example.rar.

Fișierul principal este Flask.py, care este pâinea și untul acestui proiect:

  • Rulează o aplicație Flask-SocketIO care gestionează backend-ul site-ului web
  • Creează o conexiune între baza de date și Flask
  • Oferă validare autentificare și înregistrare utilizator
  • Oferă codul necesar pentru a juca un joc utilizează socketio pentru a actualiza site-ul web în timp real în timpul jocului
  • Introduce rezultatele jocului în baza de date

În folderele statice și șabloane puteți găsi HTML / CSS / JS care oferă partea frontend a site-ului web. Simțiți-vă liber să le modificați după propriile voințe.

Pasul 10: Conectarea la World Wide Web

Pentru a ne conecta site-ul la internet vom folosi nginx și uwsgi. În exemplul de proiect, puteți găsi fișierele necesare în folderul conf.

În primul rând, trebuie să actualizați următoarele în aceste fișiere:

  • În uwsgi-flask.ini trebuie să schimbați calea parametrului virtualenv la interpretul dvs.
  • În project1-flask.service trebuie să actualizați partea [Service] a fișierului cu acreditările și căile către fișierele asociate
  • În fișierul nginx trebuie să actualizați serverul și locația / calea către socketul asociat

În continuare, trebuie să înlocuiți fișierul implicit al serverului web nginx cu locația fișierului dvs. de configurare nginx, mai jos este un exemplu de comenzi linux pentru a face acest lucru

  • me @ my-rpi: ~ / project1 $ sudo cp conf / nginx / etc / nginx / sites-available / project1
  • me @ my-rpi: ~ / project1 $ sudo rm / etc / nginx / sites-enabled / defaul t
  • me @ my-rpi: ~ / project1 $ sudo ln -s / etc / nginx / sites-available / project1 / etc / nginx / sites-enabled / project1
  • me @ my-rpi: ~ / project1 $ sudo systemctl reporniți nginx.service

În cele din urmă, trebuie să adăugați serviciile personalizate în folderul dvs. systemd, acesta este un exemplu despre cum să faceți acest lucru:

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

Dacă doriți ca serverul web să înceapă la pornirea raspberry pi, trebuie să utilizați comanda de serviciu sudo systemctl enable project1 - *.

Dacă este făcut corect, după repornirea sistemului, site-ul dvs. web ar trebui să ruleze pe adresa dvs. IP. Dacă doriți să editați unul dintre aceste fișiere de configurare, trebuie întotdeauna să opriți serviciul, să încărcați din nou fișierele și să utilizați comanda daemon-reload urmată de un start, altfel modificările nu vor fi eficiente.

Pasul 11: Finalizarea

Finalizare
Finalizare

În timp ce tastați partea finală a acestui instructabil, acest mic proiect școlar este încă o lucrare în desfășurare.

Am petrecut nenumărate ore să realizez acest lucru în 2,5 săptămâni. Chiar dacă totul s-a grăbit un pic, sunt totuși mândru de ceea ce am realizat. În timpul fazei de asamblare am întâlnit nenumărate erori / erori / senzori defecți, așa că nu vă descurajați prea mult dacă totul nu funcționează la prima încercare.

Cel mai bun lucru pe care îl puteți face este să cereți sau să căutați ajutor pe internet, există o mulțime de oameni cu cunoștințe mult mai bune care sunt foarte dornici să vă ajute.

Nu în ultimul rând, vreau să le mulțumesc profesorilor de la New Media and Communication Technology pentru că mi-au dat multe sfaturi și m-au ajutat să finalizez acest proiect.

Recomandat: