[{"content":"Her skal vi sjekke at du har fått alt innholdet i pakken. Her er en innholdsliste, og alle komponentene er forklart under.\nInnholdsliste PCB Raspberry Pi Pico W SHT31 Temperatur og Fuktighetssensor Ultimate GPS Breakout (PA6H) CR1220 Batteri PM2.5 Air Quality Sensor (Plantower) MicroSD Card Breakout Board MicroSD-Kort (16GB) Headere 2.54mm (4stk) Male Komplett Boks : Bunnplate Lange Sideplater (2 stk) Korte Sideplater (2 stk) Akryl Gjennomsiktig Frontplate Polyamid Skruer (4 stk + 1 Ekstra) Polyamid Muttere (8 stk + 2 Ekstra) Batteripakke (Powerbank) USB-A til MicroUSB ledning Dobbeltsidig Tape og Pose for smådeler Karabinkrok PCB Printed Circuit Board PCB kortet skal se slik ut og være merket med V.5.\nMikrokontroller Raspberry Pi Pico W Pico W er en av de første mikrokontrollerene fra Raspberry Pi. En mikrokontroller skiller seg fra datamaskiner i at de kun kjører et program i gangen, og kjører ikke noe operativsystem (f. eks: Windows, Linux eller MacOs).\nSensorer Alle sensorene vi bruker er produsert av Adafruit . Disse sensorene fungerer godt med CircuitPython, som også er laget av Adafruit.\nSHT31 Temperatur og Fuktighet SHT31 kombinerer temperatur og fuktighetsmåling i en sensor. Det er viktig at denne sensoren monteres slik at den hvite delen i midten (selve sensoren) har tilgang til luft.\nPA6H Ultimate GPS Breakout GPS med antenne. GPSen har også tilkobling for ekstern antenne, men vi kommer til å bruke den interne. På baksiden så er det tilkobling for et knappebatteri som vi også skal lodde på. Batteriet gjør at GPSen kan lagre tiden mellom hver gang den slåes av, og dermed får posisjon fortere neste gang man slår den på.\nCR1220 Batteri PMS5003 PM2.5 Air Quality Sensor PM2.5 (og PM10) sensor fra Plantower. Her er det også viktig at viften på siden har tilgang til luft utenfor boksen.\nSD MicroSD Card Breakout Board MicroSD kort Headere Boks Plater Skruer og muttere Andre Deler Powerbank Plastpose Med Tape Ledning Om du bruker en annen USB ledning, så vær sikker på at denne faktisk håndterer data. Noen USB ledninger gir bare strøm, og kan derfor ikke brukes til å programmere Raspberryen.\nKarabinkrok ↑ Tilbake til toppen ","externalUrl":null,"permalink":"/bygging/deler/","section":"Bygging","summary":"Her kan du sjekke og kontrollere alle delene som tilhører Air:Bit’en","title":"Deler","type":"bygging"},{"content":"Å samle data for forskning kan være en utfordrende oppgave. Vi bruker data for å svare på forskningsspørsmål og teste våre hypoteser.\nNår vi samler inn data så må vi forholde oss til noen grunnprinsipper.\nTyper Data Kvalitativ data Kvalitativ data er data som gjerne uttrykkes med ord og gjennom tolkning og kategorisering. Generelt så er det noe som er observert men ikke kan måles med et numerisk resultat. Det kan være hvordan en person føler om ulike tema. Dette er vanskelig å måles numerisk, og må gjerne tolkes på en annen måte enn f eks en temperaturmåling.\nKvantitativ data Kvantitativ data er data som kan måles og analyseres numerisk. Dette er gjerne observasjoner og målinger for et spesifikt formål.\nI Air:Bit så måler vi kvantitativ data, vi måler temperatur, GPS, partikler i luften og fuktighet, sammen med et klokkeslett. Denne dataen gir oss faktiske observasjoner om verden, men skal vi svare på forskningsspørsmål så må dataen også analyseres.\nAnalyse av kvantitativ data skjer med datahåndtering, statistiske og numeriske metoder, samt visualisering.\nÅ samle data i forskning Når man samler data i forskning, så er det for å bygge opp et empirisk grunnlag. Empiri kommer fra gresk og betyr noe som er opplevd eller erfart. Vi bruker begrepet i forskning om kunnskap som bygger på systematiske observasjoner og undersøkelser. Hvis vi ser på kunnskap og antakelser som er basert på personlige inntrykk og ikke-systematiske observasjoner, så kaller vi det gjerne anekdotisk bevis. Anekdotisk bevis er gjerne ikke sett på som vitenskapelig, med noen unntak, da mye av dette er basert på individuell erfaring, rykter og tilfeldighet, og er gjerne påvirket av den som observerer.\nNår vi samler inn data, så er det viktig å tenke på alle faktorer som kan påvirke et resultat. Med Air:Bit så må vi være veldig nøye på at det vi faktisk måler, er det vi ønsker å måle, og at de målingene ikke påvirkes av noe annet.\nhttps://xkcd.com/2652/ Her er et eksempel\nVi ønsker å se om våte veier gjør at det er mindre støv i luften. Vi måler i 1 time kl 08:00 på en hverdag, og samler inn støvmålinger ved en trafikkert vei. Så må vi vente en stund på at det skal regne, og endelig på en Lørdag kl 15:00 så regner det, så vi måler ved den samme plassen i 1 time. Når vi nå ser på resultatene så ser vi at det er vesentlig mindre støv når det hadde regnet. Så vi konkluderer med at våt vei, gir mindre veistøv. Eller kan vi det? Hvis vi tenker litt på når vi gjør målingene. Det kan være at det er ganske mange færre biler som kjører på veien kl 15:00 på en Lørdag sammenlignet med kl 08:00 på en hverdag. Så kanskje er det mindre støv rett og slett fordi det er færre biler? Eller kanskje er det flere biler fordi flere kjører når det er regn, i stedet for å for eksempel sykle? Dette er bare et eksempel på noe som kan gi oss målinger som ikke nødvendigvis måler (kun) det vi ønsker å måle. Som forskere så må vi prøve å identifisere slike faktorer og prøve å motvirke deres effekt på dataen vår. I eksemplet over, så kan vi måle på akkurat samme tidspunkt hver gang, og måle flere ganger for å skaffe et større datagrunnlag. Vi kan prøve å finne ut av mengden trafikk på veien fra vegvesenet eller andre kilder. Poenget er at vi prøver å isolere så godt vi kan det vi ønsker å måle, og minimere påvirkningen av andre faktorer som vi ikke kan kontrollere.\nHypoteser Filosofen Karl Popper argumenterte for at vi bør bygge hypoteser som falsifiseres av bevis. Det vil si at vi lager oss hypoteser som er mulig å motbevise, for så å lete etter data som motbeviser vår hypotese. Et klassisk eksempel på dette er:\nAlle svaner er hvite. Og i stedet for å lete etter alle hvite svaner, så prøver vi heller å lete etter svaner som ikke er hvite, og dermed motbeviser eller falsifiserer vår egen hypotese. Hvis vi gjennom systematisk observasjon ikke klarer å falsifisere vår egen hypotese, og vi kan med større sikkerhet si at alle svare er hvite. Hvis vi derimot observerer en svart svane, så er hypotesen vår falsifisert, og vi må finne en ny hypotese som bedre samsvarer med våre observasjoner.\nKonklusjoner basert på data I forsknings å jobber vi aldri med absolutte sannheter. Vi prøver gjerne å være så sikre som vi klarer å bli. Når en hypotese gjentatte ganger ikke lar seg falsifisere, så får den gjerne en høyere status, nemlig teori. I vitenskapen er teori så sikre som vi kan bli. Vi må være nøye med å skille på den dagligdagse bruken av ordet teori, hvor vi gjerne mener noe mer som en hypotese.\nEksempler på teorier vi har i dag er evolusjonsteori, atomteori, relativitetsteorien osv.\nDet betyr ikke at en teori ikke kan endres eller falsifiseres, men vi har testet disse hypotesene i såpass høy grad at vi kan være veldig sikker på at de ikke vil forandre seg drastisk, og sannsynligvis aldri falsifiseres.\n↑ Tilbake til toppen ","externalUrl":null,"permalink":"/forskning/samle_data/","section":"Oversikt","summary":"Lær om å samle vitenskapelig data","title":"Samle Data","type":"forskning"},{"content":"Raspberry Pi Pico W er en mikrokontroller som er laget av Raspberry. Den finnes i to utgaver, Pi Pico og Pi Pico W (som vi bruker). Forskjellen er at W utgaven har en innebygd wifi antenne. Det betyr at den kan programmeres til å koble seg til et trådløst nettverk.\nFor å koble Raspberryen til PCen din, så trenger du en USB-A (evt en overgang til USB-C) til micro-USB kabel. Når vi kobler til Raspberryen til PCen, så vil den komme til syne som en USB stick. Det første vi må gjøre med Raspberryen er å sette den opp til å bruke CircuitPython, som er en versjon av Python som kjører på mikrokontrollere. Den er stort sett lik vanlig Python, men har noen små forskjeller.\nFor å innstallere CircuitPython, så må vi først laste ned en .UF2 fil som Raspberryen skal bruke. Dette er det vi kaller firmware og er programvare som innstalleres på raspberryen. Gå til CircuitPython Nettsiden og last ned .UF2 filen.\nFor å innstallere .UF2 filen på Raspberryen vår, så må vi koble til Raspberryen med USB, samtidig som vi holder nede \u0026ldquo;BOOTSEL\u0026rdquo; knappen på Raspberryen.\nDa vil Raspberryen komme opp som en USB stick som heter noe som \u0026ldquo;RPI-RP2\u0026rdquo;.\nDet eneste vi trenger å gjøre nå er å kopiere .UF2 filen inn her (eventuelt dra den over). Raspberryen vil sannsynligvis åpne på nytt, og vil hete \u0026ldquo;CIRCUITPY\u0026rdquo; i stedet. Dette betyr at vi nå kan bruke CircuitPython og kode fra Adafruit som har laget alle sensorene vi bruker.\n↑ Tilbake til toppen ","externalUrl":null,"permalink":"/programmering/raspberry_oppsett/","section":"Programmering","summary":"Installering av CircuitPython programmvare på Raspberry Pi Pico W.","title":"Sette Opp Raspberryen","type":"programmering"},{"content":"Når vi skal samle inn data med Air:Bit, så kan det være lurt å tenke litt gjennom hva man faktisk ønsker å oppnå, og hva man ønsker å måle.\nFormulering av forskningsspørsmål og hypotese Det vi må gjøre før vi begynner å samle inn data, er å formulere vårt forskningsspørsmål og hypotese. Deretter må vi finne ut hvordan vi skal greie å måle dette, og kanskje må vi samstille vår målte data med data fra andre steder.\nNullhypotese (H0) Veldig ofte når vi lager hypoteser, så formulerer vi først en nullhypotese. Det er gjerne en formulering hvor vi antar at effekten som blir studert, ikke eksisterer. La oss bruke eksempelet fra tidligere.\nH0: Våt vei gir ikke noen forskjell i mengde veistøv.\nNullhypotesen, den antakelsen vi gjør til å begynne med, er at effekten vi ønsker å finne, ikke eksisterer. Dette er da vårt utgangspunkt. Så ønsker vi å motbevise denne hypotesen med bruk av observasjoner. Dette faller godt sammen med Poppers prinsipp om å prøve å falsifisere sin egen hypotese. Vi starter med å anta at det ikke er noen effekt, for så å prøve å falsifisere dette, ved å måle effekten.\nDette gir da rom for en alternativ hypotese, som bedre forklarer de observasjonene vi gjør.\nH1: Våt vei gir en forskjell i mengde veistøv.\nNår vi gjør målinger så kan vi faktisk finne ut om de målingene vi gjør motbeviser nullhypotesen vår gjennom hypotesetesting.\nSamle data med Air:Bit Her er noen punkter vi bør tenke på når vi skal samle data med Air:Bit.\nNår gjør vi målingene på dagen? Er det i samme tidsrom hver gang? Gjør vi målingene like lenge hver gang? Hvor gjør vi målingene? Er Air:Biten plassert likt hver gang? Samme høyde over bakken? Er vi på samme punkt, eller beveger vi oss mens vi gjør målingene? Kan målingene faktisk si noe om hva vi tester? Er det andre faktorer som vær, vind og temperatur som kan endre målingene? Er Air:Biten beskyttet? Air:Biten er ikke spesielt vanntett, så den kan ikke ligge for åpent eksponert. Andre ting vi bør være litt nøye med er å sjekke at GPSen får fix før man begynner å måle. GPSen har et blinkende lys som blinker hvert tredje sekund når den ikke har fix. Når lyset begynner å blinke hvert tjuende sekund, så har GPSen fix.\nEn annen ting som kan være verdt å bemerke, er at plasseringen av støvsensoren kan gi forskjellige målinger mellom bokser, og det er ikke nødvendigvis slik at data er direkte sammenlignbar med andre bokser.\nIvareta dataen Når man har gjort målinger, så kan det være lurt å kopiere filene fra SD-kortet for å ha backup av disse, spesielt i tilfelle man skulle være uheldig å enten ødelegge Air:Biten og SD-kortet, eller om man skulle være uheldig å overskrive disse filene.\nLitt avhengig av hvordan man har programmert Air:Biten så vil den opprette en fil per dag, med filnavn YY-MM-DD.csv. Dette er for at all data innenfor en dag skal havne i samme fil, så kan man lett få oversikt over hvilke datoer man har målt.\n↑ Tilbake til toppen ","externalUrl":null,"permalink":"/forskning/airbit_data/","section":"Oversikt","summary":"Lær om å måle data med Air:Bit","title":"Air:Bit Data","type":"forskning"},{"content":"For Air:Bit så trenger vi noen programmer på PCen vår. De programmene vi trenger er\nVisual Studio Code Air:Bit biblioteket Adafruit bibliotekene (Inkludert i Air:Bit biblioteket) GPS Støv Temp og Fukt Visual Studio Code Dette er det vi kaller en source code editor. Det er et skriveprogram for å kunne skrive kode, det ligner litt på thonny som mange av dere kan være kjent med fra før.\nFor å innstallere VS Code, så må vi laste det ned fra Microsoft og kjøre innstalleringsprogrammet. Dette finner du her . Klikk så på \u0026ldquo;Download for Windows\u0026rdquo; (eller macOS om du bruker det).\nNår vi ha innstallert VS Code, så må vi innstallere noen utvidelser (extensions). Dette er ekstra funksjonalitet som lar oss programmere med Raspberryen. De utvidelsene vi trenger er:\nCircuitPython Serial Monitor For å gjøre dette, så åpner vi Visual Studio Code. Navigerer til Extensions taben på venstre side, og søker på Circuitpython\nVi har opplevd en del problemer med nyeste versjon av CircuitPython (v0.2.0) i VSCode, så vi innstallerer en tidligere versjon ved å klikke på tannhjulet og velge install specific version og velger versjon v0.1.20, altså nest siste versjon.\nVi trenger ikke å gjøre det samme for serial monitor, denne kan være nyeste versjon.\nNår vi har disse så er Visual Studio Code klar til å programmere med.\nAir:Bit biblioteket Bibliotek er ferdiglagt kode som vi kan laste ned og bruke når vi programmerer. Vi har laget et eget bibliotek som heter airbit. Dette kan du laste ned fra vår github . Air:Bit biblioteket legger vi inne på Raspberryen. Den kommer opp som en USB-stick når vi kobler den til PCen, så vi unzipper bare alle filene og kopierer disse over.\nAdafruit Libraries For å kunne bruke sensorene som kommer fra Adafruit (de vi bruker i prosjektet), så må vi innstallere biblioteker for disse sensorene. Det er ikke mulig å innstallere alle bibliotekene fra Adafruit på Raspberryen, da den har for lite lagringsplass, så vi har plukket ut de bibliotekene vi trenger. Disse er inkludert (under lib) når man laster ned airbit biblioteket, så vi trenger ikke å innstallere noe ekstra.\nNår vi er ferdig med å innstallere programvare, så kan vi gå videre til programmering .\n↑ Tilbake til toppen ","externalUrl":null,"permalink":"/programmering/installasjon_programvare/","section":"Programmering","summary":"Installering av programmvare vi trenger på egen PC.","title":"Installasjon av programvare","type":"programmering"},{"content":"Her skal vi gå gjennom noen prinsipper for lodding, og lodde på det vi trenger på PCBen til Air:Bit\u0026rsquo;en.\nPrinsipper for lodding Når man lodder så kan man stort sett bryte det ned til følgende steg.\nVarm opp loddebolten. Med blyfritt tinn så bruker vi 350 °C Rens spissen i flux/tinn-blandingen på toppen av stasjonen og dra av spissen på en fuktig svamp. Sett spissen mot loddestedet. Før loddetinnet mot loddestedet, ved siden av bolten, ikke PÅ spissen men i kontakt med spissen. Du ser at harpiksen i tinnet smelter og tinnet flyter utover og dekker loddestedet. Da fjerner du spissen. Hele prosessen tar noen få sekunder. Skal du lodde ledninger til kontakter, så kan det være enklere å legge tinn på begge deler først også smelte disse sammen med loddebolten etterpå.\nHvis loddingen blir blank og jevn, så har du fått til en god lodding. En korrekt lodding ligner en liten vulkan. (se under).\nHvis loddingen er knudrete og matt, så er den ikke god og vil ikke holde lenge. Da bør du lodde på nytt ved å varme opp stedet og legge på ørlite mer tinn. Harpiksen gjør at tinnet flyter bedre utover. Merk at Blyfritt loddetinn kan bli matt når det kjøler ned, men det betyr ikke nødvendigvis at loddingen er dårlig.\n↑ Tilbake til toppen ","externalUrl":null,"permalink":"/bygging/lodding_prinsipper/","section":"Bygging","summary":"Her vil du lære å lodde, samt å lodde de forskjellige komponentene i Air:Bit","title":"Prinsipper for Lodding","type":"bygging"},{"content":"","externalUrl":null,"permalink":"/programmering/","section":"Programmering","summary":"","title":"Programmering","type":"programmering"},{"content":"Vi skal se på hvordan vi kan analysere vår data med Python. Python er generelt velegnet for å analysere data, og det er en av de mest populære språkene for dette i dag.\nLese CSV Filene som blir opprettet på Air:Biten sitt SD kort er av typen CSV (Comma Separated Values). Det er et filformat som inneholder tekst, som representerer en tabell. Tenk som i en Excel fil. Excel og CSV har tabeller hvor det er et sett med kolonner og rader. Hver kolonne er en type data (for eksempel temperatur) og hver rad er en måling, eller ett datapunkt. For å separere kolonner i CSV så brukes det symbolet for komma: ,. Derav navnet Comma Separated Values. Under ser dere et eksempel fra Air:Bit\nDate(DD.MM.YYYY),Time(HH:MM:SS),Lat,Lon,Temperature(°C),Humidity(%),PM25,PM100 01.01.2020,00:00:04,68.3241,18.3241,22.4,22.1,0.0,0.0 01.01.2020,00:00:04,68.3241,18.3241,22.4,22.1,0.0,0.0 01.01.2020,00:00:04,68.3241,18.3241,22.4,22.1,0.0,0.0 01.01.2020,00:00:06,68.3241,18.3241,22.4,22.1,0.0,0.0 01.01.2020,00:00:09,68.3241,18.3241,22.4,22.5,0.0,0.0 01.01.2020,00:00:12,68.3241,18.3241,22.4,22.6,0.0,0.0 01.01.2020,00:00:14,68.3241,18.3241,22.5,22.5,0.0,0.0 01.01.2020,00:00:17,68.3241,18.3241,22.5,22.5,0.0,0.0 01.01.2020,00:00:19,68.3241,18.3241,22.5,22.3,0.0,0.0 01.01.2020,00:00:22,68.3241,18.3241,22.5,22.4,0.0,0.0 01.01.2020,00:00:24,68.3241,18.3241,22.5,22.3,0.0,0.0 Første rad inneholder navnene på alle kolonnene, og hver påfølgende rad har dataen separert med komma. Python er godt egnet for lese denne typen data, og har mange innebygde måter å lese denne på. Vi skal se på to måter her.\nViktig at alt av programmering her må skje på din egen datamaskin og ikke på selve Raspberryen som når vi programmerer Air:Biten. Det kan være lurt å lage seg en mappe på datamaskinen for å legge .csv og .py filer.\nPython CSV Python har en egne csv modul. Den bruker vi gjennom import. Deretter kan vi åpne filen og opprette det som kalles en csv.reader, som henter ut dataen linje for linje til oss.\nimport csv with open(\u0026#34;2024-01-01.csv\u0026#34;, \u0026#34;r\u0026#34;) as csv_file: reader = csv.reader(csv_file, delimiter=\u0026#34;,\u0026#34;) next(reader) for row in reader: print(row) Dette programmet vil printe ut en liste per linje, med alle verdiene til filen:\n[\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:04\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.4\u0026#39;, \u0026#39;22.1\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:04\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.4\u0026#39;, \u0026#39;22.1\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:04\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.4\u0026#39;, \u0026#39;22.1\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:06\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.4\u0026#39;, \u0026#39;22.1\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:09\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.4\u0026#39;, \u0026#39;22.5\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:12\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.4\u0026#39;, \u0026#39;22.6\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:14\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.5\u0026#39;, \u0026#39;22.5\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:17\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.5\u0026#39;, \u0026#39;22.5\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:19\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.5\u0026#39;, \u0026#39;22.3\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:22\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.5\u0026#39;, \u0026#39;22.4\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] [\u0026#39;01.01.2020\u0026#39;, \u0026#39;00:00:24\u0026#39;, \u0026#39;68.3241\u0026#39;, \u0026#39;18.3241\u0026#39;, \u0026#39;22.5\u0026#39;, \u0026#39;22.3\u0026#39;, \u0026#39;0.0\u0026#39;, \u0026#39;0.0\u0026#39;] Problemet her er at alle verdiene blir tolket som tekst. Så vi må konvertere alle verdiene i listen. Dette kan gjøre som under:\nimport csv data = [] with open(filename, \u0026#39;r\u0026#39;) as fp: csvfile = csv.reader(fp, delimiter=\u0026#39;,\u0026#39;) next(csvfile) for row in csvfile: converted_row = [] date, time, lat, lon, temp, hum, pm25, pm100 = row converted_row.append(datetime.strptime(date + \u0026#39; \u0026#39; + time, \u0026#39;%d.%m.%Y %H:%M:%S\u0026#39;)) if \u0026#34;None\u0026#34; in lat: converted_row.append(None) converted_row.append(None) else: converted_row.append(float(lat)) converted_row.append(float(lon)) converted_row.append(float(temp)) converted_row.append(float(hum)) if pm25 == \u0026#34;None\u0026#34; or pm100 == \u0026#34;None\u0026#34;: continue converted_row.append(float(pm25)) converted_row.append(float(pm100)) data.append(converted_row) Nå får vi en liste, hvor hver verdi er den riktige typen den skal være (heltall, dato, flyttall osv). Men vi skal se på en enklere måte å gjøre dette på, hvor vi også kan erstatte manglende data.\nInstallere biblioteker i Python For å gjøre dette så skal vi bruke et bibliotek i Python. Python har veldig mange biblioteker, dvs kode andre har skrevet og som vi kan importere og bruke i vår kode. De må gjerne innstalleres før de kan brukes, men heldigvis så er det ganske enkelt innstallere biblioteker/moduler i Python.\nHvis man åpner terminal eller cmd på datamaskinen så får man opp et vindu likt dette:\nHvis vi skriver\npython -m pip install Så kan vi legge inn alle biblioteken vi ønsker på slutten slik:\npython -m pip install pandas matplotlib numpy Dette vil innstallere 3 biblioteker pandas, matplotlib and numpy. Vi kan nå importere disse og bruke de i koden vår. For å lese og plotte data, så skal vi bruke bibliotekene.\nBruke biblioteker Vi må først importere bibliotekene i toppen av filene våre før vi kan bruke de.\nimport pandas as pd import matplotlib.pyplot as plt import numpy as np Når vi har gjort dette, så kan vi modifisere filen som leser .csv dataen vår\nimport pandas as pd import matplotlib.pyplot as plt import numpy as np def read_csv_dataframe(filename): df = pd.read_csv(filename) df = df.replace(\u0026#34;None\u0026#34;, np.nan) df = df.fillna(method=\u0026#34;ffill\u0026#34;) print(df) Dette leser først dataen vår inn i det som kalles en DataFrame som er en struktur vi bruker i Python for å jobbe med data (minner om en tabell i Excel). Deretter så erstatter vi alle None verdier med np.nan som betyr at det ikke inneholder et tall. Dette gjør vi for at vi skal kunne bruke fillna(method) som fyller inn manglende data (altså der det er np.nan i dataen vår). Metoden som brukes kan vi selv bestemme, her så har vi valgt å bruke method=\u0026quot;ffill\u0026quot; som betyr at vi tar siste gyldige måling og fyller inn de samme verdiene.\nNår vi nå har lest dataen vår inn i en dataframe, så kan vi plotte med den ved bruk av matplotlib.\nimport pandas as pd import matplotlib.pyplot as plt import numpy as np def read_csv_dataframe(filename): df = pd.read_csv(filename) df = df.replace(\u0026#34;None\u0026#34;, np.nan) df = df.fillna(method=\u0026#34;ffill\u0026#34;) df[\u0026#39;Time(HH:MM:SS)\u0026#39;] = pd.to_datetime(df[\u0026#39;Time(HH:MM:SS)\u0026#39;]) df.plot(x=\u0026#34;Time(HH:MM:SS)\u0026#34;, y=\u0026#34;Humidity(%)\u0026#34;) plt.show() Her har vi plottet tid på x-aksen og fuktighet på y-aksen.\nVi kan også plotte flere variabler i samme plottet.\nimport pandas as pd import matplotlib.pyplot as plt import numpy as np def read_csv_dataframe(filename): df = pd.read_csv(filename) df = df.replace(\u0026#34;None\u0026#34;, np.nan) df = df.fillna(method=\u0026#34;ffill\u0026#34;) fig, ax1 = plt.subplots() ax2 = ax1.twinx() df.plot(x=\u0026#34;Time(HH:MM:SS)\u0026#34;, y=[\u0026#34;Humidity(%)\u0026#34;], kind=\u0026#34;line\u0026#34;, ax=ax2, color=\u0026#34;blue\u0026#34;) ax2.set_ylabel(\u0026#34;Humidity\u0026#34;) df.plot(x=\u0026#34;Time(HH:MM:SS)\u0026#34;, y=[\u0026#34;Temperature(°C)\u0026#34;], kind=\u0026#34;line\u0026#34;, ax=ax1, color=\u0026#34;orange\u0026#34;) ax1.set_ylabel(\u0026#34;Temperature\u0026#34;) ax1.set_ylim((-9, -5)) ax1.legend(loc=\u0026#34;upper left\u0026#34;) ax2.set_ylim((0,100)) ax2.legend(loc=\u0026#34;upper right\u0026#34;) plt.show() Her ser vi at kind=\u0026quot;line\u0026quot; styrer typen plot (det finnes mange, f eks line, bar, hist, box, kde og flere). Vi plotter de også på hver sin akse ax1 og ax2 slik at de har hver sin y-akse med forskjellige verdier. X-aksen vår er fortsatt tid.\nDet er også mulig å plotte to variabler mot hverandre uten å bruke tid. Men da gir det kanskje ikke mening å bruke linjer lengre (da dataen kan bevege seg litt over alt i plottet). Her bruker vi scatter-plots som lager en prikk per datapunkt.\nimport pandas as pd import matplotlib.pyplot as plt import numpy as np def read_csv_dataframe(filename): df = pd.read_csv(filename) df = df.replace(\u0026#34;None\u0026#34;, np.nan) df = df.fillna(method=\u0026#34;ffill\u0026#34;) df.plot(x=\u0026#34;Temperature(°C)\u0026#34;, y=[\u0026#34;Humidity(%)\u0026#34;], kind=\u0026#34;scatter\u0026#34;) plt.show() Kalle funksjoner I de forrige eksemplene så har vi laget en funksjon som heter read_csv_dataframe, men for å faktisk bruke denne funksjonen så må vi kalle på den. Nederst i filen så bruker jeg følgende kode for å kalle på funksjonen for å lese en fil som heter 2023-12-13.csv\nif __name__ == \u0026#34;__main__\u0026#34;: read_csv_dataframe(\u0026#34;2023-12-13.csv\u0026#34;) Her er det viktig at man bytter ut 2023-12-13.csv med det filnavnet man ønsker å lese. Filen som koden ligger i og .csv filen må ligge ved siden av hverandre for at dette skal fungere.\n↑ Tilbake til toppen ","externalUrl":null,"permalink":"/forskning/behandling/","section":"Oversikt","summary":"Behandle og analyser dataen vi har samlet med Air:Bit ved bruk av Python.","title":"Behandling og analyse av data","type":"forskning"},{"content":"Her skal vi gå gjennom all lodding som må til for å få en fungerende Air:Bit. Bruk innholdslisten for å hoppe til en spesifikk komponent.\nInnhold SHT31 Temperatur og Fuktighetssensor Ultimate GPS Breakout (PA6H) MicroSD Card Breakout Board Raspberry Pi Pico W Kretskort (PCB) Sjekk at alt passer SHT31 I pakken så vil det være en sensor, samt en rekke med (hannkjønn) header pins.\nMål opp og sjekk hvor mange av disse headerene vi faktiskt trenger (de fleste er litt for lange). Og klipp av i mellom pinnene.\nNår du har klippet header rekken til riktig lengde, plasser den korte siden opp fra undersiden på sensoren, slik at den svarte plastikken ligger an mot undersiden av sensoren sitt kort.\nDet kan være lurt når man skal lodde på headere, å sette de fast i to rekker med (hunnkjønn) headere for å holde de 90 grader rett på. I tillegg så kan det være lurt å legge noe under kortet til sensoren, da plastikken fra headerene vil gjøre at kortet ikke ligger rett.\nDeretter lodder vi alle headerene på oversiden av kortet.\nVi kommer til å bruke de samme prinsippene for alle de påfølgende sensorene.\nGPS GPSen kommer med headere, samt en egen batteriholder som loddes på baksiden av sensoren. Grunnen til at GPSen kommer med et batteri er for å kunne ta vare på klokke-status i mellom hver gang sensoren slåes av. Dette gjør det mye kjappere å få tak i posisjonen hvis vi slår av og på Air:Bit\u0026rsquo;en. Uten batteriet så bruker sensoren lang tid på å synkronisere klokken mot sattelitter.\nKlipp til header pinnene for å passe i GPS sensoren.\nFest GPS sensoren i (hunnkjønn) headerrekker og støtt denne opp for å holde den 90 grader på header pinnene.\nLodd på alle pinnene på sensoren.\nNår vi har loddet på alle pinnene, snu sensoren på hodet og finn frem batteriholderen (sølvfarget del med + symbol på). Den skal plasseres med + symbolet mot headerrekken, slik som anvist på bildet.\nHer kan det være greit å bruke en klemme for å holde delene sammen mens man lodder.\nDeretter lodder vi på den siden som er eksponert, husk å varme punktet godt for å få loddetinnet til å flyte utover og lage god kontakt.\nNår man har loddet ene siden fjerner man klemmen og lodder den andre siden.\nSD Mål og klipp headerene for SD-kort leseren, og fest den i (hunnkjønn) headerrekker som vi gjorde med forrige sensor. Husk å støtte opp sensoren her også, slik at vi lodder headerene på 90 grader.\nLodd på alle punktene på SD-kort leseren.\nMikrokontroller Raspberry Pien loddes på samme måte som de andre sensorene. Klipp til headerene på begge sider av Raspberry Pien.\nOg fest den med to headerrekker.\nLodd på alle punktene på Raspberryen.\nPCB Kretskortet (Printed Circuit Board eller PCB) skal ha alle hunnkjønn headerrekkene. Disse skal loddes på oversiden av kortet, den siden hvor skriften er synlig. Det er disse alle sensorene skal plugges inn i når vi skal montere boksen. Mål opp og klipp headerene til riktig lengde. Når vi jobber med hunnkjønn headere, så kan det være lurt å klippe headeren PÅ den neste kontakten (den neste etter lengden vi behøver), da de lett går i stykker hvis vi klipper de i mellom kontaktene. Etter vi har klippet kontakten, så drar vi den ut, og renklipper plastikken på enden.\nDeretter gjør vi som tidligere, bare med hannkjønn headere, for å holde headerene på plass og 90 grader på kortet mens vi lodder. Legg merke til hvilken side headerene er montert på, slik at vi lodder alle punktene på baksiden av kortet.\nGjenta dette for alle rekkene på kortet.\nSjekk at alt passer Når alle headerene er loddet på, så er vi ferdig med loddingen for Air:Bit. Før vi pakker bort loddebolten, så kan det være lurt å sjekke at alle komponentene passer, eller om vi må lodde noe på nytt.\nHusk å sette i batteriet i GPSen før vi monterer denne, den skyves bare inn fra enden.\nPrøv deretter å sette alle komponentene på plass i kortet. Hvis noen av sensorene ikke passer, eller er skjeve, så kan det hende at headerene ikke er loddet rett på.\nNå kan det være lurt å sette i batteriet i Raspberry Pien og sjekke at det er lys i alle sensorene. Temperatur og fuktighetssensoren skal lyse grønt, GPSen vil blinke rødt og SD-leseren vil kun blinke når den brukes. GPSen blinker ca hvert 2. sekund når den ikke har fix på posisjonen, så hvis man tar den ut og får fix, så vil den begynne å blinke ca hvert 20. sekund.\nNå kan vi gå videre til Montering av delene ↑ Tilbake til toppen ","externalUrl":null,"permalink":"/bygging/lodding_airbit/","section":"Bygging","summary":"Her vil du lære å lodde de forskjellige komponentene i Air:Bit","title":"Lodding av Air:Bit","type":"bygging"},{"content":"For å kunne dra nytte av data fra Air:Bit, så må vi lære hvordan vi samler og håndterer data.\n","externalUrl":null,"permalink":"/forskning/","section":"Oversikt","summary":"","title":"Oversikt","type":"forskning"},{"content":"Nå har vi alle verktøyene vi trenger for å starte programmering av Air:bit. For å komme i gang så kobler vi til Raspberry Pien via USB til PCen. Når vi kobler denne til PCen så vil den komme opp som en ny drive. Når vi åpner denne så kan vi bruke kontekstmenyen for å Åpne i Code. Nå har vi åpnet VS Code til Raspberry Pien, her kan vi lagre all koden vår, og den vil automatisk bli lastet opp til Raspberryen.\nHvis vi ikke har kontektsmenyen tilgjengelig så må vi åpne Visual Studio Code, og navigere vila File -\u0026gt; Open Folder (Fil -\u0026gt; Åpne Mappe), og gå til Raspberryen som sannsynlig har navnet CIRCUITPY (D:).\nKopiere bibliotekene Her tar vi alt vi lastet ned fra Github repositoriet. Dette vil gi oss tilgang til airbit biblioteket, som vil gi oss all koden vi trenger for å starte.\nNår vi har kopiert over all kode, og åpnet VS Code på raspberryen så vil vi se all kopiert kode listet opp på venstre side (inkludert alle mappene).\nHer skal vi åpne filen som heter main.py. Dette er hovedfilen på raspberryen, hvor den alltid starter og avslutter å kjøre programmet vårt fra. Når vi begynner å programmere så vil Raspberryen starte på nytt hver gang vi lagrer main.py og starte å kjøre fra denne filen, så vi vil alltid oppdatere og teste programmet vårt.\nLa koden som ligger i filen være inntil videre.\nÅpne seriell tilkobling Hvis vi innstallerte riktige extensions til VS Code, så vil vi kunne koble til en såkalt seriell konsoll til Air:Bit\u0026rsquo;en, for å kunne se output fra denne.\nMåten vi gjør dette på er å se helt nederst i høyre hjørne på VS Code (på den blå statusstripen). Der vil det stå \u0026lt;Choose a board\u0026gt; samt et lite symbol av en kontakt.\nHer klikker vi på \u0026lt;Choose a board\u0026gt; og skriver inn pico w i søkelinjen som kommer opp.\nDermed så velger vi Raspberry Pi:Pico W fordi det er denne mikrokontrolleren vi bruker.\nSå trykker vi på den lille kontakten, og da vil vi få opp en ny søkelinje, og her står det gjerne listet opp et eller flere valg. På disse valgene står det gjerne COM også et tall bak. Vi skal velge den hvor det står RapsberryPi etter tallet. Da vil vi få opp et terminalvindu helt nederst i VS Code, hvor vi kan se noe informasjon om hva som kjører på Raspberryen (Air:Bit\u0026rsquo;en). Hver gang vi lagrer main.py så vil Raspberryen restarte og kjøre koden på nytt, men vi kan også tvinge koden til å stoppe ved å trykke i terminalvinduet og trykke Ctrl+C, også kan vi restarte programmet med å trykke Ctrl+D i samme vindu.\nNå skal du kunne se de følgende meldingene hvis du har åpnet konsollen riktig:\nHello Airbit Go to https://airbit.uit.no to get started with programming the Air:Bit Når vi skal programmere Air:Bit\u0026rsquo;en, så gjør vi dette i main.py filen. Hver gang vi lagrer filen, enten ved å trykke Ctrl+S eller gå til Fil-\u0026gt;Lagre (eller File-\u0026gt;Save).\nAlt som kommer ut fra Raspberryen vil komme opp i terminalvinduet slik:\nImportere kode for sensorene Vi kan nå åpne main.py igjen, og fjerne all koden som ligger i den. All kode vi skriver fra nå vil være i denne ene main.py filen.\nFra airbit så vil vi kunne importere kode som hjelper oss å lese ut data fra sensorene i Air:Bit\u0026rsquo;en. Dette gjør vi ved å bruke import i Python.\nfrom airbit import SHT31 from airbit import UltimateGPS from airbit import DustSensor from airbit import DataLogger Da kan vi bruke alle sensorene slik:\nSHT31() UltimateGPS() DustSensor() DataLogger() I tillegg til airbit så vil vi trenge time biblioteket. Så øverste i filen vår så vil det se slik ut:\nimport time from airbit import SHT31 from airbit import UltimateGPS from airbit import DustSensor from airbit import DataLogger Opprette alle sensorene Først så må vi opprette variabler som skal inneholde et objekt for alle sensorene. Disse kan vi navngi det vi ønsker, men det er anbefalt å velge navn som er forklarende for hva variabelen faktisk inneholder. Vi skal sette alle disse variablene lik de forskjellige sensorene.\nsht = SHT31() gps = UltimateGPS() dust = DustSensor() Nå har vi opprettet variabler og satt de lik objektene som håndterer å lese data fra sensorene.\nHvis vi lagrer programmet vårt så vil vi kunne se om sensorene kan opprettes. En feil som kan oppstå er at feilmeldingen sier\nNo pull up found on SDA or SCL; check your wiring Dette betyr sannsynligvis at vi har en dårlig lodding på sensoren som er nevnt. Så her må vi gå over loddingen igjen.\nHvis vi ikke får opp noen feilmelding så betyr det at objektene for alle sensorene kunne opprettes, og vi kan begynne å jobbe med sensorene.\nFor å sjekke at vi får data fra sensorene så kan vi printe ut målingene slik:\nprint(f\u0026#34;Temp and hum: {sht.get_temp_hum()}\u0026#34;) print(f\u0026#34;Coordinates: {gps.get_coordinates()}\u0026#34;) print(f\u0026#34;Air Quality: {dust.get_airquality()}\u0026#34;) Temp and hum: (23.9479, 12.3705) Coordinates: (None, None) Air Quality: {\u0026#39;pm10 env\u0026#39;: 15, \u0026#39;pm100 env\u0026#39;: 27, \u0026#39;pm100 standard\u0026#39;: 27, \u0026#39;particles 03um\u0026#39;: 2994, \u0026#39;pm25 standard\u0026#39;: 27, \u0026#39;particles 10um\u0026#39;: 194, \u0026#39;pm10 standard\u0026#39;: 15, \u0026#39;pm25 env\u0026#39;: 27, \u0026#39;particles 05um\u0026#39;: 788, \u0026#39;particles 25um\u0026#39;: 12, \u0026#39;particles 100um\u0026#39;: 0, \u0026#39;particles 50um\u0026#39;: 0} Synkronisere GPS-klokken For å kunne både få data/tid på alle målingene våre, samt hente ut GPS posisjon, så er vi avhengig av at den interne klokken stemmer. Dette synkroniseres via GPSen, da den kan stille klokken ut i fra GPS data.\nDette kan gjerne ta litt tid, og det er nødvendig for GPSen å ha klart utsyn til himmelen (evt gjennom et vindu, dog dette tar lengre tid).\nFor å programmere synkronisering av klokken så kan vi bruke metoden som heter sync_clock(). Dette er en metode som returnerer True hvis klokken ble synkronisert, men False hvis det ikke var mulig.\nDette kan vi da gjøre direkte i en while løkke som fortsetter å kalle sync_clock() så lenge vi ikke har synkronisert.\nwhile not gps.sync_clock(): print(\u0026#34;[GPS] Clock Sync\u0026#34;) time.sleep(0.5) Her vil koden fortsette å kjøre samme kode så lenge at gps.sync_clock() returnerer False. Legg merke til at vi skrive while not som gjør at False blir til True og vi fortsetter å kjøre løkken så lenge det som står på linjen er True.\nNår GPSen har synkronisert klokken, så kjører koden videre.\nOpprette en datalogger Vi har ennå ikke opprettet en variabel som skal representere SD kortet vi bruker til å lagre data. Det er fordi denne krever en dato-tids gruppe, og derfor måtte vi først synkronisere klokken.\nNår denne nå er riktig, så kan vi opprette dataloggeren vår:\nsdlog = DataLogger(time.localtime()) Her bruker vi da time.localtime() for å få tak i tiden akkurat nå. Dette fungerer fint fordi vi har synkronisert den interne klokken til Raspberryen mot GPSen. Hvis vi ikke gjør dette, så vil denne tiden være en standardverdi og ikke nåværende tidspunkt.\nHente ut data For å hente ut data fra sensorene, så må vi kalle de forskjellige get metodene på objektene (lagret i variablene) vi har opprettet. Det gjør vi på følgende måte:\ntemphum = sht.get_temp_hum() coordinates = gps.get_coordinates() air_quality = dust.get_airquality() t = time.localtime() Nå har vi lagret dataen i variablene temphum, coordinates og air_quality. temphum og coordinates er såkalte tuples, det er en liste med flere verdier som ikke kan endres på.\nNå kan vi prøve printe ut dataen og se om den gir mening.\nprint(f\u0026#34;Time: {t}\u0026#34;) print(f\u0026#34;Temp and hum: {temphum}\u0026#34;) print(f\u0026#34;Coordinates: {coordinates}\u0026#34;) print(f\u0026#34;Air Quality: {air_quality}\u0026#34;) Lagre dataen på SD-kortet Når vi har hentet ut alle dataene fra sensorene, inkludert tiden, så skal vi lagre disse på SD kortet.\nDette tar dataloggeren seg av, men vi må opprette en dictionary hvor vi setter inn alle datapunktene først, får vi gir dette videre til dataloggeren. Husk at her må alle keys i dictionarien være: \u0026quot;datetime\u0026quot;, \u0026quot;coordinates\u0026quot;, \u0026quot;temphum\u0026quot;, \u0026quot;dust\u0026quot;.\ndata = { \u0026#34;datetime\u0026#34;: t, \u0026#34;coordinates\u0026#34;: coordinates, \u0026#34;temphum\u0026#34;: temphum, \u0026#34;dust\u0026#34;: air_quality } Her spiller det ikke noen rolle hvilken rekkefølge vi legger inn ting i, så lenge keys (altså det som står til venstre for :) er like med de over. Husk at hvis du har brukt andre variabelnavn (tid istedet for t for eksempel), så må du bruke disse her. Eksempelvis:\ndata = { \u0026#34;datetime\u0026#34;: tid, \u0026#34;coordinates\u0026#34;: koordinater, \u0026#34;temphum\u0026#34;: temperatur_fuktighet, \u0026#34;dust\u0026#34;: luftkvalitet } Vi kan bruke de variabelnavnene vi ønsker, men disse må stemme internt med det vi har brukt tidligere for å få med oss dataen.\nVi kan nå kalle metoden for å skrive dataen til SD-kortet.\nsdlog.log(data) Hvis all dataen ser ut som den burde, så vil ikke programmet si noe. Hvis noe data ikke er riktig formatert, så vil programmet si ifra.\nHente inn data kontinuerlig Vi ønsker jo gjerne å hente inn mer enn en måling. Da må vi sørge for å kontinuerlig hente inn data fra sensorene og skrive disse til SD-kortet.\nEn måte å gjøre dette på er å bruke en while-løkke med True. Da vil løkken kjøre for alltid, inntil vi slår av strømmen (eller bruker Ctrl+C i konsollen).\nAll koden vi ønsker å kjøre om igjen må da innenfor denne løkken.\nwhile True: temphum = sht.get_temp_hum() coordinates = gps.get_coordinates() air_quality = dust.get_airquality() t = time.localtime() print(f\u0026#34;Time: {t}\u0026#34;) print(f\u0026#34;Temp and hum: {temphum}\u0026#34;) print(f\u0026#34;Coordinates: {coordinates}\u0026#34;) print(f\u0026#34;Air Quality: {air_quality}\u0026#34;) data = { \u0026#34;datetime\u0026#34;: t, \u0026#34;coordinates\u0026#34;: coordinates, \u0026#34;temphum\u0026#34;: temphum, \u0026#34;dust\u0026#34;: air_quality } sdlog.log(data) time.sleep(2.5) Legg merke til at det kun er koden som henter data fra sensorene, og ikke hvor vi oppretter objektene for sensorene. Dette er ting vi bare gjør en gang, så det trengs ikke å gjentas.\nHelt til slutt i programmet, så kan det være lurt å bruke time.sleep(2.5) for å pause programmet i 2.5 sekunder. Det er fordi sensorene klarer ikke å oppdatere særlig mye fortere, så da vil vi mange ganger ikke få noe data/ny data. while-løkken vil alltid kjøre så fort som mulig hvis vi ikke legger ved dette.\n↑ Tilbake til toppen ","externalUrl":null,"permalink":"/programmering/starte_programmering/","section":"Programmering","summary":"Kom i gang med å programmere Raspberry Pi Pico W.","title":"Air:bit Programmering","type":"programmering"},{"content":"","externalUrl":null,"permalink":"/bygging/","section":"Bygging","summary":"Her skal vi lære å montere alle komponentene og boksen.","title":"Bygging","type":"bygging"},{"content":"Nå skal vi montere alle komponentene sammen og sette disse inn i boksen.\nSette sammen boksen Sett sammen alle tennene på boksen, bortsett fra den siden som har 2 firkantede åpninger og en rund åpning. Denne må settes på sist på grunn av temperatursensoren som stikker ut. Deretter plasser polyamidskruene fra undersiden og opp, og disse festes med mutterene.\nOBS Bunnplaten kan monteres feil vei.\nSe til at skruene/skruehullene ligger til venstre i boksen (mot langsiden med et rundt og firkantet hull i). Hvis de ikke gjør det så må man snu bunnplaten 180 grader.\nLegg dobbelsidig tape på klaffen på utsiden, og fest powerbanken med tape.\nOBS vær nøye med at ledningen kommer på riktig side for å kunne rekke til inngangen i toppen av boksen.\nLegg så dobbeltsidig tape på innsiden i hjørnet av boksen slik anvist på bildet.\nTrykk deretter PCBen ned på skruene som stikker opp inni boksen. Det kan være at man må vikle litt for å få den helt på plass, men vær forsiktig så du ikke skader gjengene på skruene. Det kan være lurt å koble fra alle sensorene bortsett fra Raspberryen.\nSkru deretter fast PCBen med muttere, igjen så må du ikke stramme for hardt, slik at du skade gjengene på mutter eller skrue. De skal holde PCBen på plass, men ikke klemme den fast.\nHvis du koblet fra sensorene i stad, så må vi plugge disse i igjen. SD kort leseren skal inn i åpningen på siden vi har montert.\nGPSen skal inn i boksen.\nOg temperatur og fuktighet skal mot den siden vi ikke har montert på ennå.\nDeretter trykker vi på plass den siden vi ikke har montert, denne kan være litt vanskelig å feste pga temperatursensoren, så her må vi muligens bøye litt for å få alt til å passe.\nFest så ledningen til støvsensoren slik anvist på bildet, merk at de kun kan monteres en vei.\nPlasser så støvsensoren slik at åpningene kommer mot åpningene i boksen. Hvis vi ikke plasserer disse riktig så vil ikke støvsensoren kunne måle nøyaktig.\nNår vi er sikker på at den står riktig vei, så taper vi denne fast med den dobbeltsidige tapen, helt i hjørnet av boksen. Det kan være lurt å presse den godt inn i hjørnet slik at det ikke er noe luft i mellom boksen og sensoren. Koble deretter til ledningen til støvsensoren på de ledige kontaktene.\nFjern så filmen fra den blanke akrylplaten.\nOg fest denne på toppen av boksen.\nNå har vi en ferdig montert Air:Bit, og vi kan gå i gang med programmeringen ↑ Tilbake til toppen ","externalUrl":null,"permalink":"/bygging/montering/","section":"Bygging","summary":"Her skal vi lære å montere alle komponentene og boksen.","title":"Montering av Air:Bit","type":"bygging"},{"content":"Her finner du ressurser og presentasjoner som er relevante for Air:Bit prosjektet.\nGunnhild Lutnæs, Statens Vegvesen Andrea Schneider, CIRFA Linda Hanssen, NILU Sonja Grossberndt, NILU Bjørn Fjukstad, UiT/DIPS John Markus Bjørndalen, UiT Michael Kampffmeyer, UiT Krister Aune Teigen, Scindeep Vebjørn Jacobsen Melum, UiT Oliver Vanderpoorten, UiT ↑ Tilbake til toppen ","externalUrl":null,"permalink":"/ressurser/","section":"Ressurser","summary":"","title":"Ressurser","type":"ressurser"},{"content":" Velkommen til air:bit – Et forskningsprosjekt om luftforurensing av Skolelaboratoriet i realfag og teknologi ved UiT Norges arktiske universitet.\nPå denne siden kan du se på, og laste ned luftforurensningsdata som er samlet inn av elever på Videregående skoler i hele Nord-Norge! Elevene skal selv bygge en air:bit som består av GPS, en støvmåler, luftfuktighetsmåler og temperatursensor i tillegg til et minnekort for å logge målingene.\nGå til våre Wiki-sider for mer informasjon samt guider om bygging og programmering av air:bit sensoren.\n","date":"28 November 2018","externalUrl":null,"permalink":"/","section":" ","summary":"","title":" ","type":"page"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"}]