Arduino Aquaponics: EnvDAQ uppgradering med pH och löst syre (2 / 2 steg)
Steg 2: Arduino kod
Arduino IDE: 1.0.3Innan vi ändra koden, kan diskutera hur det fungerar. Arduino kommunicerar med sonden kretsar över seriell, med kretsarna hanterar grymta arbete att göra känsla av sonderna. På en 60 andra intervall kallar vi varje funktion för att få sensordata. PH och funktioner läsa från seriella tills en viss sekvens finns, bygger på de föregående tecken, formaterar en returnerade strängen passande till en GET-begäran och returnerar strängen. Slutligen görs en förfrågan till webapp.
För att starta, deklarera två ingående strängar
I deklarationerna, definiera två ingående strängar
String phsensorstring = "";
String dosensorstring = "";
Sedan behöver vi ställa in två mer seriella anslutningar, men på en 38400 baud. För att avsluta installationen förbehåller vi oss utrymme för input och sensor stränger från kretsen.
I setup(), starta de seriella utgångarna
Serial.BEGIN(9600); Standard följetong
Serial2.BEGIN(38400); pH följetong
Serial3.BEGIN(38400); GÖRA seriell
Fortfarande i setup(), reservera utrymme för sensordata
phsensorstring.Reserve(30);
dosensorstring.Reserve(30);
Precis som vi får värdet DHT och LDR, två nya funktioner skapas för att få pH och löst syre värden. De läser från seriella respektive värden, skapa en retur sträng formaterad som en bit av en GET-begäran och sedan återställa sensor strängen.
Få pH
Sträng getPH() {
char phchar;
medan (phchar! = '\r') {
phchar = (char)Serial2.read();
phsensorstring += phchar;
}
String ph_reading = "& pH =" + phsensorstring;
phsensorstring = "";
Return(ph_reading);
}
Få göra
Sträng getDO() {
char dochar;
medan (dochar! = '\r') {
dochar = (char)Serial3.read();
dosensorstring += dochar;
}
String do_reading = "& göra =" + dosensorstring;
dosensorstring = "";
Return(do_reading);
}
Huvudloop uppmanar en 60 andra intervall varje funktion och skickar en begäran till webapp
void loop() {
Få temperatur och luftfuktighet
String DHTSensor = "";
DHTSensor = getDHT();
Serial.println ("DHT:" + DHTSensor);
Får LDR läsning
Sträng LDR = "";
LDR = getLDR();
Serial.println ("LDR:" + LDR);
PH-VÄRDET
String PHSensorValue = "";
PHSensorValue = getPH();
Serial.println ("pH:" + PHSensorValue);
GÖRA
String DOSensorValue = "";
DOSensorValue = getDO();
Serial.println ("göra:" + DOSensorValue);
Skicka Data till Webapp
GAE (webapp + "adacs/arduino?" + DHTSensor + LDR + PHSensorValue + DOSensorValue);
Serial.println("");
Delay(60000);
}
Den fullständiga Arduino skissen:
/*
Miljö DAQ (V2) sköld med pH och löst syre sonder.
*/
#include < SPI.h >
#include < Ethernet.h > / / Ethernet sköld
#include < DHT.h > / / DHT. Credit: Adafruit industrier
Ethernet-Shield
byte [mac] = {0x90, 0xA2, 0xDA, 0x00, 0xA1, 0x90};
byte [] myIP = {192, 168, 1, 15};
byte gateway [] = {192, 168, 1, 1};
char server [] = "http://www.myapsystem.appspot.com";
EthernetClient klient;
Gör det enkelt att ändra app namn
Sträng webapp = "http://www.myapsystem.appspot.com/";
DHT-22
#define DHTPIN 3
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
Sonden input strängar
String phsensorstring = "";
String dosensorstring = "";
DIGITAL PINS
int connectedOn = 6;
int connectedOff = 7.
ANALOGA PINS
int AmbientLDR = A0; Lätt beroende av motstånd
DHT data skickas
char temp_str [10]. Temperaturen sträng
char rh_str [10]. Relativ luftfuktighet sträng
void setup() {
Starta Serial Output
Serial.BEGIN(9600); Standard serial
Serial2.BEGIN(38400); pH följetong
Serial3.BEGIN(38400); GÖRA seriell
Delay(1000);
Inaktivera SD-kort om man i facket
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);
Starta Ethernet
Ethernet.BEGIN(Mac);
Ethernet.BEGIN (mac, myIP);
Ethernet.BEGIN (mac, myIP, gateway);
Delay(1000); Ge Ethernet en sekund att initiera
Serial.println(Ethernet.localIP());
Reservera utrymme för sensordata
phsensorstring.Reserve(30);
dosensorstring.Reserve(30);
Starta DHT
DHT.BEGIN();
Ställ in pinkodsskydd lägen
pinMode (connectedOn, produktionen);
pinMode (connectedOff, produktionen);
Serial.println ("Setup komplett");
}
void loop() {
Få temperatur och luftfuktighet
String DHTSensor = "";
DHTSensor = getDHT();
Serial.println ("DHT:" + DHTSensor);
Får LDR läsning
Sträng LDR = "";
LDR = getLDR();
Serial.println ("LDR:" + LDR);
PH-VÄRDET
String PHSensorValue = "";
PHSensorValue = getPH();
Serial.println ("pH:" + PHSensorValue);
GÖRA
String DOSensorValue = "";
DOSensorValue = getDO();
Serial.println ("göra:" + DOSensorValue);
Skicka Data till Webapp
GAE (webapp + "adacs/arduino?" + DHTSensor + LDR + PHSensorValue + DOSensorValue);
Serial.println("");
Delay(60000);
}
Sträng getDHT() {
flyta h = dht.readHumidity();
flyta t = dht.readTemperature();
om (isnan(t) || isnan(h)) {
Serial.println ("kunde inte läsa från DHT22");
} annat {
flyta ftemp = (((9.0/5.0) * t) + 32,0);
Sträng temp = dtostrf (ftemp, 3, 1, temp_str);
Sträng rh = dtostrf (h, 3, 1, rh_str);
String dhtUrl = "Temp =" + temp + "& luftfuktighet =" + rh;
Return(dhtUrl);
}
}
Sträng getLDR() {
int ambientLDR = analogRead(AmbientLDR);
String lightUrl = "& AmbientLDR =" + String(ambientLDR);
Return(lightUrl);
}
Returnerar det aktuella pH värdet
Sträng getPH() {
char phchar;
medan (phchar! = '\r') {
phchar = (char)Serial2.read();
phsensorstring += phchar;
}
String ph_reading = "& pH =" + phsensorstring;
phsensorstring = "";
Return(ph_reading);
}
Returnerar det aktuella värdet upplöst syre
Sträng getDO() {
char dochar;
medan (dochar! = '\r') {
dochar = (char)Serial3.read();
dosensorstring += dochar;
}
String do_reading = "& göra =" + dosensorstring;
dosensorstring = "";
Return(do_reading);
}
void GAE(String link) {
booleska framgång = httpRequest(link);
om (framgång == true) {
Delay(5000);
booleska currentLineIsBlank = sant;
String readString = "";
char newString [100].
samtidigt (client.connected()) {
om (client.available()) {
char c = client.read();
Serial.write(c);
om (c == '\n' & & currentLineIsBlank) {
Serial.println ("nått slutet av begäran");
While(client.Connected()) {
char f = client.read();
readString += f;
}
}
om (c == "\n") {
currentLineIsBlank = sant;
} else om (c! = '\r') {
currentLineIsBlank = false;
}
}
}
client.stop();
Serial.println(readString);
} annat {
Serial.println ("inte ansluten.");
}
}
booleska httpRequest (sträng länk) {
om det finns en anslutning
om (client.connect (server, 80)) {
Serial.println ("Få" + länk + "HTTP/1.0"); För dev-läge
client.println ("Få" + länk + "HTTP/1.0");
client.println();
Aktivera anslutna LED
digitalWrite (connectedOff, låg);
digitalWrite (connectedOn, hög);
return true;
} annat {
Du inte kunde göra anslutningen
Serial.println ("Anslutning misslyckades");
fel + = 1;
client.stop();
Aktivera anslutna LED
digitalWrite (connectedOn, låg);
digitalWrite (connectedOff, hög);
returnera false;
}
}