Bryggning kammare - prototyp (5 / 5 steg)
Steg 5: Magiskt (kod)
Jag länkade Arduino behandling via seriella, med avsikt att ha bearbetning skissen visar data över tiden så vi kan se hur ölet framskrider.
Detta kan gränssnittet en bearbetning skiss via seriell kommunikation.
#include < OneWire.h >
#include < DallasTemperature.h >
#include < Wire.h >
#include < Adafruit_MPL3115A2.h >
/ / / Makt genom att ansluta Vin till 3-5V, GND till GND
Använder I2C - Anslut SCL till SCL stift, SDA till SDA stift
Se tråd tutorial för Stifttilldelningar för varje Arduino
http://Arduino.cc/en/reference/Wire
Adafruit_MPL3115A2 baro = Adafruit_MPL3115A2();
flyta Pascal;
float altm;
float chamberTemp;
flyta tryck = 0;
flyta idealPressure = 14.45; Detta fall PSI. beror på vilken mätning av tryck, dvs Pascal; psi; etc float maxPressure = 14.81; PSI int klick = 0;
Data kabeln är ansluten till port 2 på Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9
Setup en oneWire instans att kommunicera med någon OneWire enheter (inte bara Maxim/Dallas temperatur ICs) OneWire oneWire(ONE_WIRE_BUS); Passera vår oneWire referens till Dallas temperatur.
DallasTemperature sensorer (& oneWire);
int numberOfDevices; Många temperatur enheter hittade
DeviceAddress tempDeviceAddress; Vi använder denna variabel för att lagra en hittade enhetsadress
float yeastTemp;
flyta idealTemp = 24.
flyta tempTol = 1.1;
booleska uppvärmning = false;
booleska lastHeatState;
*** STIFT 'n ledningar ***
SCL-värdet är på vit tråd
SDA är på svagt gul tråd
Dallas temperaturgivare är på Pin 2. Gul tråd
CONST int magnetventil = 4; Magnetventil på pinne 4. Brun tråd
CONST int buttonPin = 6; Tryckknapp Pin. Lila tråd
CONST int bluePin = 9; Blå tråd
CONST int greenPin = 10; Grön kabel
CONST int redPin = 11; Röd tråd
Andra:
+ 5v är på långa röda tråd
GND är på lång svart tråd
Vin (input 12vDC) är på länge svag gul tråd
// *********************************
int redValue;
int greenValue;
int blueValue = 0;
int endTime;
void setup() {Serial.begin(9600);
Baro.BEGIN(); Initiera barometertrycket sensor, som också har ombord temperaturgivare
Wire.BEGIN(); Initiera OneWire bibliotek, krävs för kommunikation med barometertrycket sensorn.
dallasSetup(); Detta inledde den Dallas Vattentät Digital termometer
pinMode (magnetventil, produktionen);
pinMode (buttonPin, ingång);
pinMode (redPin, produktionen);
pinMode (greenPin, produktionen);
pinMode (bluePin, produktionen);
Serial.Print("Initiated*");
}
void loop() {
int startTime = millis();
baroRun();
Barometrisk tryckhöjdmätaren
dallasRun();
Serial.Print("Send"); Start av signalera, "Skicka" kommer att uteslutas, det kommer att fungera som buffert
Serial.Print(Pascals);
Serial.Print("a");
Serial.Print(chamberTemp);
Serial.Print("b");
Serial.Print(yeastTemp);
Serial.Print("c");
String rgb_s = String(redValue) + "," + String(greenValue) + "," + String(blueValue);
Serial.Print(rgb_s);
Serial.Print("_"); Slutet av signal '_' redValue = 33. greenValue = 16. blueValue = 100; setRGB (redValue, greenValue, blueValue);
}
void control() {
om (pressa > = maxPressure) {/ / var idealPressure
digitalWrite (magnetventil, hög); släpper magnetventilen tillåter gas(CO2) att fly genom luftsluss setRGB (redValue, greenValue, blueValue);
}
om (tryck < = idealPressure) {
alternativ kod som använder releaseCount. Kan ersätta minPressure som det aldrig kan bli där, testning krävs. digitalWrite (magnetventil, låg);
Stänger magnetventil
setRGB (0, 0, 0); } }
void testControl() {
om (klick < 10) {
digitalWrite (magnetventil, hög);
Serial.println ("Magnetventil har öppnat");
setRGB (redValue, greenValue, blueValue);
}
annars om (klick > 10) {
digitalWrite (magnetventil, låg);
Serial.println ("Magnetventil har stängt");
setRGB (0, 0, 0);
}
klick ++; om (klickar på > = 20) klick = 0;
}
void baroRun() {
om (! baro.begin()) {
Serial.Print ("kunde inte hitta sensor.");
digitalWrite (magnetventil, hög);
Serial.println ("Magnetventil har öppnat");
hemkomst.
}
Pascal = baro.getPressure(); Returnerar Pascal
Tryck = Pascal / 6894.75729; pressurePSI = Pascal / 6894.75729; Konverterar Pascal till PSI
Pascal = round(pascals); Rundor nummer så det finns ingen decimal när det skickas till behandling via den seriella chamberTemp = baro.getTemperature(); Returnerar celcius
}
void setRGB (int r, int g, int b) {
analogWrite (redPin, r);
analogWrite (greenPin, g);
analogWrite (bluePin, b);
}
void dallasRun() {
samtal sensors.requestTemperatures() att utfärda en global temperatur
begära att alla enheter på bussen
Serial.Print ("ansökande temperaturer...");
sensors.requestTemperatures(); Skicka kommandot för att få temperaturer
Serial.println("Done");
Svarar nästan omedelbart. Låt oss skriva ut data
printTemperature(tempDeviceAddress);
Använda en enkel funktion för att skriva ut data
yeastTemp = sensors.getTempC(tempDeviceAddress);
Serial.Print(yeastTemp);
}
void dallasSetup() {
Starta upp biblioteket
sensors.BEGIN();
Ta antalet enheter på linan
numberOfDevices = sensors.getDeviceCount();
Leta upp enheter på bussen
Serial.Print ("att hitta enheter...");
Serial.Print ("hittades");
Serial.Print (numberOfDevices, DEC);
Serial.Print ("enheter.");
rapport parasit effektbehovet
Serial.Print ("parasit makt är:");
om (sensors.isParasitePowerMode()) / / Serial.println("ON");
annat / / Serial.print ("OFF");
Loopa igenom alla enheter, skriva ut adressen
för (int jag = 0; jag < numberOfDevices; i ++) {
Sök tråd för adress
om (sensors.getAddress(tempDeviceAddress, i)) {
Serial.Print ("Funna enheten");
Serial.Print (i, DEC);
Serial.Print ("med adress:");
printAddress(tempDeviceAddress);
Serial.println();
Serial.Print ("ställa in upplösningen"); Serial.Print (TEMPERATURE_PRECISION, DEC);
Ställ in upplösningen till TEMPERATURE_PRECISION bitar (varje Dallas/Maxim enheten klarar av flera olika upplösningar)
sensors.setResolution (tempDeviceAddress, TEMPERATURE_PRECISION);
Serial.Print ("Resolution faktiskt inställd:");
Serial.Print(sensors.getResolution(tempDeviceAddress), DEC); Serial.println(); } annat {/ / Serial.print ("Funna ghost enheten på"); Serial.Print (i, DEC); Serial.Print ("men kunde inte identifiera adress. Kolla power och kablage"); } }
}
funktion för att skriva ut en enhet adress void printAddress (DeviceAddress deviceAddress) {för (uint8_t jag = 0; jag < 8; i ++) {om (deviceAddress [i] < 16) Serial.print("0"); Serial.Print (deviceAddress [i], HEX); } }