Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Ik heb een smartcard-distributeur gekozen als mijn eerste project omdat ik graag een kaartspel speel. Waar ik het meest een hekel aan heb, is kaarten delen. Je moet voor elk spel onthouden hoeveel kaarten elke persoon krijgt. Dat wordt verwarrend als je veel kaartspellen kent. Mijn project zal ook mensen helpen die moeite hebben met het uitdelen van kaarten, zoals ouderen en mensen met Parkinson.
Benodigdheden
- 1 Raspberry Pi (ik gebruikte een Raspberry Pi 4)
- SD-kaart (16 GB aanbevolen)
- 1 Outbread stuk voor Raspberry Pi (T-stuk)
- 2 breadboards
- 1 Voedingsmodule voor breadboard, 5V en 3V3
- 1 LCD-scherm
- 1 Potentiometer
- 1 MPU6050 (versnellingsmeter en gyroscoop)
- 1 NPN-transistors
- 1 PCF8574N I/O-uitbreiding
- 1 stappenmotor
- 1 ULN2003 breakout board om de stappenmotor te besturen
- 1 HC-SR04 ultrasone sensor
- 1 5V DC-motoren
- 1 diodes
- 6 470 Ohm weerstanden
- 4 weerstanden van 10K Ohm
- Elektrische draad om alles aan te sluiten
Handig om te hebben tijdens het maken van:
- Soldeerbout
- Soldeer
- Dremel of decoupeerzaag (iets om hout en ABS-plastic te zagen)
Software:
- Stopverf
- MySQL-werkbank
- Win32 Schijfimager
- Code-editor (ik raad Visual Studio Code aan)
- WinSCP
- Raspbische afbeelding
Stap 1: De Rasperry Pi. voorbereiden
Eerst moeten we de Raspberry Pi voorbereiden voordat we iets anders doen. Omdat alles op de Pi zal draaien, is dit een van de belangrijkste onderdelen van de kaartverdeler.
Installatie:
Download de Raspbian-afbeelding van
- Download het ZIP-bestand
- Pak het ZIP-bestand uit waar u het gemakkelijk kunt vinden
- Open Win32 Disk Imager en selecteer de uitgepakte afbeelding
- Selecteer de SD-kaart in het vervolgkeuzemenu en klik op schrijven
- Zodra het schrijfproces is voltooid, kunt u Win32 Disk Imager sluiten
Nu moeten we nog een paar dingen doen voordat we verbinding kunnen maken met de Pi
- Navigeer naar de opstartmap op de SD-kaart
- Open het bestand cmdline.txt
- Voeg 'ip=169.254.10.1' toe aan het einde van de regel gescheiden door een spatie
- Opslaan en het bestand afsluiten
- Maak in dezelfde map een bestand met de naam ssh en verwijder de extensie (hierdoor wordt ssh ingeschakeld bij de eerste keer opstarten, zodat we verbinding kunnen maken met de Pi)
- Werp de SD-kaart veilig uit en plaats deze in de Pi
Nu kunnen we verbinding maken met de Pi:
- Pak een ethernetkabel en steek het ene uiteinde in de Pi en het andere uiteinde in je computer
- Putty openen
- Voer 169.254.10.1 in het veld Hostnaam in
- Zorg ervoor dat SSH is geselecteerd en dat de poort 22. is
- Klik op openen
- Als je een waarschuwing krijgt, kun je gewoon doorgaan en deze negeren
- De gebruikersnaam is pi en het wachtwoord is framboos
Configuratie en installatie van software:
Open raspi-config met het volgende commando:
sudo raspi-config
Selecteer de 5e optie: Interfacing-opties
SPI en I2C inschakelen
Schakel de volgende dingen uit in de 3e optie: Opstartopties:
- Opstartscherm
- Kies cli voor opstarten en niet voor desktop
Wifi-configuratie:
Wifi is handig om gemakkelijk naar de website te navigeren. Zorg ervoor dat u uw wifi-inloggegevens bij de hand hebt.
Om wifi in te stellen hebben we een paar dingen nodig:
Voeg je wifi toe met behulp van deze opdracht en verander SSID en PASWOORD in je gegevens:
sudo wpa_passphrase "SSID" "PASSWORD" >> /etc/wpa_supplicant/wpa_supplicant.conf
Voer deze opdracht uit om uw wifi opnieuw te configureren:
sudo wpa_cli
Selecteer de juiste interface:
interface wlan0
Configureer de interface opnieuw:
opnieuw configureren
Controleer of de herconfiguratie is gelukt met dit commando:
ip a
Als je een IP-adres ziet op de wlan0-interface, dan is alles ingesteld.
Besturingssysteem bijwerken
Werk het besturingssysteem bij met deze 2 opdrachten:
sudo apt update
sudo apt volledige upgrade
MariaDB instellen:
Apache-webserver installeren:
sudo apt installeer apache2 -y
MariaDB-server installeren:
sudo apt install mariadb-server -y
Nu moeten we opnieuw opstarten:
sudo reboot
Het wordt aanbevolen om de MariaDB-installatie te beveiligen. U kunt dit doen door deze opdracht uit te voeren:
sudo mysql_secure_installation
Eerst wordt je om het huidige root-wachtwoord gevraagd, maar de standaardinstallatie heeft er geen, dus druk op enter.
Vervolgens wordt u gevraagd of u een root-wachtwoord wilt instellen, typ y. Zorg ervoor dat u het wachtwoord kunt onthouden!
- Voer y in om anonieme gebruikers te verwijderen
- Voer y in om root-aanmelding op afstand uit te schakelen
- Voer y in om testdatabases te verwijderen en er toegang toe te krijgen
- Voer y in om privileges opnieuw te laden
Uw MariaDB-installatie moet veilig zijn!
Nu kunnen we een nieuwe gebruiker aanmaken:
Voer de mysql-shell in met dit commando:
sudo mysql
Maak een gebruiker aan met de gebruikersnaam mysql en een wachtwoord (your_password) de volgende commando's:
maak gebruiker mysql@localhost geïdentificeerd door 'your_password';
verleen alle privileges op *.* aan mysql@localhost;
SPOEL VOORRECHTEN;
Sluit de mysql-shell af met dit commando:
Uitgang;
Python-pakketten:
Python zou al geïnstalleerd moeten zijn, tenzij je de Lite-versie hebt gekozen:
sudo apt install python3-pip
We hebben een groot aantal Python-pakketten nodig, je kunt ze allemaal installeren met de volgende opdracht:
pip3 installeer mysql-connector-python flask-socketio flask-cors gevent gevent-websocket
Nu moeten we opnieuw opstarten
sudo reboot
Stap 2: Visual Studio Code en MySQL Workbench instellen
Verbinding maken met de Pi met MySQL Workbench:
MySQL-werkbank openen
Maak een nieuwe verbinding met de Pi met de volgende informatie:
- Verbindingsnaam: Raspi
- Verbindingsmethode: Standaard TCP/IP via SSH
- SSH Hostname: IP-adres van de Pi
Je kunt het IP-adres krijgen met dit commando:
ip a
- SSH-gebruikersnaam: pi
- MySQL-hostnaam: 127.0.0.1
- MySQL-serverpoort: 3306
- Gebruikersnaam: mysql
Klik op ok en voer het wachtwoord voor de gebruiker pi in en voer vervolgens het wachtwoord voor de gebruiker mysql in.
Visual Studio-code instellen:
Visual Studio-code openen
Installeer deze 2 extensies:
- Afstandsbediening - SSH
- Extern - SSH: Configuratiebestanden bewerken
Druk in Visual Studio Code F1 en typ ssh
Kies Externe SSH: Nieuwe SSH-host toevoegen
Vul ssh pi@IP-adres in
Druk in de volgende stap op enter
De verbinding is nu gemaakt met de Pi. U kunt verbinding maken met de Pi door op F1 te drukken en verbinden met externe host te selecteren.
Voer het wachtwoord in zodat Visual Studio Code toegang heeft tot de Pi.
Nog een ding: installeer de Python-extensie op de externe machine, zodat u eenvoudig code kunt uitvoeren en debuggen.
Stap 3: Fritzing-diagram
In deze stap zal ik het circuit uitleggen.
Bovenstaande schema's zijn gemaakt met Fritzing.
gelijkstroommotor:
Sluit GPIO 18 aan op de basis van de collector, de middelste pin op een npn-transistor. Sluit de aarde van de motor aan op de collector van de transistor en het vermogen van de motor op 5V. Verbind de massa van de transistor met de massalijn. Sluit de diode in de barrière over de motor aan, zodat deze de stroom blokkeert om rechtstreeks naar de transistor te stromen.
Stappenmotor:
Sluit de stappenmotor aan op de besturingskaart. Op de besturingskaart bevinden zich aan één kant pinnen om 5V en aarde aan te sluiten. De andere pinnen zijn controlepinnen. Deze pinnen regelen de magneten in de motor zodat deze kan draaien. Verbind deze pinnen met GPIO 12, 16, 20 en 21 op de Raspberry Pi.
HC-SR04 Ultrasoon:
Deze sensor kan met geluid afstanden tot ongeveer 4,5 meter meten.
Verbind de VCC-pin met de 5V, de trigger-pin met GPIO 25, de echo-pin met een weerstand van 470 Ohm met GPIO 24 en de aarde met een weerstand van 470 Ohm met de grond.
MPU6050:
Verbind de VCC-pin met 3V3, de grond met aarde, scl met de scl op de Pi en de sda met sda op de Pi. Voor deze sensor gebruik ik I2C om hem aan te sturen. Je kunt er hier meer over lezen. Hier is een basisverklaring: de Pi is de master en de MPU6050 is de slave. Via de scl-lijn regelt de Pi de timings en de sda-lijn wordt gebruikt om gegevens van de master naar de slave of van de slave naar de master te verzenden. Alleen de master kan de gegevensoverdracht initiëren.
Lichtafhankelijke weerstand:
Om correcte uitlezingen van de LDR te krijgen, gebruik ik een MCP3008-chip. Dit zorgt ervoor dat de uitlezingen van de ldr stabiel en correct worden omgezet van analoge naar digitale signalen.
Sluit 3V3 aan op een kant van de ldr met een weerstand van 10K Ohm ertussen. Sluit tussen de ldr en de weerstand een draad aan op kanaal 0 van de MCP3008. Verbind vervolgens de andere kant van de ldr met de grond.
LCD scherm:
Je kunt het LCD-scherm gebruiken zonder een PCF8574, maar omdat de GPIO-pinnen op de Pi beperkt zijn, gebruik ik een PCF8574 om wat GPIO-pinnen op te slaan. Je kunt ook een schuifregister gebruiken, maar ik heb liever een PCF8574. Je kunt de PCF8574 besturen met het SMbus-protocol, maar ik heb mijn eigen klas geschreven om het te besturen. De potmeter regelt het contrast.
LCD-scherm pinnen:
- VSS naar aarde
- VDD naar 5V
- V0 naar de variabele pin van de potentiometer
- RS naar GPIO 13
- R/W naar aarde omdat ik alleen naar het scherm schrijf en niet lees
- E naar GPIO 19
- DB0 tot P0 van de PCF
- DB1 tot P1
- DB2 naar P2
- DB3 naar P3
- DB4 naar P4
- DB5 tot P5
- DB6 tot P6
- DB7 tot P7
- LED+ tot 5V
- LED-naar aarde
PCF8574 pinnen:
- A0 naar aarde
- A1 naar aarde
- A2 naar aarde
- Grond tot grond
- VCC naar 5V
- SDA naar GPIO 27
- SCL naar GPIO 22 met weerstand van 330 Ohm
Mogelijk hebt u geen LED+ en LED-, afhankelijk van het type display dat u heeft. LED+ en LED- is voor de achtergrondverlichting.
Verbind de positieve kant van de potentiometer met 5V en de aarde met aarde.
Zorg ervoor dat je Pull-up weerstanden gebruikt!
Stap 4: Codeer op Github
Je kunt alle benodigde code vinden op mijn Github.
Mapproject1:
Deze map bevat alle code voor de backend. In de map Klasses staan alle klassen om de hardware aan te sturen.
De map repositories bevat 2 bestanden: Database.py en DataRepository.py. Database.py onderhoudt de verbinding met de database en handelt query's af. DataRepository.py bevat alle query's die nodig zijn voor de site.
App.py is het hoofdbestand van de backend. Dit bestand start automatisch wanneer de Pi opstart.
Config.py bevat een aantal instellingen om verbinding te maken met de database. Zorg ervoor dat u deze bestanden invult met uw eigen gegevens.
U kunt deze map overal in uw thuismap plaatsen.
Map-html:
Deze map bevat alle bestanden voor de site, de frontend.
- De map bevat de bestanden voor de lay-out van de site.
- Lettertypen bevat de lettertypen die op de site worden gebruikt.
- Script bevat alle Javascript-bestanden om de site dynamisch te maken
Deze map moet zich in de map /var/www/html. bevinden
U kunt een bestand of map kopiëren met deze opdracht:
sudo mv /pad/naar/huidige/map /pad/naar/bestemming/map
Om naar de site te navigeren typt u in uw browser het IP-adres dat op het LCD-scherm wordt weergegeven.
Stap 5: Genormaliseerde databasestructuur
In deze stap gaan we de database importeren.
- Maak verbinding met uw Raspberry Pi met MySQL Workbench
- Klik op Server -> Gegevens importeren
- Selecteer Zelfstandig bestand importeren
- In de map Database-export van Github staat een sql-bestand genaamd dump_project1.sql
- Blader naar dit bestand en klik op import starten
Dat is het. De Pi heeft nu toegang tot de database als deze over de juiste informatie beschikt.
Stap 6: Case voor de kaartverdeler
In deze stap zal ik uitleggen wat ik voor de zaak heb gebruikt en hoe ik alles heb gemonteerd.
Voor de case heb ik 2 ABS dozen gebruikt:
- 265 x 185 x 95 mm
- 171 x 121 x 80 mm
De gaten die ik in de dozen heb gemaakt
Een gat voor het LCD-scherm, 3 gaten voor de stroomkabels, een voor de draden van de stappenmotor, de DC-motor en de ultrasone sensor.
In de kleinste doos heb ik een gat gemaakt voor de draden van de componenten en een gat voor de kaarten om door te gaan. In de bovenkant heb ik het grootste gat gemaakt zodat je speelkaarten in het apparaat kunt plaatsen.
Ik heb de DC-motor gemonteerd met een beugel en wat dubbelzijdig plakband. Ik maakte een houten plank om de kaarten op te leggen met een gat voor het wiel om een kaart te schieten.
Ik heb voor ABS kunststof gekozen omdat het licht van gewicht is waardoor de stappenmotor hem makkelijk kan draaien. Hout kan erg zwaar zijn en de stappenmotor kan hier problemen mee hebben. Om de gaten te snijden gebruikte ik een boor met boren ontworpen voor metaal en een Dremel. Het snijden van de grotere gaten kostte veel meer werk en een decoupeerzaag zou beter zijn.
Stap 7: Programmeren als een service
Het is erg handig om de code te laten starten nadat de Pi is opgestart. Daarvoor gaan we een dienst maken.
Maak een nieuw bestand met de naam smartcard.service met de volgende opdracht:
sudo nano /etc/systemd/system/smartcard.service
Dit moet in het bestand:
[Eenheid]
Description=Smartcard-backend After=network.target [Service] ExecStart=/usr/bin/python3 -u app.py WorkingDirectory=/home/pi/project1 StandardOutput=overnemen StandardError=overnemen Restart=altijd Gebruiker=pi [Installeren] WantedBy =doel voor meerdere gebruikers WorkingDirectory is het pad naar de map waarin het programma zich bevindt
Nu heb je je eigen Smart Card!