Nu är det dags att dra nytta av allt som vi har lärt oss i tidigare kapitel och bygga en färdig slutprodukt.
Obs! Koden i detta kapitel är anpassad för hur webbtjänsten Thingspeak fungerar i skrivande stund. Funktionaliteten kan förändras med tiden. Wifi-modulen i detta kapitel har en firmware som koden också är anpassad för. Om tillverkaren av wifi-modulen ändrar i firmwaren kan koden behöva uppdateras.
Som avslutningsprojekt vill vi bygga en internetansluten klocktermometer. Den ska bestå av följande komponenter (utöver Arduino Uno):
Sättet som Neopixel-ringen visar tiden är snillrikt. Ringen består av 24 pixlar totalt. Varje enskild pixel på ringen kan med vår kod antingen vara avstängd, lysa blått, lysa rött eller lysa både blått och rött (d.v.s. violett).
På ringen indikeras en timme med två röda pixlar. För varje timme som går tänds ytterligare två röda pixlar. Så här ser ringen ut klockan tre (3.00 eller 15.00) och klockan fyra (4.00 eller 16.00).
I takt med att minuterna tickar på tänds den blå delen av pixlarna. Pixlar som redan är röda blir violetta medan släckta pixlar blir blå.
Den hårdvarumässiga kopplingen av den internetuppkopplade klocktermometern kommer att se ut på följande vis.
Illustration gjord med komponenter från Fritzing (fritzing.org). CC BY-SA 3.0
För att styra alla dessa komponenter krävs en uppsättning bibliotek. Vi kommer att använda följande bibliotek:
Lägg märke till att vi i Visa text och grafik på displayer använde ett annat bibliotek för att uppdatera displayen (U8glib i stället för SSD1306Ascii). SSD1306Ascii är ett mindre bibliotek som inte kan användas till lika mycket. Det går exempelvis inte att rita bilder med det. Anledningen till att vi använder SSD1306Ascii i detta projekt är att källkoden är så omfattande att det stora U8glib-biblioteket inte får plats.
Vi inleder sketchen med att importera biblioteken och initiera konstanter för Neopixel-ringen, wifi-anslutningen och Thingspeak-anslutningen. Vi skapar nya objekt för displayen, Neopixel-ringen, RTC-modulen, anslutningsklienten och servot. Vi skapar även en extra seriell kommunikation för wifi-modulen och deklarerar ett gäng variabler som behövs för att hålla tiden och bestämma när information ska uppdateras.
Del 1/9 av GrandFinale.ino
I setup-funktionen startar vi Oled-skärmen och förbereder en liten animation. När Arduinon startar upp ska det stå Starting. För varje steg i uppstartsprocessen som lyckas lägger vi till en punkt efter Starting. Det gör att vi får en bra översikt över hur långt vi har kommit i uppstartsprocessen om något går fel.
Metoden som startar displayen har 0x3C som ett argument. Det är adressen som används för att kommunicera med displayen. Vi behövde inte ange den i Visa text och grafik på displayer eftersom det U8glib kunde söka upp displayen automatiskt.
I setup-funktionen startar vi också en seriell kommunikation med datorn för eventuellt behov av felsökning. Vi startar likaså servot, RTC-modulen, Neopixel-ringen och wifi-modulen. Vi avslutar setup-funktionen med att ansluta till vårt definierade trådlösa nätverk.
Del 2/9 av GrandFinale.ino
I loop-funktionen ber vi om att få tiden uppdaterad av funktionen updateTime. Sedan undersöker vi hur lång tid det var sedan vi skickade data till Thingspeak. Om det var mer än 30 sekunder sedan skickar vi information igen.
Del 3/9 av GrandFinale.ino
Del 4/9 av GrandFinale.ino
UpdateTime-funktionen uppdaterar tiden och anropar uppdatering av Neopixel-ringen. Om klockan har slagit över till en ny minut uppdateras även displayen.
Del 5/9 av GrandFinale.ino
PrintOled-funktionen uppdaterar tiden och temperaturen som visas på displayen. Den skriver även ut när data senast skickades till Thingspeak.
Del 6/9 av GrandFinale.ino
SetTime-funktionen uppdaterar Neopixel-ringen.
Del 7/9 av GrandFinale.ino
UpdateTemp-funktionen uppdaterar temperaturen och mappar om värdena för att passa servots vridbana.
Del 8/9 av GrandFinale.ino
Den sista funktionen är printWifiStatus, vilken vi har använt tidigare (den används för felsökning).
Del 9/9 av GrandFinale.ino
När koden är kompilerad och uppladdad är projektet klart. Därmed är denna introduktion till Arduino-elektronik och Arduino-programmering slut. Du som läsare har tagit dig hela vägen i mål. Bra jobbat!
Är du sugen på några riktiga utmaningar? Här är förslag på tre förbättringar som du kanske kan lägga till i sketchen.
Lycka till!
Som medlem hos oss får du alltid lite mer. Som till exempel låga medlemspriser, unika kampanjer, 100 dagars öppet köp och bonuscheckar. Dessutom sparas alla dina köp i ditt medlemskap så att du slipper spara papperskvitton för eventuella returer. Ditt medlemskap är helt digitalt och helt kortlöst. Och väldigt smidigt.
Läs mer