Go Down

Topic: automatiseren generator (Read 5 times) previous topic - next topic

rikky

Jan 06, 2013, 05:14 pm Last Edit: Jan 06, 2013, 05:29 pm by Jantje Reason: 1
Hallo,
Ik ben bezig een generator te automatiseren, dat is een heel verhaal, en ik ben er nog niet helemaal uit.

De bedoeling is, dat als je op het knopje drukt, dan start de generator. nog een keer knopje, generator is weer uit.
(trekmagneet aan = brandstofpomp open, startmotor aan, als moter loopt, dan startmotor weer uit, anders, na een 10 seconden de startmotor toch af, anders gaat ie stuk.)
Een prototype van dit idee is inmiddels werkend.

Maar nu komen er allemaal vervolgproblemen.
Ik wil er 1 noemen.
-Dan kom ik thuis, en dan staat de Generator opeens aan, en dan denk ik, hè, ik had 'm toch niet aangezet?
Dit kwam pas vanaf het 2e knopje 40 meter verder, in de stuurhut. (Boot)
-Nog later kwam ik erachter.
Er liggen zoveel kabels, dat er interferentie is.
Als ik de omvormer af zet, dan start de generator, terwijl het toch echt compleet van mekaar gescheiden lijkt. (misschien alleen de aarde van de omvormer, en de massa van de generator (én Arduino)

Dus, is er nu een LAN draad, en dan komt daar een 2e Arduino op, met een knopje, problem solved.

Maar hoe zorg ik nu, in een website, die de Arduino stuurt, dat de waarde van de sensors (oliedruk/temperatuur, volts van de batterijen) elke 5 seconden zich verversen, terwijl het knopje (evt. meerdere) niet ververst wordt, want dat is irritant.

Een proef-sketsch:
Code: [Select]

[i]#include <SPI.h>
#include <Ethernet.h>

//Arduino Uno and Ethernetshield.
//Pin 4, 10, 11, 12, 13 in use by Arduino.
//Scetch makes Webpage with Radiobuttons to swich each Pin on/off.

byte mac[] = {
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };   //physical mac address
byte ip[] = {
 192, 168, 0, 90 };   // static ip of Arduino for Dlink
byte gateway[] = {
 192, 168, 0, 1 };  // gateway address
byte subnet[] = {
 255, 255, 255, 0 };  //subnet mask
EthernetServer server(80);   //web server port
String HttpHeader = String(32);

int myPins[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

void setup(){

 //start Ethernet
 Ethernet.begin(mac, ip, gateway, subnet);
  //initialize variable
 HttpHeader="";
 
 for (int i=5; i < 10; i++){
      pinMode(i, OUTPUT);
      digitalWrite(i,LOW);
  }
}

void loop(){  
 
 // Create a client connection
 EthernetClient client = server.available();
 if (client) {
 
   while (client.connected()) {
     if (client.available()) {
        char C = client.read();        
       
          //store characters to string
          HttpHeader = HttpHeader+C;
         
       for (int i=5; i < 10; i++){
       if (C == i+48) { C = client.read();HttpHeader = HttpHeader+C;  C = client.read(); myPins[i] = C-48; HttpHeader = HttpHeader+C;}    
       }        
         
          //if HTTP request has ended
        if (C == '\n') {          
         
         // start of web page  
         char myChar = 34; // appeltroffies doorsturen.
         // client.println("HTTP/1.1 200 OK");
         // client.println("Content-Type: text/html");
       
         client.print("<html><head>");
         client.print("<meta http-equiv=");
         client.print(myChar);
         client.print("refresh");
         client.print(myChar);
         client.print("content=");
         client.print(myChar);
         client.print("5");
         client.print(myChar);
         client.print("></head><body>");
          client.print("<br>");
          client.println("arduino");
          client.print("<br>");
          client.print("<br>");
          client.print("Sensor A0 ");
          client.println(analogRead(A0));
          client.print("<br>");
          client.print("Sensor A1 ");
          client.println(analogRead(A1));
          client.print("<br>");
          client.print("<br>");
         
          //client.println(HttpHeader);
          //client.print("<br>");
                       
           for (int i=5; i < 10; i++){
             if (myPins[i] == 0) {digitalWrite(i,LOW); }
             else {digitalWrite(i,HIGH);}
          //client.print("Pin ");client.println(i);client.print(" = ");client.print(myPins[i]);
        }
                   
          //client.print("<br>");
          //client.print("<br>");
           
          client.print("<form method=get>");
         
          for (int i=5; i < 10; i++){
             client.print("Pin ");client.print(i);
             client.print("<input type='radio' name=");
             client.print(i);client.print(" value='1' ");
             if (myPins[i]== 1) {client.print("checked=true ");}
             client.print("> aan");
             client.print("<input type='radio' name=");
             client.print(i);client.print(" value='0' ");          
             if (myPins[i]== 0) {client.print("checked=true ");}
             client.print("> uit<br>");              
             }        
         
          client.print("<br>");
          client.print("<br>");
         
          client.print("<input type=submit value=submit></form>");          
          client.print("</body></html>");
         
          //clearing string for next read
          HttpHeader="";
          //stopping client
           client.stop();
        }
      }
    }
  }
}
[/i]

Het gaat er dus om, dat de sensor info wel wordt ververst, maar de drukknoppen  niet.

Hoe?

robtillaart

je mist de index van de pins denk ik...
Code: [Select]

or (int i=5; i < 10; i++)
{
  client.print("Pin ");
  client.print(i);
  client.print("<input type='radio' name=");
  client.print(i);
  client.print(" value='1' ");
  if (myPins[i]== 1)      // <<<<<<<<<<<<<<< hier en
  {
    client.print("checked=true ");
  }
  client.print("> aan");
  client.print("<input type='radio' name=");
  client.print(i);client.print(" value='0' ");         
  if (myPins[i]== 0)  // <<<<<<<<<<<<<<<<<<<<<<<<<<<<< hier
  {
    client.print("checked=true ");
  }
  client.print("> uit<br>");               
}         


gebruik aub de # knop om code tags te krijgen, maakt de code wat leesbaarder, ook een statement per regel en de layout is leesbaarder
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

rikky

je mist de index van de pins denk ik...
Dat ook, maar dat is een ander onderwerp, ik moet nog een hoop studeren.
Het is niet het punt, op dit moment van belang.

Hoe krijg ik mijn meetwaarden ververst, zonder dat mijn knoppen zich verversen, in een Arduino-website.

Het aan-knopje, als je dat op uit zet, en je denkt er nog eens over, dan heeft ie zich alweer ververst, terug op aan, tegen dat ie de meetwaarden, na 5 seconden, weer ververst.

Stom probleem misschien, maar voor mij van belang.

robtillaart

Quote
Hoe krijg ik mijn meetwaarden ververst, zonder dat mijn knoppen zich verversen, in een Arduino-website.


denk dat de Arduino niet so sophisticated is dat je webpagina's voor een deel kunt updaten (gelijk AJAX e.d.)
Het is m.i. een alles of niets verhaal en dus moet je de status van knoppen en de rest tegelijk opnieuw refreshen.

Het beste wat je kunt doen is een aantal variabelen maken (bv in een struct) die alle informatie van het systeem reflecteren (MODEL)
Als de webpagina zich refreshed dan leest het alle waarden uit het MODEL.
Als een radio button wordt ingedrukt wordt de waarde in het MODEL aangepast. (+ reload van webpagina)

Ondertussen kan op de achtergrond de waarden van de sensoren uitgelezen worden en in het MODEL geupdate.
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Jantje


Quote
Hoe krijg ik mijn meetwaarden ververst, zonder dat mijn knoppen zich verversen, in een Arduino-website.


denk dat de Arduino niet so sophisticated is dat je webpagina's voor een deel kunt updaten (gelijk AJAX e.d.)
Het is m.i. een alles of niets verhaal en dus moet je de status van knoppen en de rest tegelijk opnieuw refreshen.

Het is wel degelijk mogelijk maar je moet alles zelf doen (Het is me ooit gelukt maar dan was het weer stuk  :~). Daar de Arduino niet zo goed is met strings is het dikwijls beter om alles op te vragen dan stuk voor stuk. Dat gaat sneller.
Voor men huidig project heb ik besloten om de web trafiek van men Arduino af te halen en op een router te draaien.

Ikzelf begrijp je probleem niet zo goed 
Quote
Hoe krijg ik mijn meetwaarden ververst, zonder dat mijn knoppen zich verversen, in een Arduino-website.

Met vriendelijke groet.
Jantje
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Go Up