Spisu treści:
- Krok 1: Materiały
- Krok 2: Obwód elektryczny
- Krok 3: Kodowanie czujników
- Krok 4: Przygotowanie i umieszczenie czujników
- Krok 5: Przygotowanie i umieszczenie modułu matrycy
- Krok 6: Tworzenie IoT
- Krok 7: Podłączanie Raspberry Pi
- Krok 8: Konfiguracja bazy danych
- Krok 9: Tworzenie strony internetowej
- Krok 10: Łączenie się z siecią WWW
- Krok 11: Wykończenie
Wideo: Stół do piłkarzyków Raspberry Pi IoT: 11 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
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
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
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):
- 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
- Klasa Matrix (link) - jest to główna klasa do zasilania modułu MAX7219
- 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
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:
- Upewnij się, że zmierzysz ilość potrzebnego drutu od lokalizacji RPi/płyty do krojenia chleba do lokalizacji czujnika
- Przylutuj styki odbiornika podczerwieni do jednego końca przewodu (COM/GND/V+)
- Przylutuj męskie złącza na drugim końcu przewodu
Teraz przygotujemy tabelę:
- 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.
- Wywierć otwory
- Jeśli masz kilka uchwytów LED (link), możesz umieścić je w otworze, aby był bardziej wytrzymały
- Włóż + taśmę LED + odbiornik po obu stronach
- Przymocuj przewody + przyklej je do drewna, aby zbytnio się nie krzyżowały
- Włóż męskie szpilki na płytce stykowej zgodnie z wcześniej dostarczonym obwodem
Krok 5: 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:
- Zmierz drut od płytki stykowej do górnej części stołu
- Przylutuj niektóre złącza żeńskie do pierwszego końca przewodu
- Przylutuj niektóre męskie złącza do drugiego końca przewodu
Umieszczenie matrycy:
- Wyciągnij matrycę przez otwór na górze
- Pasek + przyklej przewody do środka na drewnie, aby uniknąć krzyżowania
- 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
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
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
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
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:
Przenośny stół warsztatowy Arduino, część 3: 11 kroków
Przenośny stół warsztatowy Arduino, część 3: Jeśli oglądałeś części 1, 2 i 2B, to do tej pory w tym projekcie nie było zbyt wiele Arduino, ale tylko kilka przewodów na płytkach itp. nie o to chodzi, a część dotycząca infrastruktury musi zostać zbudowany, zanim reszta zacznie działać. To jest elektronika i A
Przenośny stół warsztatowy Arduino, część 2: 7 kroków
Przenośny stół warsztatowy Arduino, część 2: Zrobiłem już kilka takich pudełek opisanych w części 1, a jeśli wystarczy pudełko do przenoszenia rzeczy i przechowywania projektu razem, będą działać dobrze. Chciałem być w stanie utrzymać cały projekt sam w sobie i przenieść go
Stół do gier MAME z Raspberry Pi: 5 kroków
Stół do gier MAME z Raspberry Pi: Zainspirowany podobnymi projektami online, współpracowałem z sąsiadem nad zbudowaniem pary stolików do gier na bazie MAME w stylu retro. Bardziej zwarty jest mój; większy z dwoma zestawami kontroli jest jego. Zdjęcia obu są używane w tym instr
WebFoos - inteligentny stół do piłkarzyków: 6 kroków
WebFoos - inteligentny stół do piłkarzyków: Do mojego szkolnego projektu na pierwszym roku w Howest postanowiłem zrobić inteligentny stół do piłkarzyków. Tabela rejestruje gole i zapisuje rozegrane mecze, statystyki meczowe oraz statystyki użytkowników/drużyn na stronie internetowej
Autonomiczny stół do piłkarzyków: 5 kroków (ze zdjęciami)
Autonomiczny stół do piłkarzyków: Głównym celem projektu było ukończenie działającego prototypu autonomicznego stołu do gry w piłkarzyki (AFT), w którym ludzki gracz mierzy się z robotycznym przeciwnikiem. Z ludzkiego punktu widzenia stół do piłkarzyków jest bardzo podobny do zwykłego stołu. Gra