Spisu treści:
- Krok 1: Czego potrzebujesz
- Krok 2: Przygotowanie modułu Bluetooth
- Krok 3: Montaż części
- Krok 4: Parowanie
- Krok 5: Oprogramowanie
- Krok 6: Test
Wideo: Czujnik pyłu sodowego w systemie Android: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Rok temu mój znajomy miał weekendowe warsztaty na temat monitoringu środowiska. Celem warsztatów było zbudowanie czujnika kurzu połączonego z płytą raspberry pi, aby umieścić dane pomiarowe na serwerze, który dostarczał często aktualizowane mapy stężenia pyłu. Mój znajomy zapytał, czy istnieje sposób na uzyskanie danych z czujnika bezpośrednio na jego smartfonie w celu monitorowania i rejestrowania. Poszukałem więc w Internecie arkusza danych i zobaczyłem, że czujnik ma prosty interfejs UART z protokołem 9600Baud 8N1. Ale jak podłączyć UART do smartfona? Cóż, to proste. Po prostu musiałem użyć jednego z tych wszechobecnych małych modułów Bluetooth, które zapewniają emulowany comport na Androidzie. Teraz zobacz, jak to zrobiłem.
Krok 1: Czego potrzebujesz
Potrzebujesz następujących części
- Współpracujące złącze JST XH 7-pinowe do interfejsu Sodial z przewodami. Kupiłem swoją na eBayu.
- Moduł Bluetooth HC05 lub 06 kompatybilny ze złączem UART
- Konwerter szeregowy USB z interfejsem poziomu TTL. Używamy tego, aby nadać modułowi BT unikalną nazwę
- Czujnik kurzu Sodial SDS011. Mam swoją z Ebay
- kawałek veroboard
- Złącze USB-B
- drut
- Kawałek drewna, na którym można wszystko zamontować
Wtedy będziesz potrzebować prostych narzędzi:
- Piła do cięcia drewna
- pinceta
- lutować żelazo i lutować
- przecinak do drutu
- Pistolet na gorący klej
- Kawałek silikonowego rękawa 8mm (nie na zdjęciu)
Możesz pobrać arkusz danych Sodial SDS011 tutaj Arkusz danych Sodial SDS011
Krok 2: Przygotowanie modułu Bluetooth
Moduł BT posiada interfejs UART z poziomem TTL. Można go przekonfigurować za pomocą poleceń "AT", tak jak robiliśmy to z modemami internetowymi w czasach starożytnych. Aby podłączyć go do programu terminalowego na komputerze, musisz dostosować UART do swojego komputera. Użyłem konwertera USB-RS232 kupionego w amazon. Zastosowałem złącze dla modułu BT i poprowadziłem zasilanie 3,3 V i GND z konwertera do modułu BT. Następnie połączyłem odpowiednie linie TxD i RxD w zwrotnicy. TxD z konwertera USB na RxD z modułu BT i odwrotnie.
Mam maszynę z Linuksem i używam cutecom. Po podłączeniu konwertera USB port był "ttyUSB0". Możesz znaleźć nazwy comportów w katalogu "/dev" na swoim komputerze z Linuksem. Użytkownikom systemu Windows polecam "hterm". Jest łatwy w obsłudze. Wpisz „AT” i powinieneś otrzymać „AT” jako odpowiedź. Następnie wpisz „AT+NameSensor”, aby nadać modułowi BT nazwę „Sensor”
Krok 3: Montaż części
Wytnij kawałek drewna w rozmiarze odpowiednim do wyjęcia wszystkich części. Podłącz wszystkie sygnały zgodnie ze schematem. Dobrym pomysłem jest założenie silikonowej osłony na przewody, aby je chronić. Przylutuj wtyczkę USB-B do płyty perforowanej. Służy tylko do zasilania. Zamocuj wszystkie części za pomocą śrub na drewnianej podstawie. Na koniec przyklej kable na gorąco, aby przymocować je do drewna.
Krok 4: Parowanie
Zasil aplikację czujnika, podłączając zasilacz USB. Czerwona dioda LED na module BT zacznie migać. Nie próbuj sparować go ze smartfonem z Androidem. Musisz wpisać kod PIN. To jest „1234”. Po wprowadzeniu kodu smartfon powinien zostać sparowany z modułem BT.
Krok 5: Oprogramowanie
Lubię pisać aplikacje na Androida na samej platformie docelowej. oszczędza ci to wszystkich rzeczy związanych z emulacją, o które musisz dbać, jeśli pracujesz z Android Studio. Znalazłem trzy odpowiednie narzędzia programistyczne na samym Androidzie
- Mintoris Basic. Interpreter Basic z bogatym zestawem poleceń do majstrowania przy prawie wszystkim na Androidzie. Możesz tworzyć skróty do swoich aplikacji. Mintoris basic nie zawiera kompilatora. Musisz więc zainstalować Mintoris na każdym używanym urządzeniu. Ale musisz za to zapłacić tylko raz (około 7 €)
- Podstawowy! Bardzo dobry interpreter i kompilator Basic (dodatek za około €). Prawie zahacza o wszystko w Androidzie i możesz kompilować prawdziwe aplikacje do ich dystrybucji bez posiadania Basic! na urządzeniu docelowym. Niestety podstawowe! brakuje doskonałych funkcji wykresów diagramów Mintoris
- AIDE to półprofesjonalne IDE do tworzenia androidów w java na Androidzie. Dzięki AIDE masz maksymalną elastyczność, ale musisz nauczyć się języka Java. AIDE ma roczne koszty około 50€
Wybrałem Mintoris. W tej sekcji nie przedstawię samouczka programowania w Mintoris, ale krótki opis bloków funkcyjnych
W następnej części zadeklarowane są trzy tablice dla dwóch linii danych czujnika i odpowiednich znaczników czasu. Dane sygnatury czasowej są używane do oznaczania osi x diagramu. Sodial wysyła dwa strumienie danych, każdy określony dla specjalnego rozmiaru cząstek. Te dwie tablice danych pyłu przyjmują te wartości.
Częściowe WakeLock
Kolor tekstu 100, 75, 10
Kolor tekstuA 50, 50, 50
Wyrównaj tekst 0
Rozmiar tekstu 24
CLS
Popup "Miernik czujnika kurzu (c) ARJ 2017"
Globalny dustData(), dustDataF(), timeStamp() Indeks globalny, wybór, maxData, nazwa_pliku$
Przyciemniony znacznik czasu(59)
Przyciemnione dane pyłu(59)
Dim dustDataF(59)
Dim Menu$(4) = "maks. 100 zestawów danych", "maks. 1000 zestawów danych", "maks. 5000 zestawów danych", "maks. 10000 zestawów danych", "Exit"
„Uruchom tablice”
Dla i = 0 do 59
pyłDane(i) = 0
pyłDaneF(i) = 0
znacznik czasu(i)=i
Dalej ja
Następnie konfigurowane jest menu List. Daje to użytkownikowi możliwość wyboru maksymalnego rozmiaru zbieranych danych. To tylko wyłącznik bezpieczeństwa, który uniemożliwia smartfonowi zasysanie niekończących się danych. Funkcja BTgetPaired$() zwraca listę wszystkich sparowanych urządzeń na urządzeniu z Androidem, ich nazwy i adres BT.
Lista Menu$(), wybór
'Wybierz maksymalną ilość, jeśli dane mają być przechowywane
poziom pracy = 1
Wybierz wybór
Przypadek 0 maxDane = 100
Przypadek 1 maxData = 1000
Przypadek 2 maxDane = 5000
Przypadek 3 maxDane = 10000
Przypadek 4 maxDane = 0
Koniec Wybierz
''Podłącz czujnik
para przyciemniona$(0)
para$() = BTGetSparowane$()
Jeśli para$(0) = "brak" Wtedy
Print "Nie znaleziono sparowanych urządzeń. Czy BT jest włączone?" Drukuj "Program zakończony"
Kończyć się
Endif
Lista par$(), urządzenie$
name$=ItemExtract$(urządzenie$, 0)
adres$=ItemExtract$(urządzenie$, 1)
BTConnect 1, adres $
„Poczekaj na połączenie”
Postęp włączony
Print "Próbuję połączyć się z ";adres$
Dla i = 1 do 20
Postęp i/2
Jeśli BTGetstate(1)=4 to wyjdź i czekaj 1000
Dalej ja
Postęp WYŁĄCZONY
„Po sukcesie połącz się z urządzeniem BT”
If BTGetState(1) = 4 Then Print "Connected" Else Print "Nie można połączyć się z ";name$
Drukuj "Program zakończony"
Kończyć się
Endif
Kolejny blok przedstawia akwizycję danych. Dla każdej sesji danych plik jest automatycznie otwierany i nazwany według czasu i daty. Następnie pętla odczytuje dane z czujnika. Dane są pakowane w kilka bajtów. Zestaw bajtów jest identyfikowany przez dwa znaki ASCII 170 i 171. Poniższe dane są reorganizowane i wypełniane w tablicach pyłowych
Grafika włączona
'Otwórz plik danych do zapisu
fileName$ = FormatTime$(t, "rrrr-MM-dd-kk-mm-ss") + ".dat"
Open 1, fileName$, "w+" Print "Open datafile ";fileName$ Writeln 1, FormatTime$(Time(), "rr-MM-dd")
Writeln 1, „Czas kurzu 2,5 kurzu10”
„Wypełnij tablicę zmierzonymi danymi”
dane$="" pakiet$=""
indeks=0
Wykonaj, gdy maxData > 0
BTPrzeczytaj 1, pakiet $, 10
dane$=dane$+pakiet$
Jeśli Len (dane $) >= 10 Wtedy
Jeśli (ASCII(Lewy$(dane$, 1))=170) & (ASCII(Prawy$(dane$, 1)) = 171) Wtedy
dustDataF(indeks)=ASCII(Środek$(dane$, 2, 1))
dustDataF(indeks)=(dustDataF(indeks)+256*ASCII(Środek$(dane$, 3,1)))/10
dustData(indeks)=ASCII(Środek$(dane$, 4, 1))
dustData(indeks)=(dustData(indeks)+256*ASCII(Środek$(dane$, 5,1)))/10
Writeln 1, FormatTime$(Time(), "kk:mm:ss") + " " + Str$(dustDataF(index))+ " " + Str$(dustData(index))
dane$=""
maxDane = maxDane-1
indeks=indeks+1
Jeżeli indeks>59 to indeks=0
dane pyłu (indeks) = 0
dustDataF(indeks)=0
Endif
Endif
RysujWykres()
Poczekaj 100
Pętla
Zamknij 1
Grafika wyłączona
CLS Print "Program zakończony"
Kończyć się
Ostatnia część to podprogram, który jest wywoływany po każdym odbiorze danych. Czyści ekran, przerysowuje diagram z rzeczywistymi danymi przechowywanymi w macierzach kurzu i znaczników czasu.
' Narysuj współrzędne, etykiety, znaczniki, a także krzywe danych
Sub DrawGraph()
' W trybie graficznym ekran zostaje wyczyszczony do bieżącego koloru
Kolor 0, 0, 0
CLS
Kolor 0, 0, 100
' Ustaw kolor grafiki, który będzie używany do rysowania linii siatki
Kolor tekstu 100, 100, 100, 50
'TextColor to kolor głównego tytułu siatki
Kolor tekstuA 100, 100, 100
' TextColorA jest używany dla tytułów osi i adnotacji siatki.
' Ustaw rozmiar tekstu tytułu osi
' Główny tytuł siatki ma 2x ten rozmiar
Rozmiar tekstu 20
Stała dziesiętna 0
' Ustaw wyświetlanie 2 miejsc po przecinku
PadCyfry 2
' Narysuj siatkę dla wykresu ' Ustaw zakres i tytuł X i Y
Oś Oś X 0, 59, "Czas/s"
Oś Y 0, 10000, "ug/m3"
Siatka 3, „Stężenie pyłu”
' Rysuj wykresy pyłu
Kolor 100, 0, 0
GraphXY timeStamp(), dustDataF()
Kolor 0, 100, 0
GraphXY timeStamp(), dustData()
Kolor tekstu 100, 0, 0
DrawText "PM2.5", 30, Int(ScreenY()-60), 90, 1
Kolor tekstu 0, 100, 0
DrawText "PM10", 30, Int(ScreenY()-150), 90, 1
Kolor tekstu 100, 100, 100, 50
Powrót
Pobierz kod źródłowy tutaj
Krok 6: Test
Włącz czujnik i uruchom aplikację. Z listy sparowanych urządzeń wybierz to o nazwie „Sensor”. Po podłączeniu czujnika ekran zacznie wyświetlać dane. Jednocześnie przydzielany jest plik danych. Po zakończeniu mody możesz użyć GnuPlot do wyświetlenia danych. Użyj pliku „Test.gp” w GnuPlot, aby skonfigurować GnuPlot do wyświetlania pliku danych o nazwie „Test.dat”. Możesz go również znaleźć tutaj
Zobacz wideo, aby uzyskać więcej informacji i przetestować. Miłej zabawy i więcej pomysłów!
Zalecana:
DIY czujnik oddechu z Arduino (przewodzący czujnik rozciągnięcia dzianiny): 7 kroków (ze zdjęciami)
Czujnik oddechu DIY z Arduino (przewodzący czujnik rozciągnięcia dzianiny): Ten czujnik DIY przyjmie postać przewodzącego czujnika rozciągnięcia dzianiny. Będzie owijał się wokół klatki piersiowej/żołądka, a gdy klatka piersiowa/żołądek rozszerza się i kurczy, podobnie czujnik, a w konsekwencji dane wejściowe, które są przesyłane do Arduino. Więc
Zasilany energią słoneczną czujnik temperatury i wilgotności Arduino jako czujnik Oregon 433 mhz: 6 kroków
Czujnik temperatury i wilgotności Arduino zasilany energią słoneczną jako czujnik Oregon 433 mhz: Jest to konstrukcja czujnika temperatury i wilgotności zasilanego energią słoneczną. Czujnik emuluje czujnik Oregon 433 mhz i jest widoczny w bramce Telldus Net. Czujnik ruchu energii słonecznej" z serwisu eBay. Upewnij się, że mówi o cieście 3,7 V
Czujnik dzwonka do drzwi i czujnik temperatury: 6 kroków
Czujnik nacisku i temperatury dzwonka do drzwi: Ulepsza standardowy dzwonek przewodowy do drzwi z modułem esp-12F (esp8266). Instaluje się w samym dzwonku, aby uniknąć jakichkolwiek zmian w okablowaniu. Zapewnia następujące funkcje Wykrywanie przyciśnięć dzwonka do drzwiWysyła powiadomienia na telefon za pośrednictwem sklepów IFTTTS
Badanie pyłu Arduino: 8 kroków
Arduino Dust Study: Jak wyglądałoby życie na Marsie? Czy powietrze nadaje się do oddychania? Czy to bezpieczne? Ile tam jest kurzu? Jak częste są burze? Czy kiedykolwiek zastanawiałeś się, jaka jest odpowiedź na którekolwiek z tych pytań?
Czujnik dotykowy i czujnik dźwięku kontrolujący światła AC/DC: 5 kroków
Czujnik dotykowy i czujnik dźwięku kontrolujący światła AC/DC: To mój pierwszy projekt i działa w oparciu o dwa podstawowe czujniki, jeden to czujnik dotykowy, a drugi to czujnik dźwięku, po naciśnięciu panelu dotykowego na czujniku dotykowym włącza się światło AC ON, jeśli go zwolnisz, światło będzie wyłączone i to samo