Show Posts
Pages: [1] 2 3 ... 19
1  International / Deutsch / OT:Welchen Kondensator brauche ich ? on: April 16, 2014, 02:47:08 am
Hallo allerseits,
ich habe hier 5v , aus denen möchte ich 3,3V machen mittels eines LF33CV.

Welche Kondensatoren brauche ich ? 1x 2,2uF und 1x 100mF ?

Vielen Dank für Eure Hilfe...
2  International / Deutsch / Re: Warum bleibt mein Arduino stehen ?? on: April 14, 2014, 09:53:17 am
Hallo allerseits,
so kleines Feedback...
Es läuft, ich habe das EtheretShield weggelassen und siehe da... Löppt...  smiley-grin

Also, werde ich das ganz umbauen, Arduino Mini Pro und WIZnet WIZ812MJ Ethernet Modul.
Damit habe ich schon mal sehr gute Erfahrung gemacht (Washduino gebaut).

Also Uwe und Jurs, vielen Dank für die Hilfe, Ohne Euch hätte ich mich tot gesucht...
Big Thx !!
3  International / Deutsch / Re: Warum bleibt mein Arduino stehen ?? on: April 11, 2014, 02:08:22 pm
Hallo Uwe, Hallo Jurs,
erstmal Danke für Eure unterstützung  smiley-grin

Das habe ich so nicht bedacht, also welche Pins vom Ethernetshield benutzt werden.
Ich werde das ganze mal umbauen, erstmal testen ohne Ethernetshield und dann mit anderer Pin belegung.

Die Stomversorgung kommt von einer Autobatterie mit einem Step-down-Wandler auf ca. 9V.

Erstmal vielen Dank, ich werde das dann mal umsetzten und testen.
Ich melde dann noch mal, ob Erfolgreich oder nicht.

DANKE !
4  International / Deutsch / Re: Warum bleibt mein Arduino stehen ?? on: April 11, 2014, 01:59:27 pm
Hallo Klaus,
Schau mal, was Dein Speicher noch hergibt:

Code:
//Aufruf mit Serial.println(freeRam () );
int freeRam () {
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

Nein, der Code ist nicht von mir, ich glaub Serenifly hat den mal gepostet.
Kann ich erst morgen sehen, wenn die Sonne wieder da ist und dasganze arbeitet.
Ich hoffe nicht das es am Speicher liegt. Aber mal sehen..
5  International / Deutsch / Re: Warum bleibt mein Arduino stehen ?? on: April 11, 2014, 01:48:25 pm
Hallo jurs,
Kann mal jemand auf meinen Sketch schauen, ich finde den Fehler nicht...  smiley-red
...
Achso, das ganze läuft auf einem Uno mit Ethernet-Shield...

Wie jetzt? Ethernet-Shield?
Was macht das Ethernet-Shield in dem Sketch?

Soll das nur aufgesteckt sein, um den Sketch verrecken zu lassen?

Laut http://shieldlist.org/arduino/ethernet-v5 verwendet das Ethernet-Shield A0 und A1.

Und Du machst im Sketch:
Code:
int ldrleft = 1;   
...
int left = analogRead(ldrleft);                     // LDR links einlesen

Je nach verwendetem Board und Arduino-Softwareversion wird die unsaubere Deklaration "1" in der Funktion "analogRead" als "A1" interpretiert und A1 angesprochen. Wenn der Sketch wenigstens anfänglich funktioniert, dürfte das bei Dir der Fall sein. Und dann beißt es sich mit der Verwendung von A1 durch das Ethernet-Shield.

Also das Ethernetshield ist drauf, weil er auch noch Server ist um die Werte an zu zeigen.
Aber warum beist sich das ? ich dachte das Ethernetshield benutzt pin 10, 11, 12, und 13

6  International / Deutsch / [gelöst] Warum bleibt mein Arduino stehen ?? on: April 11, 2014, 12:09:59 pm
Hallo allerseits,
wie einige vielleicht schon gelesen haben, versuche ich mich an einem Solar-Tracker/Sonnenfolger.
Nun habe ich festgestellt, das das Programm sich so ca. nach 2 stunden aufhängt.

Kann mal jemand auf meinen Sketch schauen, ich finde den Fehler nicht...  smiley-red

Ich habe die vermutung, das das mit den Millis zusammen hängt... aber das ist nur eine Vermutung..
Das Programm läuft also immer ca. 2-3 std. und dann geht nix mehr, kein Impuls wird gezählt und es wird nicht mehr geschaut welcher LDR der Hellste ist...

Hier mein Sketch:

Code:
#include <SPI.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);
byte bell[8]   = { B00100, B01110, B01110, B01110, B11111, B00000, B00100, B00000 };
byte sun[8]    = { B00100, B10101, B01110, B11111, B01110, B10101, B00100, B00000 };
byte smili[8]  = { B00000, B01010, B01010, B00000, B00100, B10001, B01110, B00000 };
byte left[8]   = { B00010, B00110, B01110, B11110, B01110, B00110, B00010, B00000 };
byte right[8]  = { B01000, B01100, B01110, B01111, B01110, B01100, B01000, B00000 };
byte ae[8]     = { B01010, B00000, B01110, B00001, B01111, B10001, B01111, B00000 };

volatile int impState = 0;
volatile int lastimpState = 0;
int bounceTime  = 100;
unsigned long act_imp;
unsigned long last_imp;
double impCounter = 0;
unsigned long millisBetween;
unsigned long lastMillis;
unsigned long watt;

double kwh = 0.000;                                   // Kilowattstunden
double Preis =  0.2622;                               // Preis einer Kilowattstunde in Euro
double euro;
char tmp1[16];
char tmp2[16];

/*--- Solar Tracker ---*/
int moveleft = 4;                                     // Motor pin left
int moveright = 5;                                    // Motor pin right
int ldrleft = 1;                                      // Name und Pin-Nr (LDR links)
int ldrcenter = 2;                                    // Name und Pin-Nr (LDR mitte)
int ldrright = 3;                                     // Name und Pin-Nr (LDR rechts)
int LDR_hell = 0;                                     // Wert von LDR_hell
unsigned long Zeit_dtime;                    // Zeit-Variable für dtime
unsigned long pauseMillis;                   // Zeit-Variable für pause
/*--- Solar Tracker ---*/

void setup ()
{
  Serial.begin(9600);
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
  pinMode(7, OUTPUT);                                 // LCD Hintergrundbeleuchtung
  pinMode(moveleft, OUTPUT);                          // Motor left als Ausgang deklarieren
  pinMode(moveright, OUTPUT);                         // Motor right als Ausgang deklarieren
  digitalWrite(moveleft, HIGH);
  digitalWrite(moveright,HIGH);
  lcd.init();
  lcd.backlight();
  lcd.createChar(0, bell);                            // Sonderzeichen Glocke
  lcd.createChar(1, sun);                             // Sonderzeichen Sonne
  lcd.createChar(2, smili);                           // Sonderzeichen Smiley
  lcd.createChar(3, left);                            // Sonderzeichen left arrow
  lcd.createChar(4, right);                           // Sonderzeichen right arrow
  lcd.createChar(5, ae);                              // Sonderzeichen right arrow
  digitalWrite(7, HIGH);                              // LCD Hintergrundbeleuchtung AN
  lcd.setCursor(0,0);
  lcd.write(1);                                       // Sonne links
  lcd.setCursor(2,0);
  lcd.print(F("Starte Solar"));
  lcd.setCursor(15,0);
  lcd.write(1);                                       // Sonne rechts
  lcd.setCursor(3,1);
  lcd.print(F("Z"));
  lcd.write(5);
  lcd.print(F("hler ..."));
  delay(5000);
  lcd.clear();
  millisBetween = 0;
  lastMillis = 0;
  lastimpState = 0;
  watt = 0;
  Zeit_dtime = 0;
  pauseMillis = 0;
}

void loop ()
{
  impState = digitalRead(2);
  act_imp = millis();
  unsigned long time = millis();
  
  if(act_imp - last_imp > bounceTime)
  {

  if (impState != lastimpState) {
    if (impState == LOW) {
      last_imp = act_imp;
      impCounter++;
      
      millisBetween = time-lastMillis;
      lastMillis = time;
    }
  }
  lastimpState = impState;
  }
  
  /*--- Solar Tracker ---*/
  int left = analogRead(ldrleft);                     // LDR links einlesen
  int right = analogRead(ldrright);                   // LDR rechts einlesen
  int center = analogRead(ldrcenter);                 // LDR mitte einlesen
  int rightN = right +20;                             // (-12 )LDR rechts an den linken angleichen, bei +47 sind L u. R vom Wert her gleich
  int dtime = 1000;                                   // Such/Beweg geschwindigkeit
  int tol = 2;                                        // (28) tolleranz zwischen LDR-links und LDR-rechts
  unsigned long pause = 120000;                       // 2 min Pause in milliSek , wenn Links und Rechts gleich sind
  int alr = (left + rightN) / 2;                      // durchschnitt LDR-links u. LDR-rechts
  int LDR_hell = center;                              // LDR-mitte auch als LDR_hell deklarieren, für Nacht/Tag modus
  int dhoriz = alr - center;                          // check the diffirence of left/rigt and center
  int LR = left - rightN;
  
  
       display_Counter();
       digitalWrite(7, HIGH);                         // LCD Hintergrundbeleuchtung AN
      
  if((millis() - pauseMillis) > pause){               // Pause wenn L&R gleich sind
    
   if((millis() - Zeit_dtime) > dtime){               // Such/Beweg geschwindigkeit
    Zeit_dtime = millis();
      
  if (center <= 50) {
    digitalWrite(moveright, HIGH);                  // einzelne schritte -
    digitalWrite(moveleft, LOW);
    //digitalWrite(7, LOW);
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print(F("Nacht-Modus"));
    delay(120000);
  } else {
    
  if (-1*tol > dhoriz || dhoriz > tol)                // check if the diffirence is in the tolerance else change horizontal angle
  {
    
    if (left < rightN)                                // ist links kleiner als rechts, fahre nach links
    {
      //Serial.println(F("Move -->"));
      digitalWrite(moveright, HIGH);                  // einzelne schritte -
      digitalWrite(moveleft, LOW);
      lcd.setCursor(14,1);
      lcd.write(4);
    }
    else if (left > rightN)                           // ist links größer als rechts, fahre nach rechts
    {
      //Serial.println(F("<-- Move"));      
      digitalWrite(moveleft, HIGH);                   // einzelne schritte +
      digitalWrite(moveright, LOW);
      lcd.setCursor(14,1);
      lcd.write(3);
    }
    else if (left == rightN)                          // sind links u. rechts gleich, in dieser stellung für 30 sek. bleiben
    {
      pauseMillis = millis();
      //Serial.println(F("Horizontal Optimal !"));
      digitalWrite(moveleft, HIGH);
      digitalWrite(moveright, HIGH);
      lcd.setCursor(14,1);
      lcd.write(2);
      }
    
    }

    if (left != rightN)  { /* nix */ }                 // sind links und rechts ungleich, weiter suchen...
  }
   } /* Such/Beweg geschwindigkeit ende */
  }    /* Pause wenn L&R gleich sind ende */
  
 }/*--- Loop Ende ---*/
 
 void display_Counter(){
   kwh = impCounter / 1000;
    dtostrf(kwh, 1, 3, tmp1);
    lcd.setCursor(0,0);
    lcd.print(tmp1);
    lcd.print(F(" KWh"));
    
    euro = kwh * Preis;
    dtostrf(euro, 1, 3, tmp2);
    lcd.setCursor(0, 1);
    lcd.print(tmp2);
    lcd.print(" EUR");
    
    watt = 3600000 / millisBetween;
    
    if (int(watt) > 500) { watt = 500; }                  // ist Watt grösser als 500 , zeige nur 500 an

    lcd.setCursor(11,0);
    if (int(watt) <= -1){ lcd.print("  "); watt = 0;}     // ist Watt kleiner oder gleich -1, setze watt auf 0
    else if (int(watt) < 100 ) { lcd.print(' '); }        //stellt ein leeres Feld voran, wenn Watt kleiner als 100
    else if(int(watt) < 10 ) { lcd.print('  '); }         //stellt zwei leere Felder voran, wenn Watt kleiner als 10
    lcd.print(int(watt));
    lcd.setCursor(15, 0);
    lcd.print("W");
 }

Wenn noch irgendwelche Info´s benötigt werden, sagt bescheid.
Achso, das ganze läuft auf einem Uno mit Ethernet-Shield...
7  International / Deutsch / Re: millis() statt delay , ich verzweifle.. on: March 28, 2014, 10:29:34 am
So, es läuft.... smiley-grin
Ich hatte die abfrage an der falsche Stelle im Sketch.

Allen Beteiligten vielen DANK !

Problem gelöst... Juhu.. smiley-grin smiley-mr-green smiley-grin smiley-mr-green
8  International / Deutsch / Re: millis() statt delay , ich verzweifle.. on: March 28, 2014, 09:36:55 am
Hallo Serenifly,
Du musst unterscheiden ob du etwas alle x Sekunden machen willst oder ob du nach einer Aktion einmal eine bestimmte Zeit warten willst. Letzteres geht leicht anders als das Standard Beispiel BlinkWithoutDelay.

Dafür muss man die Variable die man subtrahiert vorher auf millis() setzen. Also zu dem Zeitpunkt ab dem das Warten anfangen soll. Dann ist die Differenz 0 und damit automatisch kleiner aus der Vergleichswert. Diese Abfrage kommt dann als erstes und alles andere in den else-Zweig.

Aber ist mein Ansatz der nicht so ?

Code:
if((millis() - lastMillis1) > pause){
       
      lastMillis = millis();
      Serial.println(F("Horizontal Optimal !"));
      digitalWrite(moveleft, HIGH);
      digitalWrite(moveright, HIGH);
      }
9  International / Deutsch / Re: millis() statt delay , ich verzweifle.. on: March 28, 2014, 09:24:47 am
Hallo sschultewolter,
leider klappt das so nicht, oder ich verstehe es nicht...  smiley-red
Code:
if (-1*tol > dhoriz || dhoriz > tol)                // check if the diffirence is in the tolerance else change horizontal angle
  {
   
    if (left < rightN)                                // ist links kleiner als rechts, fahre nach rechts
    {
      Serial.println(F("<- Move"));
      digitalWrite(moveright, HIGH);                  // einzelne schritte -
      digitalWrite(moveleft, LOW);     
    }
    else if (left > rightN)                           // ist links größer als rechts, fahre nach links
    {
      Serial.println(F("Move ->"));     
      digitalWrite(moveleft, HIGH);                   // einzelne schritte +
      digitalWrite(moveright, LOW);
    }
    else if (left == rightN)                          // sind links u. rechts gleich, in dieser stellung für 30 sek. bleiben
    {
      if(millis() - lastMillis1 > pause)
      {
       
      lastMillis = millis();
      Serial.println(F("Horizontal Optimal !"));
      digitalWrite(moveleft, HIGH);
      digitalWrite(moveright, HIGH);
     
      //delay(pause);
    }
    }

    if (left != rightN)  { /* nix */ }                 // sind links und rechts ungleich, weiter suchen...
   }
10  International / Deutsch / Re: millis() statt delay , ich verzweifle.. on: March 28, 2014, 09:12:40 am
Hallo sschultewolter,
Code:
      if((millis() - Zeit_2) > pause){
       
      Zeit_2 = millis();

Soweit schon mal nicht ganz falsch. Die Klammer um die Subtraktion kannste weglassen. Ob Zeit_2 nun ein sinniger Variablenname ist, sei dahingestellt. lastMillis wäre ggf. besser.
Des weiteren kannst du auch gleich oder größer abfragen ">=".

Wie hast du Zeit_2 deklariert? In der loop musst du static unsigned long nehmen, in den globalen Variablen reicht das ohne static.

Der Variablenname ist nur so eingetrage, bis der ablauf funktioniert.
Zeit_2  ist als static unsigned longdeklariert.

Wenn ich das richtig sehe und verstehe, liegt es nur an denKlammern (m die Subtraktion) ?

Ich teste das mal eben.. Danke... bis gleich
11  International / Deutsch / Re: millis() statt delay , ich verzweifle.. on: March 28, 2014, 09:08:18 am
Hallo phthalo,
So vielleicht?
...

Ich teste...  Danke... bis gleich....
12  International / Deutsch / Re: millis() statt delay , ich verzweifle.. on: March 28, 2014, 09:03:45 am
Also ich sehe da keinen Ansatz mit millis von dir

Da könntest du recht haben...
Ich habe das alles wieder gelöscht, um den Anfangszustand wieder herzustellen.
Und dann geposted... Sorry.

Aber meine Versuche sahen so aus:

Code:
if (-1*tol > dhoriz || dhoriz > tol)                // check if the diffirence is in the tolerance else change horizontal angle
  {
    
    if (left < rightN)                                // ist links kleiner als rechts, fahre nach rechts
    {
      Serial.println(F("<- Move"));
      digitalWrite(moveright, HIGH);                  // einzelne schritte -
      digitalWrite(moveleft, LOW);      
    }
    else if (left > rightN)                           // ist links größer als rechts, fahre nach links
    {
      Serial.println(F("Move ->"));      
      digitalWrite(moveleft, HIGH);                   // einzelne schritte +
      digitalWrite(moveright, LOW);
    }
    else if (left == rightN)                          // sind links u. rechts gleich, in dieser stellung für 30 sek. bleiben
    {
      if((millis() - Zeit_2) > pause){
        
      Zeit_2 = millis();
      Serial.println(F("Horizontal Optimal !"));
      digitalWrite(moveleft, HIGH);
      digitalWrite(moveright, HIGH);
      }
      //delay(pause);
    }

    if (left != rightN)  { /* nix */ }                 // sind links und rechts ungleich, weiter suchen...
   }

Aber da wird keine Pause gemacht
13  International / Deutsch / [gelöst] millis() statt delay , ich verzweifle.. on: March 28, 2014, 08:18:02 am
Hallo allerseits,
langsam bring mich millis() um denVerstand.. smiley-confuse

Ich möchte das delay in meinem Sketch durch millis() erstezten , damit der Rest des Sketches nicht blockiert wird.
Aber versteh  nicht, wie und wo ...
Es geht darum 2 LDR zu vergleichen und wenn Sie gleich sind, eine Pause machen.
Klappt 1a mit delay, aber dann ist der Rest für die Zeit blockiert.
Ich möchte das nur der Vergleich unterbrochen wird, bis die zeit um ist.

Kann doch nicht so schwer sein... (mich leider unlösbar  smiley-red)

Das ist der relevante Code-Teil
Code:
if (-1*tol > dhoriz || dhoriz > tol)        // check if the diffirence is in the tolerance else change horizontal angle
  {
    if (left < rightN)                                              // ist links kleiner als rechts, fahre nach rechts
    {
      Serial.println(F("<- Move"));
      digitalWrite(moveright, HIGH);              // einzelne schritte -
      digitalWrite(moveleft, LOW);      
    }
    else if (left > rightN)                                     // ist links größer als rechts, fahre nach links
    {
      Serial.println(F("Move ->"));      
      digitalWrite(moveleft, HIGH);                   // einzelne schritte +
      digitalWrite(moveright, LOW);
    }
    else if (left == rightN)                                   // sind links u. rechts gleich, in dieser stellung für 20 sek. bleiben
    {
      Serial.println(F("Horizontal Optimal !"));
      digitalWrite(moveleft, HIGH);
      digitalWrite(moveright, HIGH);
    
      delay(20000);                                     // 20 sek warten
    }

    if (left != rightN)  { /* nix */ }                 // sind links und rechts ungleich, weiter suchen...
   }

Kann jemand HELFEN ?


Vielen Dank
14  International / Deutsch / Re: Zeit zwischen attachInterrupt (Watt berechnung) on: March 26, 2014, 03:57:32 pm
Hallo allerseits,
erstmal vielen Dank für super Beteiligung...
Habe mich jetzt mal rangesetzt und von vorn angefangen, das ich einen nackten Sketch habe der die Impulse Zählt.

Aber ich kapiere es nicht, wie ich die millis() einsetzten muss, das ich eine difference bilden kann...  smiley-red

Code:
act_irq0=millis();
Ist der Start... Zählt also los, wenn ein Impuls kommt
Code:
last_irq0=act_irq0;
Wäre doch der nächste Start, wenn also der zweite Impuls kommt... Oder nicht ?

Also müsste ich doch last_irq0 - act_irq0  machen um die difference zubekommen, oder nicht ?

Irgendwie sitzte ich hier wie ein Ochs vorm Berg  smiley-red

Hier der Sketch zum Impulse zählen:
Code:
volatile unsigned long act_irq0;
volatile unsigned long last_irq0;
volatile int bounceTime  = 100;

volatile double counter0 = 0;

double kwh = 0.000;  //Kilowattstunden
char tmp1[16];

void setup()
{
  Serial.begin(9600);
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
  attachInterrupt(0, Count0, FALLING);
  Serial.print(F(" Starte Test ..."));
}

void loop()
{
 display_Counter();
 
 delay(1000);
 
}

void Count0()
{
  act_irq0=millis();
  if(act_irq0 - last_irq0 > bounceTime)
  {
    counter0++;
    if(counter0>255) counter0 = 0;
    last_irq0=act_irq0;
  } 
}

void display_Counter(){
  kwh = counter0 / 1000;
    dtostrf(kwh, 1, 3, tmp1);
   
    Serial.print(tmp1);
    Serial.println(F(" KWh"));
}   

Wo wird was eingesetzt ?? Kann jemand helfen ??
Vieleicht mit Erläuterung ? smiley-red

DANKE
15  International / Deutsch / Re: Zeit zwischen attachInterrupt (Watt berechnung) on: March 26, 2014, 05:44:38 am
Jaein UNO .

das Zählen klappt super,
aber irgendwie happerts bei den millis()
Pages: [1] 2 3 ... 19