EAL - K:R:E:S Vejrstation - Erhvervsakademiet Lillebælt

Published

Introduction: EAL - K:R:E:S Vejrstation - Erhvervsakademiet Lillebælt

Denne Instructable er udviklet som del af et skoleprojekt på Erhvervsakademiet Lillebælt i valgfaget kaldet "Industri 4.0" Som en del af opgaven skulle der laves dataopsamling og skrives til af fra en database vha. forskellige kommunikationsmetoder.

Dataen som skulle logges besluttede vi skulle komme fra en vejrstation, som kunne måle luft- temperatur og fugtighed. Der skulle blive foretaget nye målinger i et bestemt tidsinterval, og de nye data skulle kontinuerligt blive skrevet til databasen.

Projektet er udarbejdet af

K: Kasper Korsgaard
R: Rasmus Emil Lysholt Johansen
E: Emil Storm Hansen
S: Søren B. Schmidt

Step 1: Opbygning

Vejrstationen er programmeret på et Arduino board, og koden er skrevet i Arduinos IDE.

For at lave en kompakt og fleksibel vejrstation, besluttede vi at anvende en Raspberry PI, som er en fysisk lille minicomputer uden blæsere, skærm osv. På denne Raspberry bliver dataen, der sendes fra Arduinoen, skrevet til en MySQL database vha. programmet Node-red, der er konfigureret og kører på Raspberryen.

Når dataen er skrevet til databasen, vil vi gerne kunne fremvise denne data på andre enheder på netværket. Til dette formål har vi udviklet 2 løsninger. Dels et lille program lavet i Microsoft Visual Studio, og dels en HTML side hvor dataen præsenteres på en lidt pænere måde, end bare at aflæse det direkte i databasen.

Det er et lidt kringlet projekt, men de forskellige steps, vil kort blive beskrevet i det følgende slides i denne Instructable.

Step 2: Arduino

Til at måle temperatur og fugtighed er der skrevet et lille Arduino program. Dette er ikke hovedfokus, så det blev besluttet at holde det simpelt. Koden med tilhørende kommentarer kan ses i den vedlagte tekstfil, og kopieres direkte ind i Arduinos gratis udviklingsinterface.

Pga. instructable.coms formateringsudfordringer lægges alle koder ved som tekstfiler!

Step 3: Arduino - Raspberry PI Forbindelse Og Node-Red

Kommunikation mellem Arduino og Raspberry er seriel kommunikation via kabel. Opkoblingen sker på en COM port på Raspberry'en. Denne port defineres i NODE-Red på Raspberry.

Node-red er et open source program. En såkaldt flow-editor hvor man i et browser vindue kan dirigere kommunikationsflows vha. drag n' drop.

Der er desuden manuelt skrevet en funktion i JAVA inde i Node-red. Denne funktion er vigtig, da den splitter den data op som kommer fra Arduinoen. Arduinoen sender både temperatur og fugt som én lang string, så denne string skal altså splittes op. Koden samt kommentarer kan læses på vedhæftede billede

Databasen skal også defineres i Node-red (se billede) IP-adressen og porten på Rasberryen, der hoster databasen skal angives. I dette tilfælde er Raspberryen localhost så IP-adressen er 127.0.0.1
Endeligt skal brugernavn, adgangskode og databasens navn angives, så node-red har rettigheder til databasen og ved hvilken database, der skal skrives til

Hele Node-red programmeringen er vedlagt som en tekst-fil, som kan importeres.

Step 4: Database

Databasen hvor data lagres er en MySQL database som redigeres vha. phpmyadmin. Databasens navn er Kres_vejr og i denne ligger 2 tabeller hhv "Lokationer" og "Vejr_Odense".

Datatyperne i databasen er hovedsageligt af typen VARCHAR. Dette er en string datatype med en variabel længde. Og dataen der kommer fra Arduinoen via node-red er netop af datatypen STRING. Vi ved at vores fugt- og temperaturmålinger ikke kommer til at fylde mere end 8 karakterer inklusiv symboler. Så ved at lave en VARCHAR og give den længden 8 tegn, er datatypen optimal til opgaven.
Device_ID er et heltal og er altså af typen INTEGER. Også her kan man angive en længde, for at optimere sin database.
Endelig har vi et timestamp som sættes automatisk i databasen. Man kunne også sagtens have lavet et timestamp i node-red og sendt afsted, men når databasen tilbyder denne funktion, finder vi det mest oplagt at bruge denne.

Lokationerne er et overblik over hvor i verden vi (fiktivt) har vejrstationer monteret. Hver lokation har en tilhørende vejrstation med et unikt Device_ID. Device_ID'et i lokationsdatabasen er en Primary Key, der relaterer til kolonnen Device_ID i den specifikke vejrtabel for den valgte lokation. Hver enkelt lokation har altså en tilhørende dynamisk databasetabel, hvor vejrdata opdateres hvert 5. sekund. Indtil videre har vi kun én vejrstation oppe og køre. Det er vejret i Odense som vises i tabellen "Vejr_Odense".

Der er gjort plads til de stationer, som vi fiktivt planlægger at opstille i fremtiden rundt omkring i verden.

Der skal køres en database setup på Raspberry PI. Derfor skal kommandoerne i den vedlagte tekstfil skrives i Raspberry'ens terminal for at installere den nødvendige software

Step 5: Præsentation Af Data

Vejrdataen der lagres i databasen, vil vi gerne kunne præsentere på en pæn måde. Til dette formål er udviklet to løsninger. Den ene er et lille program skrevet i C# kode i Microsoft Visual Studio. Programmet er en konsol applikation, der præsenterer data i et kommandoprompt vindue.

Der er tilknyttet en bruger, så man kun kan bruge programmet, ved at indtaste korrekt brugernavn og adgangskode.

Koden kan kopieres fra vedlagte tekstfil, og pastes direkte ind i Visual Studio. Kommentarer findes ude til højre

Desuden har vi udviklet en HTML side som hostes på Raspberry'en. Hvis man er på samme netværk som Raspberry'en, fremvises siden hvis man går ind på Raspberry'ens IP, som i dette tilfælde er 10.140.100.215. For sjov har vi til præsentationen af projektet, lavet et hyperlink til HTML-siden, gemt i en QR kode, som kan scannes med smartphones.

HTML-koden til vejrdata er vedlagt her og kan åbnes med teksteditor/notesblok

Share

    Recommendations

    • Clocks Contest

      Clocks Contest
    • Creative Misuse Contest

      Creative Misuse Contest
    • Water Contest

      Water Contest

    2 Discussions

    Yes Kongmidas. Yes indeed

    this is very good