Arduino Aquaponics: JSON Pump Controller (2 / 3 steg)

Steg 2: Arduino skiss

Arduino skiss skapar två TimerAlarms. Först kontroller reläet på en sekunders intervall och används för att växla läge. Det andra larmet anropar funktionen sync på 30 sekunders intervall.

Funktionen analysera ser ut i slutet av svaret, skapar ett aJson objekt och sedan blir läget. Beroende på värdet som läge händer en av tre saker. Det första läget är Alltid på, så att reläet aktiveras. Om du använder Växla, synkroniseras de springa och tomgång gånger. Slutligen bifogas den status du vill använda pumpen i Manual .

#include < SPI.h >
#include < Ethernet.h > / / Ethernet sköld
#include < aJSON.h > / / tolka JSON. Credit: Interaktiv fråga
#include < Wire.h >
#include "RTClib.h" / / ChronoDot. Credit: Adafruit industrier
#include < Time.h >
#include < TimeAlarms.h >

RTC - ChronoDot
RTC_DS1307 RTC;

DateTime framtid;
osignerade långa växla;
osignerade långa ström;

Ethernet-Shield
byte [mac] = {0x90, 0xA2, 0xD0, 0x0D, 0xA0, 0x00};
byte [] myIP = {192, 168, 1, 15}; Avkommentera här och linje 52 om det behövs.
byte gateway [] = {192, 168, 1, 1};

char server [] = "http://www. myapsystem. appspot.com "; Ändra detta så att de matchar de program-ID du setup i steg 3
EthernetClient klient;

Gör det enkelt att ändra app namn
Sträng webapp = "http://www. myapsystem.appspot.com/ "; Ändra detta så att de matchar de program-ID du setup i steg 3

Pins
int connectedON = 8;
int connectedOFF = 9;
int pumpRelay = 23.

PumpRelay värden
String current_mode = "Manuell"; Standardläget
String pumpState = "off"; Standard-läge
int pumpRunTime = 20; Kör i 20 sekunder
int pumpIdleTime = 40; Sitta sysslolös i 40 sekunder

void setup() {
Aktivera relä första
digitalWrite (pumpRelay, hög);

Inaktivera SD-kort om man i facket
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);

Starta följetong
Serial.BEGIN(9600);
Delay(1000);

Starta Ethernet
Ethernet.BEGIN(Mac);
Ethernet.BEGIN (mac, myIP);
Ethernet.BEGIN (mac, myIP, gateway);
Delay(1000);

Starta RTC
Wire.BEGIN();
RTC.begin();

IF (!. RTC.isrunning()) {
Serial.println ("RTC går inte");
}

DateTime nu = RTC.now();
DateTime sammanställt = DateTime (__DATE__, __TIME__);
om (now.unixtime() < compiled.unixtime()) {
Serial.println ("RTC är äldre än kompileringstid! Uppdatera");
RTC.adjust (DateTime (__DATE__, __TIME__));
}

Ställ in pinkodsskydd lägen
pinMode (connectedON, produktionen);
pinMode (connectedOFF, produktionen);
pinMode (pumpRelay, produktionen);

Ställ in alarm
Alarm.timerRepeat (30, sync);
Alarm.timerRepeat (1, checkRelay);

Sync();

Serial.println ("Setup komplett");
}

void loop() {
Alarm.Delay(1000);
}

void sync() {
Serial.println("syncing");
GAE (webapp + "adacs/synk? State = "+ pumpState);
Serial.println();
}

void checkRelay() {
DateTime nu = RTC.now();
Nuvarande = now.unixtime();

om (current_mode == "Växla") {
om (nuvarande < växla) {

} annat {
Bestämma vilka tillstånd att växla till
om (pumpState == "off") {
Pumpen var avstängd. Aktivera och ställa in nästa växla tid baserat på körning
digitalWrite (pumpRelay, låg);

Serial.println ("vrida pumpen");

pumpState = "on";

Uppsättning nästa växla tid
framtida = now.unixtime() + pumpRunTime;
Toggle = now.unixtime() + pumpRunTime;
} else om (pumpState == "på") {
Pumpen var på. Stänga av och sätta nästa växla tid baserat på ledig tid
digitalWrite (pumpRelay, hög);

Serial.println ("stänga pumpen");

pumpState = "off";

Uppsättning nästa växla tid
framtida = now.unixtime() + pumpIdleTime;
Toggle = now.unixtime() + pumpIdleTime;

}

displayTime();
}
}
}

void displayTime() {
DateTime nu = RTC.now();
Nuvarande = now.unixtime();

Visa aktuell tid
Serial.Print ("aktuell tid:");
Serial.Print(Now.Year(), DEC);
Serial.Print('/');
Serial.Print(Now.month(), DEC);
Serial.Print('/');
Serial.Print(Now.Day(), DEC);
Serial.Print(' ');
Serial.Print(Now.Hour(), DEC);
Serial.Print(':');
Serial.Print(Now.Minute(), DEC);
Serial.Print(':');
Serial.Print(Now.Second(), DEC);
Serial.println();

Nästa växla tid
Serial.Print ("framtid tid:");
Serial.Print(Future.Year(), DEC);
Serial.Print('/');
Serial.Print(Future.month(), DEC);
Serial.Print('/');
Serial.Print(Future.Day(), DEC);
Serial.Print(' ');
Serial.Print(Future.Hour(), DEC);
Serial.Print(':');
Serial.Print(Future.Minute(), DEC);
Serial.Print(':');
Serial.Print(Future.Second(), DEC);
Serial.println();
}

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); Dev-läge

om (c == '\n' & & currentLineIsBlank) {
While(client.Connected()) {
char f = client.read();
readString += f;
}
}

om (c == "\n") {
currentLineIsBlank = sant;
} else om (c! = '\r') {
currentLineIsBlank = false;
}
}
}

client.stop();

readString.toCharArray (newString, 100);

Det fullt JSON objektet
aJsonObject * jsonObject = aJson.parse(newString);

Få läget
aJsonObject-läge = aJson.getObjectItem (jsonObject, "Mode");
current_mode = läge -> valuestring; Konvertera läge till sträng och tilldela current_mode

Serial.println ("läge:" + current_mode);

Läget villkorligt
om (current_mode == "Alltid på") {
Aktivera pumpen
digitalWrite (pumpRelay, låg);

Uppdatera tillstånd
pumpState = "on";

} else om (current_mode == "Växla") {
Sync bearbetningstiden
aJsonObject * rt = aJson.getObjectItem (jsonObject, "RunTime");
String rString = rt -> valuestring;
pumpRunTime = rString.toInt();

Synkronisera väntetid
aJsonObject * det = aJson.getObjectItem (jsonObject, "Inaktivitet");
String iString = det -> valuestring;
pumpIdleTime = iString.toInt();

Valfri utgång
Serial.Print ("kör tid:");
Serial.Print(pumpRunTime);
Serial.println();
//
Serial.Print ("inaktiv tid:");
Serial.Print(pumpIdleTime);
Serial.println();

} else om (current_mode == "Manual") {
Sync staten
aJsonObject * st = aJson.getObjectItem (jsonObject, "Status");
pumpState = st -> valuestring;

om (pumpState == "på") {
digitalWrite (pumpRelay, låg);
} else om (pumpState == "off") {
digitalWrite (pumpRelay, hög);
} annat {
Serial.println ("okänd pump tillstånd i manuellt läge.");
}
} annat {
Serial.println ("Uknown läge hittas under sync.");
}
} annat {
Serial.println ("inte ansluten.");
}

Ta bort rotobjektet
aJson.deleteItem(jsonObject);
}

booleska httpRequest (sträng länk) {
Om det finns en anslutning
om (client.connect (server, 80)) {
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;
}
}

Se Steg
Relaterade Ämnen

Smart Pump Controller

Smart Pump Controller utformades för att hantera livet på pumpen och fylla vattentankar genom självständig operation förvaltas av en Arduino nano i centrum. Blue-tooth modulen möjliggör fjärrövervakning och kontroll av olika inställningar av pumpen....

Arduino powered Halloween pumpa med rörelsedetektor

Hejdetta Instructable visar dig hur man gör några Halloween dekorationer inklusive arduino powered Halloween pumpa med rörelsedetektor.Steg 1: Göra Halloween pumpa Material:Rund ballongGamla tidningarSmidig mjölVattenTemperaModellering leraSuperlimVe...

AMSC - Arduino Multimedia och Skype Controller

AMSC - Arduino Multimedia och Skype Controller* Tänk dig att du tittar på en film och, från ingenstans, någon ringer dig på Skype och därför får du destracted och du behöver spola tillbaka filmen koncentrera oss igen. Den sorten saker shouldn´t hända...

3 kanal arduino Powered Christmas Light Controller!

För julen i år, jag ville göra ett riktigt häftigt projekt men inte riktigt vet vad man ska göra. Som jag fick julen ljus ut att dekorera, var det en gammal trasig Christmas light timer. Jag tog isär och tittade på lågspänning kretsen. Innan detta ha...

PWM Arduino fläkt hastighet controller

enkelt dubbla kanaler PWM Arduino fan speed controller sköldDu kan hämta pcb ett sch (gjorda med expresspcb) från min hemsida (ladda ner avsnitt): http://www.apcc.tkSteg 1: Del förteckning Del förteckning:-3,5 cm x 6 cm single sided PCB-2st BD139 eff...

Sallad för livet - Arduino 101 baserad automatiserad Controller för Hydroponics, Aeroponics, kretsloppsodling, Etc. Intellekten Curie

SAMMANFATTNINGEn enhet som kan användas till att styra upp till 4 olika hydroponiska/Aeroponic system på en gång. Enheten kommer att styra komponenter i systemet och meddelande till en LCD-skärm och tillåter användaren att anpassa inställningar via B...

ARDUINO MPPT SOLAR CHARGE CONTROLLER (Version-3.0)

[ Spela upp Video]Välkommen till mina solar charge controller tutorials serien. Jag har postat två version av min PWM laddningsregulator. Om du är ny till detta vänligen se min tidigare tutorial för förstå grunderna i laddningsregulatorn.Detta är pro...

Använda en Arduino med en N64 controller

det finns tutorials ute för att använda en NES-kontrollant med en Arduino, men med mer komplicerade N64 controller och dess analog styrspak har en bestämd vädjan. Om du har en Arduino runt och vill inte köpa gör en Adaptoid, detta instructable det mö...

Arduino Lego EV3 motor controller spara $45

Genom att göra en diy lego ev3 motor controllerSteg 1: Intro Så jag har ett kit som heter lego mindstorms EV3 är det en häpnadsväckande $349 robotics kit som verkligen är enkel att bygga som lego men har verkligen awesome funktioner den kit funktione...

Arduino Windows och PS3 Controller

denna guide visar dig hur du sätter din Arduino Uno till en Windows/PS3-handkontrollen. Det är fullt konfigurerbara och du kan ändra indata/utdata till oavsett vilken knapp du vill använda. Detta innebär att du kan koppla en wii nunchuck den och leka...

EL Wire - Arduino Mini Pro - relä Controller modul 6 kanaler

Söka i andra Instructables jag hittade många sätt att styra EL Wire med arduino men inte alla var som jag ville, så jag beslöt att skapa min egen version, kanske är inte perfekt men fungerar.Denna EL Wire modul kontrollerar 10 mts EL tråd i två sekti...

Arduino Time-Lapse Panorama Controller

Panorama Controller för GoPro kamerorStyrenheten kommer att rotera din GoPro över en set vinkel för en uppsättning varaktighet eller roterar du GoPro för full rotation för en uppsättning varaktighet.Detta projekt bygger på ursprungliga instructable m...

Arduino termoelement Sous Vide Controller

detta projekt gör användningen av och bygger på de tidigare projekt. Efter att ha avslutat detta projekt, kan du använda en billig crock-pot som en precision kontrollerad temperatur Sous Vide spis.Uppgradering av detta projekt, jag lagt till en 0 - 5...

8 x 8 x 8 LED Cube med Arduino Mega (+ ljud + PS controller + spel)

detta är en instructable som bygger på kubenav Chr, (av SuperTech-IT, (och av das-labor.org, (http://www.das-labor.org/wiki/Borg3d_Bauanleitung...)men jag tror att dess bättre och lättare.Jag startade detta projekt utan någon färdigheter från lödning...

Arduino Aquaponics: EnvDAQ uppgradering med pH och löst syre

en komplimang vi ofta höra om Miljön Data förvärv sköldar (EnvDAQ) är införandet av ett prototyping område så att du kan anpassa styrelsen med andra sensorer som passar dina behov. Den mest önskade sensor suite vi tar emot (och ingår i den nya Kretsl...

DIY Arduino baserad MIDI fot Controller

Jag har velat prova en gitarr looper ett tag, men jag gillar inte idén att använda pengar på en looper specifika pedal när jag kan använda en dator för det och eftersom jag har fått lära arduino för kul var mycket meningsfullt att göra en en arduino...

Plugduino - baserade Arduino 120 Volt outlet controller

ge din Arduino en 120 volt spark i byxorna!Arduino är ett bra verktyg för alla som är intresserade av lärande microcontroller programmering, men efter blinkar några lysdioder, vad är nästa? Detta projekt kan din Arduino att kontroll verkliga 120 Volt...

Arduino VVS Servo termostat/Controller

Välkommen till mitt "gröna" instructable! Jag ska visa dig hur du använder en Arduino, två servo motorer en temperaturgivare och vissa metall (eller trä) för att göra en digital termostat för en genom väggen VVS enhet.Enligt CB Richard Ellis (et...

Arduino Aquaponics: Real-Time-klocka del I

AA grundläggande behovet av att alla kontroller system är möjligheten att spåra tid. Vi är medvetna, har Arduino tre metoder kan anställa:1. seriell. Upprepade gånger får tid över seriell anslutning.2. extern hårdvara. Realtids klockor, som ChronoDot...