ich steh mal wieder vor einem Problerm.
Ich möchte mit dem o. a. unipolaren Hallsensor die Drehzahl eines Verbrennungsmotors erfassen. Dazu komt auf die Welle ein kleiner Magnet ( oder 2 ).
Ich habe nun im Testaufbau versucht, die 'Schaltzustände' des Sensors auszuwerten. Leider kommt auf dem digitalen Pin des Arduino nix oder nix richtiges an.
Ich versuche einfach ein HIGH oder LOW zu erkennen.
Am Sensor sind die 5V und Ground vom Board angelegt. Den Ausgang habe ich an einem digitalen Pin des Arduino angeschlossen. Da tut sich nichts.
Auch das einlöten eines 4,7K Widerstandes ( hat mir jemand empfohlen ) zwischen 5V ( Plus ) und dem Ausgang brachte keine Änderung.
Schalten tut der Sensor, denn eine LED zwischen 5V ( Plus ) und dem Ausgang geht, wenn ich einen Magneten benutze.
nettworker:
Ich habe nun im Testaufbau versucht, die 'Schaltzustände' des Sensors auszuwerten. Leider kommt auf dem digitalen Pin des Arduino nix oder nix richtiges an.
Ich versuche einfach ein HIGH oder LOW zu erkennen.
Dein Hallsensor wird wohl nur auf einen Magnetpol reagieren. Also ggf. mal den "Nordpol" am Sensor vorbeiführen, wenn er beim Vorbeiführen des "Südpols" nicht schaltet.
Und er schaltet natürlich mit "Open-Collector Ausgang" gegen Masse durch. Da muss die (von Dir nicht gezeigte) Schaltung natürlich auch stimmen, und nicht nur der Sketch und der richtige Pol am Sensor.
Die Schaltung sieht so aus, das der V und Masse mit 5V und GND vom Arduino beschickt werden.
Der Ausgang ist mit PIN 3 vom Arduino verbunden.
Beim 2. Versuch habe ich zwischen V und Ausgang einen 4,7k Widerstand eingelötet.
Schalten tut der Hallsensor ja, denn wenn ich zwischen V und Ausgang eine LED anschliesse, wird die ja geschaltet.
Also einmal in einer halben Sekunde liest Du den Zustand aus und gibst ihn auf Serial aus, und zwischendurch wird der Sketch immer für eine halbe Sekunde blockiert.
Mal angenommen, der Sensor wäre nun immer eine halbe Sekunde HIGH und eine halbe Sekunde LOW, dann würdest Du immer abwechselnd HIGH und LOW angezeigt bekommen.
Aber wenn der Sensor beispielsweise immer eine Viertelsekunde HIGH und eine Viertelsekunde LOW wäre, dann würdest Du nach jeweils einer halben Sekunde immer exakt wieder denselben Zustand haben und anzeigen wie eine halbe Sekunde vorher.
Was soll denn der Quatsch?
Warum blockierst Du den laufenden Sketch ständig für eine halbe Sekunde?
Und warum wertest Du nicht die Zustandswechsel aus, also wenn das Signal von HIGH auf LOW wechselt und umgekehrt?
michael_x:
Nö, nur die Anzeige "North" / "South", bis zur ersten Eingabe eines Zeichens über Serial.
Danach wird alle 500 ms einmal gemessen und angezeigt.
Solange kein Zeichen über Serial reinkommt, wird die Abfrage " if( statePin==HIGH)" nicht ausgeführt (blockiert).
Evtl. falsch ausgedrückt.
Eieieiei, da hab ich ja wieder nen Bock geschossen, wieder einfach was an Code kopiert ( aus einem ähnlichen Post ) ohne genau hinzuschaun und nachzuvollziehen. Echt dämlich.....
Stimmt das, das der Sensor nen Open Collector Ausgang hat, der zwingend einen Lastwiderstand zwischen 5V(+) und dem Ausgang benötigt? Wäre schön, wenn die Hardware keine Probleme machen würde.
Hab mir gestern schon bei der Messerei mit dem Multimeter und dem sonstigen Probieren 2 Arduinos abgeschossen. Vermutlich nen kurzen mit den Messspitzen am Sensor verursacht.
nettworker:
Stimmt das, das der Sensor nen Open Collector Ausgang hat, der zwingend einen Lastwiderstand zwischen 5V(+) und dem Ausgang benötigt? Wäre schön, wenn die Hardware keine Probleme machen würde.
Ja, das ist bei denen üblich. Egal welchen Typ man genau hat
Danke, aber das sind für mich böhmische Dörfer.....
Ich bin im Coden ( in anderen Programmiersprachen ) einigermassen bewandert, deshalb ärgert mich ja auch der blöde Fehle im Code. Aber bei den Elektronikgeschichten brauch ich halt immer etwas Hilfe....
Hab ich gesehen, ich war mir nur nicht sicher, ob der Widerstand wegen der LED drin war oder ob der generell da rein gehört.
Eigentlich generell. ( 280 Ohm bis 1k, damit die LED ein paar mA Strom kriegt. Nur zum Messen auch größer )
Geht aber stattdessen auch mit internem Input-Pullup (entspricht ca. 30k, da leuchtet dann keine LED)
// Einfach Sensor Ausgang an Pin 3 legen
void setup() {
Serial.begin(9600);
pinMode(3, INPUT_PULLUP);
}
void loop() {
static bool oldstate;
bool state = digitalRead(3);
if (oldstate != state) {
oldstate = state;
Serial.println(state? "HIGH" : "LOW"); // je nach state "HIGH" oder "LOW" ausgeben
}
}
P.S.
Mit Mess-Spitzen sollte man eigentlich keinen Arduino kaputtkriegen, mit Kurzschlüssen, 5V oder mehr an den falschen Stellen evtl. schon. Aber ohne OUTPUT Pins und mit nur 5V auch eher seltsam ...