Arduino Templogger

Arduino TempLogger
GjæringsLogger
Meskelogger
Hva gjør den?
I korte trekk henter de temperaturdata fra flere sensorer (uendelig mange er mulig), oppdaterer et lite display
og sender data til en gratis skytjeneste ca hvert tredje minutt via et trådløst kort / internett. Grafisk
fremstilling av temperatur over tid er da tilgjengelig på din mobil, pc eller annet uavhengig av hvor du er,
og ferske data er tilgjengelig i løpet av ca 3 sekunder.
Siden første versjon som ble laget for overvåking og logging av gjæring, har jeg også laget en 'fork'. Dette er en
utgave som jeg bruker til logging av mesketemperatur, og den har innebygget temperaturalarm. Denne har
også et navigeringshjul slik at du enkelt kan stille inn øvre og nedre grense på alarmen på selve boksen.
Alarmen kan også deaktiveres helt.
Alle data lagres i skytjenesten, thingspeak.com. Dette er en gratis tjeneste som er svært enkel å sette opp og
bruke. Skytjenesten lagrer 16000 datapunkter per brukerkanal. Jeg har satt opp 4 forskjellige kanaler. Hvor
ofte du sender data til skytjenesten, styrer derfor hvor langt tilbake i tid du lagrer data for. Jeg lagrer ca
hvert tredje minutt, og har data for over 30 dager tilgjengelig. Data kan lett lastes ned til Excel, eller du kan
eksportere grafene som bilder dersom du vil ha det i bryggeloggen din.
Standard er tre sensorer i mitt oppsett da jeg måler to gjæringskar, og lufttemperaturen i gjæringsskapet.
Koden kan svært enkelt utvides med så mange sensorer du ønsker. Sensorene seriekobles, så det er ingen
begrensning i antallet utganger på selve Arduinoen - alle sensorer kjøres fra de samme tre ledningene ut
fra denne. Jeg har laget meg to sensorutganger på selve boksen, men har også laget en forlenger (hub)
som kan stå fast i gjæringsskapet med ytterligere tre sensorutganger.
Overordnet skisse
4
3
5
6
2
7
1
1.
2.
3.
4.
5.
6.
7.
Temperaturmålere
Resistor
Arduino Nano
LCD display (1602 / 2004)
Spenningsregulator
WiFi modul
Breadboard / koblingsplate
Kr 125,- / 210,-
Alle data sendes fra Arduinoen, via
ESP866 og opp til en skytjeneste
levert av thingspeak.com
Grafer kan hentes ut fra deres
webside, eller via lenker til den
enkelte graf. De tilbyr kun enkle
grafverktøy fra kun en datakilde
Kr 0,-
For å kunne hente ut komplekse
grafer med info fra flere målere,
bruker jeg grafverktøy fra
highcharts.com
Denne er tilpasset til å hente ut data
fra thingspeak.com, og kjøres som
en rapportgenerator fra et
webområde.
Mange data kan manipuleres, og
datakilder kan aktiveres og
deaktiveres direkte i verktøyet
Kr ?,-
Lenker
•
Arduino UNO
•
Arduino Nano
Startpakke for Bryggere
•
Arduino
–
–
•
ESP8266 WiFI transciver
–
•
4k7 resistor. DS18B20 trenger denne
Dupont kabler
–
•
Vanntett temperaturprobe
Flere for seriekobling
Resistor / motstand
–
•
DC 5V to 3.3V Step-Down Power Supply Module
DS18b20
–
–
•
Trådløs oppkobling
AMS1117
–
•
Nano anbefales (UNO fungerer ok)
Begge har 3.3v og 5v utganger
Kjøp alle tre variantene av han/hun
Ekstrautstyr
–
–
–
–
–
–
–
–
Breadboard – for enkel tilkobling
'Pin Head' – for flashing av STC'n
1602 / 2004 LCD-skjerm. Kjøp modul - ikke bare skjerm
Koblingsboks – Biltema (110*110*70)
Hurtigkoblinger til sensorene (5-pack)
Rotary Encoder
Piezo Buzzer
Mobillader / usb ledning
–
http://goo.gl/8TqDNU
http://goo.gl/Zvz4ai
•
ESP8266
•
AMS1117
•
DS18b20
–
–
–
http://goo.gl/zKD4TQ
http://goo.gl/N8NRYJ
http://goo.gl/Dbn2lb
•
4k7 resistor
•
Dupont kabler
•
LCD 1602 (16 tegn - 2 linjer)
•
LCD 2004 (20 tegn - 4 linjer)
–
–
–
–
http://goo.gl/7AmVCi
http://goo.gl/rY3l95
http://goo.gl/Be6dEO
http://goo.gl/pXk6yc
•
'Pin Head’
•
Hurtigkobling – treleder
•
Koblingsboks
–
–
–
http://goo.gl/IUw0au
http://goo.gl/Ys1B20
http://goo.gl/7WaHJF
•
Breadboard
•
Rotary Encoder
•
Rotary Encoder hjul
–
–
–
http://goo.gl/CU24LG
http://goo.gl/i4bxXg
http://goo.gl/UV32zK
•
Piezo Buzzer
•
Strømtilførsel
•
Strømledninger - retractabke
–
–
–
Kr 130,-
–
http://goo.gl/FZfv9X
USB mobillader
http://goo.gl/vx5qsq
Kr 170,-
Utstyrslisten
GjæringsLogger
Gjæringsloggeren henter temperaturinfo fra et antall sensorer og sender
denne videre til LCD displayet, og til en skytjeneste. Det lagres altså ingen
data på selve enheten, og ingen data går tapt dersom enheten mister
strøm.
Lagring i skyen er kort fortalt lagring av data på internett i stedet for på
ditt eget nettverk, din egen pc, eller på en minnebrikke i selve loggeren.
Fordelen er da at du kan lese disse dataene fra hvor som helst i verden.
For å få til dette, trener vi noen temperatursensorer, en microkontroller,
et trådløst wifi kort, litt strøm, litt kabler og mye kode.
Alt hardware må du kjøpe selv, mens kode og hvordan det kobles, får du
her.
Jeg valgte å montere alt i en IP67 boks fra Biltema. Disse er rimelige, og
lette å kutte i med en dremel / sag / fil.
Du kan både bruke en Arduino Uno, eller en
Nano. Jeg bruker Nano.
Nano’en er kun festet på usb-kontakten. Dette
gjør montering/demontering enkelt. Displayet
er limt, og resten er stort sett skrudd.
Breadboardet er saget ut av mitt store
breadboard som var lite i bruk, men du får kjøpt
små breadboard som passer.
I dette er en 4k7 resistor festet. Denne kreves
for å få riktig måling fra temperatursensoren.
Det finnes svært mange temperatursensorer,
men til Arduino benyttes svært ofte en DS18B20
sensor. Disse har en egen ’mac’ adresse slik at
de kan seriekobles på samme ledning uten
problemer.
2004 display
Arduino Nano
AMS1117 & 4k7
Wifi – esp8266
I breadboardet er det også en spenningsregulator som henter strøm fra 5v og
reduserer den til 3,3v. Det er kun WiFi modulen som bruker 3,3v, og det er
anbefalt å benytte en spenningsregulator til dette grunnet høy ampere.
Alle temperatursensorene har hurtigkoblinger som er loddet identisk.
Hurtigkoblinger
Seriekobling
Hub i kjøleskapet
Koblingsskjema
GjæringsLogger
4
3
1.
2.
3.
4.
DS18B20 temperaturmålere
Resistor - 4700 Ohms (4k7)
Arduino Uno / Nano
LCD display 1602 / 2004 med
styreenhet
5. AMS1117 – 5v to 3,3v
6. ESP8266 – WiFi modul
7. Breadboard for enkel kobling
5
6
2
7
1
MeskeLogger
Arduino Nano
Menyen styres av en Rotary Encoder, som er
en ’endeløs’ skru-bryter med en integrert
trykkbryter. Navigeringen er basert på at du
velger meny med å trykke, og velger verdier
ved å vri. Ganske enkelt – egentlig.
Det er også en 5*8 bar, som minker etter
hvert. Når den er 0, sendes data til internett.
AMS1117 & 4k7
Monteringen er ganske lik gjæringsloggeren. Den eneste forskjellen er at det
er flere komponenter i meskeloggeren, og derfor flere kabler – og ledninger.
Der hvor de to enhetene er like, er også koblingen identisk. Dvs at lcd display
og temperatursensorer er koblet på de samme portene, noe som gjør dem
kompatible med hverandre. Du kan laste den samme koden inn på begge.
Piezo & kontakt
Alarmbryter
Rotary Encoder
LCD display
Wifi – esp8266
Meskeloggeren har foruten en Rotary Encoder, også en Piezo Buzzer (alarm)
som varsler når temperaturen er utenfor det oppgitte området. Alarmen kan
skrues helt av med en egen ekstern bryter.
Både Meske- og gjæringsloggeren har verdier i koden som kan endres etter
behov. Dette er angitt i selve koden.
Hurtigkoblinger
Seriekobling
Hub i kjøleskapet
5
Koblingsskjema
MeskeLogger
6
7
8
9
3
4
1. DS18B20 temperaturmålere
2. Resistor - 4700 Ohms (4k7)
3. LCD display 1602 / 2004 med styreenhet
4. AMS1117 – 5v to 3,3v
5. Alarmbryter on/off
6. Piezo Buzzer
7. Rotary Encoder
8. Arduino Uno / Nano
9. ESP8266 – WiFi modul
10.Breadboard for enkel kobling
10
2
1
Arduino og koden
•
En Arduino-kode kalles en sketch, og må som et
minimum bestå av
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
•
Du finner mye nybegynner info på Arduino’s
hjemmesider
–
•
https://www.arduino.cc/en/Guide/HomePage
Kjente utfordringer med LCD
–
Koden for å programmere mot et LCD
avhenger av hvem som har laget selve LCD
displayet og av hvem som har laget
styreenheten til displayet
– Min kode består av følgende linjer hvor jeg
velger hvilket display som benyttes. Disse går
ikke om hverandre. Bruk jeg feil, blir
// ****** LCD ********
// Connect the 4displayet
pins: VCC-5v / GND-GND
svart…/ SDA-A4 / SCL-A5
//LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
//LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display
//LiquidCrystal_I2C lcd(0x3F,20,4); // set the LCD address to 0x3F for a 20 chars and 4 line display
–
Arduinokoden min kan grovt deles i fire deler
1.
2.
3.
4.
Koding av sensorer – DS18B20
Koding av trådløs Wifi-kort – ESP8266
Koding av kommunikasjon med ThingSpeak.com
Koding av LCD skjerm
–
•
Det er vanlig å benytte forskjellige bibliotek når
man programmerer med Arduino. Dette er små
programmer som gjør det mye lettere å
programmere mot eksempelvis et LCD display.
Disse må lastes inn på din pc, slik at
kompilatoren finner dem når koden skal skrives
til din Uno / Nano. Alle biblioteker starter med
#include i koden sin vist til høyre. Jeg bruker 7
bibliotek.
Jeg har altså tre forskjellige display. Ett 1602
(16 tegn * 2 linjer), og to 2004. De to 2004
displayene har forskjellig styreenhet (0x27
og 0x3F).
Ved å fjerne de innledende // aktiveres
koden. Linjer som starter med // kjøres aldri.
Ofte er 0x27 riktig adresse. Forsøk den først.
Dersom dette ikke fungerer, last ned
følgende sketch – last den inn på din arduino
med tilkoblet Liquid Crystal I2C enhet, og
kjør [Serial Monitor]
http://sevland.no/TempLogger/I2C_Scan.zip
#include <SoftwareSerial.h>
#include <stdlib.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // 1602-2004 - 4 pin
#include <avr/wdt.h> // Watchdog library
Arduino-installasjon og plassering av
sketcher i filstrukturen
•
Installasjonsveiledningen finner du på de offisielle Arduinosidene:
http://arduino.cc/en/Main/Software
•
Når du laster ned en sketch, må den ligge i en mappe med samme
navn som selve sketchen på et fast oppgitt område.
Hos meg ser det slik ut
•
ESP8266 - WiFi
•
•
•
•
WiFi er vanligvis litt komplisert, men
ESP8266 og Arduino snakker sammen
helt uten ekstra koding, kun grunn-sketch
Arduino har en kommunikasjonsprosess
som vanligvis sender data til og fra Serial
Monitor, som er et vindu du kan kjøre i
Arduinosoftwaren på din pc.
Dersom du kobler Arduino og ESP8266
sammen med rx og tx utgang /
inngangene, sender og mottar ESP8266
denne kommunikasjonen sammen med
Serial Monitor.
NB 1 !
Når du kjører kode direkte via
Serial Monitor til EXP8266,
kobles rx-tx og tx-rx som vist her.
Dersom du kjører kode via en
Sketch, må du koble rx-rx
og tx-tx.
jeg skjønner ikke helt hvorfor …
•
NB 2 !
Du kan ikke
laste opp en
Sketch mens rx
eller tx er
tilkoplet på
Arduinoenheten
Serial
Monitor
3.3v vs. 5v
Det meste av WiFi-enheter sender med en variabel
styrke avhengig av hvor god forbindelsen er til den
trådløse senderen / mottakeren.
ESP8266 kan derfor ved dårlig forbindelse sende med
høyere styrke enn hva Arduinoen kan levere, noe som
kan skade Arduinoen. Jeg har selv koblet den direkte til
Arduinoen uten problemer, men det trenger ikke bety
noen verdens ting 
For å være sikker benytter jeg nå en AMS1117-3.3 som
henter strøm fra 5v og drar den ned til 3,3v 800mA
Har sakset litt fra web. Med høyere Amp når den også
mye lenger...
The ESP8266 module is a 3v device, but it's no wimp. It
draws quite a bit of power. In fact, you'll probably need
to make sure that your circuit's power supply can handle
at least 1 amp of power. (In my case, I was using a simple
7.5v 500ma power supply. When I started working with
this module, I switched it for a 7.5v 1amp power supply
and had plenty of power.) As it turns out there is good
reason for this; some Youtube videos have surfaced
recently with folks seeing anything from 500 meters to a
couple miles of transmission capability from this module.
That's a lot of horsepower for $5.00!
ThingSpeak.com
•
•
•
•
•
ThingSpeak.com er skytjenesten som mottar alle data du
logger, og som gjør dem tilgjengelig på mobil, pc og annet.
I fanen [Channel Settings] setter du navn på sensorene som
skal sende data til skytjenesten. De må naturligvis aktiveres
først [add field] …
Channe ID benyttes både for å sende til ’din’ teneste, men også
når du skal hente ut data fra tjenesten.
ThingSpeak gir kun tilgang til å hente ut en graf om gangen. Det
er med andre ord ikke mulig å kombinere flere grafer dersom
du har flere sensorer på samme gjæringskar / kjøleskap /
kjølerom. Da må du bruke en annen tjeneste som i sin tur
henter data fra ThingSpeak.com
Følgende adresse henter data fra min Channel ID fra Field 1.
[Make Public ?] må være haket av for å slippe [Read API Key]
Dynamic betyr at grafen oppdaterer seg selv automatisk:
–
•
http://api.thingspeak.com/channels/26673/charts/1?dynamic=true
Du kan legge på mange tilleggsatributter i lenken for å få frem
annen info. Alle begynner med &
&title=Mitt_Bryggeri
&days=10
&width=auto
&height=500
&color=368ff2
&bgcolor=e9f3fa
&yaxis=Temp.%E2%84%83