Arduino Aquaponics: JSON pomp Controller (2 / 3 stap)

Stap 2: Arduino Sketch

De Arduino schets gemaakt twee TimerAlarms.  De eerste controleert de estafette op een tweede intervallen en wordt gebruikt voor Toggle Mode.  Het tweede alarm roept de sync-functie op 30 tweede intervallen.

Het parseren functie ziet er voor het einde van de reactie aangeeft, wordt een aJson-object gemaakt en dan krijgt de modus.  Afhankelijk van de waarde van modus, drie dingen gebeurt.  De eerste modus is Altijd op, zodat de relay is ingeschakeld.  Als u gebruikt de knevel, worden het uitvoeren en niet-actieve keer gesynchroniseerd.  Ten slotte gaat handleiding gepaard met de status die u wilt dat de pomp in.

#include < SPI.h >
#include < Ethernet.h > / / Ethernet Shield
#include < aJSON.h > / / ontleden van JSON.  Credit: Interactieve zaak
#include < Wire.h >
#include "RTClib.h" / / ChronoDot.  Credit: Adafruit Industries
#include < Time.h >
#include < TimeAlarms.h >

RTC - ChronoDot
RTC_DS1307 RTC;

DateTime toekomst;
niet-ondertekende lange knevel;
niet-ondertekende lange stroom;

Ethernet-Shield
byte mac [] = {0x90, 0xA2, 0xD0, 0x0D, 0xA0, 0x00};
byte myIP [] = {192, 168, 1, 15};                    Uncomment hier en lijn 52 indien nodig.
byte gateway [] = {192, 168, 1, 1};

char [server] = "http://www. myapsystem. appspot.com ";              Veranderen zodat deze overeenkomen met de id van de toepassing dat u setup in stap 3
EthernetClient de klant;

Maakt het gemakkelijk om app namen wijzigen
Webapp string = "http://www. myapsystem.appspot.com/ ";"        Veranderen zodat deze overeenkomen met de id van de toepassing dat u setup in stap 3

Pinnen
int connectedON = 8;
int connectedOFF = 9;
int pumpRelay = 23;

PumpRelay waarden
Current_mode koord = "Manual";  De standaardmodus
PumpState koord = "off";        De standaardstatus
int pumpRunTime = 20;            Lopen voor 20 seconden
int pumpIdleTime = 40;           Gedurende 40 seconden stationair Sit

VOID Setup {}
Beurt relais eerst uitzetten
digitalWrite (pumpRelay, hoge);

SD-kaart uitschakelen als men in de sleuf
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);

Start Serial
Serial.begin(9600);
delay(1000);

Start Ethernet
Ethernet.begin(Mac);
Ethernet.begin (mac, myIP);
Ethernet.begin (mac, myIP, gateway);
delay(1000);

Start RTC
Wire.begin();
RTC.begin();

if (!. RTC.isrunning()) {}
Serial.println ("RTC is NOT running");
}

DateTime nu = RTC.now();
DateTime gecompileerd = DateTime (__DATE__, __TIME__);
Als (now.unixtime() < compiled.unixtime()) {}
Serial.println ("RTC is ouder dan compilatietijd! Bijwerken");
RTC.adjust (DateTime (__DATE__, __TIME__));
}

Set pin modi
pinMode (connectedON, OUTPUT);
pinMode (connectedOFF, OUTPUT);
pinMode (pumpRelay, OUTPUT);

Ingestelde alarmen
Alarm.timerRepeat (30, sync);
Alarm.timerRepeat (1, checkRelay);

Sync();

Serial.println ('Setup voltooid');
}

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

ongeldig sync() {}
Serial.println("syncing");
GAE (webapp + "adacs/sync? Staat = "+ pumpState);
Serial.println();
}

ongeldig checkRelay() {}
DateTime nu = RTC.now();
huidige = now.unixtime();

Als (current_mode == "Wissel") {}
Als (huidige </uitschakelen) {}

} else {}
Bepalen welke staat om te schakelen naar
Als (pumpState == "vandoor") {}
De pomp was uitgeschakeld.  Inschakelen en instellen van volgende knevel tijd gebaseerd op de bewerkingstijd
digitalWrite (pumpRelay, laag);

Serial.println ("draaien pomp op");

pumpState = "on";

Set/uitschakelen zodra
toekomstige = now.unixtime() + pumpRunTime;
Toggle = now.unixtime() + pumpRunTime;
} else if (pumpState == "on") {}
De pomp was op.  Uitschakelen en volgende knevel tijd op basis van tijdsduur instellen
digitalWrite (pumpRelay, hoge);

Serial.println ("uitschakelen pomp");

pumpState = "off";

Set/uitschakelen zodra
toekomstige = now.unixtime() + pumpIdleTime;
Toggle = now.unixtime() + pumpIdleTime;

}

displayTime();
}
}
}

ongeldig displayTime() {}
DateTime nu = RTC.now();
huidige = now.unixtime();

Huidige tijd weergeven
Serial.Print ("huidige tijd:");
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();

Weergeven/uitschakelen zodra
Serial.Print ("tijd van de toekomst:");
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) {}
succes van Boole = httpRequest(link);
Als (succes == true) {}
delay(5000);

Boole currentLineIsBlank = waar;

ReadString koord = "";
char newString [100];

terwijl (client.connected()) {}
Als (client.available()) {}
char c = client.read();
Serial.write(c);        Dev-modus

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

Als (c == '\n') {}
currentLineIsBlank = true;
} else if (c! = '\r') {}
currentLineIsBlank = false;
}
}
}

client.stop();

readString.toCharArray (newString, 100);

Het volledige JSON-object
aJsonObject * jsonObject = aJson.parse(newString);

Krijg de wijze
aJsonObject-modus = aJson.getObjectItem (jsonObject, 'Modus');
current_mode = mode -> valuestring;    Modus converteren naar tekenreeks en toewijzen aan current_mode

Serial.println ("modus:" + current_mode);

Modus voorwaardelijke
Als (current_mode == "Always On") {}
De pomp inschakelen
digitalWrite (pumpRelay, laag);

Status bijwerken
pumpState = "on";

} else if (current_mode == "Wissel") {}
Sync de bewerkingstijd
aJsonObject * rt = aJson.getObjectItem (jsonObject, "RunTime");
String rString rt = -> valuestring;
pumpRunTime = rString.toInt();

De idle time sync
aJsonObject * het = aJson.getObjectItem (jsonObject, "IdleTime");
IString koord = it -> valuestring;
pumpIdleTime = iString.toInt();

Optionele uitvoer
Serial.Print ("runtime:");
Serial.Print(pumpRunTime);
Serial.println();
//
Serial.Print ("Idle Time:");
Serial.Print(pumpIdleTime);
Serial.println();

} else if (current_mode == "Manual") {}
Synchroniseren van de staat
aJsonObject * st = aJson.getObjectItem (jsonObject, "Status");
pumpState = st -> valuestring;

Als (pumpState == "on") {}
digitalWrite (pumpRelay, laag);
} else if (pumpState == "vandoor") {}
digitalWrite (pumpRelay, hoge);
} else {}
Serial.println ("onbekende pomp staat gegeven in de handmatige modus.");
}
} else {}
Serial.println ("Uknown modus gedetecteerd tijdens de synchronisatie.");
}
} else {}
Serial.println ("niet aangesloten");
}

Verwijderen van het hoofdobject
aJson.deleteItem(jsonObject);
}

Booleaanse httpRequest (de verwijzing van de tekenreeks) {}
Als er een succesvolle verbinding
Als (client.connect (server, 80)) {}
client.println ("GET" + link + "HTTP/1.0");
client.println();

Aangesloten LED inschakelen
digitalWrite (connectedOFF, laag);
digitalWrite (connectedON, hoge);

return true;
} else {}
U kon het niet maken van de verbinding
Serial.println ("verbinding mislukt");
fouten += 1;
client.stop();

Aangesloten LED inschakelen
digitalWrite (connectedON, laag);
digitalWrite (connectedOFF, hoge);

return false;
}
}

Gerelateerde Artikelen

ARDUINO MPPT SOLAR CHARGE CONTROLLER (Version-3.0)

ARDUINO MPPT SOLAR CHARGE CONTROLLER (Version-3.0)

Welkom bij mijn solar charge controller tutorials serie. Ik heb twee versie van mijn PWM heffing controller gepost. Als je nieuw bent aan zulks wees zo goed verwijzen mijn eerdere tutorial voor het begrijpen van de basisprincipes van heffing controll
AMSC - Arduino Multimedia en Skype Controller

AMSC - Arduino Multimedia en Skype Controller

AMSC - Arduino Multimedia en Skype ControllerStel jezelf een film kijken en, uit het niets, iemand roept u op Skype en daardoor krijg je destracted en u wilt terugspoelen van de film me weer concentreren. Dat soort dingen shouldn´t gebeuren. That´s d
Arduino Windows en PS3-Controller

Arduino Windows en PS3-Controller

deze gids zal u tonen hoe om te zetten uw Arduino Uno in een Windows/PS3-controller. Het is volledig configureerbaar en kunt u de input/output welke knop die u wilt wijzigen. Dit betekent dat u kunt aansluiten van een wii nunchuck tot het en spelen r
Arduino Aquaponics: EnvDAQ Upgrade met de pH en de opgeloste zuurstof

Arduino Aquaponics: EnvDAQ Upgrade met de pH en de opgeloste zuurstof

een compliment we vaak over Milieu Data acquisitie Shields (EnvDAQ horen) is de opneming van een prototyping-omgeving zodat u het bord met andere sensoren aan uw behoeften kunt aanpassen.  De meest gevraagde sensor suite we ontvangen (en is opgenomen
Arduino Aquaponics: Real-tijd-klok deel I

Arduino Aquaponics: Real-tijd-klok deel I

AA fundamentele noodzaak van een systeem van controles is de mogelijkheid om de tijd bijhouden.  Voor zover wij weten, heeft de Arduino drie methoden die het kunt gebruiken:1. seriële.  Herhaaldelijk de tijd te krijgen via de seriële verbinding.2. ex
Gebruik van een Arduino met een N64-controller

Gebruik van een Arduino met een N64-controller

er zijn tutorials die er voor het gebruik van een NES-controller met een Arduino, maar met behulp van de meer gecompliceerde N64-controller en de analoge joystick heeft een duidelijke aantrekkingskracht. Als u een Arduino rond hebt en wil niet te kop
Arduino Time-Lapse Panorama Controller

Arduino Time-Lapse Panorama Controller

Panorama Controller voor GoPro camera 'sDe controller zal uw GoPro draaien over een bepaalde hoek voor een reeks duur of je GoPro voor een volledige rotatie voor een reeks duur zal draaien.Dit project is gebaseerd op de oorspronkelijke instructable d
8 x 8 x 8 LED kubus met Arduino Mega (+ geluid + PS controller + Game)

8 x 8 x 8 LED kubus met Arduino Mega (+ geluid + PS controller + Game)

dit is een instructable die is gebaseerd op de kubusdoor Chr, (door SuperTech-IT, (en door das-labor.org, (http://www.das-labor.org/wiki/Borg3d_Bauanleitung...)maar ik denk dat haar beter en gemakkelijker.Ik begon dit Project zonder enige vaardighede
Arduino thermokoppel Sous Vide Controller

Arduino thermokoppel Sous Vide Controller

dit project maakt gebruik van en bouwt voort op de eerdere projecten.  Na de voltooiing van dit project, kunt u een goedkope crock-pot als een precisie temperatuurgestuurde Sous Vide fornuis.Upgraden van dit project, ik heb een 0 - 5vdc deelvenster m
Arduino verstelbare thermokoppel gebaseerde Controller met relais

Arduino verstelbare thermokoppel gebaseerde Controller met relais

ik heb onlangs een Arduino Controller voor instelbare Timer gemaakt met Relay project om te controleren mijn millivolt (thermozuil) gas veranda kachel.  De foto's in dat project worden gebruikt, alsmede de foto's in dit project, gebruikt zijn dat dez
Arduino RGB LED Strip Controller

Arduino RGB LED Strip Controller

Ik was nieuwsgierig over het gebruik van RGB LED-Strip, dus ik heb er een en besloot te doen een beetje controller om te zien wat ik kan doen met hetâ €¦ zo hier het is.Hebt u vragen, opmerkingen, opbouwende kritiek... Aarzel niet om te schrijven :)A
DIY Arduino gebaseerde MIDI Foot Controller

DIY Arduino gebaseerde MIDI Foot Controller

Ik heb al willen proberen een gitaar looper voor een tijdje, maar ik houd niet van het idee van geld op een specifieke pedaal van looper gebruikten wanneer ik een computer gebruiken kan voor dat en sinds ik heb het leren van arduino voor de lol perfe
EL Wire - Arduino Mini Pro - Relais Controller Module 6 kanalen

EL Wire - Arduino Mini Pro - Relais Controller Module 6 kanalen

Zoeken in andere Instructables vond ik vele manieren om controle EL Wire met arduino, maar niet allemaal waren zoals ik wilde, dus heb ik besloten om mijn eigen versie, misschien is niet perfect maar werkt.Deze EL Wire Module 10 mts van EL Wire in tw
Arduino HVAC Servo thermostaat/Controller

Arduino HVAC Servo thermostaat/Controller

Welkom bij mijn 'groene' instructable! Ik ga u tonen hoe te gebruiken een Arduino, twee servo motoren een temperatuursensor en sommige metalen (of hout) zodat een digitale thermostaat voor een via-muur HVAC eenheid.Volgens de CB Richard Ellis (een gr