Raspberry Pi IoT Foosball stol: 11 koraka
Raspberry Pi IoT Foosball stol: 11 koraka
Anonim
Raspberry Pi IoT Foosball stol
Raspberry Pi IoT Foosball stol

Dobrodošli u moju verziju hakiranog stola za mali fudbal, kao dio studentskog projekta za nove medije i komunikacionu tehnologiju. U osnovi sam odrastao uz stoni nogomet i bilijar pa sam pomislio da bi bilo sjajno pokušati spojiti jedan od ovih uređaja na internet.

Glavno postavljanje koristi postojeći stolni stol za fudbal povezan sa Raspberry Pi -om koji može obaviti sve sljedeće zadatke:

  • Koristi GPIO pinove za pogon IC LED/prijemnika i matričnih modula 8x8
  • Pokreće web stranicu Flask koristeći nginx
  • Pokreće MySQL/MariaDB bazu podataka za skladištenje podataka

Da biste mogli ponovno stvoriti ovaj projekt, potrebne su vam sljedeće vještine:

Pozadinsko:

  • Razumijevanje HTML/CSS/Javascripta za klijenta web stranice
  • Razumijevanje Pythona sa Flask/Flask-SocketIO/Jinja2 za serversku stranu web stranice
  • Osnovno poznavanje MySQL -a
  • Znati kako pokrenuti web server

Prototip

  • Osnovno znanje o tome kako spojiti električno kolo
  • Lemljenje
  • Osnovno razumevanje pisanja skripte u Pythonu
  • Rad sa Linuxom (Raspbian)
  • Imajte puno strpljenja jer će biti potrebno mnogo otklanjanja grešaka

Korak 1: Materijali

Evo popisa sa svim potrebnim dijelovima za tablicu:

  • Raspberry Pi Model 3 (sa kućištem)
  • T-Cobbler za povezivanje Pi na matičnu ploču
  • Stol za fudbal (koristio sam veoma star sto sličan ovom. Mora biti voljan izbušiti rupe u njemu)
  • MAX7219 Arduino matrični modul (2)
  • IR LED odašiljači (2+ jer se lome, slično ovom)
  • IC prijemnici (2+ jer se i oni lome, slično ovom)
  • Osnovna ploča bez lemljenja
  • Puno žice (zavisi od veličine stola za mali fudbal)
  • muški konektori (30+)
  • ženski konektori (10+)
  • 100-220 Ohm otpornici (4+)
  • lemilice
  • žičane trake
  • LED držači
  • malo drva/vijaka u slučaju da želite prenijeti loptu u oluk

Ukupni troškovi ovog projekta u potpunosti ovise o cijeni vašeg stola za mali fudbal (skupo). Osim stola, materijali će biti maksimalno 150 eura.

Korak 2: Električno kolo

Električni krug
Električni krug
Električni krug
Električni krug
Električni krug
Električni krug

Prije nego pokušate lemiti, sastavite sve komponente, toplo preporučujem da ih prvo isprobate na ploči. Lakše je zamijeniti neispravne komponente prije nego što potrošite sate na njihovo lemljenje.

U početku sam pokušao implementirati LED matricu 8x8 sa registrom pomaka 74HC595 (prva slika) i nizom tranzistora, ali zbog brojnih žica i vrlo niskog izlaza prešao sam na matrični modul MAX7219 jer uzima samo 5 žica i izravno ga pokreće SPI autobus.

Krug koji sam na kraju koristio nacrtan je Fritzingom. Imajte na umu da se IR LED i prijemnici mogu spojiti na bilo koji od vaših besplatnih GPIO pinova.

IC prijemnici i LED diode trebaju biti direktno jedan preko drugog, a vrh LED diode treba biti usmjeren prema prijemniku. Budući da želimo simulirati direktnu zraku koja se može slomiti kretanjem lopte, u tom slučaju doći će do promjene stanja DATA linije prijemnika s 0 na 1.

Korak 3: Kodiranje senzora

Kodiranje senzora
Kodiranje senzora

Većinu ovog projekta kodirao sam pomoću Pycharma jer omogućava jednostavno postavljanje SSH -a na vaš Raspberry Pi pomoću udaljenog tumača. Neću detaljno govoriti o tome kako ovaj program radi, ali mnogo informacija se može pronaći na web stranici pycharm.

Trenutno još radim na projektu, ali kad sve bude gotovo cijeli projekt će biti dostupan na mom github profilu

Kôd za senzore sastoji se od 3 klase koje se izvode u pozadini na mojem Flask serveru (što će biti objašnjeno kasnije):

  1. Klasa cilja (veza) -Ova datoteka pokreće sve zasebne komponente, koje se mogu pozvati umetanjem ispravnog SPI uređaja/sabirnice i broja pina
  2. Matrična klasa (veza) -Ovo je glavna klasa za napajanje MAX7219 modula
  3. Klasa LED -a i prijemnika (veza) - Ovo je glavna klasa za uključivanje infracrvenog prekidnog snopa pomoću zasebnih niti za smanjenje CPU opterećenja RPi -a

I LED i prijemnik rade na frekvenciji od 38 kHz, a prijemnici uvijek očekuju da će puls od 50% gore i 50% pasti ispravno raditi.

Korak 4: Priprema i postavljanje senzora

Priprema i postavljanje senzora
Priprema i postavljanje senzora
Priprema i postavljanje senzora
Priprema i postavljanje senzora
Priprema i postavljanje senzora
Priprema i postavljanje senzora

Sada ćemo pripremiti IR LED i prijemnik. Na slici tablice možete pronaći lokacije na koje treba postaviti RPi i senzore.

Ali prvo moramo pripremiti ožičenje:

  1. Umjerite potrebnu količinu žice od lokacije RPi/matične ploče do lokacije senzora
  2. Lemite pinove IC prijemnika na jedan kraj žice (COM/GND/V+)
  3. Lemite muške dijelove konektora na drugom kraju žice

Sada ćemo pripremiti tablicu:

  1. Napravite osnovni crtež (na osnovu slike) gdje ćete bušiti. Vrlo je važno da se 2 rupe poravnaju jedna preko druge jer će to biti mjesto grede.
  2. Izbušite rupe
  3. Ako imate neke LED držače (veza), možete ih staviti u rupu kako bi bili jači
  4. Umetnite + traku LED + prijemnik sa obe strane
  5. Zavežite žice + zalijepite ih na drvo kako ne bi prešli previše
  6. Umetnite muške iglice na ploču prema prethodno navedenom kolu

Korak 5: Priprema i postavljanje matričnog modula

Priprema i postavljanje matričnog modula
Priprema i postavljanje matričnog modula

Sljedeće ćemo spojiti 2 LED matrična modula

Bilješka:

Budući da sam koristio stari stol za mali nogomet, već su se rupe dizale prema gornjem dijelu zbog držača cigareta. Ako ih nemate, morat ćete ih kreirati.

Za pripremu žica:

  1. Izmjerite žicu od ploče prema gornjem dijelu stola
  2. Lemite neke ženske konektore na prvi kraj žice
  3. Lemite neke muške konektore na drugi kraj žice

Postavljanje matrice:

  1. Izvucite matricu kroz otvor na vrhu
  2. Remen + zalijepite žice unutra na drvo kako biste izbjegli ukrštanje
  3. Umetnite muške iglice na ploču prema prethodno navedenoj shemi

U nekom trenutku ću dodati mali DIY korak kako bih dodao kućište za matrični modul, ali za sada su goli.

Korak 6: Postavljanje IoT -a

Making It IoT
Making It IoT

Ako samo želite registrirati i prikazati rezultate, možete dovršiti projekt pisanjem male pokrenute python skripte koja se ponavlja sve dok jedna od ocjena ne dosegne 9, a zatim se resetira.

Međutim, ako želite povezati svoj stol sa internetom, sljedećih nekoliko koraka trebalo bi da se podigne uz vašu uličicu.

U sljedećih nekoliko koraka pozabavit ćemo se sljedećim:

  • Konfiguriranje Raspberry Pi
  • Izrada baze podataka za skladištenje
  • Kreiranje web stranice
  • Postavljanje na internet

U ovom trenutku, ako ste upoznati s gitom, preporučujem da napravite spremište na GitHubu/GitLabu kako biste pratili svoje datoteke. Ako niste, možete stvoriti mapu iste strukture kao na slici.

Cijeli projekt bit će uskoro dostupan na GitHubu. Međutim, dostupna je privremena rar datoteka sa svim potrebnim datotekama.

Korak 7: Povezivanje Raspberry Pi

Zatim ćemo postaviti okruženje maline pi, da biste to učinili, morate izvršiti sljedeće korake:

  • Povežite se putem SSH -a na svoj Rasberry Pi (možete koristiti PuTTY)
  • Kreirajte mapu (primjer projekta mkdir) i prijeđite u ovu mapu pomoću naredbe cd
  • Kreirajte virtualno Python okruženje u ovoj mapi koristeći python3 -m venv --system-site-packages env naredbu
  • Aktivirajte virtualni tumač naredbom source/env/bin/enable
  • Instalirajte pakete iz zahtjeva.txt naredbom python -m pip install package -name
  • Prenesite datoteke iz prethodno navedene datoteke project_example.rar preko SSH -a u fasciklu projekta

Sada biste trebali moći pokrenuti cijeli projekt na svom Raspberry Pi. Savetujem vam da koristite Python IDE kao što je PyCharm koji vam omogućava da koristite za otklanjanje grešaka sa vašeg udaljenog tumača preko SSH -a i direktno učitavanje promena ako je potrebno.

Korak 8: Postavljanje baze podataka

Postavljanje baze podataka
Postavljanje baze podataka

Sada morate postaviti vrlo osnovnu bazu podataka, zasnovanu na ovom modelu.

Najlakši način da to učinite je stvaranje vaše baze podataka na radnom stolu MySQL gdje možete i izvršiti neka testiranja.

Kada završite, možete izvesti dump vaše baze podataka i učitati je u svoj RPi, a zatim je izvršiti pomoću sudo mariadb <pathtofile/file.sql

Korak 9: Kreiranje web stranice

Kreiranje web stranice
Kreiranje web stranice
Kreiranje web stranice
Kreiranje web stranice
Kreiranje web stranice
Kreiranje web stranice

Zatim možete analizirati (i koristiti) kôd koji se nalazi u datoteci project_example.rar.

Glavna datoteka je Flask.py koja je kruh i maslac ovog projekta:

  • Pokreće aplikaciju Flask-SocketIO koja upravlja pozadinom web stranice
  • Stvara vezu između baze podataka i Flaska
  • Omogućava provjeru valjanosti prijave i registraciju korisnika
  • Pruža neophodan kôd o tome kako igrati igru koristi socketio za ažuriranje web stranice u stvarnom vremenu tokom igre
  • Upisuje rezultate igre u bazu podataka

U statičkim i predloškim fasciklama možete pronaći HTML/CSS/JS koji pružaju prednji dio web stranice. Slobodno ih izmijenite prema vlastitom ukusu.

Korak 10: Povezivanje na World Wide Web

Za povezivanje naše web stranice s webom koristit ćemo nginx i uwsgi. U primjeru projekta možete pronaći potrebne datoteke u folderu conf.

Prije svega, morate ažurirati sljedeće u ovim datotekama:

  • U uwsgi-flask.ini morate promijeniti putanju parametra virtualenv do vašeg tumača
  • U project1-flask.service trebate ažurirati [Service] dio datoteke sa svojim vjerodajnicama i putanjama do pridruženih datoteka
  • U nginx datoteci morate ažurirati poslužitelj i lokaciju / putanju na pridruženi utičnicu

Zatim trebate zamijeniti zadanu datoteku nginx web poslužitelja s lokacijom vaše konfiguracijske datoteke nginx, dolje je primjer linux naredbi da to učinite

  • 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
  • ja@moj-rpi: ~/project1 $ sudo ln -s/etc/nginx/sites-available/project1/etc/nginx/sites-enabled/project1
  • me@my-rpi: ~/project1 $ sudo systemctl ponovo pokrenite nginx.service

Na kraju trebate dodati prilagođene usluge u sistemsku mapu, ovo je primjer kako to učiniti:

  • 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-*

Ako želite da se web poslužitelj pokrene pri pokretanju vašeg malina, morate upotrijebiti naredbu sudo systemctl enable project1-*. Service.

Ako ste to učinili ispravno, nakon ponovnog pokretanja sistema vaša bi se web stranica trebala pokrenuti na vašoj IP adresi. Ako želite urediti jednu od ovih konfiguracijskih datoteka, uvijek morate zaustaviti uslugu, ponovno učitati datoteke i upotrijebiti naredbu daemon-reload nakon čega slijedi početak, u protivnom promjene neće biti učinkovite.

Korak 11: Dovršavanje

Finishing Off
Finishing Off

Dok kucate završni dio ovog uputstva, ovaj mali školski projekat je još uvijek u toku.

Potrošio sam nebrojeno mnogo sati da ovo završim za 2,5 sedmice. Iako se sve malo žurilo, i dalje sam ponosan na ono što sam postigao. Tokom faze montaže naišao sam na bezbroj grešaka/grešaka/neispravnih senzora pa nemojte biti previše obeshrabreni ako sve ne radi iz prvog pokušaja.

Najbolje što možete učiniti je zatražiti ili potražiti pomoć na internetu, postoji mnogo ljudi sa daleko boljim znanjem koji vam jako žele pomoći.

Na kraju, ali ne i najmanje važno, želim zahvaliti svojim učiteljima iz novih medija i komunikacijske tehnologije koji su mi dali puno savjeta i pomogli mi da završim ovaj projekt.

Preporučuje se: