Sturzi's Arduino-Bastelprojekt #2 - Speed-o-Meter und Rundenzähler mit Infrarot-Lichtschranken

  • Ich hab einen Entwurf mit sperrholz und transparentem Polycarbonat auf dem Tisch… mal schauen ob das was wird.

    Bischi :hi:

  • Soweit habe ich alles zusammen gebaut und die Anzeige zeigt an was sie soll.


    Der Schalter hat im Moment noch keine Funktion?


    Warum tauchen im Programm am Ende aus Beitrag #80 die Konstanten und die Setups für die pinMode aus Beitrag #74 nicht auf? Habe ich etwas verschlafen oder werden die im Moment noch nicht benötigt?

    Gruss Erwin



    Wer rast, der verpasst das Leben.


    Kein Platz für weitere Sammelstücke ist nur eine faule Ausrede. ;) Es gibt für alles eine Lösung.

  • Der Schalter hat im Moment noch keine Funktion?

    Das ist richtig.



    Warum tauchen im Programm am Ende aus Beitrag #80 die Konstanten und die Setups für die pinMode aus Beitrag #74 nicht auf? Habe ich etwas verschlafen oder werden die im Moment noch nicht benötigt?

    Die werden im Moment noch nicht benötigt.

  • Hoi Röbi

    Bei mir zeigt die Anzeige an, wie du es vorgemacht hast. Nur der Arduino ist nicht rot geworden, dafür meine Ohren. Sehr lange blieben in der Anzeige die Runden auf "**" stehen. Bis ich im Test einen Schreibfehler fand, der in der Compilation keine Fehlermeldung erzeugte.

    Jetzt klappt es.

    Gruss Oski

    signatur_egos.jpg

    ...auch Nichtraucher können süchtig sein nach Zündhölzern!

  • Hallo Röbi, liebe ARDUINO-Mitfieberer


    Ich habe das Display ebenfalls mit den Daten zum Leben erweckt. Da ich den Typ B habe, braucht es einige Änderungen, die hier im Anhang eingetragen sind. Insbesondere sind im void setup() die Zeilen lcd.init() und zusätzlich lcd.backlight() eingefügt.

    ohne lcd.rücklicht() bleibt das Display dunkel.


    displayResults.pdf.


    Gruss Peter

  • Hoi Röbi

    Auch bei mir sieht derAufbau ähnlich aus. und es zeigt das gewünschte an.

    Da bin ich schon ganz glücklich. :)

    Ich bin ehrlich, verstanden habe ich nicht alles aber gewisse Zusammenhänge kommen mir duch das wiederholen schneller wieder in den Sinn.

    Eine Frage zum Anschluss der Sensoren habe ich noch.

    Plus/GND sind klar aber welchen Pin nehme ich für die Verbindungen 11 und 12? da gibt es D0 und A0 ?(

  • Hallo Andy


    Schön, dass es bei dir auch funktioniert!


    Eine Frage zum Anschluss der Sensoren habe ich noch.

    Plus/GND sind klar aber welchen Pin nehme ich für die Verbindungen 11 und 12? da gibt es D0 und A0

    Andy, schau beim Beitrag 69. Dort ist es erklärt.

    Beim Typ C sind die Pins 12 und 11 bei der 9-Stiften-Gruppe rechts oben, der 2. und der 3. Stift von links. Sie sind angeschrieben mit D12 und D11 (D steht für Digital). A steht für die Analog Inputs, aber die brauchen wir bei dem Projekt nicht.

    Beim Typ D sind die Pins 12 und 11 bei der Löt-Ösen-Gruppe rechts oben die 2. und die 3. Öse von links (ich habe sie nur durch durchpiepsen herausgefunden).

  • Hallo Röbi,


    Auch bei mir funktioniert alles wie gewünscht!

    Vielen Dank für Deine fundierten Erklärungen.


    Beste Grüsse aus dem nebeligen Lyss


    Roland

  • Guten Abend


    Auch mein Display zeigt das gewollte an :-).


    Bin aber nicht 100% sicher ob ich die Lichtschranken richtig angeschlossen habe. Bei beiden ist Ruhezustand die rote LED aktiv, sobald ich diese anstosse ist auch die grüne aktiv und erlischt nachdem sie wieder "frei" sind.


    Gruess

    Erich

  • Zwischenschritt für Typ C und D - Keypad Handling


    Wir benötigen einen Taster, um die Anzeige zu löschen, damit das Speed-o-Meter für die nächste Messung bereit ist. Wenn wir schon ein Keypad-Shield mit Tastern haben, wollen wir einen davon für diesen Zweck brauchen. Wir haben insgesamt sechs Taster:

    - Derjenige ganz rechts ist der Reset-Taster für den Arduino. Er hat die gleiche Funktion wie der Taster auf dem Arduino selber, nämlich den Arduino neu zu starten. Über diesen können wir NICHT nach unserem Gutdünken verfügen.

    - Derjenige ganz links (Select) steht zur freien Verfügung

    - Die inneren vier, in einem Trapez angeordneten, sind gedacht für links, ab, auf und rechts. Auch über diese können wir frei verfügen.

    Ich schlage vor, dass wir die Select-Taste (die linke) für das Löschen der Anzeige und das Bereitstellen der Speed-o-Meter für neue Messungen verwenden.


    Damit wir nicht für jeden Taster einen eigenen digitalen Eingang verwenden (eigentlich verschwenden) müssen, hat sich der Entwickler des Keypad-Shields etwas einfallen lassen. Die fünf Taster (alle ausser dem Reset) sind intern in einer Anordnung von Widerständen als Spannungsteiler verbunden. Dieser ist fest mit dem analogen Eingang A0 verdrahtet. Durch diesen Trick verursacht jede Taste eine andere Spannung am A0, die wir per Programm erkennen können.


    Die Funktion buttonPressedOnKeypad() liest nun den A0 ein, stellt fest, welcher Taster gedrückt worden ist und meldet das ans aufrufende Programm zurück.


    Übernehmt folgendes Programm in die Sandbox (oder wie ihr auch immer ein Test-Programm nennt) und probiert es aus:

    Zeilen 5 bis 10: Diese Konstanten definieren Rückgabe-Werte für die einzelnen Taster. Die Verwendung von symbolischen Konstanten anstatt blossen Nummern, macht das Programm leserlicher und damit leichter verständlich.


    Zeilen 36 bis 44: Dies ist eine neue Funktion. Sie liest den analogen Eingang A0 ein und speichert den Wert in inpVal vom Typ int. Je nach eingelesenem Wert bringt die Funktion eine der oben definierten Konstanten zurück. Die beiden Typen C und D liefern leicht unterschiedliche Werte, weil sie unterschiedliche Spannungsteiler eingebaut haben. Ich habe aber Grenzwerte (in den if-Statements) ermitteln können, die für beide Typen passen.



    Auf dem Display müsste jetzt angezeigt werden, was im Moment gedrückt ist.


    Wenn es funktioniert, müsstet ihr die Konstanten auf den Zeilen 5 bis 10 ins Speed-o-Meter Programm übernehmen (im oberen Teil vor der setup() Funktion. Die Funktion buttonPressedOnKeypad() (Zeilen 36 bis 44) kann als neue Funktion unten angehängt werden.



    Zum Schluss fügt noch folgende Funktion dazu:

    Code
    bool clearButtonPressed() {
      if (buttonPressedOnKeypad() == KEYPAD_BUTTON_SELECT) {
        return true;
      } else {
        return false;
      }
    }

    Diejenigen mit Typ A oder B haben bekanntlich kein Keypad Shield. Diese müssen sich mit einem gewöhnlichen Taster begnügen für die Rücksetzung der Werte. Die Funktion clearButtonPressed() wird nun als Version für Keypad (siehe oben) und als Version für gewöhnliche Taster verfügbar sein (nächster Beitrag).


    Wir (Typ C und D) brauchen den gewöhnlichen Taster nicht mehr. Diesen können wir entfernen und auch die beiden Programmzeilen

      const byte PIN_PUSH_BUTTON = 3;

      pinMode(PIN_PUSH_BUTTON, INPUT_PULLUP);

    brauchen wir nicht mehr.

  • Zwischenschritt für Typ A und B - Taster Handling


    Wir benötigen einen Taster, um die Anzeige zu löschen, damit das Speed-o-Meter für die nächste Messung bereit ist. Da wir kein Keypad-Shield mit Tastern haben, behelfen wir uns mit einem gewöhnlichen Taster, der gemäss Beitrag 74 angeschlossen ist.


    Die beiden Programmzeilen

    const byte PIN_PUSH_BUTTON = 3;

    pinMode(PIN_PUSH_BUTTON, INPUT_PULLUP);

    müssten eigentlich schon im Programm vorhanden sein. Ansonsten bitte ergänzen.


    Übernehmt folgendes Programm in die Sandbox (oder wie ihr auch immer ein Test-Programm nennt) und probiert es aus (die Spezialitäten für Typ B natürlich entsprechend angepasst):

    Auf dem Display müsste jetzt angezeigt werden, wenn der Taster gerade gedrückt ist.

  • Die gedrückten Tasten werden korrekt angezeigt, dieser Teil funktioniert bei mir.


    Das Speed-o-Meter Programm lässt sich fehlerfrei kompilieren, es passiert aber nichts wenn ich die Tasten drücke. Hat das damit zu tun, dass in der Zeile 16 und 17 ein Wert hineingeschrieben ist?

    Gruss Erwin



    Wer rast, der verpasst das Leben.


    Kein Platz für weitere Sammelstücke ist nur eine faule Ausrede. ;) Es gibt für alles eine Lösung.

  • Das Speed-o-Meter Programm lässt sich fehlerfrei kompilieren, es passiert aber nichts wenn ich die Tasten drücke. Hat das damit zu tun, dass in der Zeile 16 und 17 ein Wert hineingeschrieben ist?

    Erwin, hier passiert nichts, weil noch gar nichts passieren soll :) . Die Funktion clearButtonPressed() ist erst vorbereitet und wird erst im nächsten Beitrag aufgerufen. So lang ist noch Geduld gefragt.