Spisu treści:

Czujnik pyłu sodowego w systemie Android: 6 kroków
Czujnik pyłu sodowego w systemie Android: 6 kroków

Wideo: Czujnik pyłu sodowego w systemie Android: 6 kroków

Wideo: Czujnik pyłu sodowego w systemie Android: 6 kroków
Wideo: CZUJNIK SMOGU DIY | Cz.1 Komponenty ESP8266 + PMS7003 2024, Lipiec
Anonim
Czujnik pyłu sodowego w systemie Android
Czujnik pyłu sodowego w systemie Android

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

Czego potrzebujesz
Czego potrzebujesz
Czego potrzebujesz
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

Przygotowanie modułu Bluetooth
Przygotowanie modułu Bluetooth
Przygotowanie modułu Bluetooth
Przygotowanie modułu Bluetooth
Przygotowanie modułu Bluetooth
Przygotowanie modułu Bluetooth
Przygotowanie modułu Bluetooth
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

Montaż części
Montaż części
Montaż części
Montaż części
Montaż części
Montaż części
Montaż części
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

Łączenie w pary
Łączenie w pary
Łączenie w pary
Łączenie w pary

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

Image
Image
Test
Test
Test
Test
Test
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: