Étape 5: La magie (code)
J’ai lié l’Arduino à traitement via le numéro de série, avec l’intention d’avoir le schéma de traitement montrent les données au fil du temps, donc nous pouvons voir comment progresse la bière.
Cela peut s’interfacer avec une esquisse de la transformation par l’intermédiaire de communication série.
#include < OneWire.h >
#include < DallasTemperature.h >
#include < Wire.h >
#include < Adafruit_MPL3115A2.h >
/ / / Power en connectant le Vin à 3-5V, GND à la broche GND
Utilise I2C - connect SCL sur la broche de SCL, SDA à broche SDA
Voir le tutoriel de fil de brochage pour chaque Arduino
http://Arduino.cc/en/Reference/Wire
Baro Adafruit_MPL3115A2 = Adafruit_MPL3115A2() ;
flotteur pascals ;
flotteur CLA ;
float chamberTemp ;
flotteur de pression = 0 ;
float idealPressure = 14.45 ; Ce cas lb/po2. dépend de qui mesure de pression, c.-à-d. pascals ; lb/po2 ; maxPressure flotteur etc. = 14.81 ; clique sur lb/po2 int = 0 ;
Câble de données est connectée à la voie 2 sur l’Arduino
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9
Configurer une instance oneWire de communiquer avec n’importe quel OneWire périphériques (pas seulement la température Maxim/Dallas ICs) OneWire oneWire(ONE_WIRE_BUS) ; Passez notre référence oneWire à température de Dallas.
Capteurs DallasTemperature (& oneWire) ;
int numberOfDevices ; Nombre de température dispositifs trouvés
DeviceAddress tempDeviceAddress ; Nous allons utiliser cette variable pour stocker une adresse de périphérique trouvé
float yeastTemp ;
float idealTemp = 24 ;
float tempTol = 1,1 ;
chauffage booléen = false ;
Boolean lastHeatState ;
*** ' Épingle n fils ***
SCL est sur fil blanc
SDA est le fil jaune pâle
Capteur de température de Dallas est sur la broche 2. Fil jaune
const int solénoïde = 4 ; Solénoïde sur la broche 4. Fil brun
const int buttonPin = 6 ; Broche bouton poussoir. Fil violet
const int bluePin = 9 ; Fil bleu
const int greenPin = 10 ; Fil vert
const int redPin = 11 ; Fil rouge
Autres :
+ 5v est sur long fil rouge
GND est sur long fil noir
Vin (entrée 12vDC) est sur le fil jaune de temps faible
// *********************************
int redValue ;
int greenValue ;
int blueValue = 0 ;
endTime int ;
void setup() {Serial.begin(9600) ;
BARO.Begin() ; Initier le capteur de pression barométrique, qui a également à bord de la sonde de température
Wire.Begin() ; Ouvrir la bibliothèque OneWire, nécessaire à la communication avec le capteur de pression barométrique.
dallasSetup() ; Cela a lancé le thermomètre numérique étanche de Dallas
pinMode (solénoïde, sortie) ;
pinMode (buttonPin, entrée) ;
pinMode (redPin, sortie) ;
pinMode (greenPin, sortie) ;
pinMode (bluePin, sortie) ;
Serial.Print("initiated*") ;
}
void loop() {}
int startTime = millis() ;
baroRun() ;
Pression/altimètre barométrique
dallasRun() ;
Serial.Print("Send") ; Lancer de signal, « envoyer » est exclus, il agira comme un tampon
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("_") ; Fin de signal « _ » redValue = 33 ; greenValue = 16 ; blueValue = 100 ; setRGB (redValue, greenValue, blueValue) ;
}
control() Sub {}
Si (pression > = maxPressure) {/ / a idealPressure
digitalWrite (solénoïde, HIGH) ; libère l’électrovanne permettant aux gas(CO2) de s’échapper par la SAS setRGB (redValue, greenValue, blueValue) ;
}
Si (pression < = idealPressure) {}
code de substitution à l’utilisation de releaseCount. Peut remplacer minPressure comme il peut ne jamais y arriver, des analyses nécessaires. digitalWrite (solénoïde, faible) ;
Ferme la vanne électromagnétique
setRGB (0, 0, 0) ; } }
void testControl() {}
Si {(clics < 10)
digitalWrite (solénoïde, HIGH) ;
Serial.println ("solénoïde a ouvert") ;
setRGB (redValue, greenValue, blueValue) ;
}
ElseIf (clics > 10) {}
digitalWrite (solénoïde, faible) ;
Serial.println ("solénoïde a fermé") ;
setRGB (0, 0, 0) ;
}
clics ++ ; Si (clique sur > = 20) clique = 0 ;
}
void baroRun() {}
Si (! baro.begin()) {}
Serial.Print ("Couldnt trouver capteur.") ;
digitalWrite (solénoïde, HIGH) ;
Serial.println ("solénoïde a ouvert") ;
retour ;
}
pascals = baro.getPressure() ; retourne les pascals
pression = pascals / 6894.75729 ; pressurePSI = pascals / 6894.75729 ; Convertit les Pascals à PSI
pascals = round(pascals) ; Tours numéro donc il n’y a aucune décimale lorsqu’il est envoyé au traitement par l’intermédiaire de la série chamberTemp = baro.getTemperature() ; retourne celcius
}
void setRGB (int r, g int, int b) {}
analogWrite (redPin, r) ;
analogWrite (greenPin, g) ;
analogWrite (bluePin, b) ;
}
void dallasRun() {}
appel sensors.requestTemperatures() de délivrer une température planétaire
demander à tous les périphériques sur le bus
Serial.Print ("requérant températures...") ;
sensors.requestTemperatures() ; Envoyer la commande pour obtenir des températures
Serial.println("Done") ;
Il répond presque immédiatement. Nous allons imprimer les données
printTemperature(tempDeviceAddress) ;
Une fonction simple permet d’imprimer les données
yeastTemp = sensors.getTempC(tempDeviceAddress) ;
Serial.Print(yeastTemp) ;
}
void dallasSetup() {}
Démarrage de la bibliothèque
sensors.Begin() ;
Prenez un compte des périphériques sur le fil
numberOfDevices = sensors.getDeviceCount() ;
Recherchez les périphériques sur le bus
Serial.Print ("recherche d’appareils...") ;
Serial.Print ("Found") ;
Serial.Print (numberOfDevices, DEC) ;
Serial.Print ("dispositifs.") ;
exigences de puissance parasite rapport
Serial.Print ("puissance Parasite est:") ;
Si (sensors.isParasitePowerMode()) / / Serial.println("ON") ;
else / / Serial.print ("OFF") ;
Effectuer une boucle sur chaque appareil, d’imprimer des adresses
pour (int i = 0; i < numberOfDevices; i ++) {}
Rechercher le fil pour adresse
Si (sensors.getAddress(tempDeviceAddress, i)) {}
Serial.Print (« dispositif de Found ») ;
Serial.Print (i, DEC) ;
Serial.Print ("adresse:") ;
printAddress(tempDeviceAddress) ;
Serial.println() ;
Serial.Print ("réglage de résolution de") ; Serial.Print (TEMPERATURE_PRECISION, DEC) ;
définir la résolution de TEMPERATURE_PRECISION bit (dispositif chaque Dallas/Maxim est capable de plusieurs résolutions différentes)
sensors.setResolution (tempDeviceAddress, TEMPERATURE_PRECISION) ;
Serial.Print ("résolution réellement définie comme étant:") ;
Serial.Print(sensors.getResolution(tempDeviceAddress), DEC) ; Serial.println() ; } else {/ / Serial.print ("Found fantôme dispositif à") ; Serial.Print (i, DEC) ; Serial.Print ("mais ne pas pu détecter l’adresse. Vérifier la puissance et le câblage") ; } }
}
fonction pour imprimer une adresse de périphérique Sub printAddress (DeviceAddress deviceAddress) {pour (uint8_t j’ai = 0; i < 8; i ++) {si (deviceAddress [i] < 16) Serial.print("0") ; Serial.Print (deviceAddress [i], HEX) ; } }