Pages: 1 2 [3]   Go Down
Author Topic: automatiseren generator  (Read 4546 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Netherlands
Online Online
Shannon Member
*****
Karma: 168
Posts: 12433
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
ik ben maar een domme schipper
integendeel, je hebt een project bedacht en tot een goed einde gebracht waarbij je eea geleerd hebt.
En ja over een jaartje kijk je naar je code en zie je zo een twee drie dingen die je dan anders zou doen, en dat blijft smiley-wink
Logged

Rob Tillaart

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

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

Quote
U allen dank, by the way.

Zonder de proefsketch van Joeri3, en de opmerkingen van anderen had dit mij niet gelukt.

Heel graag gedaan.

Quote
Het is niet mijn vak, dat programmeren, ik ben maar een domme schipper, en van SDRAM heb ik nog nooit gehoord.

Net zoals robtillaart zegt: integendeel. Je hebt een probleem opgelost.

Over SDRAM: dat lijkt inderdaad niet makkelijk. Ik zal het zo eenvoudig mogelijk uitleggen.

Je hebt 3 soorten geheugen in onze Arduino's:

FLASHRAM, SDRAM, EEPROM.

FLASRAM is op een uno ongeveer 32KB en dient om je programma in TE BEWAREN (blijft erin staan ook als de stroom weg valt): binery sketch size : 16716 bytes (of a 32256 byte maximum)

SDRAM is op een uno 2KB en dient om het programma UIT TE VOEREN: het werkgeheugen (vergelijkbaar met de RAM uit een computer). Als je programma start, worden de variabelen in SDRAM geladen. Maar als je de stroom uitschakelt, is dit geheugen weer leeg.

bv byte knop1 = 15; gebruikt 1 byte uit het werkgeheugen (een byte kan een getal van 0 to 255 zijn)
bv client.print("<html><head></head><body>"); neemt 26 byte uit het werkgeheugen (tel ze maar eens op, dan weet je hoeveel je gebruikt)

EEPROM is op een uno 1KB (of 1024 bytes) en kan ook zonder stroom bewaren (vergelijkbaar met een harde schijf op een computer) je kan er dus dingen in opslaan die bewaard blijven ook als je de stroom uitschakelt.

Veel succes verder
Logged


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

Nou, alles een beetje herschreven, en een nieuwe proefsketch gemaakt, voor de geinteresseerden.
Werkt op een proefbreadbordje.
Eerdaags hopelijk nieuwe updates.

Zoals gewoonlijk in 2 delen.

Code:
//Deze Werkt
//this program is in the public domain
// published 17 jan 2013 @ http://arduino.cc/forum/index.php/topic,141106.0.html

#include <SPI.h>
#include <Ethernet.h>
#define MaxHeaderLength 256    //maximum length of http header required

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };   //physical mac address
byte ip[] = {
  192, 168, 1, 90 };   // static ip of Arduino
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(MaxHeaderLength);
String Pagina = String(MaxHeaderLength);
String Dataregel = String(MaxHeaderLength);

int value = 0;  
int Pin = 0;
boolean Pressed = false;
boolean first_time = true;

//2 3 5 6 7 8 9

int knop = 0;       // dit wordt 2
int bedrijfsmagneet = 3;
int gloeispiraal =4;
int startmotor = 5;
int indicatie_led = 9;
int veiligheidsensor = A1;
int stroomsensor = A0;
int start_time = 8;
int gloei_time = 8;
boolean in_bedrijf = false;
boolean start = false;
boolean gloei = false;
boolean motorState = false;

//clock

 #define MAX_MILLIS_VALUE 34359738
unsigned long current_millis_value = 0;
unsigned long previous_millis_value = 0;
unsigned long m = 0;
int seconds = 0;
int minutes = 0;
int hours = 0;
int days = 0;

int lastButtonState = HIGH;
long lastDebounceTime = 0;
long debounceDelay = 50;
boolean buttonState;

/*    SETUP   */

void setup(){
  //enable serial monitor
  Serial.begin(9600);
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
   //initialize variable
  
  HttpHeader="";
  Pagina="";
  Dataregel="";
  
  
  pinMode(knop, INPUT);
  pinMode(bedrijfsmagneet, OUTPUT);
  pinMode(gloeispiraal, OUTPUT);
  pinMode(startmotor, OUTPUT);
  pinMode(indicatie_led, OUTPUT);
  pinMode(veiligheidsensor, INPUT);
  pinMode(stroomsensor, INPUT);
  digitalWrite(knop, HIGH);

  digitalWrite(bedrijfsmagneet, LOW);
  digitalWrite(startmotor, LOW);
  digitalWrite(veiligheidsensor, HIGH);
  digitalWrite(stroomsensor, HIGH);
}
Logged

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

Code:
/*    LOOP     */

void loop(){

  // Create a client connection
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
         char c = client.read();
        
         //read MaxHeaderLength number of characters in the HTTP header
         //discard the rest until \n
         if (HttpHeader.length() < MaxHeaderLength){}
        
           //store characters to string
           HttpHeader = HttpHeader + c;
                
         //if HTTP request has ended
         if (c == '\n') {
    
           // start of web page
           client.println("HTTP/1.1 200 OK");
           client.println("Content-Type: text/html");
           //client.println("<html><head></head><body>");
           client.println(); // haal dit weg, en het werkt niet meer, waarom???
           //client.println("Hela mundo");
           //client.println();
 
       zoek_pagina();
    
     if (Dataregel != ""){
        Data_afhandelen();
     }  

     if (Pagina == "/favicon.ico "){} //do nothing
      
     else {  
     if (Pagina == "/ "){
       hoofdpagina(client);
     }  
     else{  
     if (Pagina == "/sensors "){
       sensors(client);
     }
     else {
     if (Pagina == "/knoppen "){
       knoppen(client);}
      
     else {
     if (Pagina == "/knop_3 "){
       knop_3(client);}  
    
     else {niet_gevonden(client);
     }}}}
  
       //clearing strings for next read
       HttpHeader="";
       Pagina="";    
       Dataregel="";
      
    //stopping client
    delay(1);
    client.stop();
  
}}}}}

  if (motorState == true && digitalRead(stroomsensor) == HIGH)
  {gloei = false; start = false; in_bedrijf = false; motorState = false; clock_reset();}  //motor is uitgevallen
  if (motorState == true && digitalRead(veiligheidsensor) == LOW)
  {gloei = false; start = false; in_bedrijf = false; motorState = false; clock_reset();}  //veiligheidsensor is doorgeslagen naar massa

  clock();
  if (gloei == true && seconds >= gloei_time)
  {gloei = false; start = true; clock_reset();}
  if (start == true && seconds >= start_time)
  {start = false; in_bedrijf = false; clock_reset();}

  int reading = digitalRead(knop);
  if (reading != lastButtonState)
  { lastDebounceTime = millis();}
  if ((millis() - lastDebounceTime) > debounceDelay)
  {buttonState = reading;}
  lastButtonState = reading;
  
  digitalWrite(indicatie_led,buttonState);
  Serial.println(buttonState);
  
  if (buttonState == false && lastButtonState == true)
    {Pressed = true; delay(10);}
    
  if (Pressed == true)
     {if (in_bedrijf == true) {in_bedrijf = false; gloei = false; start = false; clock_reset();}
     else {in_bedrijf = true; gloei = true;}}
    
  if (buttonState == true && Pressed == false)     //wacht op loslaten knop
     {if (in_bedrijf == true)
       {if (digitalRead(stroomsensor) == LOW)
         {start = false; gloei = false; motorState = true; clock_reset();}
    }}
    
    digitalWrite(bedrijfsmagneet, in_bedrijf);
    digitalWrite(gloeispiraal, gloei);
    digitalWrite(startmotor, start);
    Pressed = false;
}

/*         CLOCK        */

 
void clock()

{ current_millis_value = millis();
  if (current_millis_value < previous_millis_value) // if millis overflows
  {
  m += MAX_MILLIS_VALUE - previous_millis_value + current_millis_value;
  }
  else // if millis has not overflown
  {
  m += current_millis_value - previous_millis_value;
  }
  if (m>999)
  {
    seconds++;
    m = m-1000;
    if (seconds>60) // if seconds == 60
  {
    seconds = 10;
    minutes++;
    }
     if (minutes>60) // if seconds == 60
  {
    minutes = 0;
    hours++;
    }
    if (hours>24) // if seconds == 60
  {
    hours = 0;
    days++;
    }
  
  }
  previous_millis_value = current_millis_value;
}

void clock_reset()
{
 seconds = 0;
 minutes = 0;
 hours = 0;
 days = 0;
}
Logged

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

Code:
[code]3 delen, ook goed.
[code]
/*         HOOFDPAGINA             */

void hoofdpagina(EthernetClient client){

       char myChar = 34; // appeltroff
      
        client.print("<html><head></head><body>");
        
        client.print("<iframe src=");
        client.print(myChar);
        client.print("./sensors");
        client.print(myChar);
        client.print(" height=");
        client.print(myChar);
        client.print("100");
        client.print(myChar);
        client.print(" frameborder=");
        client.print(myChar);
        client.print("0");
        client.print(myChar);
        client.print("></iframe>");
        client.print("<br>");
        
        client.print("<iframe src=");
        client.print(myChar);
        client.print("./knoppen");
        client.print(myChar);
        client.print(" height=");
        client.print(myChar);
        client.print("230");
        client.print(myChar);
        client.print(" frameborder=");
        client.print(myChar);
        client.print("0");
        client.print(myChar);
        client.print("></iframe>");
        client.print("<br>");
        
        client.print("<iframe src=");
        client.print(myChar);
        client.print("./knop_3");
        client.print(myChar);
        client.print(" height=");
        client.print(myChar);
        client.print("50");
        client.print(myChar);
        client.print(" frameborder=");
        client.print(myChar);
        client.print("0");
        client.print(myChar);
        client.print("></iframe>");
        client.print("<br>");
        
        client.print("</body></html>");
   }

/*           SENSORS              */
  
void sensors(EthernetClient client){

      char myChar = 34; // appeltroff
          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.print("motor : ");
             if (digitalRead(stroomsensor)==LOW)
             {client.println("AAN");}
             else{client.println("UIT");}
            
           client.print("<br>");
           client.print("<br>");
           client.print("veiligheidssensor : ");
             if (digitalRead(veiligheidsensor)==LOW)
             {client.println("AAN");}
             else{client.println("UIT");}
            
           client.print("<br>");
           client.print("</body></html>");
   }

/*            KNOPPEN               */
  
void knoppen(EthernetClient client){

           client.print("<html><head></head><body>");
     /*      client.print("<form method=get>");
           client.print("<br>");
          
           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 (digitalRead(i)== 1) {client.print("checked=true ");}
              client.print("> aan     ");
              client.print("<input type='radio' name=");
              client.print(i);client.print(" value='0' ");          
              if (digitalRead(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.println("Sorrie, niet beschikbaar");
           client.print("</body></html>");
          }
 
/*           KNOP 3              */
 
 void knop_3(EthernetClient client){
  
      // Testknop,  fire at once
  
      if (first_time == true)
      {first_time = false;}
      else {Pressed = true;}
      clock_reset();
      char myChar = 34; // appeltroff
      client.print("<html><head></head><body>");
    
      client.print("Zet Generator AAN/UIT : ");
      client.print("<a href=");
      client.print(myChar);
      client.print("./knop_3");
      client.print(myChar);
      client.print(">PRESS");
      client.print("</a>");  
      }

/*            NOT FOUND              */
              
void niet_gevonden(EthernetClient client){
 
   client.print("<html><head></head><body>");
   client.print("<br>");
   client.print("Pagina niet gevonden");
   client.print("</body><html>");
   }

/*          DATA AFHANDELEN              */
  
void Data_afhandelen(){
 
     for(int i = 0;i <= Dataregel.length();i++){
      Pin=Dataregel.charAt(i)-48;;
      i++;i++;
      value=Dataregel.charAt(i)-48;
  
   digitalWrite(Pin,value);
  
   i++;//&
  
     }}
 
 /*           ZOEK PAGINA           */
    
 void zoek_pagina(){
          
              //zoek naar pagina's
 
          int index_start = HttpHeader.indexOf('/');
          int index_stop = HttpHeader.indexOf(' ',index_start);
 
         for (int i = index_start; i <= index_stop; i++){
         char c=  HttpHeader.charAt(i);
          Pagina =  Pagina + c;
         }
  
        if (Pagina.startsWith("/knoppen")) {  
        
          if (Pagina.length() > 9){
            if (Pagina.charAt(8) == '?'){
  
            int index_start = Pagina.indexOf('?');
            int index_stop = Pagina.indexOf(' ',index_start)-1;
    
            for (int i = index_start + 1; i <= index_stop; i++){
            char c=  Pagina.charAt(i);
            Dataregel =  Dataregel + c;
            }
  
            Pagina = "/knoppen ";
          
        }}}
        
        if (Pagina.startsWith("/knop_3")) {  
        
          if (Pagina.length() > 8){
            if (Pagina.charAt(7) == '?'){
      
            int index_start = Pagina.indexOf('?');
            int index_stop = Pagina.indexOf(' ',index_start)-1;
                
            for (int i = index_start + 1; i <= index_stop; i++){
            char c=  Pagina.charAt(i);
            Dataregel =  Dataregel + c;
            }

            Pagina = "/knop_3 ";
          
        }}}}  
  

[/code][/code]
Logged

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

Er zitten wat foutjes in, hier en daar, maar op een proefbordje werkt het.
Soms snap ik zelf niet waarom.

Logged

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

Het heeft eventje geduurd, maar het was dan ook wel erg koud de afgelopen tijd, dus als ik even tijd had, ging ik liever bij de kachel zitten.

Inmiddels zijn er nog wat bugs verwijderd.

In de praktijk uitgetest en werkend bewezen.

-Een tellertje toegevoegd voor de veiligheidsensor, omdat ie, af en toe wel eens zomaar doorslaat naar aarde, zonder aanwijsbare reden.

De stroomsensor, is een 5v adapter op de stroom, die door de generator wordt gemaakt, en die een 5V relaitje aanstuurt, die de sensorpin aan de grond sluit.

In feite zou de stroomsensor overbodig gemaakt kunnen worden, want de veiligheidsensor reageert zo snel, dat ook die als indicatie gebruikt zou kunnen worden, of de motor aan of uit staat.
Alleen wisselt ie nogal tussen hoog en laag, als ie start, dus dat is iets voor later.

Ik denk dat dit programma op vrijwel alle dieselmotoren gebruikt kan worden.
De meesten werken ongeveer vergelijkbaar.
Vandaar de update.

De ralais zijn van Tinkerkit, die weer een autorelais aansturen.
http://www.tinkerkit.com/relay/
Zelfbouw is namenlijk vooralsnog mislukt.

Ik zoek daar dus nog een betere oplossing voor, liefst met een MOSFET of PROFET, want ik had gelezen, in een echt papieren boek (ja,ja), dat die dingen erg klein zijn en je er heeele hoge stroomsterktes mee kan sturen, o.a.

Als iemand daar een link over weet, in combinatie met een Arduino, zou dat fijn zijn.

Arduino scetch en Fritzing scetch bijgesloten.

* web_toggle_knop_timer_kubota_3_0.ino (10.53 KB - downloaded 7 times.)
* web.kubota.fzz (8.91 KB - downloaded 8 times.)
Logged

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