Buitenverlichting automatiseren.

IDE gerelateerde berichten
Berichten: 2
Geregistreerd: 18 Sep 2017, 19:11

Buitenverlichting automatiseren.

Berichtdoor King Rich » 19 Sep 2017, 13:13

Goedemiddag forumleden.
Mijn naam is Richard en ben net begonnen met een Arduino project.
Deze code is geschreven door mijn zwager, en werkt naar behoren.
De verlichting kan ik nu ook aan/uit zetten met mijn smartphone en via de computer.

Nu zou ik graag hebben dat de verlichting om 24:00 automatisch uitschakelt en pas weer aangaat als de waarde van de lichtsterkte weer 400 is.
Hoe kan ik dit bereiken?

De Arduino hangt aan een netwerkswitch.

met vriendelijke groet,
Richard

Code: Alles selecteren



#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>

// pin 5 = bypass5

// pin 5 = relay voortuin
// pin 6 = relay carport

#include <SPI.h>

// Adresses MAC
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xF6, 0x27 };
IPAddress ip(192,168,178, 177);
EthernetServer server(80);
String readString;
bool webbypass = 0;
bool allesuit = 0;
bool bypass5 = false;
int Tuinvoorheen = 0;
long repeatgetal = 1;
int lichtsterktesetpoint = 400;
String LS = "";

void setup(void)
{
  Serial.begin(115200);
  pinMode(5, INPUT); // bypass5 voortuin verlichting
  pinMode(18, OUTPUT); // Relay voortuin verlichting
  pinMode(19, OUTPUT); // relay carport verlichting
  pinMode(16, OUTPUT); // relay carport verlichting
 
 
  Ethernet.begin(mac, ip);
 delay(1000);
 
 
}

void loop(void)
{
 // Create a client connection
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {   
      if (client.available()) {
        char c = client.read();
     
        //read char by char HTTP request
        if (readString.length() < 100) {
          //store characters to string
          readString += c;
          //Serial.print(c);
         }

         //if HTTP request has ended
         if (c == '\n') {         
           Serial.println(readString); //print to serial monitor for debuging
     
           client.println("HTTP/1.1 200 OK"); //send new page
           client.println("Content-Type: text/html");
           client.println();     
           client.println("<HTML>");
           client.println("<HEAD>");
           client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
           client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
           client.println("<link rel='stylesheet' type='text/css' href='http://randomnerdtutorials.com/ethernetcss.css' />");
           client.println("<TITLE>Home Automation</TITLE>");
           client.println("</HEAD>");
           client.println("<BODY>");
           client.println("<H1>Huitema Home Automation</H1>");
           client.println("<hr />");
           client.println("<br />"); 
           client.print("<H2>Light Control value:");
           client.print(analogRead(A3));
           client.println("</H2>");
           client.println("<br />"); 
           
           client.print("<H2>Current Control setpoint:");
           client.print(lichtsterktesetpoint);
           client.println("</H2>");
           client.println("<br />");
           
            client.println("<FORM ACTION='/' method=get >"); //uses IP/port of web page
            client.println("Light Setpoint: <INPUT TYPE=TEXT NAME='LS' VALUE='' SIZE='25' MAXLENGTH='4'><BR>");
            client.println("<INPUT TYPE=SUBMIT NAME='submit'>");
           client.println("</FORM>");
           client.println("<br />");
           client.println("<a href=\"/?A1\"\">Tuin Verlichting Aan</a>");
           client.println("<br />"); 
             client.println("<br />"); 
           client.println("<a href=\"/?C1\"\">Carport Verlichting Aan</a>");
           client.println("<a href=\"/?C0\"\">Carport Verlichting Uit</a><br />");   
            client.println("<br />"); 
             client.println("<br />"); 
            client.println("<a href=\"/?D0\"\">Alles Uit</a><br />");   
             client.println("<br />"); 
             client.println("<br />");
            client.println("<a href=\"/?D1\"\">opheffen</a><br />");   
             
           client.println("<br />");     
           client.println("<br />");
           
           client.println("<p>Created by Circlestone</p>"); 
           client.println("<br />");
           client.println("</BODY>");
           client.println("</HTML>");
     
           delay(1);
           //stopping client
           client.stop();
           //controls the Arduino if you press the buttons
           
           if (readString.indexOf("?A1") >0 ){
              Serial.println("Achtertuin en voortuin bypass aan");
              allesuit = 0;
              webbypass = 1;
                       
           }
          else{
          if (readString.indexOf("?C1") >0 ){
              Serial.println("Carport aan");
              allesuit = 0;
              carportaan(true);
                       
           }
           else{
           if (readString.indexOf("?C0") >0){
              Serial.println("Carport UIT");
               carportaan(false);
               }
           else{
           if (readString.indexOf("?D0") >0 ){
              Serial.println("Alles uit");
               webbypass = 0;
               allesuit = 1;
               
           }
           else{
           if (readString.indexOf("?D1") >0 ){
              Serial.println("Alles uit opgehefen");
               webbypass = 0;
               allesuit = 0;           
           }
           else{
           
           if (readString.indexOf("?LS=") >0 ){
             
              Serial.print("ONTVANGEN:");
              Serial.println(readString);
              LS= readString.substring(9,12);
              lichtsterktesetpoint=LS.toInt();
             
             
           }}}}}}
            //clearing string for next read
            readString=""; 
           
         }
       }
    }
}


bypass5 = digitalRead(5);
if (bypass5 == 0){  // bypass uitgeschakeld0
 // Serial.println("bypass uit");

if (allesuit == 1){
  Serial.println("alles uit loop ingeschakeld");
  carportaan(false);
  delay(10);
  achtertuinlampen(false);
  delay(10);
  voortuinlampen(false);
 
}
if (analogRead(A3)>lichtsterktesetpoint){
  allesuit=0;
 
}

if (allesuit == 0){
  if (webbypass == 1) {
     voortuinlampen(true); // voortuin inschakelen
      achtertuinlampen(true); // achtertuin inschakelen
  }
  if (webbypass == 0) {
  aansturingoplicht(); // achtertuin en voortuin lampen worden gestuurd op de lichtsterkte
  }
}
}
if (bypass5 == 1){  // bypass ingeschakeld
  Serial.println("Bypass aan");
  voortuinlampen(true); // voortuin inschakelen
  achtertuinlampen(true); // achtertuin inschakelen
}



}
//----------------------------------------------------------------------------   
void aansturingoplicht()
{
int Lichtsterkte = 0;
  bool Tuin = false;

  delay(10000);
  Lichtsterkte = analogRead(A3);
//Serial.println(Lichtsterkte);
 if (Lichtsterkte < lichtsterktesetpoint){
    Tuin = true;
    voortuinlampen(true);
    achtertuinlampen(true);
    }
else
    {
    Tuin = false;
    voortuinlampen(false);
        achtertuinlampen(false);
    }}
//----------------------------------------------------------------------------
void achtertuinlampen(bool data)
{
  if( data == true) { // achtertuinlamp moet AAN
  //Serial.println (" achtertuin lampen aan");
   digitalWrite(16, LOW);
 
}

if (data == false) {// achtertuinlamp moet UIT
  //Serial.println (" achtertuin lampen uit");
   digitalWrite(16, HIGH);
 

}
}
//----------------------------------------------------------------------------
void voortuinlampen(bool data)
{
  if (data == true){ // voortuinlamp moet aan
   //Serial.println(" Voortuin lampen aan");
   digitalWrite(18, LOW);
  }
  if (data == false){ // voortuinlamp moet aan
   //Serial.println(" Voortuin lampen uit");
   digitalWrite(18, HIGH);
  }
 
}
//----------------------------------------------------------------------------

void carportaan(bool data)
{
 
  if (data == true){ // voortuinlamp moet aan
     digitalWrite(19, LOW);
  }
  if (data == false){ // voortuinlamp moet aan
   digitalWrite(19, HIGH);
  }
}
 
 


Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Buitenverlichting automatiseren.

Berichtdoor Koepel » 19 Sep 2017, 16:13

Is het een Arduino Uno met Ethernet Shield ? Dan zal er nog maar weinig code bij kunnen.

Om te weten hoe laat het is, kun je een RTC module toevoegen.
Wanneer je dat gaat doen, gebruik dan een DS3231 module.

Je kunt de tijd ook opvragen op internet.
Via internet kun je bij een NTP server de tijd opvragen met een UDP pakket. Dat kan met de gewone Ethernet library. Je kunt dat bijvoorbeeld elk uur doen om tijd goed in sync te houden.
Dan heb je ook een library voor de tijd nodig. De meest bekende zijn de TimeLib (Paul Stoffregen), maar er is ook de RTClib (Adafruit).
Als NTP server gebruik ik een IP die door XS4ALL wordt onderhouden en behoort bij europe.pool.ntp.org.

Het aanzetten boven een bepaalde lichtsterkte kan volgens mij gewoon toegevoegd worden. Ik begrijp nog niet wat de if-statements doen met bypass en allesuit en zo.

Om code toe te voegen, lijkt het me beter om eerst deze code netter te maken.
Maak variabelen van de pin nummers, zet alle haakjes, spaties, lege regels, komma's, en inspringen goed.
Wil je meer met internet doen, dan is het misschien nodig om te kijken naar vastgelopen sockets. Kijk bijvoorbeeld hier https://playground.arduino.cc/Code/WebServerST naar de functie "checkSockStatus()".

Berichten: 2
Geregistreerd: 18 Sep 2017, 19:11

Re: Buitenverlichting automatiseren.

Berichtdoor King Rich » 19 Sep 2017, 16:25

Koepel schreef:Is het een Arduino Uno met Ethernet Shield ? Ik begrijp nog niet wat de if-statements doen met bypass en allesuit en zo.

Om code toe te voegen, lijkt het me beter om eerst deze code netter te maken.
Maak variabelen van de pin nummers, zet alle haakjes, spaties, lege regels, komma's, en inspringen goed.
Wil je meer met internet doen, dan is het misschien nodig om te kijken naar vastgelopen sockets. Kijk bijvoorbeeld hier https://playground.arduino.cc/Code/WebServerST naar de functie "checkSockStatus()".


Het is inderdaad een Arduino Uno met Ethernet Shield.
Bypass is om ervoor te zorgen dat ik de lampen aan kan zetten bij meer licht (lees overdag) om het gras te kunnen maaien want er zit een wcd op 1 van de lampen.
Alles uit doe ik nu omdat ik niet de gehele nacht de verlichting wil hebben aanstaan.

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten