Paso 5: La magia (código)
Se relaciona el Arduino procesamiento a través de la serie, con la intención de tener el bosquejo de procesamiento se muestran los datos en el tiempo para que podamos ver cómo está progresando la cerveza.
Esto puede interactuar con un dibujo de procesamiento vía comunicación serial.
#include < OneWire.h >
#include < DallasTemperature.h >
#include < Wire.h >
#include < Adafruit_MPL3115A2.h >
/ / Energía conectando Vin a 3-5V, GND a GND
Utiliza I2C - conectar el pin SCL, SDA a pin SDA SCL
Ver el tutorial cable de pines para cada Arduino
http://Arduino.CC/en/Reference/WIRE
Baro de Adafruit_MPL3115A2 = Adafruit_MPL3115A2();
flotador de pascales;
flotador altm;
Float chamberTemp;
presión del flotador = 0;
Float idealPressure = 14.45; Este caso PSI. depende de que medida de presión, es decir, pascales; PSI; maxPressure de flotador etc. = 14.81; hace clic en int psi = 0;
Cable de datos esté conectado al puerto 2 de Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9
Configurar una instancia de oneWire para comunicarse con cualquier dispositivos (no sólo temperatura de Maxim/Dallas ICs) OneWire OneWire oneWire(ONE_WIRE_BUS); Pasar nuestra referencia oneWire a temperatura de Dallas.
DallasTemperature sensors (& oneWire);
int numberOfDevices; Número de dispositivos de temperatura encontrado
DeviceAddress tempDeviceAddress; Usaremos esta variable para almacenar una dirección de dispositivo encontrado
Float yeastTemp;
Float idealTemp = 24;
Float tempTol = 1.1;
calefacción boolean = false;
lastHeatState Boolean;
*** PERNOS y cables ***
SCL es en hilo blanco
SDA es el cable amarillo débil
Sensor de temperatura Dallas está en el Pin 2. Cable amarillo
const int solenoide = 4; Solenoide en el Pin 4. Cable marrón
const int buttonPin = 6; Pin del pulsador. Cable morado
const int bluePin = 9; Cable azul
const int greenPin = 10; Cable verde
const int redPin = 11; Cable rojo
Otros:
+ 5v en el cable de Red largo
GND es el alambre negro largo
Vin (entrada 12vDC) está en tiempo débil hilo amarillo
// *********************************
int redValue;
greenValue int;
int blueValue = 0;
endTime int;
void setup() {Serial.begin(9600);
BARO.Begin(); Iniciar el sensor de presión barométrica, que también tiene a bordo el sensor de temperatura
Wire.Begin(); Iniciar la librería OneWire, necesario para la comunicación con el sensor de presión barométrica.
dallasSetup(); Esto inició el termómetro Digital resistente al agua de Dallas
pinMode (solenoide, salida);
pinMode (buttonPin, entrada);
pinMode (redPin, salida);
pinMode (greenPin, salida);
pinMode (bluePin, salida);
Serial.Print("Initiated*");
}
void loop() {}
int startTime = millis();
baroRun();
Altímetro de presión barométrica
dallasRun();
Serial.Print("Send"); Inicio de la señal, se excluirán 'Enviar', actuará como amortiguador
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("_"); Final de la señal '_' redValue = 33; greenValue = 16; blueValue = 100; setRGB (redValue, greenValue, blueValue);
}
void control() {}
Si (presión > = maxPressure) {/ / idealPressure
digitalWrite (solenoide, HIGH); libera la válvula de solenoide que permite gas(CO2) a escapar a través de la esclusa de aire setRGB (redValue, greenValue, blueValue);
}
Si (presión < = idealPressure) {}
código alternativo al uso de releaseCount. Puede sustituir minGRADO como no puede nunca llegar y pruebas requeridas. digitalWrite (solenoide, LOW);
Se cierra la válvula solenoide
setRGB (0, 0, 0); } }
void testControl() {}
Si (clics < 10) {}
digitalWrite (solenoide, HIGH);
Serial.println ("solenoide ha abierto");
setRGB (redValue, greenValue, blueValue);
}
else if (clics > 10) {}
digitalWrite (solenoide, LOW);
Serial.println ("solenoide ha cerrado");
setRGB (0, 0, 0);
}
clicks ++; Si (hace clic en > = 20) hace clic = 0;
}
void baroRun() {}
Si (! {baro.begin())}
Serial.Print ("Couldnt find sensor.");
digitalWrite (solenoide, HIGH);
Serial.println ("solenoide ha abierto");
retorno;
}
pascales = baro.getPressure(); Devuelve pascales
presión = Pascal / 6894.75729; pressurePSI = pascales / 6894.75729; Pascal se convierte en PSI
pascales = round(pascals); Número de rondas por lo que no decimal cuando se envía al proceso a través de la serie chamberTemp = baro.getTemperature(); Devuelve grados Celsius
}
void setRGB (int r, int g, int b) {}
analogWrite (redPin, r);
analogWrite (greenPin, g);
analogWrite (bluePin, b);
}
void dallasRun() {}
Llame al sensors.requestTemperatures() para emitir una temperatura global
solicitar a todos los dispositivos en el bus
Serial.Print ("solicitando temperaturas...");
sensors.requestTemperatures(); Enviar el comando para obtener las temperaturas
Serial.println("Done");
Responde casi de inmediato. Vamos a imprimir los datos
printTemperature(tempDeviceAddress);
Utilizar una función simple para imprimir los datos
yeastTemp = sensors.getTempC(tempDeviceAddress);
Serial.Print(yeastTemp);
}
void dallasSetup() {}
Puesta en marcha de la biblioteca
Sensors.Begin();
Un recuento de los dispositivos en el alambre del gancho agarrador
numberOfDevices = sensors.getDeviceCount();
ubicar los dispositivos en el bus
Serial.Print ("localización de dispositivos...");
Serial.Print ("encontrado");
Serial.Print (numberOfDevices, DEC);
Serial.Print ("dispositivos.");
Informe requisitos de energía del parásito
Serial.Print ("es de energía parásito:");
Si (sensors.isParasitePowerMode()) / / Serial.println("ON");
Else / / Serial.print ("OFF");
Bucle a través de cada dispositivo, imprimir dirección
para (int i = 0; i < numberOfDevices; i ++) {}
El cable de dirección de búsqueda
Si (sensors.getAddress(tempDeviceAddress, i)) {}
Serial.Print ("device Found");
Serial.Print (i, DEC);
Serial.Print ("dirección:");
printAddress(tempDeviceAddress);
Serial.println();
Serial.Print ("configuración de resolución"); Serial.Print (TEMPERATURE_PRECISION, DEC);
establece la resolución en bits TEMPERATURE_PRECISION (Dallas/Maxim cada dispositivo es capaz de varias resoluciones diferentes)
sensors.setResolution (tempDeviceAddress, TEMPERATURE_PRECISION);
Serial.Print ("resolución realmente establecida en:");
Serial.Print(Sensors.getResolution(tempDeviceAddress), DEC); Serial.println(); } else {/ / Serial.print ("encontrado fantasma dispositivo en"); Serial.Print (i, DEC); Serial.Print ("pero no se pudo detectar la dirección. Comprobar cableado y energía"); } }
}
función para imprimir un printAddress vacío de dirección de dispositivo (DeviceAddress deviceAddress) {para (uint8_t i = 0; i < 8; i ++) {si (deviceAddress [i] < 16) Serial.print("0"); Serial.Print (deviceAddress [i], hexagonal); } }