Stap 5: De magie (code)
Ik de Arduino in verband met de verwerking via de seriële poort, met de bedoeling hebben de Processing schets weergeven van de gegevens na verloop van tijd, zodat we kunnen zien hoe het bier vordert.
Dit kan met een schets van de verwerking via seriële communicatie interface.
#include < OneWire.h >
#include < DallasTemperature.h >
#include < Wire.h >
#include < Adafruit_MPL3115A2.h >
/ / / Macht door Vin verbinden 3-5V, GND met GND
Gebruikt de I2C - SCL verbinden met de SCL-pin, SDA aan SDA pin
Zie de de draad-handleiding voor pinouts voor elke Arduino
http://Arduino.CC/en/Reference/Wire
Adafruit_MPL3115A2 baro = Adafruit_MPL3115A2();
zweven drukvariaties;
float altm;
float chamberTemp;
zweven druk = 0;
zweven idealPressure = 14,45; Dit geval PSI. afhankelijk van welke meten van druk, dat wil zeggen de drukvariaties; psi; enz float maxPressure = 14.81; psi int clicks = 0;
Data aansluiting is aangesloten op poort 2 van de Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9
Opstelling van een exemplaar van de privacy om te communiceren met alle privacy oneWire(ONE_WIRE_BUS) voor de privacy van de apparaten (niet alleen Maxim/Dallas temperatuur ICs); Onze privacy verwijzing naar Dallas temperatuur doorgeeft.
DallasTemperature sensoren (& Privacy);
int numberOfDevices; Aantal temperatuur apparaten gevonden
DeviceAddress tempDeviceAddress; We gebruiken deze variabele om te slaan van een gevonden apparaatadres
float yeastTemp;
zweven idealTemp = 24;
zweven tempTol = 1.1;
Booleaanse verwarming = false;
Booleaanse lastHeatState;
*** PINNEN 'n draden ***
SCL is op witte draad
SDA is op vage gele draad
Dallas temperatuursensor is op Pin 2. Gele draad
Const int solenoïde = 4; Magneetklep op Pin 4. Bruine draad
Const int buttonPin = 6; Drukknop Pin. Paarse draad
Const int bluePin = 9; Blauwe draad
Const int greenPin = 10; Groene draad
Const int redPin = 11; Rode draad
Andere:
+ 5v is op de lange rode draad
GND is op lange zwarte draad
Vin (input 12vDC) brandt lang vage gele draad
// *********************************
int redValue;
int greenValue;
int blueValue = 0;
int de eindtijd;
void setup {Serial.begin(9600);
BARO.begin(); Initiëren van luchtdruk sensor, die ook aan boord van de temperatuursensor
Wire.begin(); Starten privacy bibliotheek, nodig voor de communicatie met de luchtdruk sensor.
dallasSetup(); Dit initiatief de Dallas waterdichte digitale Thermometer
pinMode (solenoïde, OUTPUT);
pinMode (buttonPin, INPUT);
pinMode (redPin, OUTPUT);
pinMode (greenPin, OUTPUT);
pinMode (bluePin, OUTPUT);
Serial.Print("Initiated*");
}
void loop {}
int startTime = millis();
baroRun();
Barometrische druk/hoogtemeter
dallasRun();
Serial.Print("Send"); Start van het signaal en de 'verzenden' zal worden uitgesloten, het zal fungeren als een buffer
Serial.Print(Pascals);
Serial.Print("a");
Serial.Print(chamberTemp);
Serial.Print("b");
Serial.Print(yeastTemp);
Serial.Print("c");
Rgb_s koord = String(redValue) + "," + String(greenValue) + "," + String(blueValue);
Serial.Print(rgb_s);
Serial.Print("_"); Einde van signaal '_' redValue = 33; greenValue = 16; blueValue = 100; setRGB (redValue, greenValue, blueValue);
}
ongeldig control() {}
Als (druk > = maxPressure) {/ / was idealPressure
digitalWrite (solenoïde, hoge); de versies van de magneetklep waardoor gas(CO2) te ontsnappen via de luchtsluis setRGB (redValue, greenValue, blueValue);
}
Als (druk < = idealPressure) {}
alternatieve code voor het gebruik van releaseCount. Kan het vervangen van minPressure als het nooit daar krijgen kan, testen nodig. digitalWrite (solenoïde, laag);
Sluit magneetventiel
setRGB (0, 0, 0); } }
ongeldig testControl() {}
Als (klikken < 10) {}
digitalWrite (solenoïde, hoge);
Serial.println ("solenoïde heeft geopend");
setRGB (redValue, greenValue, blueValue);
}
anders als (klikken > 10) {}
digitalWrite (solenoïde, laag);
Serial.println ("solenoïde heeft gesloten");
setRGB (0, 0, 0);
}
klikken ++; Als (klikt op > = 20) clicks = 0;
}
ongeldig baroRun() {}
Als (! baro.begin()) {}
Serial.Print ("Couldnt vinden sensor.");
digitalWrite (solenoïde, hoge);
Serial.println ("solenoïde heeft geopend");
terugkeer;
}
luchtdruk = baro.getPressure(); Deze eigenschap retourneert een luchtdruk
Druk = luchtdruk / 6894.75729; pressurePSI = luchtdruk / 6894.75729; Luchtdruk wordt omgezet in PSI
luchtdruk = round(pascals); Rondes nummer dus er geen decimale is wanneer het wordt verzonden naar verwerking via de seriële chamberTemp = baro.getTemperature(); Deze eigenschap retourneert een Celsius
}
VOID setRGB (int r, int g, int b) {}
analogWrite (redPin, r);
analogWrite (greenPin, g);
analogWrite (bluePin, b);
}
ongeldig dallasRun() {}
Bel sensors.requestTemperatures() voor het uitgeven van een mondiale temperatuur
verzoek om alle apparaten op de bus
Serial.Print ("aanvragen temperaturen...");
sensors.requestTemperatures(); Verzenden van de opdracht te krijgen van de temperaturen
Serial.println("Done");
Het reageert bijna onmiddellijk. Laten we de gegevens uitprinten
printTemperature(tempDeviceAddress);
Gebruik een eenvoudige functie om de gegevens te drukken
yeastTemp = sensors.getTempC(tempDeviceAddress);
Serial.Print(yeastTemp);
}
ongeldig dallasSetup() {}
Opstarten van de bibliotheek
sensors.begin();
Pak een aantal apparaten op de draad
numberOfDevices = sensors.getDeviceCount();
Ga naar apparaten op de bus
Serial.Print ("zoeken naar apparaten...");
Serial.Print ('gevonden');
Serial.Print (numberOfDevices, DEC);
Serial.Print ("zinspreuk.");
verslag parasiet stroomvereisten
Serial.Print ("parasiet macht is:");
Als (sensors.isParasitePowerMode()) / / Serial.println("ON");
anders / / Serial.print ("OFF");
Doorlopen van elk apparaat, adres uitprinten
for (int i = 0; ik < numberOfDevices; i ++) {}
Zoek de draad voor adres
Als (sensors.getAddress(tempDeviceAddress, i)) {}
Serial.Print ("gevonden apparaat");
Serial.Print (i, DEC);
Serial.Print ("met adres:");
printAddress(tempDeviceAddress);
Serial.println();
Serial.Print ("resolutie instellen op"); Serial.Print (TEMPERATURE_PRECISION, DEC);
de resolutie ingesteld op TEMPERATURE_PRECISION bit (elke Dallas/Maxim apparaat in staat is van diverse verschillende resoluties)
sensors.setResolution (tempDeviceAddress, TEMPERATURE_PRECISION);
Serial.Print ("resolutie eigenlijk ingesteld op:");
Serial.Print(sensors.getResolution(tempDeviceAddress), DEC); Serial.println(); } else {/ / Serial.print ("gevonden ghost-apparaat op"); Serial.Print (i, DEC); Serial.Print ("maar kon niet detecteren adres. Controleer de macht en bekabeling"); } }
}
functie voor het afdrukken van een apparaat adres ongeldig printAddress (DeviceAddress deviceAddress) {voor (uint8_t ik = 0; ik < 8; i ++) {als (deviceAddress [i] < 16) Serial.print("0"); Serial.Print (deviceAddress [i], HEX); } }