Spisu treści:

Stół do piłkarzyków Raspberry Pi IoT: 11 kroków
Stół do piłkarzyków Raspberry Pi IoT: 11 kroków

Wideo: Stół do piłkarzyków Raspberry Pi IoT: 11 kroków

Wideo: Stół do piłkarzyków Raspberry Pi IoT: 11 kroków
Wideo: Trening, kontrola piłeczki, strzały, kluby - Futbol Stołowy / Piłkarzyki dla początkujących 2024, Listopad
Anonim
Stół do piłkarzyków Raspberry Pi IoT
Stół do piłkarzyków Raspberry Pi IoT

Witaj w mojej wersji zhakowanego stołu do piłkarzyków w ramach studenckiego projektu dotyczącego technologii nowych mediów i komunikacji. Zasadniczo dorastałem przy piłkarzykach i stołach bilardowych, więc pomyślałem, że fajnie byłoby spróbować podłączyć jedno z tych urządzeń do Internetu.

Główna konfiguracja wykorzystuje istniejący stół do piłkarzyków podłączony do Raspberry Pi, który może wykonywać wszystkie następujące zadania:

  • Wykorzystuje piny GPIO do sterowania diodą podczerwieni / odbiornikami i modułami matrycy punktowej 8x8
  • Prowadzi witrynę Flask przy użyciu nginx
  • Uruchamia bazę danych MySQL/MariaDB do przechowywania danych

Aby móc odtworzyć ten projekt, będziesz potrzebować następujących umiejętności:

Zaplecze:

  • Zrozumienie HTML/CSS/Javascript dla klienta strony internetowej
  • Zrozumienie Pythona z Flask/Flask-SocketIO/Jinja2 po stronie serwera strony internetowej
  • Podstawowa znajomość MySQL
  • Dowiedz się, jak uruchomić serwer WWW

Prototyp

  • Podstawowa wiedza na temat okablowania obwodu elektrycznego
  • Lutowanie
  • Podstawowe zrozumienie, jak pisać skrypt w Pythonie
  • Praca z systemem Linux (Raspbian)
  • Mieć dużo cierpliwości, ponieważ będzie wymagało dużo debugowania

Krok 1: Materiały

Oto lista ze wszystkimi niezbędnymi częściami do stołu:

  • Raspberry Pi Model 3 (z obudową)
  • T-Cobbler do podłączenia Pi do płytki stykowej
  • Stół do piłkarzyków (użyłem bardzo starego stołu podobnego do tego. Musi być chętny do wiercenia w nim otworów)
  • MAX7219 Moduł matrycy punktowej Arduino (2)
  • Emitery LED IR (2+, ponieważ pękają, podobnie jak ten)
  • Odbiorniki IR (2+ bo też się psują, podobnie jak ten)
  • Podstawowa płytka stykowa bez lutowania
  • Dużo drutu (w zależności od wielkości stołu do piłkarzyków)
  • konektory męskie (30+)
  • złącza żeńskie (10+)
  • Rezystory 100-220 Ohm (4+)
  • materiały lutownicze
  • paski z drutu
  • Oprawki LED
  • trochę drewna/śrub na wypadek, gdybyś chciał przekazać piłkę do rynny

Całkowity koszt tego projektu zależy całkowicie od kosztu twojego stołu do piłkarzyków (drogie). Poza stołem materiały będą kosztować maksymalnie 150 euro.

Krok 2: Obwód elektryczny

Obwód elektryczny
Obwód elektryczny
Obwód elektryczny
Obwód elektryczny
Obwód elektryczny
Obwód elektryczny

Zanim przystąpisz do lutowania, zmontuj wszystkie elementy, które gorąco polecam najpierw przetestować na płytce stykowej. Łatwiej jest wymienić wadliwe komponenty, zanim spędzisz godziny na ich lutowaniu.

Na początku próbowałem zaimplementować matrycę LED 8x8 z rejestrem przesuwnym 74HC595 (pierwszy obraz) i tablicą tranzystorową, ale ze względu na wiele przewodów i bardzo niską moc przełączyłem się na moduł matrycy punktowej MAX7219, ponieważ zajmuje tylko 5 przewodów i jest bezpośrednio napędzany przez magistrala SPI.

Obwód, którego ostatecznie użyłem, jest rysowany za pomocą Fritzing. Należy pamiętać, że diody podczerwieni i odbiorniki można podłączyć do dowolnego z bezpłatnych pinów GPIO.

Odbiorniki IR i dioda LED powinny znajdować się naprzeciwko siebie, a górna część diody LED powinna być skierowana w stronę odbiornika. Ponieważ chcemy zasymulować bezpośrednią wiązkę, która może zostać przerwana przez ruch piłki, w takim przypadku nastąpi zmiana stanu linii DATA odbiornika z 0 na 1.

Krok 3: Kodowanie czujników

Kodowanie czujników
Kodowanie czujników

Zakodowałem większość tego projektu za pomocą Pycharm, ponieważ umożliwia on łatwe wdrożenie SSH na Twoim Raspberry Pi za pomocą zdalnego interpretera. Nie będę się rozpisywał szczegółowo, jak działa ten program, ale wiele informacji można znaleźć na stronie pycharm.

Obecnie nadal pracuję nad projektem, ale gdy wszystko będzie gotowe, cały projekt będzie dostępny na moim profilu na githubie

Kod czujników składa się z 3 klas, które są uruchamiane w wątku w tle na moim serwerze Flask (co zostanie wyjaśnione później):

  1. The Goal Class (link) - ten plik inicjuje wszystkie oddzielne komponenty, które można wywołać, wstawiając odpowiednie urządzenie/magistrali SPI i numer pinu
  2. Klasa Matrix (link) - jest to główna klasa do zasilania modułu MAX7219
  3. Klasa LED i odbiornika (łącze) - jest to główna klasa do zasilania wiązki podczerwieni przy użyciu oddzielnych wątków, aby zmniejszyć obciążenie procesora RPi

Zarówno dioda LED, jak i odbiornik pracują na częstotliwości 38 kHz, a odbiorniki zawsze oczekują, że impulsy 50% w górę i 50% w dół będą działać prawidłowo.

Krok 4: Przygotowanie i umieszczenie czujników

Przygotowanie i umieszczenie czujników
Przygotowanie i umieszczenie czujników
Przygotowanie i umieszczenie czujników
Przygotowanie i umieszczenie czujników
Przygotowanie i umieszczenie czujników
Przygotowanie i umieszczenie czujników

Teraz przygotujemy diodę IR i odbiornik. Na rysunku tabeli można znaleźć lokalizacje, w których należy umieścić RPi i czujniki.

Ale najpierw musimy przygotować okablowanie:

  1. Upewnij się, że zmierzysz ilość potrzebnego drutu od lokalizacji RPi/płyty do krojenia chleba do lokalizacji czujnika
  2. Przylutuj styki odbiornika podczerwieni do jednego końca przewodu (COM/GND/V+)
  3. Przylutuj męskie złącza na drugim końcu przewodu

Teraz przygotujemy tabelę:

  1. Zrób podstawowy rysunek (na podstawie obrazka) gdzie wiercić. Bardzo ważne jest, aby 2 otwory były wyrównane względem siebie, ponieważ będzie to położenie belki.
  2. Wywierć otwory
  3. Jeśli masz kilka uchwytów LED (link), możesz umieścić je w otworze, aby był bardziej wytrzymały
  4. Włóż + taśmę LED + odbiornik po obu stronach
  5. Przymocuj przewody + przyklej je do drewna, aby zbytnio się nie krzyżowały
  6. Włóż męskie szpilki na płytce stykowej zgodnie z wcześniej dostarczonym obwodem

Krok 5: Przygotowanie i umieszczenie modułu matrycy

Przygotowanie i umieszczenie modułu matrycy
Przygotowanie i umieszczenie modułu matrycy

Następnie połączymy 2 moduły matryc LED

Notatka:

Ponieważ używałem starego stołu do piłkarzyków, były już dziury w górnej części z powodu cygarniczek. Jeśli ich nie masz, będziesz musiał je stworzyć.

Aby przygotować przewody:

  1. Zmierz drut od płytki stykowej do górnej części stołu
  2. Przylutuj niektóre złącza żeńskie do pierwszego końca przewodu
  3. Przylutuj niektóre męskie złącza do drugiego końca przewodu

Umieszczenie matrycy:

  1. Wyciągnij matrycę przez otwór na górze
  2. Pasek + przyklej przewody do środka na drewnie, aby uniknąć krzyżowania
  3. Włóż męskie szpilki na płytkę stykową zgodnie z wcześniej dostarczonym obwodem

W pewnym momencie dorzucę mały krok DIY, aby dodać obudowę modułu matrycy, ale na razie są gołe.

Krok 6: Tworzenie IoT

Tworzenie IoT
Tworzenie IoT

Jeśli chcesz tylko zarejestrować i wyświetlić wyniki, możesz zakończyć projekt, pisząc mały działający skrypt Pythona, który zapętla się, aż jeden z wyników osiągnie 9, a następnie zostanie zresetowany.

Jeśli jednak chcesz podłączyć swój stół do Internetu, kilka następnych kroków powinno być w porządku.

W kolejnych kilku krokach zajmiemy się następującymi kwestiami:

  • Konfiguracja Raspberry Pi
  • Tworzenie bazy danych do przechowywania
  • Tworzenie strony internetowej
  • Umieszczanie w Internecie

W tym momencie, jeśli znasz git, polecam utworzenie repozytorium na GitHub/GitLab, aby śledzić swoje pliki. Jeśli nie, możesz utworzyć folder o takiej samej strukturze, jak na obrazku.

Pełny projekt będzie wkrótce dostępny na GitHubie. Dostępny jest jednak tymczasowy plik rar ze wszystkimi niezbędnymi plikami.

Krok 7: Podłączanie Raspberry Pi

Następnie skonfigurujemy środowisko raspberry pi, w tym celu wykonaj następujące czynności:

  • Połącz się przez SSH z Rasberry Pi (możesz użyć PuTTY)
  • Utwórz folder (przykładowy projekt mkdir) i przejdź do tego folderu za pomocą polecenia cd
  • Utwórz wirtualne środowisko Pythona w tym folderze za pomocą polecenia python3 -m venv --system-site-packages env
  • Aktywuj wirtualnego tłumacza za pomocą polecenia źródłowego /env/bin/activate
  • Zainstaluj pakiety z pliku requirements.txt za pomocą polecenia python -m pip install nazwa-pakietu
  • Przenieś pliki z wcześniej dostarczonego pliku project_example.rar przez SSH w folderze projektu

Teraz powinieneś być w stanie uruchomić pełny projekt na swoim Raspberry Pi. Radzę użyć IDE Pythona, takiego jak PyCharm, które pozwala na debugowanie zdalnego interpretera przez SSH i bezpośrednie przesyłanie zmian, jeśli to konieczne.

Krok 8: Konfiguracja bazy danych

Konfigurowanie bazy danych
Konfigurowanie bazy danych

Teraz musisz skonfigurować bardzo podstawową bazę danych, opartą na tym modelu.

Najłatwiejszym sposobem na to jest utworzenie bazy danych w środowisku pracy MySQL, gdzie można również przeprowadzić pewne testy.

Po zakończeniu możesz wyeksportować zrzut bazy danych i przesłać go do swojego RPi, a następnie wykonać go za pomocą sudo mariadb < pathtofile/file.sql

Krok 9: Tworzenie strony internetowej

Tworzenie strony internetowej
Tworzenie strony internetowej
Tworzenie strony internetowej
Tworzenie strony internetowej
Tworzenie strony internetowej
Tworzenie strony internetowej

Następnie możesz przeanalizować (i wykorzystać) kod dostarczony w pliku project_example.rar.

Głównym plikiem jest Flask.py, który jest chlebem powszednim tego projektu:

  • Uruchamia aplikację Flask-SocketIO, która obsługuje backend strony internetowej
  • Tworzy połączenie między bazą danych a Flask
  • Zapewnia weryfikację logowania i rejestrację użytkownika
  • Zapewnia niezbędny kod, jak grać w grę, wykorzystuje socketio do aktualizacji strony internetowej w czasie rzeczywistym podczas gry
  • Umieszcza wyniki gry w bazie danych

W folderach static i templates można znaleźć HTML/CSS/JS, które dostarczają frontendową część serwisu. Możesz je modyfikować według własnych upodobań.

Krok 10: Łączenie się z siecią WWW

Aby połączyć naszą witrynę z siecią, użyjemy nginx i uwsgi. W przykładzie projektu możesz znaleźć potrzebne pliki w folderze conf.

Przede wszystkim musisz zaktualizować następujące pliki w tych plikach:

  • W uwsgi-flask.ini musisz zmienić ścieżkę parametru virtualenv do swojego interpretera
  • W project1-flask.service musisz zaktualizować część [Service] pliku swoimi danymi uwierzytelniającymi i ścieżkami do powiązanych plików
  • W pliku nginx musisz zaktualizować serwer i lokalizację / ścieżkę do powiązanego gniazda

Następnie musisz zastąpić domyślny plik serwera WWW nginx lokalizacją pliku konfiguracyjnego nginx, poniżej znajduje się przykład poleceń linux, które to umożliwiają

  • ja@my-rpi:~/project1 $ sudo cp conf/nginx /etc/nginx/sites-available/project1
  • ja@my-rpi:~/project1 $ sudo rm /etc/nginx/sites-enabled/default t
  • ja@my-rpi:~/project1 $ sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/project1
  • ja@my-rpi:~/project1 $ sudo systemctl restart nginx.service

Na koniec musisz dodać niestandardowe usługi do folderu systemd, oto przykład, jak to zrobić:

  • ja@my-rpi:~/project1 $ sudo cp conf/project1-*.service /etc/systemd/system/
  • ja@my-rpi:~/project1 $ sudo systemctl demon-reload
  • ja@my-rpi:~/project1 $ sudo systemctl start project1-*
  • ja@my-rpi:~/project1 $ sudo systemctl status project1-*

Jeśli chcesz, aby serwer WWW uruchamiał się podczas rozruchu twojego raspberry pi, musisz użyć polecenia sudo systemctl enable project1-*.service.

Jeśli zrobisz to poprawnie, po ponownym uruchomieniu systemu Twoja witryna powinna działać na Twoim adresie IP. Jeśli chcesz edytować jeden z tych plików konfiguracyjnych, zawsze musisz zatrzymać usługę, ponownie przesłać pliki i użyć polecenia demon-reload, a następnie start, w przeciwnym razie zmiany nie będą skuteczne.

Krok 11: Wykończenie

Wykończenie wyłączone
Wykończenie wyłączone

Podczas pisania ostatniej części tej instrukcji, ten mały szkolny projekt jest wciąż w toku.

Poświęciłem niezliczone godziny na zrobienie tego w 2,5 tygodnia. Mimo, że wszystko było trochę pospieszne, nadal jestem dumny z tego, co osiągnąłem. Podczas fazy montażu napotkałem niezliczoną ilość błędów/błędów/wadliwych czujników, więc nie zniechęcaj się, jeśli za pierwszym razem wszystko nie działa.

Najlepszą rzeczą, jaką możesz zrobić, to poprosić lub poszukać pomocy w Internecie, jest wiele osób o znacznie lepszej wiedzy, które bardzo chętnie Ci pomogą.

Na koniec chciałbym podziękować moim nauczycielom z Nowych Mediów i Technologii Komunikacyjnych za wiele rad i pomoc w dokończeniu tego projektu.

Zalecana: