Spisu treści:

Automatyczny dystrybutor kart: 7 kroków
Automatyczny dystrybutor kart: 7 kroków

Wideo: Automatyczny dystrybutor kart: 7 kroków

Wideo: Automatyczny dystrybutor kart: 7 kroków
Wideo: A Wy na jakim etapie związku jesteście? 😂 #shorts 2024, Listopad
Anonim
Automatyczny dystrybutor kart
Automatyczny dystrybutor kart

Na swój pierwszy projekt wybrałem dystrybutora kart inteligentnych, ponieważ lubię grać w gry karciane. Najbardziej nie lubię rozdawania kart. W każdej grze musisz pamiętać, ile kart otrzymuje każda osoba. To staje się mylące, gdy znasz wiele gier karcianych. Mój projekt pomoże również osobom, które mają problemy z rozdawaniem kart, takim jak osoby starsze i osoby cierpiące na chorobę Parkinsona.

Kieszonkowe dzieci

  • 1 Raspberry Pi (użyłem Raspberry Pi 4)
  • Karta SD (zalecane 16 GB)
  • 1 element Outbread dla Raspberry Pi (trójnik)
  • 2 deski do krojenia chleba
  • 1 moduł zasilający do płytki stykowej, 5V i 3V3
  • 1 wyświetlacz LCD
  • 1 potencjometr
  • 1 MPU6050 (akcelerometr i żyroskop)
  • 1 tranzystory npn
  • 1 ekspander we/wy PCF8574N
  • 1 silnik krokowy
  • 1 tabliczka zaciskowa ULN2003 do sterowania silnikiem krokowym;
  • 1 czujnik ultradźwiękowy HC-SR04
  • 1 silniki 5V DC
  • 1 dioda
  • 6 rezystorów 470 Ohm
  • 4 rezystory 10K Ohm
  • Przewód elektryczny do podłączenia wszystkiego

Przydatne mieć podczas robienia:

  • Lutownica
  • Lutować
  • Dremel lub wyrzynarka (coś do cięcia drewna i plastiku ABS)

Oprogramowanie:

  • Kit
  • Środowisko pracy MySQL
  • Win32 Disk Imager
  • Edytor kodu (polecam Visual Studio Code)
  • WinSCP
  • Obraz raspański

Krok 1: Przygotowanie Rasperry Pi

Najpierw musimy przygotować Raspberry Pi, zanim zrobimy cokolwiek innego. Ponieważ wszystko będzie działać z Pi, więc jest to jeden z najważniejszych elementów dystrybutora kart.

Instalacja:

Pobierz obraz Raspbian z

  1. Pobierz plik ZIP
  2. Rozpakuj plik ZIP, gdzie możesz go łatwo znaleźć
  3. Otwórz Win32 Disk Imager i wybierz wyodrębniony obraz
  4. Wybierz kartę SD z rozwijanego menu i kliknij napisz
  5. Po zakończeniu procesu zapisu możesz zamknąć program Win32 Disk Imager

Teraz musimy zrobić jeszcze kilka rzeczy, zanim będziemy mogli połączyć się z Pi

  1. Przejdź do folderu rozruchowego na karcie SD
  2. Otwórz plik cmdline.txt
  3. Dodaj 'ip=169.254.10.1' na końcu linii oddzielone spacją
  4. Zapisz i wyjdź z pliku
  5. Utwórz w tym samym katalogu plik o nazwie ssh i usuń rozszerzenie (to włączy ssh przy pierwszym uruchomieniu, abyśmy mogli połączyć się z Pi)
  6. Bezpiecznie wyjmij kartę SD i włóż ją do Pi

Teraz możemy połączyć się z Pi:

  1. Chwyć kabel Ethernet i włóż jeden koniec do Pi, a drugi do komputera
  2. Otwarta szpachla
  3. Wpisz 169.254.10.1 w polu Nazwa hosta
  4. Upewnij się, że wybrano SSH, a port to 22
  5. Kliknij otwórz
  6. Jeśli otrzymasz ostrzeżenie, możesz po prostu kontynuować i je zignorować
  7. Nazwa użytkownika to pi, a hasło to malina

Konfiguracja i instalacja oprogramowania:

Otwórz raspi-config za pomocą następującego polecenia:

sudo raspi-config

Wybierz piątą opcję: Opcje interfejsu

Włącz SPI i I2C

Wyłącz następujące rzeczy w trzeciej opcji: Opcje rozruchu:

  • Ekran powitalny
  • Wybierz cli do uruchamiania, a nie pulpit

Konfiguracja Wi-Fi:

Wifi jest przydatne do łatwego poruszania się po stronie. Upewnij się, że masz zamknięte dane logowania do Wi-Fi.

Aby skonfigurować Wi-Fi, potrzebujemy kilku rzeczy:

Dodaj swoje Wi-Fi za pomocą tego polecenia i zmień SSID i HASŁO do swoich informacji:

sudo wpa_passphrase "SSID" "HASŁO" >> /etc/wpa_supplicant/wpa_supplicant.conf

Wykonaj to polecenie, aby ponownie skonfigurować Wi-Fi:

sudo wpa_cli

Wybierz odpowiedni interfejs:

interfejs wlan0

Zmień konfigurację interfejsu:

przekonfigurować

Sprawdź, czy rekonfiguracja przebiegła pomyślnie za pomocą tego polecenia:

ip a

Jeśli widzisz adres IP w interfejsie wlan0, wszystko jest skonfigurowane.

Aktualizacja systemu operacyjnego

Zaktualizuj system operacyjny za pomocą tych 2 poleceń:

aktualizacja sudo apt

sudo apt pełna aktualizacja

Konfiguracja MariaDB:

Instalowanie serwera WWW Apache:

sudo apt zainstaluj apache2 -y

Instalowanie serwera MariaDB:

sudo apt zainstaluj serwer mariadb -y

Teraz musimy zrestartować:

ponowne uruchomienie sudo

Zalecane jest zabezpieczenie instalacji MariaDB. Możesz to zrobić, uruchamiając to polecenie:

sudo mysql_secure_installation

Najpierw zostaniesz poproszony o aktualne hasło roota, ale domyślna instalacja nie ma go, więc naciśnij enter.

Następnie zostaniesz zapytany, czy chcesz ustawić hasło roota, wpisz y. Upewnij się, że pamiętasz hasło!

  • Wpisz y, aby usunąć anonimowych użytkowników
  • Wpisz y, aby wyłączyć zdalne logowanie root
  • Wpisz y, aby usunąć testowe bazy danych i uzyskać do nich dostęp
  • Wpisz y, aby ponownie załadować uprawnienia

Twoja instalacja MariaDB powinna być bezpieczna!

Teraz możemy stworzyć nowego użytkownika:

Wejdź do powłoki mysql za pomocą tego polecenia:

sudo mysql

Utwórz użytkownika z nazwą użytkownika mysql i hasłem (twoje_hasło) następującymi poleceniami:

utwórz użytkownika mysql@localhost identyfikowanego przez 'twoje_hasło';

nadaj wszystkie przywileje na *.* mysql@localhost;

PRZYWILEJE WSPÓŁPRACUJĄCE;

Wyjdź z powłoki mysql za pomocą tego polecenia:

Wyjście;

Pakiety Pythona:

Python powinien być już zainstalowany, chyba że wybrałeś wersję Lite:

sudo apt zainstaluj python3-pip

Potrzebujemy sporej ilości pakietów Pythona, możesz je wszystkie zainstalować za pomocą następującego polecenia:

pip3 zainstaluj mysql-connector-python flask-socketio flask-cors gevent gevent-websocket

Teraz musimy zrestartować komputer jeszcze raz

ponowne uruchomienie sudo

Krok 2: Konfigurowanie Visual Studio Code i MySQL Workbench

Łączenie się z Pi za pomocą MySQL Workbench:

Otwórz środowisko pracy MySQL

Nawiąż nowe połączenie z Pi z następującymi informacjami:

  • Nazwa połączenia: Raspi
  • Metoda połączenia: Standardowy TCP/IP przez SSH
  • Nazwa hosta SSH: adres IP Pi

Możesz uzyskać adres IP za pomocą tego polecenia:

ip a

  • Nazwa użytkownika SSH: pi
  • Nazwa hosta MySQL: 127.0.0.1
  • Port serwera MySQL: 3306
  • Nazwa użytkownika: mysql

Kliknij ok i wprowadź hasło dla użytkownika pi, a następnie wprowadź hasło dla użytkownika mysql.

Konfigurowanie kodu programu Visual Studio:

Otwórz kod programu Visual Studio

Zainstaluj te 2 rozszerzenia:

  • Zdalny - SSH
  • Zdalny - SSH: edytowanie plików konfiguracyjnych

Naciśnij Visual Studio Code F1 i wpisz ssh

Wybierz zdalny SSH: Dodaj nowego hosta SSH

Wpisz ssh pi@adres IP

W następnym kroku naciśnij enter

Połączenie jest teraz nawiązane z Pi. Możesz połączyć się z Pi, naciskając F1 i wybierając połącz ze zdalnym hostem.

Wprowadź hasło, aby Visual Studio Code miał dostęp do Pi.

Jeszcze jedno: zainstaluj rozszerzenie Pythona na zdalnej maszynie, aby móc łatwo uruchamiać i debugować kod.

Krok 3: Schemat spieniania

Schemat frytkowania
Schemat frytkowania
Schemat frytkowania
Schemat frytkowania
Schemat frytkowania
Schemat frytkowania

W tym kroku wyjaśnię obwód.

Powyższe schematy są wykonane za pomocą Fritzing.

Silnik prądu stałego:

Podłącz GPIO 18 do podstawy kolektora, środkowy pin na tranzystorze npn. Podłącz masę silnika do kolektora z tranzystora i moc silnika do 5V. Podłącz masę tranzystora do linii uziemienia. Podłącz diodę w barierze nad silnikiem tak, aby blokowała przepływ prądu bezpośrednio do tranzystora.

Silnik krokowy:

Podłącz silnik krokowy do tablicy kontrolnej. Na płytce sterującej znajdują się z jednej strony piny do podłączenia 5V i masy. Pozostałe piny to piny kontrolne. Te kołki sterują magnesami wewnątrz silnika, dzięki czemu może się on obracać. Podłącz te piny do GPIO 12, 16, 20 i 21 na Raspberry Pi.

HC-SR04 Ultradźwiękowy:

Ten czujnik może mierzyć odległości do około 4,5 metra za pomocą dźwięku.

Podłącz pin VCC do 5V, pin wyzwalający do GPIO 25, pin echo z rezystorem 470 Ohm do GPIO 24 a masę z rezystorem 470 Ohm do masy.

MPU6050:

Podłącz pin VCC do 3V3, uziemienie do masy, scl do scl na Pi i sda do sda na Pi. Do tego czujnika używam I2C do sterowania nim. Więcej na ten temat przeczytasz tutaj. Oto podstawowe wyjaśnienie: Pi jest urządzeniem głównym, a MPU6050 urządzeniem podrzędnym. Poprzez linię scl Pi kontroluje taktowanie, a linia sda służy do wysyłania danych od urządzenia nadrzędnego do urządzenia podrzędnego lub od urządzenia podrzędnego do urządzenia nadrzędnego. Tylko master może zainicjować transfer danych.

Rezystor świetlny:

Aby uzyskać prawidłowe odczyty z LDR, używam układu MCP3008. Daje to pewność, że odczyty z ldr są stabilne i poprawnie konwertowane z sygnałów analogowych na cyfrowe.

Podłącz 3V3 do jednej strony ldr z opornikiem 10K Ohm pomiędzy nimi. Pomiędzy ldr a rezystorem podłącz przewód do kanału 0 MCP3008. Następnie podłącz drugą stronę ldr do ziemi.

Wyświetlacz LCD:

Możesz używać wyświetlacza LCD bez PCF8574, ale ponieważ piny GPIO na Pi są ograniczone, używam PCF8574 do zapisania niektórych pinów GPIO. Możesz również użyć rejestru przesuwnego, ale wolę PCF8574. PCF8574 można sterować protokołem SMbus, ale napisałem własną klasę do sterowania tym. Potencjometr kontroluje kontrast.

Piny wyświetlacza LCD:

  • VSS do ziemi
  • VDD do 5V
  • V0 do zmiennego pinu potencjometru
  • RS do GPIO 13
  • R/W do masy bo tylko piszę na wyświetlaczu a nie czytam
  • 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-do ziemi

Piny PCF8574:

  • A0 do ziemi
  • A1 do ziemi
  • A2 do ziemi
  • Ziemia do ziemi
  • VCC do 5V
  • SDA do GPIO 27
  • SCL do GPIO 22 z rezystorem 330 Ohm

Możesz nie mieć diod LED+ i LED- w zależności od rodzaju wyświetlacza. LED+ i LED- służą do podświetlenia.

Podłącz dodatnią stronę potencjometru do 5V, a masę do masy.

Upewnij się, że używasz rezystorów podciągających!

Krok 4: Kod na Github

Cały potrzebny kod znajdziesz na moim Github.

Projekt folderu1:

Ten folder zawiera cały kod dla backendu. W folderze Klasy znajdują się wszystkie klasy do sterowania sprzętem.

Folder repozytoria zawiera 2 pliki: Database.py i DataRepository.py. Database.py utrzymuje połączenie z bazą danych i obsługuje zapytania. DataRepository.py zawiera wszystkie zapytania potrzebne do serwisu.

App.py to główny plik backendu. Ten plik uruchamia się automatycznie po uruchomieniu Pi.

Config.py zawiera kilka ustawień do łączenia się z bazą danych. Upewnij się, że wypełniłeś te pliki własnymi informacjami.

Możesz umieścić ten folder w dowolnym miejscu w swoim katalogu domowym.

Folder html:

Ten folder zawiera wszystkie pliki witryny, frontend.

  • Folder zawiera pliki układu strony.
  • Czcionki zawiera czcionki używane na stronie.
  • Skrypt zawiera wszystkie pliki JavaScript, aby strona była dynamiczna

Ten folder musi znajdować się w folderze /var/www/html

Możesz skopiować plik lub folder za pomocą tego polecenia:

sudo mv /ścieżka/do/bieżącego/katalogu /ścieżka/do/docelowego/katalogu

Aby przejść do strony, wpisz w przeglądarce adres IP wyświetlany na wyświetlaczu LCD.

Krok 5: Znormalizowana struktura bazy danych

Znormalizowana struktura bazy danych
Znormalizowana struktura bazy danych

W tym kroku zaimportujemy bazę danych.

  1. Połącz się ze swoim Raspberry Pi za pomocą MySQL Workbench
  2. Kliknij Serwer -> Import danych
  3. Wybierz opcję Importuj samodzielny plik
  4. W folderze Database-export z Github znajduje się plik sql o nazwie dump_project1.sql
  5. Przejdź do tego pliku i kliknij Rozpocznij import

Otóż to. Pi może teraz uzyskać dostęp do bazy danych, jeśli ma prawidłowe informacje.

Krok 6: Sprawa dla dystrybutora kart

Etui na dystrybutora kart
Etui na dystrybutora kart
Etui na dystrybutora kart
Etui na dystrybutora kart
Etui na dystrybutora kart
Etui na dystrybutora kart

W tym kroku wyjaśnię, czego użyłem do obudowy i jak wszystko zamontowałem.

Do przypadku użyłem 2 pudełek ABS:

- 265 x 185 x 95 mm

- 171 x 121 x 80 mm

Otwory, które zrobiłem w pudełkach

Otwór na wyświetlacz LCD, 3 otwory na kable zasilające, jeden na przewody od silnika krokowego, silnika prądu stałego i czujnika ultradźwiękowego.

W najmniejszym pudełku zrobiłem otwór na przewody od komponentów i otwór na karty. W górnej części zrobiłem największy otwór, dzięki czemu można w urządzeniu umieścić karty do gry.

Zamontowałem silnik prądu stałego ze wspornikiem i jakąś dwustronną taśmą. Zrobiłem drewnianą deskę do układania kart z otworem na koło do wystrzelenia karty.

Wybrałem plastik ABS, ponieważ jest lekki, więc silnik krokowy może go łatwo obracać. Drewno bywa naprawdę ciężkie i silnik krokowy może mieć z tym problemy. Do wycięcia otworów użyłem wiertarki z wiertłami do metalu oraz Dremela. Wycinanie większych otworów wymagało dużo więcej pracy, a wyrzynarka byłaby lepsza.

Krok 7: Programuj jako usługę

Naprawdę przydatne jest, aby kod zaczynał się po uruchomieniu Pi. W tym celu wykonamy usługę.

Utwórz nowy plik o nazwie smartcard.service za pomocą następującego polecenia:

sudo nano /etc/systemd/system/smartcard.service

To musi znaleźć się w pliku:

[Jednostka]

Description=Zaplecze karty inteligentnej After=network.target [Service] ExecStart=/usr/bin/python3 -u app.py WorkingDirectory=/home/pi/project1 StandardOutput=inherit StandardError=inherit Restart=always User=pi [Install] WantedBy =wielu użytkowników.cel WorkingDirectory to ścieżka do folderu, w którym znajduje się program

Teraz masz własną kartę inteligentną!

Zalecana: