Indholdsfortegnelse:

Raspberry Pi IoT Bordfodboldbord: 11 trin
Raspberry Pi IoT Bordfodboldbord: 11 trin

Video: Raspberry Pi IoT Bordfodboldbord: 11 trin

Video: Raspberry Pi IoT Bordfodboldbord: 11 trin
Video: Raspberry Pi IoT Server Tutorial: InfluxDB, MQTT, Grafana, Node-RED & Docker 2024, November
Anonim
Raspberry Pi IoT Bordfodboldbord
Raspberry Pi IoT Bordfodboldbord

Velkommen til min version af et hacket bordfodboldbord, som en del af et studenterprojekt for nye medier og kommunikationsteknologi. Jeg voksede grundlæggende op omkring fodbold og poolborde, så jeg tænkte, at det ville være fantastisk at prøve at forbinde en af disse enheder til internettet.

Hovedopsætningen bruger et eksisterende fodboldbord, der er forbundet til en Raspberry Pi, som kan udføre alle følgende opgaver:

  • Bruger GPIO -ben til at drive IR LED/modtagere og 8x8 dot matrixmodulerne
  • Kører et Flask -websted ved hjælp af nginx
  • Kører en MySQL/MariaDB -database til datalagring

For at kunne genskabe dette projekt skal du have følgende færdigheder:

Bagende:

  • Forståelse af HTML/CSS/Javascript til webstedets klient
  • Forståelse af Python med Flask/Flask-SocketIO/Jinja2 til serversiden af webstedet
  • Grundlæggende viden om MySQL
  • Vide, hvordan du kører en webserver

Prototype

  • Grundlæggende viden om, hvordan man tilslutter et elektrisk kredsløb
  • Lodning
  • Grundlæggende forståelse for, hvordan man skriver et script i Python
  • Arbejde med Linux (Raspbian)
  • At have meget tålmodighed, fordi der vil være en masse fejlfinding involveret

Trin 1: Materialerne

Her er listen med alle nødvendige dele til tabellen:

  • Raspberry Pi Model 3 (med hus)
  • T-skomager til tilslutning af Pi til brødbrættet
  • Bordfodboldbord (jeg brugte et meget gammelt bord, der lignede dette. Skal være villig til at bore huller i det)
  • MAX7219 Arduino Dot Matrix Modul (2)
  • IR LED -emittere (2+ fordi de går i stykker, ligner denne)
  • IR -modtagere (2+, fordi de også går i stykker, ligner denne)
  • Grundlæggende loddefrit brødbræt
  • Masser og masser af tråd (afhænger af størrelsen på fodboldbordet)
  • hanstik (30+)
  • hunstik (10+)
  • 100-220 Ohm modstande (4+)
  • loddematerialer
  • trådstropper
  • LED -holdere
  • nogle træ/skruer i tilfælde af at du vil videresende bolden i tagrenden

De samlede omkostninger ved dette projekt afhænger helt af omkostningerne ved dit bordfodboldbord (dyrt). Udover bordet vil materialerne maksimalt være 150 euro.

Trin 2: Det elektriske kredsløb

Det elektriske kredsløb
Det elektriske kredsløb
Det elektriske kredsløb
Det elektriske kredsløb
Det elektriske kredsløb
Det elektriske kredsløb

Inden du forsøger at lodde, saml alle komponenterne. Jeg anbefaler stærkt at teste det på et brødbræt først. Det er lettere at udskifte defekte komponenter, før du har brugt timer på at lodde dem.

Først forsøgte jeg at implementere 8x8 LED Matrix med et 74HC595 skiftregister (første billede) og transistor array, men på grund af de mange ledninger og meget lav output skiftede jeg til MAX7219 Dot Matrix Module, fordi det kun tager 5 ledninger og er direkte drevet af en SPI -bus.

Det kredsløb, jeg til sidst brugte, er tegnet med Fritzing. Bemærk, at IR -lysdioderne og modtagerne kan tilsluttes alle dine gratis GPIO -pins.

IR -modtagerne og LED'en skal være direkte på tværs af hinanden, og toppen af LED'en skal pege mod modtageren. Fordi vi vil simulere en direkte stråle, der kan brydes af kuglens bevægelse, i hvilket tilfælde der vil være en tilstandsændring af modtagerens DATA -linje fra 0 til 1.

Trin 3: Kodning af sensorerne

Kodning af sensorerne
Kodning af sensorerne

Jeg har kodet det meste af dette projekt ved hjælp af Pycharm, fordi det tillader let SSH -implementering til din Raspberry Pi ved hjælp af en fjerntolk. Jeg vil ikke gå i detaljer med hvordan dette program fungerer, men der kan findes mange oplysninger på pycharms websted.

Jeg arbejder i øjeblikket stadig på projektet, men når alt er gjort, vil hele projektet være tilgængeligt på min github -profil

Koden til sensorerne består af 3 klasser, der køres i en baggrunds tråd på min Flask -server (som vil blive forklaret senere):

  1. Målklassen (link) -Denne fil starter alle de separate komponenter, som kan aktiveres ved at indsætte den korrekte SPI -enhed/bus og pinkode
  2. Matrix -klassen (link) -Dette er hovedklassen til at tænde for MAX7219 -modulet
  3. LED og modtager klasse (link) - Dette er hovedklassen til at tænde den infrarøde break -beam ved hjælp af separate tråde for at reducere CPU belastning af RPi

Lysdioden og modtageren arbejder begge på en 38 kHz frekvens, og modtagerne forventer altid, at en puls på 50% og 50% ned fungerer korrekt.

Trin 4: Forberedelse og placering af sensorerne

Forberedelse og placering af sensorerne
Forberedelse og placering af sensorerne
Forberedelse og placering af sensorerne
Forberedelse og placering af sensorerne
Forberedelse og placering af sensorerne
Forberedelse og placering af sensorerne

Nu skal vi forberede IR LED og modtager. På billedet af tabellen kan du finde de steder, hvor RPi'erne og sensorerne skal placeres.

Men først skal vi forberede ledningerne:

  1. Sørg for at måle mængden af ledning, der er nødvendig fra RPi/breadboard -placeringen til sensorplaceringen
  2. Lod lodmodtagerens ben til den ene ende af ledningen (COM/GND/V+)
  3. Lodde hanstikkets stykker i den anden ende af tråden

Nu skal vi forberede bordet:

  1. Lav en grundlæggende tegning (baseret på billedet) om, hvor der skal bores. Det er meget vigtigt, at de 2 huller er justeret på tværs af hinanden, fordi dette vil være bjælkens placering.
  2. Bor hullerne
  3. Hvis du har nogle LED -holdere (link), kan du sætte dem inde i hullet for at gøre det mere robust
  4. Indsæt + tape LED + modtageren på begge sider
  5. Spænd ledningerne + tape dem på træet, så de ikke krydser for meget
  6. Sæt hanstifterne på brødbrættet i henhold til det tidligere leverede kredsløb

Trin 5: Forberedelse og placering af matrixmodulet

Forberedelse og placering af matrixmodulet
Forberedelse og placering af matrixmodulet

Dernæst skal vi forbinde de 2 LED -matrixmoduler

Bemærk:

Fordi jeg brugte et gammelt bordfodboldbord, gik der allerede huller op mod den øvre del på grund af cigaretholdere. Hvis du ikke har disse, skal du oprette dem.

For at forberede ledningerne:

  1. Mål ledningen fra brødbrættet mod den øverste del af bordet
  2. Lod nogle hunstik til den første ende af ledningen
  3. Lod nogle hanstik til den anden ende af ledningen

Placering af matrixen:

  1. Tag matricen ud gennem hullet på toppen
  2. Rem + tape ledningerne inde på træet for at undgå at krydse
  3. Sæt hanstifterne på brødbrættet i henhold til det tidligere leverede kredsløb

På et tidspunkt vil jeg tilføje et lille DIY -trin for at tilføje et hus til matrixmodulet, men for nu er de nøgne.

Trin 6: Gør det til IoT

Gør det IoT
Gør det IoT

Hvis du bare vil registrere og vise partiturerne, kan du afslutte projektet ved at skrive et lille kørende python -script, der sløjfer, indtil en af scorerne når 9 og derefter nulstilles.

Men hvis du vil forbinde dit bord med internettet, skal de næste par trin lige op i din gyde.

I de næste par trin behandler vi følgende:

  • Konfiguration af Raspberry Pi
  • Oprettelse af en database til opbevaring
  • Oprettelse af webstedet
  • Sætter det online

På dette tidspunkt, hvis du er fortrolig med git, anbefaler jeg, at du opretter et lager på GitHub/GitLab for at holde styr på dine filer. Hvis du ikke er det, kan du oprette en mappe med samme struktur som på billedet.

Det fulde projekt vil snart være tilgængeligt på GitHub. En midlertidig rar -fil med alle de nødvendige filer er dog tilgængelig.

Trin 7: Tilslutning af Raspberry Pi

Dernæst skal vi konfigurere hindbær pi -miljøet, for at gøre dette skal du udføre følgende trin:

  • Tilslut over SSH til din Rasberry Pi (du kan bruge PuTTY)
  • Opret en mappe (eksempel mkdir -projekt), og flyt til denne mappe ved hjælp af cd -kommandoen
  • Opret et virtuelt Python-miljø i denne mappe ved hjælp af kommandoen python3 -m venv --system-site-packages env
  • Aktiver den virtuelle tolk med kommandoen source/env/bin/active
  • Installer pakkerne fra requirements.txt med python -m pip install kommando med pakkenavn
  • Overfør filerne fra den tidligere leverede projekt_eksempel.rar -fil over SSH i din projektmappe

Nu skulle du kunne køre det fulde projekt på din Raspberry Pi. Jeg råder dig til at bruge en Python IDE som PyCharm, som giver dig mulighed for at bruge dig til at fejlsøge fra din fjerntolk over SSH og direkte uploade ændringer, hvis det er nødvendigt.

Trin 8: Opsætning af databasen

Opsætning af databasen
Opsætning af databasen

Nu skal du oprette en meget grundlæggende database, baseret på denne model.

Den nemmeste måde at gøre dette på er at oprette din database i MySQL -arbejdsbordet, hvor du også kan foretage nogle test.

Når det er gjort, kan du eksportere en dump af din database og uploade den på din RPi og derefter udføre den med sudo mariadb <pathtofile/file.sql

Trin 9: Oprettelse af webstedet

Oprettelse af webstedet
Oprettelse af webstedet
Oprettelse af webstedet
Oprettelse af webstedet
Oprettelse af webstedet
Oprettelse af webstedet

Dernæst kan du analysere (og bruge) koden i filen project_example.rar.

Hovedfilen er Flask.py, som er brød og smør i dette projekt:

  • Kører en Flask-SocketIO-app, der håndterer webstedets backend
  • Opretter en forbindelse mellem databasen og kolben
  • Giver loginvalidering og brugerregistrering
  • Giver den nødvendige kode til, hvordan man spiller et spil, bruger socketio til at opdatere webstedet i realtid under spillet
  • Sætter spilresultaterne i databasen

I de statiske mapper og skabeloner kan du finde HTML/CSS/JS, som udgør frontend -delen af webstedet. Du er velkommen til at ændre disse efter din egen smag.

Trin 10: Tilslutning til World Wide Web

For at forbinde vores websted med internettet bruger vi nginx og uwsgi. I projekteksemplet kan du finde de nødvendige filer i conf -mappen.

Først og fremmest skal du opdatere følgende i disse filer:

  • I uwsgi-flask.ini skal du ændre stien til virtualenv-parameteren til din tolk
  • I project1-flask.service skal du opdatere [Service] -delen af filen med dine legitimationsoplysninger og stier til de tilknyttede filer
  • I nginx -filen skal du opdatere serveren og placering / sti til din tilhørende stikkontakt

Næste skal du udskifte standard nginx webserverfilen med placeringen af din nginx config -fil, herunder er et eksempel på linux -kommandoer for at gøre dette

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

Endelig skal du tilføje de tilpassede tjenester til din systemd -mappe, dette er et eksempel på, hvordan du gør det:

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

Hvis du vil have webserveren til at starte ved opstart af din hindbær pi, skal du bruge sudo systemctl enable project1-*. Service kommando.

Hvis det gøres korrekt, skal dit websted køre på din IP -adresse efter en genstart af systemet. Hvis du vil redigere en af disse konfigurationsfiler, skal du altid stoppe tjenesten, uploade filerne igen og bruge kommandoen daemon-reload efterfulgt af en start, ellers vil ændringerne ikke være effektive.

Trin 11: Afslutning

Afslutter
Afslutter

Mens du skriver den sidste del af denne instruktive, er dette lille skoleprojekt stadig i gang.

Jeg har brugt utallige timer på at få dette gjort på 2,5 uger. Selvom alt blev hastet lidt, er jeg stadig stolt over, hvad jeg har opnået. I samlingsfasen har jeg stødt på utallige fejl/fejl/defekte sensorer, så vær ikke for modløs, hvis alt ikke fungerer ved første forsøg.

Det bedste du kan gøre er at bede eller søge hjælp på internettet, der er mange mennesker med langt bedre viden, der er meget ivrige efter at hjælpe dig.

Sidst men ikke mindst vil jeg takke mine lærere fra New Media and Communication Technology for at have givet mig mange råd og hjulpet mig med at afslutte dette projekt.

Anbefalede: