Stap 2: Programmering van de Arduino
/* Omvatten de nodige bibliotheken Setup vars Interne vars (niet wijzigen) Hiermee configureert u de thermometer VOID Setup {} if (!. SD.begin(chipSelect)) {}
Script door Manuel Schutze - mei 2013
Verbindingen:
DS18B20 thermometer - pin 2
Relais module - pin 3
SD CS - pin 10
SD MOSI - pin 11
SD MISO - pin 12
SD CLK - pin 13
*/
#include < OneWire.h >
#include < DallasTemperature.h >
#include < SD.h >
lange intervalTemp = 1000; interval tussen temperatuurmetingen
lange intervalSD = 5000; interval tussen gegevens opslaan op de SD-kaart
zweven tempMin = 42,5; min temp (< truns op warmte)
zweven tempMax = 43,5; max temp (> truns warmte af)
int overleren = 3; pin waar het Relais is aangesloten
Const int chipSelect = 10; PIN CS (SD-kaart)
lange previousMillisTemp = 0;
lange previousMillisSD = 0;
zweven tempAtual = 0; huidige temp
int stat = 0; 0 = relay off / 1 = relay op
statische char tempBuff [15];
Bestand datafile;
Privacy oneWire(2); pin waar de themometer is aangesloten
DallasTemperature sensoren (& Privacy);
DeviceAddress insideThermometer;
sensors.begin();
sensors.getAddress (insideThermometer, 0);
sensors.setResolution (insideThermometer, 11); set thermometer max resolutie
pinMode (overleren, OUTPUT);
pinMode (10, OUTPUT);
Serial.begin(9600);
Serial.println ("### Yogurtator ###");
Serial.println ("SD Card mislukte of niet aanwezig");
} else {}
Serial.println ("SD card geïnitialiseerd.");
Een nieuw bestand maken
char [filename] = "DATA00. TXT";
voor (uint8_t ik = 0; ik < 100; i ++) {}
bestandsnaam [4] = i / 10 + '0';
bestandsnaam [5] = ik % 10 + '0';
if (!. SD.exists(filename)) {}
een nieuw bestand alleen openen als het niet bestaat
datafile = SD.open (filename, FILE_WRITE);
breken; Laat de lus!
}
}
Als (! datafile) {}
Serial.println ("niet kon bestand niet maken');
} else {}
Serial.Print ("aanmelding:");
Serial.println(filename);
}
}
Serial.Print ('gevonden');
Serial.Print(sensors.getDeviceCount(), DEC);
Serial.println ("thermometers.");
Serial.Print ("apparaat 0 resolutie:");
Serial.println(sensors.getResolution(insideThermometer), DEC);
Serial.Print ("Temp min:");
Serial.Print(tempMin);
Serial.Print ("max Temp:");
Serial.println(tempMax);
Serial.println("###");
}
void loop {}
unsigned long currentMillis = millis();
Controleert de huidige temperaturen en drukt het op seriële
Als ((currentMillis - previousMillisTemp > intervalTemp) || (currentMillis - previousMillisTemp < 0)) {
Updates vorige millis
previousMillisTemp = currentMillis;
Temperatuur krijgt
sensors.requestTemperatures();
tempAtual = sensors.getTempCByIndex(0);
Besturingselementen estafette
Als (tempAtual! = 0) {}
if(tempAtual < tempMin) {}
digitalWrite (overleren, hoge);
stat = 1;
}
if(tempAtual > tempMax) {}
digitalWrite (overleren, laag);
stat = 0;
}
}
De huidige temperatuur afdrukken op seriële
Serial.Print ("Temp:");
Serial.Print(sensors.getTempCByIndex(0));
Serial.Print ("C - serie:");
if(stat == 0) {}
Serial.println("off");
} else {}
Serial.println("on");
}
}
Gegevens worden opgeslagen op de SD-kaart
Als ((currentMillis - previousMillisSD > intervalSD) || (currentMillis - previousMillisSD < 0)) {
Updates vorige millis
previousMillisSD = currentMillis;
Tekenreeks om te besparen op bestand genereert
DataString koord = "";
dtostrf (tempAtual, 5, 2, tempBuff);
dataString.concat(tempBuff);
dataString.concat(",");
dataString.concat(stat);
Als het bestand beschikbaar is, schrijven:
Als (datafile) {}
datafile.println(dataString);
datafile.Flush();
}
Als het bestand niet geopend is, pop-up een fout:
else {}
Serial.println ("fout bij openen bestand.");
}
}
}
/ * Code eindigt hier! */
Alles is toegelicht. Enkel de min en max temperatuur instellen en deze uploaden naar je Arduino board.
Deze code wordt de huidige status van de temperatuur en estafette afgedrukt op de seriële poort elke 1 seconde, sou heb je een idee wat er gebeurt in de doos!
Merk op dat de code ook aangedrongen op een SD-kaart voor het opslaan van de gegevens. Dit is optioneel en commentaar op de volgende stap.