41030 Design af mekatronik Project 1: Sensors & data Gruppe 10.2 Sofus Addinton s124141 Daniel Vorting s141018 Nikolai Eskild Jensen s145325 02-03-2016
Indholdsfortegnelse 1 Introduktion 2 2 Beskrivelse af sensorer 2 2.1 BMP085............................................... 2 2.2 RTC................................................. 2 3 Eksperimenterne 3 3.1 Værelse (Atmosfærisk tryk og temperatur over 3 dage)..................... 3 3.2 Værelse (Atmosfærisk tryk og temperatur over 7 timer).................... 3 3.2.1 Opstilling og fejl...................................... 3 3.3 Elevator............................................... 4 3.4 Trappe................................................ 4 4 Koden 4 4.1 Void setup.............................................. 4 4.2 Void loop.............................................. 5 5 Diskussion 5 6 Bilag 6 6.1 Kildekode.............................................. 6 6.2 Rådata................................................ 6 6.3 Datasheets............................................. 6 6.4 Grafer................................................ 6 1 af 9
1 Introduktion Vi har i dette forsøg arbejdet med et digitalt barometer, hvor vi har optaget tryk- og temperaturændringer på et værelse, samt ændringer ved bevægelse fra første til ottende etage i en bygning. Vi vil i denne rapport eftervise hvordan man kan bruge en Arduino, til at gemme data på et SD-kort, og lave relevant databehandling over opsamlede data. Vi vil benytte et BMP085 Bosch barometer (beskrevet i kapitel 2.1) til at måle trykket, i eksperimenterne. Projektet har til formål at gøre kendskabet til arbejde med sensorer, data-opsamling større og at skrive kode større, samt give et indblik i metrologiske fænomener der kan observeres med en Arduino. Det anbefales til gennemlæsning af denne rapport, at man har graferne ved hånden, så man kan observere dem samtidigt med at de bliver gennemgået. 2 Beskrivelse af sensorer 2.1 BMP085 Som nævt i kapitel 1 benytter vi et BMP085 Bosch barometer. Figure 1: BMP085 Bosch barometer BMP085 er en digital tryk, temperatur og højdemåler der gør det muligt at måle disse forskellige parametre med opsætning til eksempelvis en Arduino. Selve tryk-, temperatur- og højdemålingsenheden er den lille sølvfarvede firkant som ses på figur 1. Den måler absolute pressure som er trykket målt fra absolut vakum. Sensorens præcision er 1 Pascal og 0,1 C, hvilket er mere end rigelig nøjagtighed for vores eksperiment. På sensoren ses 6 pins, som udgør strøm (GND og VCC), data-transmissions pins SCL = serial clock og SDA serial data (som var dem vi brugte), og EOC = End of conversion output samt XCLR = Master Clear (low-active), som vi ikke gjorde brug af i dette projekt. 2.2 RTC RTC et fungerer ved at der sidder et eksternt batteri, som holder komponenten kørende selvom Arduinoen er slukket. Den fungerer ligesom et digitalt armbåndsur, der giver strøm til en lille krystal, der så vibrerer og som kan aflæses og give chippen den korrekte tid/dato. På figur 2, ses at RTC en har 6 pins. De 4 af dem som vi gjorde brug af er VCC = strøm, GND = ground, SDA = Serial Data og SCL = serial clock. 2 af 9
3 Eksperimenterne Figure 2: Den RTC, Real Time Clock, vi benytter i eksperimentet 3.1 Værelse (Atmosfærisk tryk og temperatur over 3 dage) I dette eksperiment forsøgte vi at måle lufttrykket på et værelse over 3 dage. Vores antagelse inden forsøgets start var, at de målte data ville stemme nogenlunde overens med målte data fra et professionelt metrologisk institut (DMI). Desværre mislykkedes forsøget, da filen blev korruperet. 3.2 Værelse (Atmosfærisk tryk og temperatur over 7 timer) Her forsøgte vi at opnå samme resultater som ovenfor, desværre under stort tidspres (forklaret yderligere i 3.2.1). Som det kan ses på grafen, kan man tydeligt se, da værelsets vindue bliver åbnet om natten, og temperaturen derfor falder indtil det igen bliver lukket, og radiatoren opvarmer lokalet igen. Derudover ses også et spring i trykket, når vinduet åbnes og lukkes (som kommenteret på i grafen). Men samlet kan man se, at trykket falder henover natten, hvilket stemmer godt overens med de online data vi kan finde. På figur 3 ses det tydeligt at trykket falder fra omkring 1001 hpa til 991 hpa i løbet af natten. Det er et udtryk for at vejret bevæger sig mod overskyet og regnfuldt. Hvilket også stemmer overens med observeret vejr. Vi kan se på temperaturen i figur 4 falder den drastisk da vinduet bliver åbnet og falder helt indtil ca. kl. 4:30 hvor vinduet igen bliver lukket og radiatoren opvarmer lokalet. 3.2.1 Opstilling og fejl Udover de forrige forsøg blev det, vi troede skulle blive det endelige eksperimentet, opsat og testet lørdag d. 27/2 ved 22:45 og fik lov at stå natten over og indtil tirsdag d. 1/3 kl. 22:45. Noget gik dog galt her, og derfor blev vi nødt til at sætte data til logging henover natten fra tirsdag d. 1/3 kl. 23:00 til onsdag morgen kl. 06:45. Vores data blev opsamlet af et digitalt barometer, som gemte dataen på et tilkoblet SD kort. Vores kode er skrevet således, at der blev taget en måling pr. sekund. Hele vores setup har været tilkoblet en USB til 230v omformer, så den har været tilsluttet ekstern strøm udenom en computer. Vi har derfor valgt, kun at se på natten mellem d. 1. marts, og d. 2 marts. Vi observerede, at vejret skiftede fra højttryksvejr til lavtryksvejr, og onsdag morgen var det typisk lavtryksvejr med overskyet himmel og regnvejr. På figur 3 er data for tryk vist på et diagram. Det er tydeligt at se, skiftet fra højtryk til lavtryk. 3 af 9
3.3 Elevator I dette eksperiment, vil vi måle lufttrykket i en elevator, ved op- og nedkørsel. Ved eksperimentet tilkoblede vi et 9v. batteri for at kunne bevæge os samtidigt med at Arduinoen kørte Vi startede målingen ved at stille os ind i elevatoren og begyndte målingen på boardet ved at trykke RS-knappen ind ved 0. etage. Derefter kørte vi op til 8. etage. og trykkede RS-knappen ind igen. Det gjorde at vi på SD-kortet ville få et break med en ny header, og derved kunne vi se, hvornår vi skiftede til ny måling. Derefter kørte vi ned igen, men på vejen ned blev elevatoren stoppet på 5. etage og ventede der noget tid inden vi kørte ned til 0. etage, hvor vi resatte med RS-knappen igen. Som det kan ses på vores målinger i figur 6 når vi kører op med elevatoren falder trykket og på figur 7 ses det at da vi kører ned stiger trykket og udjævnes på 5. etage, og stiger derefter igen når elevatoren fortsætter mod 0. etage. Der er altså en god sammenhæng mellem højde og tryk som forventet. 3.4 Trappe I dette eksperiment, vil vi måle lufttrykket når vi går op og ned ad en trappe. Her forventede vi en mere jævn fordeling af trykket, fordi vi ikke f.eks. blev bremset af andre der skulle ind og ud af elevatoren (som ved 5. etage i elevator-eksperimentet) og målingen foregår over længere tid. Som det ses på figur 8 sker der nogen udfald i den ellers meget pæne lineære graf. Det kan skyldes at trappeopgangen er et lukket rum, hvor en flere døre både forbinder til andre gange, og en større dør der fører udenfor. Når disse åbnes og lukkes af andre personer, kan det resultere i disse udsving, fordi trykket ændres af f.eks. blæst udefra når en dør åbnes. På grafen ses dog et forholdsvis jævnt fald i trykket i takt med at vi bevæger os fra 0. etage til 8. etage 4 Koden Første iteration af koden blev allerede skrevet den 07/02, det er denne tidlige kode, som der er blevet bygget videre på i alle iterationer. Første iteration blev brygget sammen af eksempler fra forskellige relevante biblioteker, hvilket hvilket betød at der desværre blev overført nogle redundante klasser til koden, som først blev fjernet i senere iterationer. Konventionen for pæn kode foreskriver at man inkluderer objekter i topppen af af koden, selvom compileren læser hele koden inden den eksekveres. Vi inkluderer først nødvendige bibiloteker i koden. 4.1 Void setup I setuppet begynder vi Real time uret, første gang og indstiller dette. Kommandoen til at sætte uret er siden udkommenteret, men stadig inkluderet, da det gør det nemmere at sætte uret igen, såfremt at batteriet skulle løbe tør eller blive fjernet fra uret. Vi oplevede nogle problemer med Leonardo boardet. Det var nødvendigt at sætte nogle slukke pin 8 og sætte pin 17 til output, til trods for at vi ikke kører noget på disse pins If (!bmp.begin()) { delay(5000); Serial.print("waiting for bmp085 - Check wires"); } Dette stykke kode er inkluderet for at give bordet lidt tid til at starte ordenligt, såfremt at sensoren ikke er begyndt endnu. Det er altså blot en hurtig måde, sørge for at sensoren er klar til logge inden loopet 4 af 9
påbegynder. Det sikrer også at vi får en fejlmeddelelse, hvis bmp en er sat forkert i boardet, da koden aldrig vil eksekvere længere, men vi får en fejlmeddelse i serial monitoren. 4.2 Void loop Vi kalder sensor objketet i loopet og bruger kommandoerne fra dette til til at skrive dataen, både i serial monitoren og til SD kortet. Til seriel monitoren skriver vi dataen i naturligt sprog, altså Pressure: 1000.3 hpa..etc Mens vi blot logger dataen komma sepereret på kortet under den relevante header. Det er en af de primære opgraderinger fra de tidligere revisioner. Timestampet er således også skrevet i unixtid for at gøre databehandlingen lettere. 5 Diskussion Vi var i gruppen hurtige til at få skrevet og testet vores kode af så vi allerede efter første weekend efter opgaven var stillet, havde en færdig og brugbar kode til måling af vores data. Vi beslutte i gruppen at vi kunne logge dataen på en smartere måde, så vi slettede daten og reviderede koden. Version 2.0 blev skrevet efter vi fik udleveret RTC modulet og denne revision inkluderede RTC funktionalitet, hvor 1.0 loggede data på processorens clockspeed via. delays. 2.1 introducerede unixtid på sd kortet, men bibeholdt realtid i serial monitoren. Der blev også i denne revision skrevet en enkelt dataheader i setuppet således der kun blev skrevet data i loopet. Her skete der sandsynligvis en fejl. Da vi kopirede SD metoden til headeren. Der manglede nemlig datafile.close(); i loopet. Denne fejl blev rettet 2.2, men fordi vi har været for dårlige til revisionsstyring, og den endelige data skulle måles på en anden computer, blev denne rettelse aldrig inkluderet, hvilket naturligvis resulterede i at vores data korruperede i løbet af den 3-dages måling. Desværre har vores målinger lidt en del af, at vi har haft mange problemer med opsamling af data. Vi har siden opgaven blev stillet udført 3 3-dages målinger. De er mislykkedes af forskellige årsager, men den sidste menes at være grundet en revisionsfejl som har korruperet dataen på SD-kortet. Vores opstilling blev testet flere gange både før og efter fejlene, hvor det kørte uden problemer i kortere perioder. Kun da vi sidste gang fra tirsdag aften d. 1/3 til onsdag morgen d. 2/3 kørte en længere opsamling af data (ca. 7 timer) lykkedes det. Det har naturligvis resulteret i at vores data ikke blev opsamlet over det antal dage som det skulle. De data vi har logget viser en tydelig sammenhæng mellem det barometriske tryk som er blevet målt, og de data som vi kan få oplyst på nettet. Der er et tydeligt skift fra højttryksvejr til lavtryksvejr. Vores lufttryk går fra 1001 hpa til 991 hpa, hvilket stemmer godt overens med de online data. Ved vores dataopsamling i elevatoren kørte vi fra 0. til 8. etage på Rigshospitalets Kollegium. Dette resulterede i nogen rimelig gode data. Derefter kørte vi ned igen hvor elevatoren stoppede på 5. etage (hvilket tydeligt ses på målingerne) og derefter kørte videre. Til sidste forsøgte vi at gå distancen fra 0. til 8. etage på trapperne. Det gav nogen større udsving i data, men det kan stadig ses, at trykket falder. 5 af 9
6 Bilag 6.1 Kildekode Der er kun én kildekode til begge eksperimenter, det ikke lykkedes os at skrive en strømbesparende kode til det mobile eksperiment. Koden findes i mappen under code. 6.2 Rådata Dataen for de to eksperimenter, ligger i mappen under experiments. 6.3 Datasheets Datasheet for Bosch Sensortec BMP085, ligger i mappen under datasheets 6.4 Grafer Figure 3: Trykmåling på værelset 6 af 9
Figure 4: Temperaturmåling på værelset Figure 5: Trykmåling i København, kilde: wunderground.com 7 af 9
Figure 6: Figure 7: 8 af 9
Figure 8: Trappe eksperimentet 9 af 9