Automatische kaartverdeler: 7 stappen
Automatische kaartverdeler: 7 stappen
Anonim
Automatische kaartverdeler
Automatische kaartverdeler

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

  1. Download het ZIP-bestand
  2. Pak het ZIP-bestand uit waar u het gemakkelijk kunt vinden
  3. Open Win32 Disk Imager en selecteer de uitgepakte afbeelding
  4. Selecteer de SD-kaart in het vervolgkeuzemenu en klik op schrijven
  5. 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

  1. Navigeer naar de opstartmap op de SD-kaart
  2. Open het bestand cmdline.txt
  3. Voeg 'ip=169.254.10.1' toe aan het einde van de regel gescheiden door een spatie
  4. Opslaan en het bestand afsluiten
  5. 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)
  6. Werp de SD-kaart veilig uit en plaats deze in de Pi

Nu kunnen we verbinding maken met de Pi:

  1. Pak een ethernetkabel en steek het ene uiteinde in de Pi en het andere uiteinde in je computer
  2. Putty openen
  3. Voer 169.254.10.1 in het veld Hostnaam in
  4. Zorg ervoor dat SSH is geselecteerd en dat de poort 22. is
  5. Klik op openen
  6. Als je een waarschuwing krijgt, kun je gewoon doorgaan en deze negeren
  7. 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

Fritzing-diagram
Fritzing-diagram
Fritzing-diagram
Fritzing-diagram
Fritzing-diagram
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

Genormaliseerde databasestructuur
Genormaliseerde databasestructuur

In deze stap gaan we de database importeren.

  1. Maak verbinding met uw Raspberry Pi met MySQL Workbench
  2. Klik op Server -> Gegevens importeren
  3. Selecteer Zelfstandig bestand importeren
  4. In de map Database-export van Github staat een sql-bestand genaamd dump_project1.sql
  5. 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

Koffer voor de kaartverdeler
Koffer voor de kaartverdeler
Koffer voor de kaartverdeler
Koffer voor de kaartverdeler
Koffer voor de kaartverdeler
Koffer 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!