Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Za svojega prvega projekta sem izbral distributerja pametnih kartic, ker rad igram karte. Najbolj mi ni všeč razdajanje kart. Za vsako igro se morate spomniti, koliko kart dobi vsaka oseba. To postane zmedeno, če poznate veliko iger s kartami. Moj projekt bo pomagal tudi ljudem, ki imajo težave pri razdeljevanju kartic, kot so starejši ljudje in ljudje, ki trpijo za Parkinsonovo boleznijo.
Zaloge
- 1 Raspberry Pi (uporabil sem Raspberry Pi 4)
- SD kartica (priporočeno 16 GB)
- 1 kos Outbread za Raspberry Pi (T-kos)
- 2 deski
- 1 Napajalni modul za ploščo, 5V in 3V3
- 1 LCD zaslon
- 1 Potenciometer
- 1 MPU6050 (merilnik pospeška in žiroskop)
- 1 tranzistorja NPN
- 1 PCF8574N V/I razširjevalec
- 1 koračni motor
- 1 Odklopna plošča ULN2003 za krmiljenje koračnega motorja
- 1 ultrazvočni senzor HC-SR04
- 1 5V enosmerni motorji
- 1 diode
- 6 470 ohmski upori
- 4 10K ohmski upori
- Električna žica za povezavo vseh
Koristno pri izdelavi:
- Spajkalnik
- Spajkanje
- Dremel ali žaga (nekaj za rezanje lesa in abs plastike)
Programska oprema:
- Kiti
- Delovna miza MySQL
- Win32 Disk Imager
- Urejevalnik kod (priporočam kodo Visual Studio)
- WinSCP
- Raspbian image
1. korak: Priprava Rasperry Pi
Najprej moramo pripraviti Raspberry Pi, preden naredimo kaj drugega. Ker bo Pi vse deloval, je to eden najpomembnejših del distributerja kartic.
Namestitev:
Prenesite sliko Raspbian s spletnega mesta
- Prenesite datoteko ZIP
- Izvlecite datoteko ZIP, kjer jo lahko preprosto najdete
- Odprite Win32 Disk Imager in izberite izvlečeno sliko
- V spustnem meniju izberite kartico SD in kliknite napiši
- Ko je postopek pisanja končan, lahko zaprete Win32 Disk Imager
Zdaj moramo narediti še nekaj stvari, preden se lahko povežemo s Pi
- Pomaknite se do zagonske mape na kartici SD
- Odprite datoteko cmdline.txt
- Dodajte "ip = 169.254.10.1" na koncu vrstice, ločene s presledkom
- Shranite in zapustite datoteko
- Ustvarite datoteko ssh v istem imeniku in odstranite razširitev (to bo omogočilo ssh pri prvem zagonu, da se lahko povežemo s Pi)
- Varno izvlecite kartico SD in jo vstavite v Pi
Zdaj se lahko povežemo s Pi:
- Primite ethernetni kabel in en konec vstavite v Pi, drugega pa v računalnik
- Odprite Putty
- V polje Ime gostitelja vnesite 169.254.10.1
- Prepričajte se, da je izbran SSH in da so vrata 22
- Kliknite odprto
- Če dobite opozorilo, lahko nadaljujete in ga prezrete
- Uporabniško ime je pi, geslo pa malina
Konfiguracija in namestitev programske opreme:
Odprite raspi-config z naslednjim ukazom:
sudo raspi-config
Izberite peto možnost: Možnosti vmesnika
Omogoči SPI in I2C
V tretji možnosti onemogočite naslednje stvari: Možnosti zagona:
- Začetni zaslon
- Za zagon izberite cli in ne namizja
Nastavitev Wi -Fi:
Wifi je uporaben za enostavno krmarjenje do spletnega mesta. Prepričajte se, da imate poverilnice za wifi blizu.
Za nastavitev wifi potrebujemo nekaj stvari:
Dodajte svoj wifi s tem ukazom in spremenite SSID in GESLO v svoje podatke:
sudo wpa_passphrase "SSID" "PASSWORD" >> /etc/wpa_supplicant/wpa_supplicant.conf
Izvedite ta ukaz, da znova konfigurirate wifi:
sudo wpa_cli
Izberite pravi vmesnik:
vmesnik wlan0
Ponovno konfigurirajte vmesnik:
ponovno konfigurirati
S tem ukazom preverite, ali je bila ponovna konfiguracija uspešna:
ip a
Če na vmesniku wlan0 vidite naslov IP, je vse nastavljeno.
Posodabljanje operacijskega sistema
Posodobite operacijski sistem s temi 2 ukazi:
sudo apt posodobitev
sudo apt popolna nadgradnja
Nastavitev MariaDB:
Namestitev spletnega strežnika Apache:
sudo apt namestite apache2 -y
Namestitev strežnika MariaDB:
sudo apt install mariadb -server -y
Zdaj moramo znova zagnati:
sudo ponovni zagon
Priporočljivo je zavarovati namestitev MariaDB. To lahko storite tako, da zaženete ta ukaz:
sudo mysql_secure_installation
Najprej boste morali vnesti trenutno korensko geslo, vendar ga privzeta namestitev nima, zato pritisnite enter.
Nato boste vprašani, ali želite nastaviti korensko geslo, vnesite y. Geslo si zapomnite!
- Vnesite y, da odstranite anonimne uporabnike
- Vnesite y, da na daljavo onemogočite prijavo root
- Vnesite y, če želite odstraniti testne baze podatkov in dostopati do njih
- Vnesite y, da znova naložite privilegije
Vaša namestitev MariaDB mora biti varna!
Zdaj lahko ustvarimo novega uporabnika:
S tem ukazom vnesite lupino mysql:
sudo mysql
Ustvarite uporabnika z uporabniškim imenom mysql in geslom (your_password) z naslednjimi ukazi:
ustvarite uporabnika mysql@localhost, ki ga označi 'vaša_ geslo';
podeli vse privilegije na *. * storitvi mysql@localhost;
FLUSH PRIVILEGIJE;
Zapustite lupino mysql s tem ukazom:
izhod;
Paketi Python:
Python bi moral biti že nameščen, razen če ste izbrali različico Lite:
sudo apt namestite python3-pip
Potrebujemo veliko količino paketov Python, vse jih lahko namestite z naslednjim ukazom:
pip3 namestite mysql-connector-python flask-socketio flask-cors gevent gevent-websocket
Zdaj moramo znova zagnati
sudo ponovni zagon
2. korak: Nastavitev kode Visual Studio in delovne mize MySQL
Povezovanje s Pi z delovno mizo MySQL:
Odprite delovno mizo MySQL
Vzpostavite novo povezavo s Pi z naslednjimi informacijami:
- Ime povezave: Raspi
- Način povezave: Standardni TCP/IP prek SSH
- Ime gostitelja SSH: IP-naslov Pi
Naslov IP lahko dobite s tem ukazom:
ip a
- Uporabniško ime SSH: pi
- Ime gostitelja MySQL: 127.0.0.1
- Vrata strežnika MySQL: 3306
- Uporabniško ime: mysql
Kliknite v redu in vnesite geslo za uporabnika pi, nato pa vnesite geslo za uporabnika mysql.
Nastavitev kode Visual Studio:
Odprite kodo Visual Studio
Namestite ti 2 razširitvi:
- Daljinski upravljalnik - SSH
- Oddaljeno - SSH: Urejanje konfiguracijskih datotek
Pritisnite Visual Studio Code F1 in vnesite ssh
Izberite Oddaljeni SSH: Dodajte novega gostitelja SSH
Vnesite ssh pi@IP-naslov
V naslednjem koraku pritisnite enter
Povezava je zdaj vzpostavljena s Pi. Na Pi se lahko povežete tako, da pritisnete F1 in izberete povezavo z oddaljenim gostiteljem.
Vnesite geslo, da bo Visual Studio Code imel dostop do Pi.
Še nekaj: Namestite razširitev Python na oddaljeni stroj, da boste lahko preprosto zagnali in odpravili kodo.
Korak 3: Shema zmrzovanja
V tem koraku bom razložil vezje.
Zgornje sheme so narejene s Fritzingom.
DC motor:
Priključite GPIO 18 na dno kolektorja, srednji zatič na npn tranzistorju. Ozemljitev motorja priključite na kolektor s tranzistorja, moč motorja pa na 5V. Ozemljitev tranzistorja priključite na ozemljitveno črto. Priključite diodo v pregrado nad motorjem, da prepreči, da bi tok tekel neposredno na tranzistor.
Koračni motor:
Koračni motor priključite na nadzorno ploščo. Na nadzorni plošči so na eni strani zatiči za povezavo 5V in ozemljitve. Drugi zatiči so kontrolni zatiči. Ti zatiči nadzorujejo magnete v motorju, da se lahko obrnejo. Te zatiče priključite na GPIO 12, 16, 20 in 21 na Raspberry Pi.
HC-SR04 Ultrazvočni:
Ta senzor lahko z zvokom meri razdalje do približno 4,5 metra.
Priključite pin VCC na 5V, sprožilni zatič na GPIO 25, odmevni zatič z uporom 470 Ohm na GPIO 24 in ozemljitev z uporom 470 Ohm na tla.
MPU6050:
Priključite pin VCC na 3V3, tla na tla, scl na scl na Pi in sda na sda na Pi. Za ta senzor uporabljam I2C za nadzor. Več o tem si lahko preberete tukaj. Tu je osnovna razlaga: Pi je mojster, MPU6050 pa suženj. Skozi linijo scl Pi nadzoruje časovne intervale, linija sda pa se uporablja za pošiljanje podatkov od glavnega do podrejenega ali od podrejenega do glavnega. Prenos podatkov lahko sproži samo poveljnik.
Upor, odvisen od svetlobe:
Za pravilne odčitke iz LDR uporabljam čip MCP3008. To zagotavlja, da so odčitki iz ldr stabilni in pravilni, pretvorjeni iz analognih v digitalne signale.
Priključite 3V3 na eno stran ldr z uporom 10K Ohm med njim. Med ldr in uporom priključite žico na kanal 0 MCP3008. Nato priključite drugo stran ldr na tla.
LCD zaslon:
LCD zaslon lahko uporabljate brez PCF8574, a ker so zatiči GPIO na Pi omejeni, uporabljam PCF8574, da shranim nekaj zatičev GPIO. Uporabite lahko tudi register premikov, vendar imam raje PCF8574. PCF8574 lahko nadzirate s protokolom SMbus, vendar sem napisal svoj razred za nadzor. Potenciometer nadzoruje kontrast.
Zatiči LCD zaslona:
- VSS na tla
- VDD do 5V
- V0 do spremenljivega zatiča potenciometra
- RS v GPIO 13
- R/W na zemljo, ker pišem samo na zaslon in ne berem
- E do GPIO 19
- DB0 do P0 PCF
- DB1 do P1
- DB2 do P2
- DB3 do P3
- DB4 do P4
- DB5 do P5
- DB6 do P6
- DB7 do P7
- LED+ do 5V
- LED- ozemljitev
PCF8574 zatiči:
- A0 na tla
- A1 na tla
- A2 na tla
- Od tal do tal
- VCC do 5V
- SDA v GPIO 27
- SCL na GPIO 22 z uporom 330 Ohm
Morda nimate LED+ in LED- odvisno od vrste zaslona, ki ga imate. LED+ in LED- sta za osvetlitev ozadja.
Pozitivno stran potenciometra priključite na 5V, ozemljitev pa na ozemljitev.
Uporabite vlečne upore!
4. korak: Koda na Githubu
Vso potrebno kodo najdete na mojem Githubu.
Mapa projekt 1:
Ta mapa vsebuje vso kodo za ozadje. V mapi Klasses so vsi razredi za nadzor strojne opreme.
Skladišča map vsebujejo 2 datoteki: Database.py in DataRepository.py. Database.py vzdržuje povezavo z bazo podatkov in obravnava poizvedbe. DataRepository.py vsebuje vse poizvedbe, potrebne za spletno mesto.
App.py je glavna datoteka zaledja. Ta datoteka se samodejno zažene, ko se Pi zažene.
Config.py vsebuje nekaj nastavitev za povezavo z bazo podatkov. Te datoteke izpolnite s svojimi podatki.
To mapo lahko postavite kamor koli v domačem imeniku.
Mapa html:
Ta mapa vsebuje vse datoteke za spletno mesto, prednjo stran.
- Mapa vsebuje datoteke za postavitev spletnega mesta.
- Pisave vsebujejo pisave, ki se uporabljajo na spletnem mestu.
- Skript vsebuje vse datoteke Javascript, s katerimi je spletno mesto dinamično
Ta mapa mora biti v mapi/var/www/html
S tem ukazom lahko kopirate datoteko ali mapo:
sudo mv/path/to/current/directory/path/to/destination/directory
Če se želite v brskalniku pomakniti do vrste spletnega mesta, se na zaslonu LCD prikaže naslov IP.
5. korak: Normalizirana struktura baze podatkov
V tem koraku bomo uvozili bazo podatkov.
- Povežite se z Raspberry Pi z delovno mizo MySQL
- Kliknite Strežnik -> Uvoz podatkov
- Izberite Uvozi samostojno datoteko
- V mapi Database-export iz Github je datoteka sql z imenom dump_project1.sql
- Poiščite to datoteko in kliknite začeti uvoz
To je to. Pi lahko zdaj dostopa do baze podatkov, če ima pravilne podatke.
6. korak: Primer za distributerja kartic
V tem koraku bom razložil, kaj sem uporabil za ohišje in kako sem vse montiral.
Za primer sem uporabil 2 ABS škatli:
- 265 x 185 x 95 mm
- 171 x 121 x 80 mm
Luknje, ki sem jih naredil v škatlah
Luknja za LCD zaslon, 3 luknje za napajalne kable, ena za žice koračnega motorja, enosmerni motor in ultrazvočni senzor.
V najmanjši škatli sem naredil luknjo za žice iz komponent in luknjo za prehod kartic. Na vrhu sem naredil največjo luknjo, tako da lahko v napravo postavite igralne karte.
Montiral sem enosmerni motor z nosilcem in nekaj dvostranskim trakom. Naredil sem leseno desko, na katero sem položil karte z luknjo za kolo, s katerim bi ustrelil karto.
Za ABS plastiko sem se odločil, ker je lahka, zato jo lahko koračni motor enostavno obrača. Les je lahko res težak in s tem bi lahko imel koračni motor težave. Za rezanje lukenj sem uporabil vrtalnik s svedri za kovino in Dremel. Rezanje večjih lukenj je zahtevalo veliko več dela in žaga bi bila boljša.
7. korak: Program kot storitev
Zelo koristno je, da se koda zažene po zagonu Pi. Za to bomo naredili storitev.
Ustvarite novo datoteko, imenovano smartcard.service, z naslednjim ukazom:
sudo nano /etc/systemd/system/smartcard.service
To mora iti v datoteko:
[Enota]
Opis = Zaledje pametne kartice Po = network.target [Storitev] ExecStart =/usr/bin/python3 -u app.py WorkingDirectory =/home/pi/project1 StandardOutput = podeduje StandardError = deduje Restart = vedno Uporabnik = pi [Namesti] WantedBy = cilj za več uporabnikov WorkingDirectory je pot do mape, kjer se nahaja program
Zdaj imate svojo pametno kartico!