- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: Toleranz

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.01.2012
    Beiträge
    6

    Toleranz

    Hallo,

    ich heiße Dominic, bin 19 und Kfz- Mechatroniker- Nfz.

    Ich habe zwar schon seit einem Jahr ein Arduino Duemilanove,
    hatte aber noch nicht viel Zeit es auszuprobieren:

    Ich habe gerade 2 LDRs und 2 LEDs angeschloßen und lass immer eine LED leuchten,
    wenn ein LDR heller ist als der andere. Wenn beide LDRs gleich beleuchtet sind,
    sollte eigentlich keine LED leuchten, nur diesen Zustand erreiche ich nie.

    Nun meine Frage, kann man hier eine Toleranz von ca. +/- 10 eingeben?

    Hier der Quellcode:

    int ledPin1 = 13;
    int ledPin2 = 12;


    void setup(){
    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
    Serial.begin(9600);}
    void loop(){
    int ldr1 = analogRead(0);
    int ldr2 = analogRead(1);

    if (ldr1 > ldr2){
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, LOW);}
    if (ldr2 > ldr1){
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, HIGH);}
    if (ldr1 == ldr2){ // Hier die Toleranz von +/- 10
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);}
    Serial.println(ldr1);
    Serial.print(ldr2);

    delay(1500);
    }


    Gutes neues Jahr noch und schon mal Danke

    Gruß Fischy

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    das geht ganz einfach so:

    Code:
    if (ldr1 > (ldr2 + tol))
    {
    }
    else if (ldr1 < (ldr2 - tol))
    {
    }
    else
    {
    }
    So viele Treppen und so wenig Zeit!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.06.2011
    Beiträge
    158
    Felix' Version ist perfekt, aber wenn Du bei Deinem Code bleiben willst:

    "if (ldr1 == ldr2){ // Hier die Toleranz von +/- 10"

    if (abs(ldr1-ldr2) < tol) { // sollte dann passen

    Allerdings wird bei kleinem Unterschied doch auch eine Deiner beiden anderen Bedingungen erfuellt sein und (ganz kurz) mal eine der beiden LEDs angesprochen..

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    02.01.2012
    Beiträge
    6
    Danke euch beiden!

    Hab Calis`s Version genommen, funktioniert super genau wie ichs haben wollte.

    Kannst du mir noch das "abs" Dingens erklären?

    Das Programm soll später eine 2 achsige Nachfüranlage für PV-Module steuern.

    An die 2 Ledpins will ich je ein Transistor mit Lastrelais anschließen der den Motor 12V/4A Getriebemotor steuert.

    Zum Schutz vor Sturmschaden muss die Anlage bzw. das Modulfeld bei ca. 100 Km/h in die waagrechte fahren.


    Dazu benötige ich einen Windmesser:

    Auf längere Sicht würde ich mir auch noch gern ein kl. Windrad bauen, da ich den Wind nicht einschätzen kann,

    möchte ich die Winddaten über einen größeren Zeitraum aufzeichenen und mittels Exel auswerten.

    Windgeschwindigkeit und Winrichtung würde ich gerne mit Incremental-Geber verwirklichen.

    Was benötige ich, um die Daten auf einer SD-Karte zu speichern.


    Danke euch

    Mit freundlichen Grüßen


    Fischy

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    Zitat Zitat von Fischy Beitrag anzeigen
    Danke euch beiden!

    Hab Calis`s Version genommen, funktioniert super genau wie ichs haben wollte.

    Kannst du mir noch das "abs" Dingens erklären?
    abs(x) liefert den Betrag von x, also in diesem Fall den Betrag der Differenz ldr1 - ldr2.

    Das Programm soll später eine 2 achsige Nachfüranlage für PV-Module steuern.

    An die 2 Ledpins will ich je ein Transistor mit Lastrelais anschließen der den Motor 12V/4A Getriebemotor steuert.
    Dann solltest du entweder meinen Vorschlag verwenden, oder seinen so anpassen, daß du zuerst auf Gleichheit prüfst und die anderen beiden Fälle mit "else if" statt "if". Denn wie Calis schon angesprochen hat, wird auch in dem Fall daß die Differenz innerhalb der Toleranz liegt trotzdem immer eine der LEDs ganz kurz eingeschaltet. Das mag zwar bei LEDs keine Rolle spielen (man sieht es ja nicht), aber wenn da noch was anderes dran hängt ist es zumindest unschön.


    Falls du also Calis' Variante bevorzugst, solltest du sie etwa so anpassen:
    Code:
    if (abs(ldr1-ldr2) < tol)
    {
    }
    else if (ldr1 > ldr2)
    {
    }
    else if (ldr1 < ldr2) // Hier würde auch ein einfaches else reichen
    {
    }
    Wobei die Bedingung beim zweiten "else if" nicht zwingend notwendig ist, denn wenn die Differenz nicht kleiner ist als die Toleranz UND ldr1 nicht größer als ldr2, dann kann ldr1 ohnehin nurnoch kleiner sein als ldr2.

    Bei dieser Implementierung (wie auch bei meiner ersten Variante) ist garantiert, daß auf den LED-Pins immer ein sauberes Signal liegt.

    Was benötige ich, um die Daten auf einer SD-Karte zu speichern
    SD Karten kann man per SPI ansprechen, was sehr gut ist da nahezu jeder µC eine SPI Schnittstelle hat. Allerdings muss man mit der Versorgungsspannung aufpassen, denn die liegt nur bei 3,3V. Softwareseitig wird die Sache schon schwieriger wenn die Daten "PC-kompatibel" gespeichert werden sollen, denn in diesem Fall benötigst du eine Bibliothek für das FAT Dateisystem.
    So viele Treppen und so wenig Zeit!

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.06.2011
    Beiträge
    158
    Ja. ich seh das genau wie Felix. Speziell wenn Spulen (in Motor oder Relais) geschaltet werden, kann es da recht fette Induktionsimpulse geben, die Du sicher nicht haben willst. Also unbedingt anpassen!

Ähnliche Themen

  1. Toleranz-/Genauigkeitsfrage
    Von Crazy Harry im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 26.05.2010, 13:22
  2. Toleranz bei Versorgungsspannung?
    Von jörn im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 21.02.2005, 22:51
  3. Wie kann ich in der < und > Funktion eine Toleranz ein
    Von Arne im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 14.01.2005, 19:14

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress