Inhoudsopgave:

Sodial Dust Sensor op Android - Ajarnpa
Sodial Dust Sensor op Android - Ajarnpa

Video: Sodial Dust Sensor op Android - Ajarnpa

Video: Sodial Dust Sensor op Android - Ajarnpa
Video: Sun Damage Is Terrifying 2024, November
Anonim
Sodial-stofsensor op Android
Sodial-stofsensor op Android

Een jaar geleden had een vriend van mij een weekendworkshop over milieumonitoring. Het doel van de workshop was om een stofsensor op te bouwen die was aangesloten op een Raspberry Pi-bord om meetgegevens op een server te zetten die regelmatig bijgewerkte stofconcentratiekaarten leverde. Mijn vriend vroeg of er een manier is om de sensorgegevens rechtstreeks op zijn smartphone te krijgen voor monitoring en logging. Dus ik zocht op internet naar een datasheet en zag dat de sensor een eenvoudige UART-interface had met het 9600Baud 8N1-protocol. Maar hoe verbind je een UART met een smartphone? Nou, dat is makkelijk. Ik moest gewoon een van die alomtegenwoordige kleine Bluetooth-modules gebruiken die een geëmuleerde comport op Android bieden. Kijk nu hoe ik het gemaakt heb.

Stap 1: Wat je nodig hebt

Wat je nodig hebt
Wat je nodig hebt
Wat je nodig hebt
Wat je nodig hebt

Je hebt de volgende onderdelen nodig:

  • Een bijpassende connector JST XH 7-pins voor de Sodial-interface met draden. Ik heb de mijne op Ebay gekocht.
  • Een Bluetooth-module HC05 of 06 compatibel met UART-connector
  • Een USB-serieel converter met TTL-niveau-interface. We gebruiken dit om de BT-module een unieke naam te geven
  • Sodial SDS011 stofsensor. Ik heb de mijne van Ebay
  • een stuk veroboard
  • USB-B-connector
  • draad
  • Een stuk hout om alles op te monteren

Dan heb je een aantal eenvoudige hulpmiddelen nodig:

  • Een houtzaag om het hout te zagen
  • pincet
  • soldeerbout en soldeer
  • draadknipper
  • Heet lijmpistool
  • Een stuk 8 mm siliconen hoes (niet op foto)

U kunt de Sodial SDS011 datasheet hier downloaden Sodial SDS011 datasheet

Stap 2: De Bluetooth-module voorbereiden

De Bluetooth-module voorbereiden
De Bluetooth-module voorbereiden
De Bluetooth-module voorbereiden
De Bluetooth-module voorbereiden
De Bluetooth-module voorbereiden
De Bluetooth-module voorbereiden
De Bluetooth-module voorbereiden
De Bluetooth-module voorbereiden

De BT-Module heeft een UART-interface met TTL-niveau. Het kan opnieuw worden geconfigureerd met "AT"-commando's zoals we deden met internetmodems in de oudheid. Om het aan te sluiten op een terminalprogramma op uw machine, moet u de UART aanpassen aan uw computer. Ik heb een USB-RS232-converter gebruikt die ik bij amazon heb gekocht. Ik heb een connector voor de BT-module aangebracht en de 3, 3V voeding en GND van de converter naar de BT-module gerouteerd. Vervolgens heb ik de respectieve TxD- en RxD-lijnen in crossover aangesloten. TxD van USB-converter naar RxD van BT-module en vice versa.

Ik heb een linux-machine en gebruik cutecom. Na het aansluiten van de USB-converter was de comport "ttyUSB0". Je kunt de comportnamen vinden in de map "/dev" op je Linux-machine. Voor Windows-gebruikers zou ik "hterm" aanbevelen. Het is gemakkelijk te bedienen. Typ "AT" en u zou "AT" als antwoord moeten krijgen. Typ vervolgens "AT+NameSensor" om de BT-module de naam "Sensor" te geven

Stap 3: De onderdelen monteren

De onderdelen monteren
De onderdelen monteren
De onderdelen monteren
De onderdelen monteren
De onderdelen monteren
De onderdelen monteren
De onderdelen monteren
De onderdelen monteren

Snijd een stuk hout in een maat die geschikt is om alle onderdelen te nemen. Sluit alle signalen aan zoals aangegeven in het schema. Het is een goed idee om een siliconen hoes om de draden te doen om ze te beschermen. Soldeer de USB-B-stekker op het perfboard. Het wordt alleen gebruikt voor de voeding. Bevestig alle onderdelen met schroeven op de houten basis. Lijm tenslotte de kabels om ze op het hout te bevestigen.

Stap 4: Koppelen

Koppelen
Koppelen
Koppelen
Koppelen

Voorzie de sensortoepassing van stroom door een USB-voeding aan te sluiten. Een rode LED op de BT-module begint te knipperen. Probeer het niet te koppelen met je Android-smartphone. U dient een pincode in te voeren. Dit is "1234". Na het invoeren van de code moet uw smartphone worden gekoppeld met de BT-module.

Stap 5: De software

Ik schrijf graag Android-apps op het doelplatform zelf. het bespaart je al die emulatie-dingen waar je je druk om moet maken als je met Android Studio werkt. Ik ontdekte drie geschikte ontwikkelingstools op Android zelf

  • Mintoris Basis. Een basisinterpreter met een uitgebreide reeks opdrachten om met bijna alles op Android te knutselen. U kunt snelkoppelingen maken voor uw apps. Mintoris basic bevat geen compiler. Je moet dus Mintoris hebben geïnstalleerd op elk apparaat dat je gebruikt. Maar je hoeft er maar één keer voor te betalen (ongeveer € 7)
  • Basis! Extreem goede Basic interpreter en compiler (add-on voor ongeveer €). Sluit bijna alles in Android aan en je kunt echte apps compileren om ze te distribueren zonder Basic! op het doelapparaat. Helaas Basis! mist de uitstekende diagramfuncties van Mintoris
  • AIDE is een semi-professionele IDE voor Android-ontwikkeling in Java op Android. Met AIDE heb je de grootste flexibiliteit, maar je moet Java leren. AIDE heeft jaarlijkse kosten van ongeveer 50€

Ik koos voor Mintoris. In deze sectie geef ik je geen tutorial over programmeren in Mintoris, maar een korte beschrijving van de functieblokken

In het volgende deel worden drie arrays gedeclareerd voor de twee sensordatalijnen en de respectieve tijdstempels. De tijdstempelgegevens worden gebruikt voor het labelen van de x-as van het diagram. De Sodial voert twee datastromen uit, elk gespecificeerd voor een speciale deeltjesgrootte. De twee dustdata-arrays nemen deze waarden aan.

WakeLock Gedeeltelijk

TekstKleur 100, 75, 10

TekstKleurA 50, 50, 50

TekstUitlijnen 0

Tekstgrootte 24

CLS

Popup "Stofsensormeter (c) ARJ 2017"

Globale dustData(), dustDataF(), timeStamp() Globale index, keuze, maxData, fileName$

Dim tijdstempel(59)

Dim stofData(59)

Dim stofDataF(59)

Dim Menu$(4) = "max. 100 datasets", "max. 1000 datasets", "max. 5000 datasets", "max. 10000 datasets", "Exit"

'Init de arrays'

Voor i = 0 tot 59

stofData(i) = 0

stofDataF(i) = 0

timeStamp(i)=i

volgende i

Vervolgens wordt een lijstmenu geconfigureerd. Dit geeft de gebruiker de keuze om de maximale grootte van de te verzamelen gegevens te selecteren. Dit is slechts een veiligheidsschakelaar om te voorkomen dat de smartphone eindeloze gegevens naar binnen zuigt. De Functies BTgetPaired$() geeft een lijst terug met alle gekoppelde apparaten op het Android-apparaat, hun namen en BT-adres.

L ist Menu$(), keuze

'Selecteer maximale hoeveelheid als gegevens moeten worden opgeslagen'

runLevel = 1

Selecteer keuze

Geval 0 maxData = 100

Geval 1 maxDatum = 1000

Geval 2 maxData = 5000

Geval 3 maxData = 10000

Geval 4 maxData = 0

Einde selecteren

''Sensor aansluiten

dim paar$(0)

paar$() = BTGetPaired$()

Als paar$(0) = "geen" Dan

Afdrukken "Geen gekoppelde apparaten gevonden. Is BT ingeschakeld?" Print "Programma beëindigd"

Einde

Stop als

Lijst paar$(), apparaat$

name$=ItemExtract$(apparaat$, 0)

address$=ItemExtract$(apparaat$, 1)

BTConnect 1, adres$

'Wacht op verbinding'

Voortgang AAN

Print "Proberen verbinding te maken met ";address$

Voor i = 1 tot 20

Vooruitgang i/2

Als BTGetstate(1)=4 Dan Afsluiten voor Wacht 1000

volgende i

Voortgang UIT

'Bij succes verbinding maken met het BT-apparaat

Als BTGetState(1) = 4 Print dan "Verbonden" Anders Print "Kan geen verbinding maken met ";name$

Print "Programma beëindigd"

Einde

Stop als

Het volgende blok toont de databehoefte. Voor elke datasessie wordt automatisch een bestand geopend en genoemd naar tijd en datum. Dan leest de lus de sensorgegevens. De gegevens zijn verpakt in verschillende bytes. Een set bytes wordt geïdentificeerd door twee ASCII-tekens 170 en 171. De volgende gegevens worden gereorganiseerd en ingevuld in de dust-arrays

Grafisch aan

'Open databestand om te schrijven'

fileName$ = FormatTime$(t, "jjjj-MM-dd-kk-mm-ss") + ".dat"

Open 1, fileName$, "w+" Print "Geopende datafile ";fileName$ Writeln 1, FormatTime$(Time(), "yy-MM-dd")

Schrijf 1, "Tijd Dust2.5 Dust10"

'Array vullen met de gemeten data'

data$="" pakket$=""

index=0

Do While maxData > 0

BTRead 1, pakket$, 10

data$=data$+pakket$

Als Len(data$) >= 10 Dan

Als (ASCII(Links$(data$, 1))=170) & (ASCII(Rechts$(data$, 1)) = 171) Dan

dustDataF(index)=ASCII(Midden$(data$, 2, 1))

dustDataF(index)=(dustDataF(index)+256*ASCII(Mid$(data$, 3, 1)))/10

dustData(index)=ASCII(Mid $(data$, 4, 1))

dustData(index)=(dustData(index)+256*ASCII(Mid$(data$, 5, 1)))/10

Writeln 1, FormatTime$(Time(), "kk:mm:ss") + " " + Str$(dustDataF(index))+ " " + Str$(dustData(index))

gegevens$=""

maxData = maxData-1

index=index+1

Als index>59 Dan index=0

dustData(index)=0

dustDataF(index)=0

Stop als

Stop als

TekenGrafiek()

Wacht 100

Lus

Sluiten 1

Grafisch uit

CLS Print "Programma beëindigd"

Einde

Het laatste deel is een subroutine die na elke dataontvangst wordt aangeroepen. Het wist het scherm, hertekent het diagram met de feitelijke gegevens die zijn opgeslagen in de stof- en tijdstempelarrays.

' Teken de coördinaten, de labels, ticks en ook de datacurves

Sub DrawGraph()

' In de grafische modus wordt het scherm in de huidige kleur gewist

Kleur 0, 0, 0

CLS

Kleur 0, 0, 100

' Stel de grafische kleur in die moet worden gebruikt om de rasterlijnen te tekenen

TekstKleur 100, 100, 100, 50

'TextColor is de kleur van de hoofdtitel van het raster'

TekstKleurA 100, 100, 100

' TextColorA wordt gebruikt voor Axis-titels en rasterannotaties.

' Stel de grootte van de titeltekst van de as in

' De hoofdtitel van het raster is 2x zo groot

Tekstgrootte 20

FixDecimaal 0

' Instellen om 2 decimalen weer te geven

PadCijfers 2

' Teken een raster voor de grafiek ' Stel het bereik en de titel van de X & Y in

Axis AxisX 0, 59, "Tijd/s"

AxisY 0, 10000, "ug/m3"

Raster 3, "Stofconcentratie"

' Teken stofgrafieken

Kleur 100, 0, 0

GraphXY timeStamp(), dustDataF()

Kleur 0, 100, 0

GraphXY timeStamp(), dustData()

TekstKleur 100, 0, 0

DrawText "PM2.5", 30, Int(ScreenY()-60), 90, 1

TekstKleur 0, 100, 0

DrawText "PM10", 30, Int(ScreenY()-150), 90, 1

TekstKleur 100, 100, 100, 50

Opbrengst

Download hier de broncode

Stap 6: Testen

Image
Image
Toets
Toets
Toets
Toets
Toets
Toets

Schakel de sensor in en start de app. Kies uit de lijst met gekoppelde apparaten degene met de naam "Sensor". Nadat de sensor is aangesloten, begint het scherm de gegevens weer te geven. Tegelijkertijd wordt het gegevensbestand toegewezen. Na het afronden van de mode kunt u GnuPlot gebruiken om de gegevens weer te geven. Gebruik het bestand "Test.gp" in GnuPlot om GnuPlot te configureren voor het weergeven van een gegevensbestand met de naam "Test.dat". Je kunt het ook hier vinden

Bekijk de video voor meer details en testen. Veel plezier en nog meer ideeën!

Aanbevolen: