Kazalo:

Raspberry Pi IoT Foosball miza: 11 korakov
Raspberry Pi IoT Foosball miza: 11 korakov

Video: Raspberry Pi IoT Foosball miza: 11 korakov

Video: Raspberry Pi IoT Foosball miza: 11 korakov
Video: First foosball goal-sensor test 2024, November
Anonim
Raspberry Pi IoT Foosball miza
Raspberry Pi IoT Foosball miza

Dobrodošli v moji različici vdrte mize za nogomet v okviru študentskega projekta za nove medije in komunikacijsko tehnologijo. V osnovi sem odraščal ob namiznem nogometu in biljardnih mizah, zato se mi je zdelo super, da poskusim eno od teh naprav povezati z internetom.

Glavna nastavitev je uporaba obstoječe mize za nogomet, povezane z Raspberry Pi, ki lahko opravlja vsa naslednja opravila:

  • Uporablja zatiče GPIO za pogon IR LED/sprejemnikov in matričnih modulov 8x8
  • Zažene spletno mesto Flask z uporabo nginxa
  • Izvaja bazo podatkov MySQL/MariaDB za shranjevanje podatkov

Če želite znova ustvariti ta projekt, potrebujete naslednje spretnosti:

Zaledje:

  • Razumevanje HTML/CSS/Javascript za odjemalca spletnega mesta
  • Razumevanje Pythona s Flask/Flask-SocketIO/Jinja2 za strežniško stran spletnega mesta
  • Osnovno znanje o MySQL
  • Vedite, kako zagnati spletni strežnik

Prototip

  • Osnovno znanje o ožičenju električnega tokokroga
  • Spajkanje
  • Osnovno razumevanje, kako napisati skript v Pythonu
  • Delo z Linuxom (Raspbian)
  • Imeti veliko potrpljenja, ker bo prišlo do veliko odpravljanja napak

1. korak: Materiali

Tu je seznam z vsemi potrebnimi deli za mizo:

  • Raspberry Pi Model 3 (z ohišjem)
  • T-Cobbler za priključitev Pi na mizo
  • Nogometna miza (uporabil sem zelo staro mizo, podobno tej. Morate biti pripravljeni izvrtati luknje v njej)
  • Matrični modul Arduino MAX7219 (2)
  • IR LED oddajniki (2+, ker se zlomijo, podobno kot ta)
  • IR sprejemniki (2+, ker se tudi pokvarijo, podobno kot ta)
  • Osnovna deska brez spajkanja
  • Veliko in veliko žice (odvisno od velikosti mize za nogomet)
  • moški priključki (30+)
  • ženski priključki (10+)
  • 100-220 ohmski upori (4+)
  • spajkalni materiali
  • žični trakovi
  • LED držala
  • nekaj lesa/vijakov, če želite žogico posredovati v žlebu

Skupni stroški tega projekta so v celoti odvisni od stroškov vaše mize za namizni nogomet (drago). Poleg mize bodo materiali največ 150 evrov.

2. korak: Električno vezje

Električno vezje
Električno vezje
Električno vezje
Električno vezje
Električno vezje
Električno vezje

Preden poskusite spajkati, sestavite vse komponente, toplo priporočam, da jih najprej preizkusite na plošči. Pomanjkljive komponente je lažje zamenjati, preden jih porabite ure za spajkanje.

Sprva sem poskušal implementirati LED matriko 8x8 s premičnim registrom 74HC595 (prva slika) in nizom tranzistorjev, vendar sem zaradi številnih žic in zelo nizke izhodne moči prešel na matrični modul MAX7219, ker traja le 5 žic in ga neposredno poganja avtobus SPI.

Vezje, ki sem ga na koncu uporabil, je narisano s Fritzingom. Upoštevajte, da lahko IR LED in sprejemnike povežete s katerim koli od vaših brezplačnih zatičev GPIO.

IR sprejemniki in LED morajo biti neposredno drug čez drugega, vrh LED pa usmerjen proti sprejemniku. Ker želimo simulirati neposredni žarek, ki ga lahko prekine gibanje kroglice, v tem primeru pride do spremembe stanja linije DATA sprejemnika od 0 do 1.

3. korak: Kodiranje senzorjev

Kodiranje senzorjev
Kodiranje senzorjev

Večino tega projekta sem kodiral z uporabo Pycharma, ker omogoča enostavno namestitev SSH na vaš Raspberry Pi z uporabo oddaljenega tolmača. Ne bom podrobno opisal, kako ta program deluje, veliko informacij pa je na voljo na spletnem mestu pycharm.

Trenutno še delam na projektu, a ko bo vse končano, bo celoten projekt na voljo na mojem github profilu

Koda za senzorje je sestavljena iz treh razredov, ki se izvajajo v niti v ozadju na mojem strežniku Flask (ki bo pojasnjen kasneje):

  1. Razred ciljev (povezava) -Ta datoteka sproži vse ločene komponente, ki jih je mogoče poklicati z vstavitvijo pravilne naprave/vodila SPI in številke pin
  2. Razred Matrix (povezava) -To je glavni razred za vklop modula MAX7219
  3. Razred LED in sprejemnika (povezava) - To je glavni razred za vklop infrardečega prekinitvenega žarka z uporabo ločenih niti za zmanjšanje obremenitve procesorja RPi

LED in sprejemnik delujeta na frekvenci 38 kHz, sprejemniki pa vedno pričakujejo, da bo impulz 50% navzgor in 50% navzdol deloval pravilno.

4. korak: Priprava in namestitev senzorjev

Priprava in namestitev senzorjev
Priprava in namestitev senzorjev
Priprava in namestitev senzorjev
Priprava in namestitev senzorjev
Priprava in namestitev senzorjev
Priprava in namestitev senzorjev

Zdaj bomo pripravili IR LED in sprejemnik. Na sliki tabele lahko najdete lokacije za namestitev RPi in senzorjev.

Najprej pa moramo pripraviti ožičenje:

  1. Prepričajte se, da merite količino potrebne žice od lokacije RPi/plošče do lokacije senzorja
  2. Spajajte nožice IR sprejemnika na en konec žice (COM/GND/V+)
  3. Spajate moške priključke na drugem koncu žice

Zdaj bomo pripravili tabelo:

  1. Naredite osnovno risbo (na podlagi slike), kje vrtati. Zelo pomembno je, da sta dve luknji poravnani drug čez drugega, ker bo to lokacija žarka.
  2. Izvrtajte luknje
  3. Če imate nekaj nosilcev LED (povezava), jih lahko postavite v luknjo, da bo bolj trpežna
  4. Na obe strani vstavite + trak LED + sprejemnik
  5. Žice prilepite + prilepite na les, da se ne križajo preveč
  6. Vstavite moške zatiče na ploščo v skladu s prej navedenim vezjem

5. korak: Priprava in namestitev matričnega modula

Priprava in namestitev matričnega modula
Priprava in namestitev matričnega modula

Nato bomo povezali 2 matrični LED moduli

Opomba:

Ker sem uporabljal staro nogometno mizo, so se zaradi držala za cigarete že dvignile proti zgornjemu delu. Če jih nimate, jih morate ustvariti.

Za pripravo žic:

  1. Izmerite žico od mize proti zgornjemu delu mize
  2. Spajkajte nekaj ženskih konektorjev na prvi konec žice
  3. Spajite nekaj moških konektorjev na drugi konec žice

Namestitev matrice:

  1. Izvlecite matrico skozi luknjo na vrhu
  2. Trak + lepilne žice na lesu, da se izognete prečkanju
  3. Moške zatiče vstavite na ploščo v skladu s prej navedenimi vezji

Na neki točki bom dodal majhen korak DIY, da dodam ohišje za matrični modul, vendar so zaenkrat goli.

6. korak: Ustvarjanje IoT

Ustvarjanje IoT
Ustvarjanje IoT

Če se želite samo registrirati in prikazati rezultate, lahko projekt dokončate tako, da napišete majhen delujoč skript python, ki se ponavlja, dokler ena od rezultatov ne doseže 9, nato pa se ponastavi.

Če pa želite svojo mizo povezati z internetom, bi morali naslednjih nekaj korakov vzpenjati po vaši ulici.

V naslednjih nekaj korakih bomo obravnavali naslednje:

  • Konfiguriranje Raspberry Pi
  • Izdelava zbirke podatkov za shranjevanje
  • Ustvarjanje spletne strani
  • Dajanje na splet

Na tej točki, če poznate git, vam priporočam, da naredite skladišče na GitHub/GitLab, da boste spremljali svoje datoteke. Če niste, lahko ustvarite mapo z enako strukturo kot na sliki.

Celoten projekt bo kmalu na voljo na GitHubu. Na voljo pa je začasna datoteka rar z vsemi potrebnimi datotekami.

7. korak: Povežite Raspberry Pi

Nato bomo nastavili okolje maline pi, za to morate izvesti naslednje korake:

  • Povežite se prek SSH na vaš Rasberry Pi (lahko uporabite PuTTY)
  • Ustvarite mapo (primer projekta mkdir) in se z ukazom cd pomaknite v to mapo
  • Ustvarite navidezno okolje Python v tej mapi z ukazom env python3 -m venv --system-site-packages
  • Aktivirajte navidezni tolmač z ukazom source/env/bin/enable
  • Namestite pakete iz zahtev.txt z ukazom python -m pip install package -name
  • Prenesite datoteke iz prej zagotovljene datoteke project_example.rar prek SSH v mapo projekta

Zdaj bi morali zagnati celoten projekt na svojem Raspberry Pi. Svetujem vam, da uporabite Python IDE, kot je PyCharm, ki vam omogoča, da uporabite za odpravljanje napak z oddaljenega tolmača prek SSH in po potrebi neposredno naložite spremembe.

8. korak: Nastavitev zbirke podatkov

Vzpostavitev zbirke podatkov
Vzpostavitev zbirke podatkov

Zdaj morate na podlagi tega modela nastaviti zelo osnovno bazo podatkov.

Najlažji način za to je, da ustvarite svojo bazo podatkov v delovni mizi MySQL, kjer lahko opravite tudi nekaj preskusov.

Ko končate, lahko izvozite izpis podatkovne zbirke in ga naložite v RPi, nato pa ga izvedete s sudo mariadb <pathtofile/file.sql

9. korak: Ustvarite spletno mesto

Ustvarjanje spletnega mesta
Ustvarjanje spletnega mesta
Ustvarjanje spletnega mesta
Ustvarjanje spletnega mesta
Ustvarjanje spletnega mesta
Ustvarjanje spletnega mesta

Nato lahko analizirate (in uporabite) kodo iz datoteke project_example.rar.

Glavna datoteka je Flask.py, ki je kruh in maslo tega projekta:

  • Zažene aplikacijo Flask-SocketIO, ki upravlja zaledje spletnega mesta
  • Ustvari povezavo med zbirko podatkov in Flaskom
  • Omogoča potrditev prijave in registracijo uporabnika
  • Zagotavlja potrebno kodo o tem, kako igrati igro, uporablja socketio za posodobitev spletnega mesta v realnem času med igro
  • Rezultate iger shrani v bazo podatkov

V statičnih mapah in mapah s predlogami lahko najdete HTML/CSS/JS, ki predstavljajo sprednji del spletnega mesta. Lepo jih spremenite glede na svoje želje.

10. korak: Povezovanje s svetovnim spletom

Za povezavo naše spletne strani s spletom bomo uporabili nginx in uwsgi. V primeru projekta lahko najdete potrebne datoteke v mapi conf.

Najprej morate v teh datotekah posodobiti naslednje:

  • V uwsgi-flask.ini morate spremeniti pot parametra virtualenv do svojega tolmača
  • V projektu1-flask.service morate posodobiti del datoteke [Service] s svojimi poverilnicami in potmi do povezanih datotek
  • V datoteki nginx morate posodobiti strežnik in lokacijo / pot v povezano vtičnico

Nato morate privzeto datoteko spletnega strežnika nginx zamenjati z lokacijo konfiguracijske datoteke nginx, spodaj je primer ukazov linux za to

  • 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 znova zaženite nginx.service

Nazadnje morate v mapo systemd dodati storitve po meri, to je primer, kako to storiti:

  • me@my-rpi: ~/project1 $ sudo cp conf/project1-*. storitev/etc/systemd/system/
  • me@my-rpi: ~/project1 $ sudo systemctl daemon-reload
  • me@my-rpi: ~/project1 $ sudo systemctl začni project1-*
  • me@my-rpi: ~/project1 $ sudo systemctl status project1-*

Če želite, da se spletni strežnik zažene ob zagonu vašega malinskega pi, morate uporabiti ukaz storitve sudo systemctl enable project1-*.

Če je pravilno opravljeno, bi moralo po ponovnem zagonu sistema vaše spletno mesto delovati na vašem naslovu IP. Če želite urediti eno od teh konfiguracijskih datotek, morate storitev vedno ustaviti, znova naložiti datoteke in uporabiti ukaz daemon-reload, ki mu sledi zagon, sicer spremembe ne bodo učinkovite.

11. korak: Dokončanje

Dokončanje izklopljeno
Dokončanje izklopljeno

Med pisanjem zadnjega dela tega pouka je ta mali šolski projekt še vedno v teku.

Nekaj ur sem porabil, da sem to naredil v 2,5 tednih. Kljub temu, da se je vse skupaj malo pohitelo, sem še vedno ponosen na doseženo. Med fazo montaže sem naletel na nešteto hroščev/napak/okvarjenih senzorjev, zato ne obupajte preveč, če pri prvem poskusu vse ne deluje.

Najboljša stvar, ki jo lahko storite, je, da prosite ali poiščete pomoč na internetu, obstaja veliko ljudi z veliko boljšim znanjem, ki si zelo želijo pomagati.

Ne nazadnje se želim zahvaliti svojim učiteljem iz novih medijev in komunikacijske tehnologije, ki so mi dali veliko nasvetov in mi pomagali dokončati ta projekt.

Priporočena: