Billiga Arduino kontrolleras yoghurt Maker (2 / 4 steg)
Steg 2: Programmering Arduino
/* Inkludera nödvändiga bibliotek Setup vars Inre vars (inte ändra) Konfigurerar termometer void setup() { Serial.BEGIN(9600); IF (!. SD.begin(chipSelect)) { Skapa en ny fil om (! datafile) { Serial.Print ("hittades");
Manus av Manuel Schutze - maj 2013
Anslutningar:
DS18B20 termometer - stift 2
Relä modul - pin 3
SD CS - stift 10
SD MOSI - stift 11
SD MISO - pin 12
SD CLK - stift 13
*/
#include < OneWire.h >
#include < DallasTemperature.h >
#include < SD.h >
lång intervalTemp = 1000; intervallet mellan temperaturmätningar
lång intervalSD = 5000; intervallet mellan spara data på SD-kortet
flyta tempMin = 42,5; min temp (< truns på värme)
flyta tempMax = 43,5; Max temp (> truns av värmen)
int rele = 3; PIN där reläet kopplas
CONST int chipSelect = 10; PIN CS (SD kort)
lång previousMillisTemp = 0;
lång previousMillisSD = 0;
flyta tempAtual = 0; aktuella temp
int stat = 0; 0 = relä av / 1 = relä på
statiska char tempBuff [15].
Fil datafile;
OneWire oneWire(2); PIN där themometer är ansluten
DallasTemperature sensorer (& oneWire);
DeviceAddress insideThermometer;
sensors.BEGIN();
sensors.getAddress (insideThermometer, 0);
sensors.setResolution (insideThermometer, 11); Ställ in termometern max upplösning
pinMode (rele, produktionen);
pinMode (10, OUTPUT);
Serial.println ("### Yogurtator ###");
Serial.println ("SD-kort misslyckades, eller inte finns");
} annat {
Serial.println ("SD kort initierats.");
char filnamn [] = "DATA00. TXT";
för (uint8_t jag = 0; jag < 100; i ++) {
filnamn [4] = jag / 10 + "0";
filnamn [5] = jag % 10 + '0';
IF (!. SD.exists(filename)) {
bara öppna en ny fil om det inte finns
datafile = SD.open (filnamn, FILE_WRITE);
bryta; lämna loopen!
}
}
Serial.println kunde inte ("skapa filen");
} annat {
Serial.Print ("logga på:");
Serial.println(filename);
}
}
Serial.Print(sensors.getDeviceCount(), DEC);
Serial.println ("termometrar.");
Serial.Print ("enhet 0 Resolution:");
Serial.println(sensors.getResolution(insideThermometer), DEC);
Serial.Print ("Temp min:");
Serial.Print(tempMin);
Serial.Print ("Temp-max:");
Serial.println(tempMax);
Serial.println("###");
}
void loop() {
osignerade långa currentMillis = millis();
Kontrollerar aktuella temp och skriver ut det på följetong
om ((currentMillis - previousMillisTemp > intervalTemp) || (currentMillis - previousMillisTemp < 0)) {
Uppdateringar tidigare millis
previousMillisTemp = currentMillis;
Blir temperaturen
sensors.requestTemperatures();
tempAtual = sensors.getTempCByIndex(0);
Kontroller relay
om (tempAtual! = 0) {
IF(tempAtual < tempMin) {
digitalWrite (rele, hög);
stat = 1;
}
IF(tempAtual > tempMax) {
digitalWrite (rele, låg);
stat = 0;
}
}
Skriver ut aktuell temperatur på följetong
Serial.Print ("Temp:");
Serial.Print(sensors.getTempCByIndex(0));
Serial.Print ("C - värme:");
IF(stat == 0) {
Serial.println("off");
} annat {
Serial.println("on");
}
}
Sparar data på SD-kortet
om ((currentMillis - previousMillisSD > intervalSD) || (currentMillis - previousMillisSD < 0)) {
Uppdateringar tidigare millis
previousMillisSD = currentMillis;
Skapar strängen att spara på fil
String dataString = "";
dtostrf (tempAtual, 5, 2, tempBuff);
dataString.concat(tempBuff);
dataString.concat(",");
dataString.concat(stat);
Om filen är tillgänglig, skriva till det:
om (datafile) {
datafile.println(dataString);
datafile.flush();
}
Om filen inte är öppen, dyker upp ett felmeddelande:
annat {
Serial.println ("fel att öppna datafilen.");
}
}
}
/ * Kod slutar här! */
Allt är kommenterade. Bara ställa in min och max temperatur och ladda upp den till din Arduino ombord.
Här koden skriver ut aktuell temperatur och relä status på den seriella porten varje sekund, sou du har en idé vad som händer inne i lådan!
Observera att koden kräver också ett SD-kort att spara data. Detta är valfritt och kommenterade av nästa steg.