Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Konfiguracja RPi
- Krok 2: MCP3008 + TMP36
- Krok 3: Baza danych
- Krok 4: HNT11, dla prawdziwych chłopców
- Krok 5: Czujniki gazu (tylko legendy)
- Krok 6: Rejestr zmiany biegów, 74HC595AG
- Krok 7: Frontend, cenna lekcja
- Krok 8: Backend
- Krok 9: Tworzenie sprawy
- Krok 10: Ocena i wnioski
Wideo: Kontroler zanieczyszczenia klasy CPC: 10 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
Cześć, jestem studentem z Belgii i jest to mój pierwszy duży projekt na studia licencjackie! Ten instruktaż mówi o tym, jak zrobić miernik zanieczyszczenia powietrza w zamkniętych pomieszczeniach, zwłaszcza w salach lekcyjnych!
Słyszę, jak myślisz, dlaczego ten projekt? Cóż, wszystko zaczęło się, kiedy poszedłem do liceum. Po południu, po dobrym obiedzie i przerwie, lekcje zaczynają się od nowa. Ale jest problem, nauczyciel zapomniał otworzyć okno, gdy jedliśmy lunch, więc jest gorąco, spocony i nie możesz się skoncentrować, bo zasypiasz. To dlatego, że w powietrzu jest za dużo CO2.
Mój projekt rozwiąże ten problem i sprawi, że wszyscy uczniowie będą bardziej skoncentrowani na lekcjach.
Kieszonkowe dzieci
1 x Malina Pi 4 (55 €)
1 x silnik krokowy ze sterownikiem (5 €)
2 baterie 12V 6800 mAh (2x 20 €)
2 x moduł obniżający (2x 5 €)
1 wyświetlacz LCD 16x2 (1,5 €)
Czujniki: 1x MQ8, 1x MQ4, 1x MQ7, 1x MQ135, 1x HNT11, 1x TMP36 (1 x 23 €)
Układy scalone: 1x MCP3008, 2x 74hc595AG (1x 2,30 €, 2x 0,40 €)
Diody LED: 2x zielone, 2x czerwone, 3x żółte (znajdują się w jakimś starym sprzęcie, zwykle 0,01 € za sztukę)
Złącze do akumulatorów (2 x 0,35 €)
40 kabli połączeniowych f-to-f (1,80 €)
40 kabli połączeniowych f na m (1,80 €)
Kable połączeniowe 20 m na m (1,80 €)
2 x PCB do przylutowania (2x 0,70 €)
Narzędzia:
Lutownica (najlepiej 60 W)
Cyna do lutowania
Blacha aluminiowa 50x 20
Obudowa (użyłem starej obudowy mini komputera)
Mogą to być z łatwością jakieś MDF lub własne pomysły.
Krok 1: Konfiguracja RPi
Więc nasze serce, mózg i dusza są w tym produkcie. Zagroź dobrze, ponieważ może cię to w ten czy inny sposób zranić. Używam RPi 4B 4gb, inne modele powinny wystarczyć. W starszych modelach można się spodziewać większego opóźnienia.
Otrzymaliśmy system operacyjny z naszej szkoły z preinstalowanym oprogramowaniem, takim jak phpMyAdmin.
Przede wszystkim upewnij się, że możesz połączyć się z Raspberry Pi przez ssh, będziemy potrzebować dużo czasu.
Więc najpierw powinniśmy włączyć magistralę SPI, piny GPIO i wyłączyć inne magistrale, nie będziemy ich potrzebować.
Możesz to zrobić w menu raspi-config. Przejdź do Interfejsów i włącz GPIO i SPI normalnie nie będzie konieczne, aby Gdy jesteś tutaj, rozszerz swoją pamięć masową, przechodząc do zaawansowanych, a następnie naciśnij Enter, aby rozszerzyć pamięć.
Teraz uruchom ponownie. Będziemy potrzebować kilku rozszerzeń, aby używać VS Code na naszym pi, aby uruchomić nasz serwer i bazę danych.
Proces instalacji rozszerzenia VS Code można znaleźć tutaj.
Teraz zainstalujemy rozszerzenia dla naszego serwera i bazy danych. Użyj terminala i wpisz „python install flask, flask-cors, mysql-python-connector, eventlet”, poczekaj na zakończenie.
Teraz możemy przystąpić do tworzenia projektu.
Krok 2: MCP3008 + TMP36
Mamy więc 6 czujników: 4 gaz, 1 wilgotność + temperatura i 1 czujnik temperatury. Sprawienie, by wszystkie działały, to prawdziwe zadanie. Wszystkie czujniki są czujnikami analogowymi, więc musimy zamienić sygnał analogowy na sygnał cyfrowy. To dlatego, że RPi (Rasberry Pi) może tylko „rozumieć” sygnały cyfrowe. Aby uzyskać więcej informacji, kliknij tutaj.
Aby wykonać to zadanie, potrzebujesz MCP3008, to świetnie wykona swoją pracę!
Ma 16 portów, licząc od góry (mała bańka) w lewo, w dół, z drugiej strony i do góry. Pin1-8 to wejścia dla sygnału analogowego z naszych czujników. Pin 9 po drugiej stronie to GND, który musi być podłączony do GND całego obwodu, w przeciwnym razie to nie zadziała. Piny 10-13 muszą być podłączone ostrożniej, będą przesyłać dane do i z RPi. Pin 14 to kolejne GND, a piny 15 i 16 to VCC, które muszą być podłączone do dodatniej strony obwodu.
To jest układ okablowania thr:
- MCP3008 VDD do zewnętrznego 3,3 V MCP3008 VREF do zewnętrznego 3,3 V
- MCP3008 AGND do zewnętrznego GND
- MCP3008 DGND do zewnętrznego GND
- MCP3008 CLK do Raspberry Pi pin 18
- MCP3008 DOUT do Raspberry Pi pin 23
- MCP3008 DIN do Raspberry Pi pin 24
- MCP3008 CS/SHDN do Raspberry Pi pin 25
To także dobry moment na podłączenie GND z RPI do zewnętrznego GND. To sprawi, że prąd będzie płynął z RPi.
Oto jak połączyć to we właściwy sposób.
Upewnij się, że podłączasz we właściwy sposób, w przeciwnym razie możesz wszystko zewrzeć!
Tutaj pojawia się pierwszy fragment kodu.
Możesz skopiować mój kod z mojego projektu github pod models. Analog_Digital.
Na dole strony znajdziesz kod źródłowy, który sprawi, że będzie działać.
Ale potrzebujemy naszego pierwszego czujnika, abyśmy mogli przetestować.
Musimy przetestować nasz czujnik, jeśli działa. Podłącz zasilanie 3,3 V lub 5 V do dodatniej strony TMP36. Nie zapomnij również podłączyć go do GND, może to być coś głupiego, ale uwierz mi. Taka jest rzeczywistość;). Możesz przetestować za pomocą multimetru wyjście czujnika, to jest środkowy pin. Za pomocą tego prostego równania możesz sprawdzić temperaturę w °C. ((miliwolty*napięcie wejściowe)-500)/10 i voila donne! Do widzenia! No nie, haha, potrzebujemy MCP3008. Podłącz pin analogowy TMP36 do pierwszego pinu wejściowego MCP3008. To jest pin 0.
Możesz użyć przykładowego kodu na dole dla tej klasy MCP. Albo coś, co znajdziesz w Internecie, sprawdzi się dobrze.
Krok 3: Baza danych
Więc teraz, gdy możemy odczytać nasz pierwszy czujnik, musimy go zalogować do bazy danych. To jest pamięć naszego mózgu. Zaprojektowałem tę bazę danych tak, aby można ją było rozszerzać i łatwo modyfikować pod kątem przyszłych zmian.
Więc najpierw musimy zastanowić się, co otrzymamy jako dane wejściowe i czy musimy rejestrować określone rzeczy, takie jak stany niektórych obiektów.
Moja odpowiedź brzmiałaby: wejście z 6 czujników więc musimy zrobić tabelę czujników, z tych czujników zrobimy wartości. Co wiąże się z wartością? U mnie jest to stan okna, czy jest otwarte czy zamknięte podczas gdy czujnik mierzył wartość. Ale lokalizacja jest również czynnikiem wpływającym na moją wartość, więc dodamy to. Ważna jest również godzina i data wartości, więc dodam to.
Do przyszłej rozbudowy dodałem tabelę użytkowników.
Więc jaki jest mój pomysł na tabele: wartości tabeli, adres tabeli (powiązany z pokojem), pokój tabeli (powiązany z wartością), okno tabeli (powiązane z wartością), czujnik tabeli (powiązany z wartością) i tabelę w stanie dzikim dla użytkowników.
Jeśli chodzi o łączenie stołów ze sobą. Każda wartość wymaga jednego czujnika, jednego okna, wartości czujnika, identyfikatora, dzięki któremu możemy nadać wartości unikatowej, znacznika czasu, kiedy wartość została utworzona i na koniec nie potrzebujemy pokoju, więc jest to opcjonalne, ale może być dodany.
Tak to teraz wygląda. To jest to, czego używam do końca mojego projektu.
Krok 4: HNT11, dla prawdziwych chłopców
Więc nie wolno nam było korzystać z żadnych bibliotek. Wszystko musimy zaprogramować sami.
HNT11 jest systemem jednoprzewodowym, co oznacza, że masz GND i VCC, takie jak każde inne urządzenie elektroniczne, ale 3 pin jest pinem wejściowym i wyjściowym. To trochę dziwne, ale wiele się z tego nauczyłem.
Podłącz VCC do zewnętrznego 3,3 V, a GND do zewnętrznego GND.
Karta katalogowa DHT11 zawiera wszystko, aby korzystać z tych czujników.
Możemy określić, że wysoki bit zawiera bit niski i wysoki. Ale czas trwania wysokiej części określa bit w rzeczywistości. Jeśli wysoka część jest emitowana dłużej niż 100 µs (normalnie 127 µs), bit jest wysoki. Jeśli bit jest krótszy niż 100 µs (normalnie około 78 µs), bit jest niski.
Po aktywacji HNT11 zacznie emitować sygnały. To jest zawsze 41 bitów. Zaczyna się od początku, to nic nie znaczy, więc możemy to pominąć. Pierwsze 16 bitów/2 bajty to część całkowita i zmiennoprzecinkowa określająca wilgotność. To samo dotyczy ostatnich 2 bajtów, ale teraz dotyczy temperatury.
Więc wystarczy obliczyć czas trwania każdego bitu i gotowe.
W kodzie źródłowym pod DHT11 znajdziesz moją metodę rozwiązania tego problemu.
Krok 5: Czujniki gazu (tylko legendy)
Pomyślałem więc na początku projektu, że świetnym pomysłem byłoby zastosowanie wielu czujników. Pomyśl, zanim zaczniesz działać i kup lokalnie, zaoszczędzi to wiele godzin snu! Ponieważ możesz zacząć wcześniej, a to sprawi, że chętniej się na to zdecydujesz.
Czyli mam 4 czujniki gazu. MQ135, MQ8, MQ4 i MQ7 wszystkie te czujniki mają specyficzne gazy, które najlepiej mierzą. Ale wszystkie one różnią się konfiguracją.
Więc najpierw skorzystałem z arkusza danych, to nie skłoniło mnie do żadnych życzeń. Następnie szukałem przykładów kodu. To, co znalazłem, to jedna biblioteka z Adafruit. Starałem się to jak najlepiej odtworzyć. Współpracował z jednym z czterech czujników.
Odstawiłem to na chwilę i wróciłem do tego.
To, co zrobiłem, aby działało dla tego jednego czujnika, to:
- W arkuszu danych zaznaczyłem punkty gazu, które chciałem zmierzyć. Czyli 1 ro/rs do 400ppm, 1,2 do 600ppm…
- Następnie umieściłem wszystkie te punkty w Excelu i wyciągnąłem wzór na krzywą. Zapisałem to w mojej bazie danych.
- Z arkusza danych odczytałem również normalny opór i opór czystego powietrza. Te wartości są również zapisywane w bazie danych.
Wlałem to wszystko do jakiegoś kodu, możesz znaleźć to jako ostatnie trzy funkcje w klasie MCP3008. Ale to jeszcze nie koniec, niestety nie starczyło mi czasu.
Krok 6: Rejestr zmiany biegów, 74HC595AG
Więc to jest układ scalony. I robi coś wyjątkowego, dzięki temu urządzeniu można użyć mniej wyjść GPIO dla tego samego sygnału wyjściowego. Użyłem tego do wyświetlacza LCD (wyświetlacz ciekłokrystaliczny) i moich diod led. Pokażę adres IP na LCD, aby każdy mógł surfować po stronie.
Diody LED są mądrze dobierane: 2 czerwone, 3 żółte i 2 zielone. To pokaże w dowolnym momencie jakość powietrza w pomieszczeniu.
Shiftregister jest równoległym urządzeniem wyjściowym, więc nie jest możliwe wysyłanie różnych sygnałów w określonym przedziale czasu. Byłoby to możliwe, gdyby zostało zaprogramowane z zewnątrz, ale nie jest natywnie wspierane.
Jak korzystać z IC? Cóż, masz 5 wejść i 9 wyjść. 8 wyjść logicznych dla 8 pinów, a następnie 9 pinów do wysyłania pozostałych danych do innego rejestru zmian.
Więc podłączamy pin 16 do zewnętrznego VCC, następny pin to pierwsze wyjście, więc dla LCD będziemy go potrzebować. Pin 14 to linia danych, tutaj będziemy wysyłać dane. 13. pin jest na przełączniku, niski sygnał umożliwia układowi scalonemu wysoki sygnał, aby go wyłączyć. Pin 12 to pin, na którym możemy określić, kiedy bit został wysłany, po pociągnięciu tego pinu w dół tak, aby od wysokiego do niskiego odczytał stan sygnału pinu 13 i zapisał go w swojej 8-bitowej pamięci. Pin 11 jest podobny, gdy ten pin jest ustawiony wysoko, a następnie nisko, wysyła 8 bitów do swojego portu. A ostatni pin, pin 10 to master reset, ten pin musi pozostać wysoki albo nie zadziała. Ostatnim połączeniem jest pin GND 8, który musimy podłączyć do zewnętrznego GND.
Więc teraz podłącz piny jak lubisz do Raspberry Pi. Sposób, w jaki to zrobiłem, polegał na połączeniu ich jak najbliżej siebie, aby upewnić się, że wiem, gdzie są.
Kiedy uzyskasz właściwe wyjście. Możesz to przylutować do płytki drukowanej z diodami LED. i rezystory 220 Ohm. Przylutuj wyjście układu scalonego do odpowiedniej diody. Powinieneś teraz mieć coś takiego.
Możesz znaleźć mój kod testowy tutaj pod Shiftregister. Kiedy pracujesz z 74HC595N, nie będziesz potrzebować MR, więc możesz pozostawić go niepodłączony.
Wyświetlacz LCD jest prawie taki sam. Jest dość łatwy w użyciu z shiftregister, ponieważ wejście dla LCD jest dokładnie wejściem dla shiftregister.
W przypadku LCD istnieje inny kod, który sprawi, że będzie działać, ale jest prawie taki sam, jak tylko shifregister. Kod testowy można znaleźć tutaj pod wyświetlaczem LCD.
Krok 7: Frontend, cenna lekcja
Więc tutaj odejdę, ta sekcja, jak powinieneś to zrobić. To jest coś bardzo cennego, czego się nauczyłem.
Stwórz frontend przed backendem!!!!
Zrobiłem to na odwrót. Wykonałem bezużyteczne telefony do mojej bazy danych, poświęcam na to zbyt dużo czasu.
Na stronie docelowej potrzebowałem aktualnej temperatury i wilgotności oraz wartości wszystkich czujników gazu w ładnym wykresie. Muszę też pokazać adres IP RPi.
Na stronie czujników potrzebuję doboru jednego czujnika i czasu doboru. Do wyboru wybrałem jeden dzień, a następnie okres od tego dnia. To znacznie ułatwiło mi zadanie, ponieważ mogłem go bardziej kontrolować.
Na ostatniej stronie, na stronie ustawień, można zarządzać pewnymi wartościami, takimi jak zdrowe, niebezpieczne lub niebezpieczne poziomy gazu i temperatury. Możesz także zrestartować RPi, jeśli czujesz taką potrzebę.
Więc najpierw zrobiłem projekt, aby móc łatwo rozpocząć pracę nad częścią kodującą. Stopniowo robiłem postępy w jednej rzeczy na raz. Zadanie było najpierw mobilne, więc najpierw skupię się na tym. Potem przejdę do większych ekranów.
Możesz znaleźć moje strony, css i js w moim Github.
Krok 8: Backend
Ta część to część, którą zmiksowałem z frontendem. Kiedy robiłem coś na frontend, robiłem to na backendzie. Więc to nie będzie wymagało później rewizji. To było coś, czego nie zrobiłem w pierwszej kolejności i przez to straciłem na pewno 2 tygodnie czasu. Głupi ja! Ale lekcja, którą chętnie biorę do innych projektów.
Więc kiedy tworzysz backend, stwórz coś, z czego będziesz korzystać. Ale spraw, aby był odporny na przyszłość, dzięki czemu można go ponownie wykorzystać, a nie zakodować na stałe. Więc kiedy potrzebuję ostatnich 50 wartości mojego DHT11, sprawdzę, czy są tworzone wartości? Tak, jak je umieścić w bazie danych. Jak usunąć je z bazy danych. Jak to pokazać? Wykres, wykres, czy tylko zwykłe dane? Następnie tworzę nową trasę z różnymi parametrami i właściwościami, takimi jak daty, konkretne nazwy czujników lub to, co będę nazywał. Chodzi mi o to, czy wywołuję wszystkie wartości z czujników MQ, czy też wywołuję wszystkie czujniki z MQ w nazwie. Potem dodałem trochę obsługi błędów. Gdy żądanie z wywołania jest właściwą metodą, tylko wtedy może kontynuować, w przeciwnym razie pojawia się ładny błąd.
Również tutaj znajdują się wątki, są to programy umożliwiające uruchamianie kodu równoległego. Możesz uruchomić wywołania stron internetowych, funkcję tworzenia wartości i rejestr led+shiftregister. Funkcje te działają całkowicie niezależnie od siebie.
Więc dla ledów. Utworzyłem dolną/zdrową wartość CO2. Ta wartość pochodziła z wielu źródeł rządowych. Zdrowa wartość dla sal lekcyjnych wynosi poniżej 600 ppm CO2 na metr sześcienny. Niezdrowa wartość to wszystko powyżej 2000 ppm. Więc diody LED tworzą most. Jeśli wartość czujnika MQ4 wynosi 1400, automatycznie obliczy, w jakim jest stopniu. 2000 - 600 = 1400, więc całkowity zasięg to 1400 /7 = 200. Więc gdy wartość osiągnie 550 pokazuje zieloną diodę. 750 pokazuje 2 zielone diody, 950 1 żółta 2 zielone diody. I tak dalej.
Gdy wartość przekroczy środek, otworzy się okno. Użyłem silnika krokowego ze względu na wysoki moment obrotowy i precyzję. A kiedy wartość przekroczy 2000, włączy się mały alarm. Ma to zaalarmować osoby znajdujące się w pomieszczeniu.
Możemy również wykryć gazy dymne, więc gdy wybuchnie pożar. To również rejestruje. Gdy przekroczy określoną wartość, włącza się alarm i miga dioda LED.
Wyświetlacz LCD służy głównie do wyświetlania adresu IP, dzięki czemu można surfować po stronie.
Możesz znaleźć wszystko + kod w moim Githubin app.py
Krok 9: Tworzenie sprawy
Znalazłem małą obudowę komputera na wszystkie moje komponenty.
Docinam blachę aluminiową na wymiar. I wywierciłem kilka otworów, w których leżałby arkusz. Odpowiada to otworom w płycie głównej.
Potem przyjrzałem się, jak wszystko zmieści się w etui. Rozłożyłem wszystko i zacząłem się ruszać.
Kiedy byłem zadowolony z tego, jak to działa, zacząłem zaznaczać otwory, których potrzebowałem na czujniki, RPi, PCB, moduły mocy i moduł silnika krokowego. Otwory służą do odsunięcia płytki drukowanej, dzięki czemu będzie trochę miejsca, aby metalowe części nie stykały się z blachą aluminiową. Nadaje mu również ładny wygląd.
Chwyciłem z każdego układu scalonego lub innego urządzenia kable i związałem je razem. To dlatego, że mogłem zobaczyć, do czego służą kable. Umieściłem wszystko ładnie na kilku wspornikach i użyłem kilku nakrętek i śrub, aby ładnie utrzymać wszystko na swoim miejscu.
Do zasilania tego wszystkiego użyłem 2 baterii. Zapewniają one dużo energii, ale nadal są to baterie, więc z czasem się wyczerpią. Zamontowałem je na rzepy. Użyłem rzepów, ponieważ wtedy mogłem łatwo wymienić lub pozbyć się baterii.
Silnik krokowy, wyświetlacz LCD i diody LED wyjdą z górnej części obudowy. Dlatego ostrożnie położyłem pokrywę obudowy na wierzchu, zaznaczyłem otwory i wywierciłem je wiertłem. Dzięki temu możemy z łatwością wszystko zobaczyć.
Jak sprawa jest skończona musimy wszystko okablować, tutaj schemat okablowania.
Krok 10: Ocena i wnioski
Więc to jest/był mój pierwszy projekt.
Chyba wygląda dobrze.
Nauczyłem się wielu nowych rzeczy, poznałem zarówno dobre, jak i złe strony zarządzania projektami. To naprawdę była cenna lekcja. Oparłem się, że nie możesz czekać, naprawdę musisz dalej dawać. Musisz udokumentować każdy ruch (prawie bardzo ruch) i musisz to zrobić, gdy właśnie to zrobiłeś.
Skoncentruj się na jednej rzeczy na raz. Chcesz mieć temperaturę na ekranie? Zrób to, to i tamto. Nie czekaj ani nie próbuj tego przepuścić. To nie pomoże. I stracisz tak cenny czas.
Również 4 tygodnie wydają się dużo czasu. Ale mniej jest prawdą. To po prostu nie w porządku. Masz tylko 4 tygodnie. Pierwsze 2 tygodnie nie są zbyt duże. 3 tygodnie wykańczania i 4 tygodnie nieprzespana noc. W ten sposób nie powinieneś tego robić.
Byłem może trochę ambitny: mam super mały futerał, żadnych łatwych w użyciu czujników, baterii… Ułatw to, a potem stopniowo utrudnij, a dopiero wtedy dostaniesz dobry prototyp/produkt.
Zalecana:
Rozwiązanie problemu zanieczyszczenia światłem - Artemis: 14 kroków
Rozwiązanie problemu zanieczyszczenia światłem - Artemis: Zanieczyszczenie światłem to coś, co wpływa na nas wszystkich na całym świecie. Odkąd wynaleziono żarówkę, światło stało się znacznie bardziej spopularyzowane i było szczególnie używane w dużych miastach, takich jak Nowy Jork i Chicago. Całe to światło może mieć wpływ
PyonAir - monitor zanieczyszczenia powietrza typu Open Source: 10 kroków (ze zdjęciami)
PyonAir - monitor zanieczyszczenia powietrza typu Open Source: PyonAir to tani system monitorowania lokalnych poziomów zanieczyszczenia powietrza - w szczególności cząstek stałych. Oparty na płycie Pycom LoPy4 i sprzęcie kompatybilnym z Grove, system może przesyłać dane zarówno przez LoRa, jak i WiFi. podjąłem się tej p
Wzmacniacz audio Hi-Fi klasy 2.1 klasy AB DIY - poniżej 5 USD: 10 kroków (ze zdjęciami)
Wzmacniacz audio Hi-Fi klasy 2.1 klasy AB DIY - poniżej 5 USD: Cześć wszystkim! Dzisiaj pokażę wam, jak zbudowałem wzmacniacz audio dla systemu 2.1-kanałowego (lewo-prawo i subwoofer). Po prawie miesiącu badań, projektowania i testowania wymyśliłem ten projekt. W tej instrukcji będę chodzić
Maper zanieczyszczenia powietrza firmy CEL (zmodyfikowany): 7 kroków
Maper zanieczyszczenia powietrza CEL (zmodyfikowany): Zanieczyszczenie powietrza jest problemem globalnym w dzisiejszym społeczeństwie, jest przyczyną wielu chorób i powoduje dyskomfort. Dlatego staraliśmy się zbudować system, który mógłby śledzić zarówno lokalizację GPS, jak i zanieczyszczenie powietrza w tym dokładnym miejscu, aby następnie być
EqualAir: poręczny wyświetlacz NeoPixel wyzwalany przez czujnik zanieczyszczenia powietrza: 7 kroków (ze zdjęciami)
EqualAir: Wearable NeoPixel Display wyzwalany przez czujnik zanieczyszczenia powietrza: Celem projektu jest stworzenie nadającej się do noszenia koszulki, która wyświetla sugestywną grafikę, gdy zanieczyszczenie powietrza przekracza ustalony próg. Grafika inspirowana jest klasyczną grą „Brick Breakers”, w której samochód przypomina wiosło, które p