DIY Arduino Termometer

PID regulator, styringer og programmer.
Brugeravatar
Nimbus39
Indlæg: 3392
Tilmeldt: 27. jun 2010, 09:52
Geografisk sted: Greve (Mosede Strand)
Kontakt:

DIY Arduino Termometer

Indlæg af Nimbus39 »

Jeg havde behov for et termometer med 3 følere, da jeg brygger med 3 gryder og var træt af konstant at skulle "flytte" proben på mit termometer mellem gryderne.
Jeg ville have et samlet display med visning af temperaturen for 3 følere på en gang, og min løsning var at bygge et baseret på Arduino og DS18B20 følere. Der findes mere præcise følere, men DS18B20 er nemme at arbejde med og, iflg. producenten, præcise indenfor +/- 0.5 grad i det område jeg skal bruge dem til at måle - og så er de billige ;-)
Jeg besluttede senere at jeg lige så godt kunne bruge alt pladsen i displayet til noget, og kodede derfor en stopursfunktion ind i arduinoen.
Der kunne kodes en lang række andre ting ind i den, men jeg har holdt så simpelt som muligt.
Diagrammet for det hele ser således ud:
BrygTermometerLille.png
BrygTermometerLille.png (49.82 KiB) Vist 16175 gange
Ledningerne der går til displayet skal man ikke tage så alvorligt, der er brugt et I2C serielt display med kun 4 pins, men det var ikke lige lagt ind i Fritzing - ligesom antallet af følere blot er vist som en, men der kan tilsluttes mange flere de skal blot tilsluttes de samme ledninger.
For at bygge det skal man bruge:
1 X Arduino UNO (eller lign. board) http://www.aliexpress.com/item/Free-Shi ... 01531.html" onclick="window.open(this.href);return false;
3 X DS18B20 (evt. med ledning og dykrør) http://www.aliexpress.com/item/Free-Shi ... 28409.html" onclick="window.open(this.href);return false;
2 X Trykknapper http://www.aliexpress.com/item/S105-5xM ... 93844.html" onclick="window.open(this.href);return false;
1 X LCD 1602 med I2C board monteret. http://www.aliexpress.com/item/IIC-I2C- ... 73825.html" onclick="window.open(this.href);return false;
2 x 220 ohm modstande
1 X 4,7 Kohm modstand.
Ledninger og en kasse til at bygge det hele ind i.
Jeg har endvidere monteret en afbryder og et 9V batteri, men man kan bare forsyne Arduinoen med strøm via dens (USB) stik og en ekstern strømkilde.

Koden er ret simpel:

Kode: Vælg alt

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <StopWatch.h>


// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// Opløsningen på DS18B20
#define TEMPERATURE_PRECISION 12

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27,16,2);  

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

// Antal DS18B20
int numberOfDevices; 

// Variable til opbevaring af DS18B20 adresserne
DeviceAddress tempDeviceAddress; 

//Definer kontaktpins
const int buttonRed = 3;
const int buttonGreen = 4;

//Definer variable
int buttonStateRed = 0;
int buttonStateGreen = 0;
int h = 0;
StopWatch Ur;
float ES, EM, ET;

void setup(void)
{
  //Initialiser input pins
  pinMode(buttonRed, INPUT);     
  pinMode(buttonGreen, INPUT);     

  // initialize the lcd
  lcd.init();  
  lcd.clear(); 
  
  // Turn on the LCD.
  lcd.backlight();

  // Start up the ds18b20 library
  sensors.begin();
  
  // Grab a count of devices on the wire
  numberOfDevices = sensors.getDeviceCount();
  
  // Start afvikling af program
  lcd.print("Velkommen til");
  lcd.setCursor(0,1);
  lcd.print("Bryggeri Landly"); // Lidt sjov skal man jo have
  delay(2500);  
  lcd.clear();
  lcd.setCursor(0,1);
  lcd.print("Fandt ");
  lcd.print(numberOfDevices, DEC);
  lcd.println(" enheder.");
  delay(1500);
  lcd.clear();
 
}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  lcd.print(tempC,1);
}

//Funktion til opdatering af temp. i display
void UpdateDisplay()
{
  sensors.requestTemperatures(); // Send the command to get temperatures
  lcd.print("                        "); //ryd området med temperaturer.
  // Loop through each device, print out temperature data
  for(int i=0;i<numberOfDevices; i++) // gentag for alle fundne DS18B20
  {
    // Search the wire for address
    if(sensors.getAddress(tempDeviceAddress, i))
	{
                if(i>1) 
                {
                  lcd.setCursor(0,1); // Hvis det er 3. sensor der skal vises sæt cursor i rette position.
                }
                if(i>0 && i<2) //hvis i er lig 1
                {
                  lcd.setCursor(8,0); // Hvis det er 2. sensor der skal vises sæt cursor i rette position.
                }
		// Output the device ID
		lcd.print(i+1,DEC); // Læg 1 til device ID, da den ellers vil starte med 0
		lcd.print(":");
		printTemperature(tempDeviceAddress); // Udskriv temp data for den aktive føler.
	} 
  }
  h=0; // Variable der bestemmer hvornår display skal opdateres, nulstilles inden der vendes tilbage til hovedløkken
}

void loop(void)
{ 
  h++;
  buttonStateRed = digitalRead(buttonRed); //Aflæs rød knaps tilstand
  buttonStateGreen = digitalRead(buttonGreen);//Aflæs grøn knaps tilstand
  ES = (Ur.elapsed()/1000) % 60; //Sekunder, heltaldivideres og resten vises.
  EM = (Ur.elapsed()/60000) % 60; //Minutter, heltaldivideres og resten vises.
  ET = Ur.elapsed()/3600000; //Timer
  if (h>250) // Ønskes opdatering af display i kortere eller længere interval ændres denne. 250 svarer til ca 8 sekunder.
  { 
    UpdateDisplay();
  }
  lcd.setCursor(15,1); //Sæt cursor til linje 2 position 15, nederst til højre.
  //Læs knapper
  if (buttonStateRed == HIGH && buttonStateGreen == LOW) // Stop ur
  {
    lcd.print("R"); // Angiv i display at rød knap er trykket ned
    Ur.stop();
  }
  if (buttonStateGreen == HIGH && buttonStateRed == LOW) //Start ur
  {
    lcd.print("G"); // Angiv i display at grøn knap er trykket ned
    Ur.start();
  }
  if (buttonStateGreen == HIGH && buttonStateRed == HIGH) //Nulstil ur
  {
    lcd.print("B"); // Angiv i display at rød og grøn knap er trykket ned
    Ur.reset();
  }
  //Print ur
  lcd.setCursor(8,1); //Sæt Curson til den position hvor tiden skal skrives.
  lcd.print(ET,0);
  lcd.print(":");
  if(EM<10) // Hvis EM er på 1 tal skal der tilføjes et "0" foran
  {
    lcd.print("0");
  }
  lcd.print(EM,0);
  lcd.print(":");
    if(ES<10) // Hvis ES er på 1 tal skal der tilføjes et "0" foran
  {
    lcd.print("0");
  }
  lcd.print(ES,0);
  delay(10); // Vent et kort øjeblik, så der er tid til at opdage knappen evt. er trykket ned.
  lcd.setCursor(15,1);
  lcd.print(" "); // Tøm cellen der angiver knap-tilstand
}
En af de smarte ting ved denne kode er at den selv opdager antallet af følere og adresserne på disse.
I det valgte display er der plads til 4 visninger, man kan derfor fjerne ur funktionen og tilslutte en DS18B20 mere hvis man har brug for 4 følere.
For at starte uret trykker man på en grøn knap, stop er den røde knap og nulstil er begge knapper samtidig.

Når de sidste stumper kommer og jeg kan bygge det helt færdigt lægger jeg fotos op af "dyret," i udviklingsopstillingen ser det således ud:
Brygtermometer.jpg
Brygtermometer.jpg (165.41 KiB) Vist 16171 gange
Buy a man a beer and he wastes an hour. Teach a man to brew and he wastes a lifetime.
http://bryggeri.landly.dk
http://www.facebook.com/bryggerilandly
http://beersmithrecipes.com/listrecipes/2810/nimbus39
Brugeravatar
ron9
Indlæg: 80
Tilmeldt: 15. feb 2014, 18:45
Geografisk sted: Greve
Kontakt:

Re: DIY Arduino Termometer

Indlæg af ron9 »

Fedt projekt...

Tror det skal være et af mine vinter hygge projekter.

Men der mangler da nogen komponenter i din beskrivelse, men som man kan se på dine billeder?
Brugeravatar
Nimbus39
Indlæg: 3392
Tilmeldt: 27. jun 2010, 09:52
Geografisk sted: Greve (Mosede Strand)
Kontakt:

Re: DIY Arduino Termometer

Indlæg af Nimbus39 »

ron9 skrev: Men der mangler da nogen komponenter i din beskrivelse, men som man kan se på dine billeder?
Hvilke tænker du på?
Buy a man a beer and he wastes an hour. Teach a man to brew and he wastes a lifetime.
http://bryggeri.landly.dk
http://www.facebook.com/bryggerilandly
http://beersmithrecipes.com/listrecipes/2810/nimbus39
elkjr

Re: DIY Arduino Termometer

Indlæg af elkjr »

http://www.thingiverse.com/thing:1063665/#files" onclick="window.open(this.href);return false;
http://www.alva-control.eu/alva_blog/al ... r-details/" onclick="window.open(this.href);return false;

lidt omkring "bryg-elektronik"
Brugeravatar
ron9
Indlæg: 80
Tilmeldt: 15. feb 2014, 18:45
Geografisk sted: Greve
Kontakt:

Re: DIY Arduino Termometer

Indlæg af ron9 »

Nimbus39 skrev:
ron9 skrev: Men der mangler da nogen komponenter i din beskrivelse, men som man kan se på dine billeder?
Hvilke tænker du på?
Dem her:
Billede
kbh36
Indlæg: 377
Tilmeldt: 27. dec 2014, 19:43
Geografisk sted: 4060 Kr. Såby

Re: DIY Arduino Termometer

Indlæg af kbh36 »

de 2 til højre vil jeg mene er trykknapperne, og de 3 til venstre må være temperatursensorerne.
/Klaus
Cenosillicaphobia is the fear of an empty beer glass. Jeg har ikke et alkoholproblem, jeg har en hobby.
Brugeravatar
Nimbus39
Indlæg: 3392
Tilmeldt: 27. jun 2010, 09:52
Geografisk sted: Greve (Mosede Strand)
Kontakt:

Re: DIY Arduino Termometer

Indlæg af Nimbus39 »

kbh36 skrev:de 2 til højre vil jeg mene er trykknapperne, og de 3 til venstre må være temperatursensorerne.
Du har fuldstændig ret ;-)

Billedet viser udviklingsopstillingen, og til det formål har jeg valgt at bruge 3 X DS18B20 uden den rustfri kappe (som jeg venter på bliver leveret fra Kina)
Jeg har endvidere valgt at bruge 2 trykknapper der passer i et breadboard i stedet for de 2 der kommer i den endelige version, som er dem jeg linker til.
Så ja, der er komponenter på billedet der ikke er på listen men omvendt er der også komponenter på listen som ikke er på billedet :-)
Lige så snart jeg har lavet den endelige version lægger jeg fotos op af den så i kan se hvordan den kommer til at se ud.
Buy a man a beer and he wastes an hour. Teach a man to brew and he wastes a lifetime.
http://bryggeri.landly.dk
http://www.facebook.com/bryggerilandly
http://beersmithrecipes.com/listrecipes/2810/nimbus39
Brugeravatar
admin
Site Admin
Indlæg: 4754
Tilmeldt: 4. dec 2005, 16:25
Geografisk sted: 7080 Børkop

Re: DIY Arduino Termometer

Indlæg af admin »

jeg bruger dem her:
http://www.aliexpress.com/item/ScrewShi ... 05468.html" onclick="window.open(this.href);return false;

Nimbus ved du om man kan få et glas til displayet til montering i en kasse ?
Mvh.
Jens
Øl og sol er livet....

http://www.fribryg.dk" onclick="window.open(this.href);return false;
http://www.facebook.dk/fribryg" onclick="window.open(this.href);return false;
Brugeravatar
Nimbus39
Indlæg: 3392
Tilmeldt: 27. jun 2010, 09:52
Geografisk sted: Greve (Mosede Strand)
Kontakt:

Re: DIY Arduino Termometer

Indlæg af Nimbus39 »

admin skrev:jeg bruger dem her:
http://www.aliexpress.com/item/ScrewShi ... 05468.html" onclick="window.open(this.href);return false;
De var smarte, men de bruger vel også lidt mere plads i kassen...
admin skrev: Nimbus ved du om man kan få et glas til displayet til montering i en kasse ?
Jeg har ikke set det, men jeg plejer at bruge kasser fra Biltema med klart låg og så bare sætte displayet fast i låget:
46-2024.jpg
46-2024.jpg (37.98 KiB) Vist 16044 gange
Varenummer 46-2024, de har en del forskellige den nævnte er god til større projekter.
Jeg vil tro at man også kan bruge nogen af dem her:
http://www.biltema.dk/da/Byggeri/El/Ele ... 000021290/" onclick="window.open(this.href);return false;
Buy a man a beer and he wastes an hour. Teach a man to brew and he wastes a lifetime.
http://bryggeri.landly.dk
http://www.facebook.com/bryggerilandly
http://beersmithrecipes.com/listrecipes/2810/nimbus39
Brugeravatar
admin
Site Admin
Indlæg: 4754
Tilmeldt: 4. dec 2005, 16:25
Geografisk sted: 7080 Børkop

Re: DIY Arduino Termometer

Indlæg af admin »

Ja de bliver lidt højere af det, men det gør nu ikke så meget for mig, jeg synes det er fedt at montere ledningerne på denne måde.

Sendt fra min SM-G925F med Tapatalk
Mvh.
Jens
Øl og sol er livet....

http://www.fribryg.dk" onclick="window.open(this.href);return false;
http://www.facebook.dk/fribryg" onclick="window.open(this.href);return false;
Kastrup
Indlæg: 58
Tilmeldt: 19. maj 2013, 12:21

Re: DIY Arduino Termometer

Indlæg af Kastrup »

Spændende lille projekt!!

Er det planen bare at "ploppe" følerne ned i gryderne? eller skal de monteres på en måde?

Har selv kigget lidt på disse følere, men der står desværre ikke noget om "food grade" eller lignende.. Men går ud ud for at der ikke er den store fare på færde når der er tale om temperaturer under 100 grader??

Mvh Kastrup
Brugeravatar
Michal
Indlæg: 330
Tilmeldt: 22. jul 2014, 10:17
Geografisk sted: Vejen - Sydjylland

Re: DIY Arduino Termometer

Indlæg af Michal »

Dejligt med så udførlig en beskrivelse Nimbus. Det kunne se ud til at jeg skal hjem og kikke på min kode igen, den virker noget mere kompleks :-(
Nå, det er jo nok min PLC programmering der står lidt i vejen for mine evner ud i C++/Arduino'isk.

Jeg sprugte i en anden tråd og du undgik at nævne det her også, så jeg prøver lige igen :-)

Der er vel ikke en metode til at skelne følerne fra hinanden? Jeg kan se at du sorterer dem på adressen, men den kender man jo ikke på forhånd?
Udstyr:
2 x Nimbus 29 el-gryder
2 x modstrøms køler
2 x cirkulations pumper
CarstenM
Indlæg: 162
Tilmeldt: 31. aug 2015, 14:21
Geografisk sted: Vejen - Sydjylland

Re: DIY Arduino Termometer

Indlæg af CarstenM »

Kastrup skrev: Har selv kigget lidt på disse følere, men der står desværre ikke noget om "food grade" eller lignende.. Men går ud ud for at der ikke er den store fare på færde når der er tale om temperaturer under 100 grader??
Mange af dem der er vandtætte er jo bare krympet med krympeflex. Ville nok overveje en lomme. Kan bare ikke rigtigt finde nogle der passer.
Men man kunne jo lave sådan en lomme selv.

http://www.homebrewtalk.com/showthread.php?t=156772
Brugeravatar
Nimbus39
Indlæg: 3392
Tilmeldt: 27. jun 2010, 09:52
Geografisk sted: Greve (Mosede Strand)
Kontakt:

Re: DIY Arduino Termometer

Indlæg af Nimbus39 »

Michal skrev:
Jeg sprugte i en anden tråd og du undgik at nævne det her også, så jeg prøver lige igen :-)

Der er vel ikke en metode til at skelne følerne fra hinanden? Jeg kan se at du sorterer dem på adressen, men den kender man jo ikke på forhånd?
Jeg så godt dit spørgsmål men fik ikke lige husket at svare...
Nej, jeg skelner ikke mellem følerne så de altid kommer i en bestemt rækkefølge. Skal man gøre det ville jeg hardcode adresserne i programmet.
Jeg kan dog ikke helt se hvad du vil opnå med det?
Mine følere kommer altid ind i samme rækkefølge, og når jeg har fået de sidste følere fra Kina tester jeg dem bare for at afgøre hvilken rækkefølge de vil dukke i op og så sætter jeg dem i hullerne i kassen således at den der bliver detekteret som føler 1 kommer ud af det første hul...
Buy a man a beer and he wastes an hour. Teach a man to brew and he wastes a lifetime.
http://bryggeri.landly.dk
http://www.facebook.com/bryggerilandly
http://beersmithrecipes.com/listrecipes/2810/nimbus39
Brugeravatar
Michal
Indlæg: 330
Tilmeldt: 22. jul 2014, 10:17
Geografisk sted: Vejen - Sydjylland

Re: DIY Arduino Termometer

Indlæg af Michal »

Jo, jeg tænkte på temperaturen inde i køle- eller gærskabet og udenfor det. Jeg ved ikke helt om det er reelt er brugbart i reguleringen, men har set det nævnt flere gange. Og har det en betydning er det jo ikke lige gyldigt hvilken føler der bliver sat på hvor.

Men du har (som sædvanligt) nok ret, i et setup hvor man har flere temperaturer man vil måle nok ikke det store problem at huske hvilken føler der skal i hvor.
Udstyr:
2 x Nimbus 29 el-gryder
2 x modstrøms køler
2 x cirkulations pumper
Besvar

Tilbage til "Microprocessor styring til ølbrygning"