Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Jeg har valgt en smartkort -distributør som mitt første prosjekt fordi jeg liker å spille et kortspill. Det jeg misliker mest er å dele kort. Du må huske for hvert spill hvor mange kort hver person får. Det blir forvirrende når du kjenner mange kortspill. Prosjektet mitt vil også hjelpe mennesker som har problemer med å dele ut kort som eldre mennesker og mennesker som lider av Parkinson.
Rekvisita
- 1 Raspberry Pi (jeg brukte en Raspberry Pi 4)
- SD -kort (16 GB anbefales)
- 1 brødbrød for Raspberry Pi (T-stykke)
- 2 brødbrett
- 1 Strømforsyningsmodul for brødbrett, 5V og 3V3
- 1 LCD -skjerm
- 1 potensiometer
- 1 MPU6050 (akselerometer og gyroskop)
- 1 NPN -transistorer
- 1 PCF8574N I/O -ekspander
- 1 trinnmotor
- 1 ULN2003 breakout board for å kontrollere trinnmotor
- 1 ultralydsensor HC-SR04
- 1 5V likestrømsmotorer
- 1 dioder
- 6 470 Ohm motstander
- 4 10K Ohm motstander
- Elektrisk ledning for å koble til alt
Nyttig å ha mens du lager:
- Loddejern
- Lodding
- Dremel eller jiggsag (noe å kutte tre og abs plast)
Programvare:
- Kitt
- MySQL arbeidsbenk
- Win32 Disk Imager
- Koderedigerer (jeg anbefaler Visual Studio Code)
- WinSCP
- Raspbian bilde
Trinn 1: Forberedelse av Rasperry Pi
Først må vi forberede Raspberry Pi før vi gjør noe annet. Fordi alt vil fungere med Pi, så dette er en av de viktigste delene i kortfordeleren.
Installasjon:
Last ned Raspbian-bildet fra
- Last ned ZIP-filen
- Pakk ut ZIP-filen der du enkelt kan finne den
- Åpne Win32 Disk Imager og velg det ekstraherte bildet
- Velg SD -kortet i rullegardinmenyen og klikk skrive
- Når skriveprosessen er fullført, kan du lukke Win32 Disk Imager
Nå må vi gjøre noen flere ting før vi kan koble til Pi
- Naviger til oppstartsmappen på SD -kortet
- Åpne filen cmdline.txt
- Legg til 'ip = 169.254.10.1' på slutten av linjen atskilt med et mellomrom
- Lagre og avslutt filen
- Lag en fil som heter ssh i den samme katalogen og fjern utvidelsen (dette aktiverer ssh på den første oppstarten slik at vi kan koble til Pi)
- Ta ut SD -kortet på en trygg måte og legg det i Pi
Nå kan vi koble til Pi:
- Ta en ethernet -kabel og sett den ene enden i Pi og den andre enden i datamaskinen
- Åpne kitt
- Skriv inn 169.254.10.1 i feltet Host name
- Sørg for at SSH er valgt og at porten er 22
- Klikk på åpne
- Hvis du får en advarsel, kan du bare fortsette og ignorere den
- Brukernavnet er pi og passordet er bringebær
Konfigurasjon og installasjon av programvare:
Åpne raspi-config med følgende kommando:
sudo raspi-config
Velg det femte alternativet: Grensesnittalternativer
Aktiver SPI og I2C
Deaktiver følgende ting i det tredje alternativet: Oppstartsalternativer:
- Sprutskjerm
- Velg cli for oppstart og ikke skrivebord
Wifi -oppsett:
Wifi er nyttig for enkelt å navigere til nettstedet. Sørg for at du har wifi -legitimasjonen din i nærheten.
For å sette opp wifi trenger vi noen ting:
Legg til wifi ved å bruke denne kommandoen og endre SSID og PASSORD til informasjonen din:
sudo wpa_passphrase "SSID" "PASSWORD" >> /etc/wpa_supplicant/wpa_supplicant.conf
Utfør denne kommandoen for å omkonfigurere wifi:
sudo wpa_cli
Velg riktig grensesnitt:
grensesnitt wlan0
Konfigurer grensesnittet på nytt:
omkonfigurere
Sjekk om omkonfigurasjonen var vellykket med denne kommandoen:
ip a
Hvis du ser en IP-adresse på wlan0-grensesnittet, er alt konfigurert.
Oppdaterer operativsystemet
Oppdater operativsystemet med disse 2 kommandoene:
sudo apt oppdatering
sudo apt full-oppgradering
Konfigurere MariaDB:
Installere Apache Webserver:
sudo apt installere apache2 -y
Installering av MariaDB -server:
sudo apt installer mariadb -server -y
Nå må vi starte på nytt:
sudo omstart
Det anbefales å sikre MariaDB -installasjonen. Du kan gjøre det ved å kjøre denne kommandoen:
sudo mysql_secure_installation
Først blir du bedt om det gjeldende rotpassordet, men standardinstallasjonen har ikke et, så trykk enter.
Deretter blir du spurt om du vil angi et rotpassord, skriv y. Sørg for at du husker passordet!
- Skriv inn y for å fjerne anonyme brukere
- Skriv inn y for å deaktivere root -pålogging eksternt
- Skriv inn y for å fjerne testdatabaser og få tilgang til den
- Skriv inn y for å laste inn private rettigheter
MariaDB -installasjonen din skal være sikker!
Nå kan vi opprette en ny bruker:
Skriv inn mysql -skallet med denne kommandoen:
sudo mysql
Opprett en bruker med brukernavnet mysql og et passord (ditt_passord) følgende kommandoer:
opprett bruker mysql@localhost identifisert av 'ditt_passord';
gi alle rettigheter på *. * til mysql@localhost;
FLUSH -PRIVILEGER;
Avslutt mysql -skallet med denne kommandoen:
exit;
Python -pakker:
Python bør allerede være installert med mindre du valgte Lite -versjonen:
sudo apt installer python3-pip
Vi trenger en god mengde Python -pakker, du kan installere dem alle med følgende kommando:
pip3 installer mysql-connector-python kolbe-socketio kolbe-cors gevent gevent-websocket
Nå må vi starte på nytt en gang til
sudo omstart
Trinn 2: Konfigurere Visual Studio Code og MySQL Workbench
Koble til Pi med MySQL Workbench:
Åpne MySQL Workbench
Opprett en ny forbindelse til Pi med følgende informasjon:
- Tilkoblingsnavn: Raspi
- Tilkoblingsmetode: Standard TCP/IP over SSH
- SSH-vertsnavn: IP-adressen til Pi
Du kan få IP-adressen med denne kommandoen:
ip a
- SSH brukernavn: pi
- MySQL -vertsnavn: 127.0.0.1
- MySQL -serverport: 3306
- Brukernavn: mysql
Klikk ok og skriv inn passordet for brukerens pi, og skriv deretter inn passordet for brukeren mysql.
Sette opp Visual Studio Code:
Åpne Visual Studio Code
Installer disse to utvidelsene:
- Fjernkontroll - SSH
- Remote - SSH: Redigering av konfigurasjonsfiler
Trykk på Visual Studio Code F1 og skriv inn ssh
Velg Remote SSH: Legg til ny SSH -vert
Fyll ut ssh pi@IP-adresse
Trykk på enter i neste trinn
Tilkoblingen er nå gjort til Pi. Du kan koble til Pi ved å trykke F1 og velge koble til ekstern vert.
Skriv inn passordet slik at Visual Studio Code har tilgang til Pi.
En ting til: Installer Python -utvidelsen på den eksterne maskinen, slik at du enkelt kan kjøre og feilsøke kode.
Trinn 3: Fritzing Diagram
I dette trinnet vil jeg forklare kretsen.
Skjemaene ovenfor er laget med Fritzing.
Likestrømsmotor:
Koble GPIO 18 til bunnen av kollektoren, den midterste pinnen på en npn -transistor. Koble bakken til motoren til kollektoren fra transistoren og motorens effekt til 5V. Koble bakken til transistoren til jordlinjen. Koble dioden i barrieren over motoren slik at den blokkerer kurven fra å strømme direkte til transistoren.
Trinnmotor:
Koble trinnmotoren til kontrollkortet. På kontrollkortet er det på den ene siden pins for å koble 5V og jord. De andre pinnene er kontrollpinner. Disse pinnene styrer magnetene inne i motoren slik at den kan snu. Koble disse pinnene til GPIO 12, 16, 20 og 21 på Raspberry Pi.
HC-SR04 Ultralyd:
Denne sensoren kan måle avstander til omtrent 4,5 meter ved hjelp av lyd.
Koble VCC -pinnen til 5V, triggerpinnen til GPIO 25, ekkopinnen med en motstand på 470 Ohm til GPIO 24 og bakken med en motstand på 470 Ohm til bakken.
MPU6050:
Koble VCC -pinnen til 3V3, bakken til bakken, scl til scl på Pi og sda til sda på Pi. For denne sensoren bruker jeg I2C for å kontrollere den. Du kan lese mer om det her. Her er en grunnleggende forklaring: Pi er mesteren og MPU6050 er slaven. Gjennom scl -linjen styrer Pi timingen og sda -linjen brukes til å sende data fra master til slaven eller fra slaven til master. Bare master kan starte dataoverføring.
Lysavhengig motstand:
For å få riktige avlesninger fra LDR bruker jeg en MCP3008 -brikke. Dette sikrer at avlesningene fra ldr er stabile og korrekte konverteres fra analoge til digitale signaler.
Koble 3V3 til den ene siden av ldr med en motstand på 10K Ohm mellom den. Mellom ldr og motstand kobler du en ledning til kanalen 0 på MCP3008. Koble deretter den andre siden av ldr til bakken.
LCD-skjerm:
Du kan bruke LCD -skjermen uten PCF8574, men fordi GPIO -pinnene på Pi er begrensede, bruker jeg en PCF8574 for å lagre noen GPIO -pinner. Du kan også bruke et skiftregister, men jeg foretrekker en PCF8574. Du kan kontrollere PCF8574 med SMbus -protokollen, men jeg skrev min egen klasse for å kontrollere den. Potensiometeret styrer kontrasten.
LCD -display pins:
- VSS til bakken
- VDD til 5V
- V0 til den variable pinnen på potensiometeret
- RS til GPIO 13
- R/W til bakken fordi jeg bare skriver til displayet og ikke leser
- E til GPIO 19
- DB0 til P0 i PCF
- DB1 til P1
- DB2 til P2
- DB3 til P3
- DB4 til P4
- DB5 til P5
- DB6 til P6
- DB7 til P7
- LED+ til 5V
- LED- til bakken
PCF8574 pins:
- A0 til bakken
- A1 til bakken
- A2 til bakken
- Jord til bakke
- VCC til 5V
- SDA til GPIO 27
- SCL til GPIO 22 med motstand på 330 Ohm
Du har kanskje ikke LED+ og LED- avhengig av hvilken type skjerm du har. LED+ og LED- er for bakgrunnsbelysningen.
Koble den positive siden av potensiometeret til 5V og bakken til bakken.
Sørg for å bruke Pull-up motstander!
Trinn 4: Kode på Github
Du finner all nødvendig kode på min Github.
Mapprosjekt 1:
Denne mappen inneholder all koden for backend. I mappen Klasses er alle klassene for å kontrollere maskinvaren.
Mappelagrene inneholder 2 filer: Database.py og DataRepository.py. Database.py opprettholder forbindelsen til databasen og håndterer forespørsler. DataRepository.py inneholder alle spørsmålene som trengs for nettstedet.
App.py er hovedfilen til backend. Denne filen starter automatisk når Pi starter.
Config.py inneholder noen få innstillinger for å koble til databasen. Sørg for at du fyller ut disse filene med din egen informasjon.
Du kan plassere denne mappen hvor som helst i hjemmekatalogen.
Mappe -html:
Denne mappen inneholder alle filene for nettstedet, frontend.
- Mappen inneholder filene for layouten på nettstedet.
- Skrifter inneholder skriftene som brukes på nettstedet.
- Skriptet inneholder alle Javascript -filene for å gjøre nettstedet dynamisk
Denne mappen må være i mappen/var/www/html
Du kan kopiere en fil eller mappe med denne kommandoen:
sudo mv/path/to/current/directory/path/to/destination/directory
For å navigere til nettstedstypen i nettleseren din, viser IP-adressen på LCD-skjermen.
Trinn 5: Normalisert databasestruktur
I dette trinnet skal vi importere databasen.
- Koble til Raspberry Pi med MySQL Workbench
- Klikk på Server -> Dataimport
- Velg Importer selvstendig fil
- I mappen Database-export fra Github er det en sql-fil som heter dump_project1.sql
- Bla til denne filen og klikk på Start import
Det er det. Pi kan nå få tilgang til databasen hvis den har riktig informasjon.
Trinn 6: Etui til kortdistributøren
I dette trinnet vil jeg forklare hva jeg brukte til saken og hvordan jeg monterte alt.
I saken brukte jeg 2 ABS -bokser:
- 265 x 185 x 95 mm
- 171 x 121 x 80 mm
Hullene jeg laget i eskene
Et hull for LCD -displayet, 3 hull for strømkablene, ett for ledningene fra trinnmotoren, likestrømsmotoren og ultralydsensoren.
I den minste boksen laget jeg et hull for ledningene fra komponentene og et hull for kortene å passere gjennom. På toppen laget jeg det største hullet slik at du kan plassere spillekort i enheten.
Jeg monterte likestrømsmotoren med en brakett og litt dobbeltsidig tape. Jeg lagde et trebrett for å legge kortene på med et hull for hjulet for å skyte et kort.
Jeg har valgt ABS -plast fordi den er lett, slik at trinnmotoren enkelt kan snu den. Tre kan være veldig tungt og trinnmotoren kan ha problemer med dette. For å kutte hullene brukte jeg en drill med borekroner designet for metall og en Dremel. Å kutte de større hullene tok mye mer arbeid, og en stikksag ville vært bedre.
Trinn 7: Programmer som en tjeneste
Det er virkelig nyttig å starte koden etter at Pi er startet. For det skal vi gjøre en tjeneste.
Opprett en ny fil kalt smartcard.service med følgende kommando:
sudo nano /etc/systemd/system/smartcard.service
Dette må gå inn i filen:
[Enhet]
Beskrivelse = Smartkort -backend Etter = network.target [Service] ExecStart =/usr/bin/python3 -u app.py WorkingDirectory =/home/pi/project1 StandardOutput = inherit StandardError = inherit Restart = alltid User = pi [Install] WantedBy = multi-user.target WorkingDirectory er banen til mappen der programmet ligger
Nå har du fått ditt eget smartkort!