Spisu treści:
- Krok 1: Krok 1: Czego będę potrzebować?
- Krok 2: Krok 2: Tworzenie schematu bazy danych
- Krok 3: Krok 3: Kodowanie
- Krok 4: Krok 4: Umieszczanie kodu Al na moim Raspberry Pi
- Krok 5: Krok 5: Wykonanie obudowy
- Krok 6: Krok 6: Umieszczenie wszystkiego w obudowie
Wideo: Keysorter: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Obecnie studiuję NMCT w Howest. Na ostatni semestr musieliśmy zrobić projekt. Więc zrobiłem Keysorter.
Co to robi?
W domu mamy dużo kluczyków do samochodu i wszystkie wyglądają podobnie. Więc zrobiłem Keysorter, aby rozwiązać ten problem.
Musi zeskanować klucz przez RFID i umieścić go w pudełku. Jeśli ponownie zeskanuję ten sam klucz, pokaże mu wcześniej przypisane miejsce. Jest też przycisk do pokazania ostatniego umytego samochodu.
To wszystko będzie działać na Raspberry Pi, które ma również opcję dodania strony internetowej za pośrednictwem Flask.
Na stronie powinienem być w stanie obejrzeć wszystkie klucze, dodać nazwę do klucza i usunąć klucz.
Krok 1: Krok 1: Czego będę potrzebować?
Zacząłem od sporządzenia listy komponentów, których będę potrzebować, aby to zadziałało.
Składniki:
- malinowy pi
- 2 x rejestr przesuwny (74hc595)
- 3 x przycisk
- 9 x zielona dioda LED
- Skaner RFID (MFRC522)
- 12 x rezystor 220 omów
Potem umieściłem to wszystko w moim fryzującym schemacie.
Kiedy już to zrobiłem, zrobiłem to w prawdziwym życiu.
Krok 2: Krok 2: Tworzenie schematu bazy danych
Aby zapisać wszystkie moje dane, musiałem stworzyć bazę danych, która mogłaby działać na moim Pi.
Zrobiłem to w MySQL.
Wózek stołowy:
- Identyfikator samochodu
- Identyfikator użytkownika
- Marka (marka samochodu)
- Rodzaj
- Ostatnie pranie
- Klucz
- Identyfikator RFID
Krok 3: Krok 3: Kodowanie
Kiedy wszystko było gotowe, mogłem zacząć kodować.
Zacząłem od napisania kodu dla mojego czujnika w Pythonie 3.5.
Aby pobrać kod, kliknij tutaj.
Użyj linku, aby sklonować projekt.
Krok 4: Krok 4: Umieszczanie kodu Al na moim Raspberry Pi
Instalowanie pakietów
Najpierw zainstalowałem wszystkie pakiety, których potrzebowałem, aby to zadziałało.
ja@my-rpi:~ $ aktualizacja sudo apt
ja@my-rpi:~ $ sudo apt install -y python3-venv python3-pip python3-mysqldb mysql-server uwsgi nginx uwsgi-plugin-python3
Wirtualne środowisko
ja@my-rpi:~ $ python3 -m pip install --upgrade pip setuptools wheel virtualenvme@my-rpi:~ $ mkdir project1 && cd project1 me@my-rpi:~/project1 $ python3 -m venv --system- site-packages env ja@my-rpi:~/project1 $ source env/bin/activate (env)me@my-rpi:~/project1 $ python -m pip zainstaluj mysql-connector-python argon2-cffi Flask-HTTPAuth Flask-MySQL mysql-connector-python passlib
Prześlij projekt do swojego Pi za pomocą pycharm
Otwórz Pycharm i przejdź do VCS > Importuj z Kontroli wersji > Github i sklonuj mój plik github.
Umieść konfigurację wdrożenia do właśnie utworzonego katalogu. (/dom/ja/projekt1). Naciśnij aplikuj!
Przejdź do ustawień tłumacza i wybierz właśnie utworzone środowisko wirtualne. (/dom/ja/projekt1/śr/bin/pyhon)
Sprawdź, czy mapowanie ścieżki jest poprawne.
Teraz możesz wgrać kod do swojego katalogu za pomocą Pycharm.
Baza danych
Sprawdź, czy baza danych jest uruchomiona. Powinieneś otrzymać coś takiego:
ja@my-rpi:~ $ sudo systemctl status mysql● mariadb.service - serwer bazy danych MariaDB Załadowany: załadowany (/lib/systemd/system/mariadb.service; włączony; ustawienie dostawcy: włączony) Aktywny: aktywny (działa) od niedzieli 2018-06-03 09:41:18 CEST; 1 dzień 4h temu Główny PID: 781 (mysqld) Status: "Zabieram twoje żądania SQL teraz…" Zadania: 28 (limit: 4915) CGroup: /system.slice/mariadb.service └─781 /usr/sbin/mysqld
Cze 03 09:41:13 my-rpi systemd[1]: Uruchamianie serwera bazy danych MariaDB… Cze 03 09:41:15 my-rpi mysqld[781]:2018-06-03 9:41:15 4144859136 [Uwaga] / usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) 3 czerwca 09:41:18 my-rpi systemd[1]: Uruchomiono serwer bazy danych MariaDB.
ja@my-rpi:~ $ ss -lt | grep mysql LISTEN 0 80 127.0.0.1:mysql *:*
Tworzenie użytkowników i dodawanie bazy danych
ja@my-rpi:~ $ sudo mariadb
gdy już jesteś w bazie danych, zrób to.
UTWÓRZ UŻYTKOWNIKA 'project1-admin'@'localhost' ZIDENTYFIKOWANY PRZEZ 'adminpassword'; UTWÓRZ UŻYTKOWNIKA 'project1-web'@'localhost' ZIDENTYFIKOWANY PRZEZ 'webpassword'; UTWÓRZ UŻYTKOWNIKA 'project1-sensor'@'localhost' IDENTYFIKOWANE PRZEZ 'sensorpassword';
TWORZENIE BAZY DANYCH projekt1;
PRZYZNAJ WSZYSTKIE UPRAWNIENIA DO PROJEKTU1.* 'project1-admin'@'localhost' Z OPCJĄ PRZYZNANIA; PRZYZNAJ WYBIERZ, WSTAW, AKTUALIZUJ, USUŃ W projekcie1.* DO 'project1-web'@'localhost'; PRZYZNAJ WYBIERZ, WSTAW, AKTUALIZUJ, USUŃ W projekcie1.* DO 'project1-sensor'@'localhost'; PRZYWILEJE WSPÓŁPRACUJĄCE;
CREATE TABLE `user` (`idUser` int(11) NOT NULL, `Password` varchar(45) DEFAULT NULL, PRIMARY KEY (`idUser`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `car` (`idCar` int(11) NOT NULL AUTO_INCREMENT, `idUser` int(11) NOT NULL, `Brand` varchar(45) DEFAULT NULL, `Type` varchar(45) DEFAULT NULL, `LastWashed` datetime DEFAULT NULL, `RFID_Number` varchar(15) DEFAULT NULL, `Key` varchar(5) DEFAULT NULL, PRIMARY KEY (`idCar`, `idUser`), KEY `fk_Car_User1_idx` (`idUser`), OGRANICZENIE `fk_Car_User1` KLUCZ OBCY (`idUser`) REFERENCJE `user` (`idUser`) USUŃ ŻADNEJ AKCJI PRZY AKTUALIZACJI ŻADNEJ AKCJI) ENGINE=InnoDB AUTO_INCREMENT=4 DOMYŚLNY CHARSET=utf8
Połącz swoją bazę danych z Pycharm
Kliknij na zakładkę bazy danych po prawej stronie. Jeśli nie masz otwartej karty, wykonaj następujące czynności: Widok > Okna narzędzi > Baza danych.
Kliknij dodaj połączenie. Wybierz Źródło danych > MySQL (jeśli jest przycisk pobierania sterownika, naciśnij go).
Przejdź do SSH/SSL i sprawdź SSH. Wpisz swoje dane uwierzytelniające Raspberry pi (host/użytkownik/hasło). Port powinien wynosić 22 i nie zapomnij sprawdzić zapamiętanego hasła.
Wróć do generała. Hostem powinien być localhost, a bazą danych project1. Wypełnij poświadczenia od project1-admin i przetestuj połączenie.
Jeśli połączenie jest OK, przejdź do zakładki Schematy i upewnij się, że zaznaczony jest projekt1.
Sprawdź, czy baza danych jest poprawna
ja@my-rpi:~ $ echo 'pokaż tabele;' | mysql projekt1 -t -u projekt1-admin -pWprowadź hasło: +---------------------------+ | Tables_in_project1 | +---------------------------+ | czujnik | | użytkownicy | +-------------------------------+
Pliki konfiguracyjne
W katalogu conf znajdziesz 4 pliki. Powinieneś zmienić nazwy użytkownika na swoją nazwę użytkownika.
Systemd
Aby rozpocząć wszystko, powinieneś wykonać te polecenia.
ja@my-rpi:~/project1 $ sudo cp conf/project1-*.service /etc/systemd/system/
ja@my-rpi:~/project1 $ sudo systemctl daemon-reload ja@my-rpi:~/project1 $ sudo systemctl start project1-* ja@my-rpi:~/project1 $ sudo systemctl status projekt1-* ● projekt1- flask.service - instancja uWSGI obsługująca interfejs WWW projektu1 Załadowana: załadowana (/etc/systemd/system/project1-flask.service; wyłączona; ustawienie dostawcy: włączona) Aktywna: aktywna (działa) od Mon 2018-06-04 13: 14:56 CEST; 1s temu Główny PID: 6618 (uwsgi) Zadania: 6 (limit: 4915) CGroup: /system.slice/project1-flask.service ├─6618 /usr/bin/uwsgi --ini /home/me/project1/conf/ uwsgi-flask.ini 6620 /usr/bin/uwsgi --ini /home/me/project1/conf/uwsgi-flask.ini 6621 /usr/bin/uwsgi --ini /home/me/project1/ conf/uwsgi-flask.ini 6622 /usr/bin/uwsgi --ini /home/me/project1/conf/uwsgi-flask.ini 6623 /usr/bin/uwsgi --ini /home/me/ project1/conf/uwsgi-flask.ini └─6624 /usr/bin/uwsgi --ini /home/me/project1/conf/uwsgi-flask.ini
4 czerwca 13:14:56 my-rpi uwsgi[6618]: zmapowane 383928 bajtów (374 KB) dla 5 rdzeni 4 czerwca 13:14:56 my-rpi uwsgi[6618]: *** TRYB operacyjny: preforking ***
● project1-sensor.service - usługa czujnika projektu 1 Załadowana: załadowana (/etc/systemd/system/project1-sensor.service; wyłączona; ustawienie dostawcy: włączona) Aktywna: aktywna (działająca) od Mon 2018-06-04 13: 16:49 CEST; 5s temu Główny PID: 6826 (python) Zadania: 1 (limit: 4915) CGroup: /system.slice/project1-sensor.service └─6826 /home/me/project1/env/bin/python /home/me/project1 /czujnik/czujnik.py
4 czerwca 13:16:49 my-rpi systemd[1]: Uruchomiono usługę czujnika projektu 1. 4 czerwca 13:16:49 my-rpi python[6826]: DEBUG:_main_:Zapisano czujnik process_count=b'217\n' do bazy danych 4 czerwca 13:16:55 my-rpi python[6826]: DEBUG:_main_: Zapisano czujnik process_count=b'218\n' do bazy danych
nginx
ja@my-rpi:~/projekt1 $ ls -l /etc/nginx/sites-*
/etc/nginx/sites-available: łącznie 4 -rw-r--r-- 1 root root 2416 Lip 12 2017 default
/etc/nginx/sites-enabled: łącznie 0 lrwxrwxrwx 1 root root 34 stycznia 18 13:25 default -> /etc/nginx/sites-available/default
Aby ustawić wszystko jako domyślne, wykonaj te polecenia.
ja@moje-rpi:~/project1 $ sudo cp conf/nginx /etc/nginx/sites-available/project1me@my-rpi:~/project1 $ sudo rm /etc/nginx/sites-enabled/default ja@my- rpi:~/project1 $ sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/project1 me@my-rpi:~/project1 $ sudo systemctl restart nginx.service
Automatyczny start
Upewnijmy się, że wszystko zaczyna się automatycznie.
Przejdź do katalogu conf i wykonaj ostatnie polecenia i gotowe!
ja@my-rpi:~/project1 $ sudo systemctl włącz projekt1-*
Jeśli zrestartujesz swoje Pi, powinno uruchomić się automatycznie.
Krok 5: Krok 5: Wykonanie obudowy
Recykling
Aby urządzić mieszkanie, wykorzystałem starą szafę, którą moja mama wyrzuciła.
baza
Przeciąłem 4 deski (34 cm x 26 cm). (więc jest to sześcian z 34 x 34 x 26).
Na dole dodałem cienki kawałek drewna jako spód.
Tablica z ledami
Na środku ułożyłem po 2 małe kawałki drewna z każdej strony, obydwa w odległości 9 cm od góry. To trzyma tablicę, na której będą siedzieć diody led.
Tablica z diodami to mała tablica (32 cm x 32 cm).
Wywierciłem 9 otworów, z których wyjdą diody.
podział
Podział wykonałem z tego samego materiału co spód, a tablicę z ledami.
4 sztuki każda z nacięciem 10,3 cm (9 cm x 31 cm). Teraz jestem w stanie je poskładać.
Przyciski i czytnik RFID
Zrobiłem otwór w podstawie, aby włożyć czytnik RFID i przyciski. W przypadku RFID położyłem przed nim cienki kawałek płytki, aby wyglądał czyściej.
Krok 6: Krok 6: Umieszczenie wszystkiego w obudowie
To zależy od tego, jak chcesz to zrobić. Osobiście użyłem wielu kabli bez lutowania, ponieważ chcę mieć możliwość ponownego wykorzystania mojego Raspberry Pi.
Przykleiłem diody na miejscu i przykleiłem czytnik RFID i płytki stykowe do obudowy.
I tak powstaje Keysorter!
Zalecana:
Licznik kroków - Micro:Bit: 12 kroków (ze zdjęciami)
Licznik kroków - Micro:Bit: Ten projekt będzie licznikiem kroków. Do pomiaru kroków użyjemy czujnika przyspieszenia wbudowanego w Micro:Bit. Za każdym razem, gdy Micro:Bit się trzęsie, dodamy 2 do licznika i wyświetlimy go na ekranie
Lewitacja akustyczna z Arduino Uno krok po kroku (8 kroków): 8 kroków
Lewitacja akustyczna z Arduino Uno Krok po kroku (8-kroków): ultradźwiękowe przetworniki dźwięku Zasilacz żeński L298N Dc z męskim pinem dc Arduino UNOBreadboardJak to działa: Najpierw wgrywasz kod do Arduino Uno (jest to mikrokontroler wyposażony w cyfrowy oraz porty analogowe do konwersji kodu (C++)
Jak używać silnika krokowego jako enkodera obrotowego i wyświetlacza OLED dla kroków: 6 kroków
Jak używać silnika krokowego jako enkodera obrotowego i wyświetlacza OLED dla kroków: W tym samouczku dowiemy się, jak śledzić kroki silnika krokowego na wyświetlaczu OLED. Obejrzyj film demonstracyjny.Kredyt samouczka oryginalnego trafia do użytkownika YouTube „sky4fly”
Bolt - DIY Wireless Charging Night Clock (6 kroków): 6 kroków (ze zdjęciami)
Bolt - DIY Wireless Charging Night Clock (6 kroków): Ładowanie indukcyjne (znane również jako ładowanie bezprzewodowe lub ładowanie bezprzewodowe) to rodzaj bezprzewodowego przesyłania energii. Wykorzystuje indukcję elektromagnetyczną do dostarczania energii elektrycznej do urządzeń przenośnych. Najpopularniejszym zastosowaniem jest stacja ładowania bezprzewodowego Qi
Jak zdemontować komputer za pomocą prostych kroków i zdjęć: 13 kroków (ze zdjęciami)
Jak zdemontować komputer za pomocą prostych kroków i zdjęć: To jest instrukcja demontażu komputera. Większość podstawowych komponentów ma budowę modułową i jest łatwa do usunięcia. Jednak ważne jest, abyś był w tym zorganizowany. Pomoże to uchronić Cię przed utratą części, a także ułatwi ponowny montaż