Pages: [1] 2 3   Go Down
Author Topic: automatiseren generator  (Read 5769 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
[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?
« Last Edit: January 06, 2013, 11:29:21 am by Jantje » Logged

Global Moderator
Netherlands
Online Online
Shannon Member
*****
Karma: 227
Posts: 14035
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je mist de index van de pins denk ik...
Code:
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
Logged

Rob Tillaart

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

Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Global Moderator
Netherlands
Online Online
Shannon Member
*****
Karma: 227
Posts: 14035
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Rob Tillaart

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

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1926
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-confuse). 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
Logged

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 -

Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ikzelf begrijp je probleem niet zo goed 

Nou ja,
Het is natuurlijk wel zo fijn, als je oliedrukmetertje enzo beweegt op je website.
Het is tenslotte om te monitoren.
Later kan daar dan de beveiliging op. (oliedruk te laag = motor af, temperatuur te hoog = motor af.)
En het is tegelijk lullig, als je start/stop-knopje zich reset, als je 'm aangeklikt hebt, maar nog niet op transmit gedrukt hebt.
Het is dus eigenlijk een HTML probleem.

Ofwel, moet ik een website, waarin zich 2 delen bevinden, waarvan de ene zich continu ververst, en de andere niet.
(meta http-equiv=refresh werkt echter op de gehele site, voorzover ik weet.)
Ofwel, moet er een manier zijn om als je een radiobutton aantypt, die informatie zich dan meteen transmit, dat zou ook een oplossing zijn.

Ik ben nog niet zo ervaren, dat ik snap wat er met model en struct bedoeld wordt.
Helaas.

Natuurlijk is het allemaal nog niet zo belangrijk.
Gewoon een knopje op de 2e arduino, en klaar.
Maar als dat met die website lukt, dan komen er natuurlijk ook andere dingen, zoals de navigatieverlichting, etc.
Logged

The Netherlands
Offline Offline
Edison Member
*
Karma: 51
Posts: 1729
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ik heb echt geen idee over een webpagina maken (al dan niet met Arduino).
Maar ik vraag me dan af of die hele transmit knop dan wel noodzakelijk is.
Kun je meerdere zaken bedienen voor je het echt gaat uitvoeren, en is dat dan zo ook nodig ?
Logged

Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja dat is echt nodig.

Stel je voor dat je in een auto rijd, vanaf het internet, en er steekt iemand over.
Dan klik je op remmen, maar dan blijft de auto gewoon doorrijden, totdat je ook op submit gedrukt hebt.
Dat is irritant.
Bovendien staat de snelheidsmeter dan nog steeds op een waarde van tig minuten geleden.

Of, je ververst de snelheidsmeter elke 5 seconden, maar dan, als je op remmen klikt, is je knopje weer terugververst, naar doorrijden, tegen de tijd dat je de submitknop hebt aangeraakt.
Dat is nog veel irritanter.

Een knopje op een website, die meteen tot actie overgaat, als je er op drukt, zou al genoeg zijn.

Dus remmen = onmiddelijk remmen.
Niet eerst wachten op bevestiging door SUBMIT.
Terwijl de snelheidsmeter de actuele snelheid aangeeft.

Logged

Forum Moderator
Hamme, Belgium
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 390
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi Ricky

check mijn project eens: http://www.jo3ri.be/arduino/projects/tank-level-measuring-basic

vooral deze screenshot:


De groene letters worden elke seconde geupdate, maar de rest van de pagina niet.

en in deze screenshot wordt het niveau van de vaten geupdate en ook de % waarde, maar ook de rest van de pagina niet.


Dus: ja het kan zeker en vast. De truk ligt niet bij Arduino, maar bij HTML, je moet gebruik maken van iframes. Je maakt eigenlijk een aparte pagina met enkel de waardes (of tekeningen) die je laat verversen elke seconde (of 5 seconden) en deze pagina zet je in een iframe in je hoofdpagina.

Wat ook kan is dat je van elke knop een submit knop maakt met een waarde aan de knop zelf bv 1, in je code zelf kan je dan makkelijk een waarde van een variabel laten wisselen iedere keer als de knop wordt ingedrukt.

Succes.
« Last Edit: January 07, 2013, 06:38:01 am by JO3RI » Logged


Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

YESS!!
Thank you,
Ik ga dat vanavond bestuderen.

btw, nu je het toch over tanklevel sensors hebben,
bestaan die dingen ook oliebestendig?
Dat iemand weet.
Logged

Forum Moderator
Hamme, Belgium
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 390
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mijn systeem hangt in een vat met diesel en komt NIET in contact met de diesel en werkt. Dus als je dit systeem gebruikt en de sensor niet in contact komt met de olie, zou het ook moeten lukken.

Het is eigenlijk een afstandsmeter die het niveau meet van boven uit.
Logged


Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 68
Posts: 1926
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ik gebruik active x voor de updates en ik gebruik geen ethernet shield.
Op de pagina worden enkel de waarden veranderd. de icoontjes zeggen of je de waarde kan veranderen of je de waarde kan saven in de eeprom.
Ik ben nog volop aan het testen maar het werk al behoorlijk  smiley-grin

Met vriendelijke groet
Jantje
Logged

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 -

Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nou, die sensor voor de tank is dan iets voor later, want droog hou ik die never en de nooit niet, als je bedenkt hoe snel die diesel erin getankt wordt.

Maar, nu dacht ik 'eventjes' dat programma van jo3ri te bekijken.

Dat begint al weer mooi met een aantal missing libraries.

Ik mis <avr/pgmspace.h>
Na wat zoeken blijkt dat in de Progmem librarie te zitten.
Op de Arduinosite vind ik dit : http://arduino.cc/en/Reference/PROGMEM
En dat verwijst weer door naar dat : http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html
En daar kom ik niet veel wijs uit, behalve dan dat ze me voorstellen zelf een librarie te compileren.

Als ik moet kiezen tussen daar zelf een librarie van te moeten maken, of een pistool tegen m'n hoofd te zetten, en te schieten, dan moet ik zeggen, dat ik nog niet zo goed weet wat ik dan kies.

Niet getreurd, er is nog een missing librarie.
<SoftwareSerial.h>

Gevonden, op Github : https://github.com/arduino/Arduino/tree/master/libraries/SoftwareSerial

Alleen kan je daarvan niet downloaden, en moet ik elk filetje apart, openen, alles selecteren, knippen, in een textfiletje plakken, en dan in de libraries map zetten.
Fijn is dat.
Gelukkig is het niet zo'n grote librarie.

De about-pagina van Github meldt:
Quote
GitHub is the best place to share code with friends, co-workers, classmates, and complete strangers.
Dat zal wel cynisch bedoeld zijn dan.

Is er nog ergens een simpelere scetch, zeg maar, voor normale mensen?
Het doel is : meetwaarden verversen zich, maar knopje niet.

In ieder geval al wel bedankt voor al die moeite.


Logged

Forum Moderator
Hamme, Belgium
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 390
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Euh ?

Welke arduino ide gebruik je? Want die library is standaard.

Probeer eens arduino ide 1.0, want je moet echt niks extra installeren hoor.
Logged


Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, teruggegaan naar Arduino 1.0
Nu doet de nieuwste versie TankLevelMeasering2_0 het wel.
Ik heb wel Textfinder erbij moeten installeren.
<avr/pgmspace.h> blijft nog steeds zwart, en staat niet bij de libraries.
Maar hij doet het.

Morgen ga ik daar verder naar kijken.

<SoftwareSerial.h> staat inderdaad bij de libraries, maar in de scetch TankLevelMeaseringWeb1_1, blijft ie zwart gekleurd,???? samen met <avr/pgmspace.h>
(Alle andere libraries kleuren rood)

Maar ook die scetch doet het met Arduino 1.0
Gek genoeg.

Met de Arduino 1.1 geeft ie een byte dns[] redeclared as different kind of symbol op regel 95 (versie 2)
byte dns[] = {192,168,1,1}; // fill out your own gateway's ip address or change this in your browser (EEPROM)


Ik dacht, dat komt omdat ie die libs niet had.

Morgen weer een dag.
Dank je wel in ieder geval.



Logged

Pages: [1] 2 3   Go Up
Jump to: