Wie sendet man ein digitales Signal, wenn der analoge Sensor (QRE1113) einen Schwellenwert erreicht, ohne auf den analogen Eingangspin zurückzugreifen?

Ich baue einen Miniatur-Flipper und versuche, einen Infrarot-Reflektorsensor (QRE1113) zu verwenden, um zu erkennen, wann der Ball darüber rollt (ich habe die ursprüngliche Idee aus Ben Hecks Videos).

In meinen Tests reagiert der Sensor angemessen auf einen darüber rollenden Ball, und es ist einfach, diese Bestimmung über den analogen Arduino-Eingang vorzunehmen.

Ein Flipper hat jedoch viel mehr Rollover-Sensoren als der Arduino analoge Eingänge hat (das endgültige Spielfeld wird ~ 10-20 Rollover haben).

Mein Arduino-Code muss den Analogwert des Sensors nicht kennen, er muss nur wissen, ob der Wert unter einen bestimmten Schwellenwert gefallen ist, was bedeutet, dass sich eine Kugel auf dem Sensor befindet.

Im Idealfall möchte ich diesen analogen Wert in einen niedrigen oder hohen Wert umwandeln, je nachdem, ob dieser Schwellenwert erreicht wurde, und dieses Ergebnis dann an einen digitalen Pin anstelle eines analogen senden.

Ich habe dieses Problem irgendwie gelöst, indem ich den Sensor an einen digitalen Pin angeschlossen habe, aber mit einem Potentiometer die Empfindlichkeit so eingestellt habe, dass die Schwellenspannung, die ich erkennen möchte, mit der Schwelle übereinstimmt, die Arduino als hoch oder niedrig ansieht.

Dies ist im Wesentlichen identisch mit diesem Schema (aber ich verwende NICHT das Sparkfun-Breakout-Board, ich verwende den bloßen Sensor): http://cdn.sparkfun.com/datasheets/Sensors/Infrared/QRE1113%20Line%20Sensor% 20Breakout%20-%20Analog.pdf

Der einzige Unterschied zu diesem Schema besteht darin, dass ich anstelle des 10K-Widerstands anstelle des 10K-Widerstands einen 1M-Widerstand und ein 500K-Potentiometer in Reihe habe, wo sich der 10K-Widerstand befinden würde (ich denke, ihr Schema hat einen Fehler, ein 10K-Widerstand hat mir schreckliche Ergebnisse geliefert und durch Versuch und Irrtum fand ich, dass 1M am besten funktioniert).

Diese Lösung funktioniert, aber sie fühlt sich klobig an, weil ich nicht wirklich ein richtiges 3,3-V-HIGH- oder 0-V-LOW-Signal erzeuge und stattdessen ein analoges Signal sende, das zufällig mit dem übereinstimmt, was Arduino als die Ränder eines Hochs oder eines Tiefs betrachtet.

Gibt es einen besseren "offizielleren" Weg, dies zu tun, anstatt meines Hacks, der es mir ermöglichen würde, 0 V oder 3,3 V an den digitalen Arduino-Pin zu senden, basierend darauf, dass der analoge Sensor einen bestimmten Schwellenwert erreicht (idealerweise einstellbar, da es einige Versuche und Irrtümer erfordert). um die richtige Empfindlichkeit zu erreichen).

Ich baue diese Maschine hauptsächlich, um Elektronik zu lernen, also je "niedriger" die Lösung, desto besser. Ich weiß, dass es ADC-Boards gibt, die die Anzahl der analogen Eingänge, die ich habe, durch "Magie" erweitern, aber es wäre viel befriedigender, etwas aus grundlegenden Komponenten zu bauen, die ich verstehen kann.

PS: Ich bin hauptsächlich ein Software-Typ. Das Bauen elektronischer Schaltungen ist neu für mich. Wenn ich also falsch über das Problem nachdenke, lassen Sie es mich auch wissen.

Dies ist, was Komparatoren tun (Sie möchten wahrscheinlich den Schmitt-Trigger-Typ ...).
Jawohl. Ein Komparator. Sie möchten wahrscheinlich den Schwellenwert global und einstellbar machen, möglicherweise vom Mikro aus. Erwarten Sie, dass Sie etwas Aufhebens machen, damit es richtig funktioniert.

Antworten (2)

Wie in den Kommentaren erwähnt, möchten Sie einen Komparator.

Auf einem hohen Pegel hat ein Komparator zwei Eingänge, einen positiven und einen negativen, und einen Ausgang, der immer dann hoch ist, wenn der positive Eingang eine größere Spannung als der negative Eingang hat. Sie werden vielleicht bemerken, dass dies genau so ist wie bei Operationsverstärkern, wenn Sie ihnen kein Feedback geben. Tatsächlich ist die Schaltung für einen Komparator der eines Operationsverstärkers sehr ähnlich, und Sie können einen Operationsverstärker als Komparator verwenden, aber speziell angefertigte Komparatoren funktionieren besser.

Wie Eugene in den Kommentaren betonte, möchten Sie wahrscheinlich einen Schmitt-Trigger-Komparator, der anstelle eines einzelnen Schwellenwerts zwei hat; nachdem er hoch gegangen ist, bleibt er hoch, bis er den niedrigeren der beiden Schwellenwerte erreicht, und nachdem er niedrig geworden ist, bleibt er niedrig, bis er den höheren Schwellenwert erreicht. Dies hilft bei der Störfestigkeit.

Vielen Dank! Der Schmitt-Trigger scheint es geschafft zu haben. Ich muss einige Tests durchführen, um zu sehen, ob dies empfindlich genug ist, aber selbst nachdem ich den Ball mit sehr hoher Geschwindigkeit über den Sensor geschlagen hatte, konnte ich ihn erkennen lassen!
mit 20 digitalen Rollover-Ports?

Eine Lösung ist:

  • binäre Erkennung mit Hysterese, MUX und Verwendung eines PISO-Registers (Parallel In Serial Out), Erkennung von Sensoren in der Software und Dekodierung von Ereignissen oder Erkennung einzelner Ereignisse in der Hardware, die dann gelöscht werden, wenn sie durch das PISO-Register gesendet werden.

Sie können beliebig viele HEX-Schmitt-Trigger-ICs verwenden, um das analoge Signal in ein digitales umzuwandeln, vorausgesetzt, das Signal geht unter 1/3 und über 2/3 Vcc.

Wenn beispielsweise ein Ball, der ein IR-Signal blockiert, = "1" ist, kann dies als Vorderflanke verwendet werden oder auf die Hinterflanke warten oder einfach den Zustand an den MUX senden.

Die MUX-Dauer hängt von der Geschwindigkeit der 8-Bit-Byte-Unterbrechungsabtastung der Ballerkennung und der Software-XOR-Decodierung ab.

Für die Hardware-Decodierung können Sie wieder die Vorderkante oder die Hinterkante bestimmen und einfach einmal "1" senden und löschen, wenn das Byte gelesen wird und auf das nächste Ereignis wartet.

Diese ICs sind weit verbreitet. Wenn Sie also nicht damit vertraut sind, hat Digikey sie alle für viele Versorgungsbereiche in CMOS, SMD und THT.

Danke! Der Schmitt-Trigger hat es nach etwas Feinabstimmung geschafft! Um ehrlich zu sein, verstehe ich den Rest mit MUX und PISO nicht ganz. Was würde dies bewirken, was der Schmitt allein nicht tun würde? Soll das nur mehr Kontrolle darüber geben, was eine 1 ist und was eine 0 ist?
Du hattest 2 Probleme. Lärm und unzureichende Anschlüsse. Meine Antwort löst beides. Der andere nicht. PISO ist ein paralleler serieller Eingang.
Ich bin mir ziemlich sicher, dass meine Antwort beide löst, da das Problem mit den unzureichenden Ports nicht genügend ADC- Ports waren. Die Hauptfrage ist, wie man es in ein Signal umwandelt, für das man keinen ADC verwenden müsste.
@Hearth hat es genügend digitale Ports für 20?
Ich bin mir ziemlich sicher, dass jedes Arduino-Modell mindestens 20 digitale Eingänge hat. Ich könnte mich aber irren.