Hallo ich kann mir selber nicht erklären warum es nicht funktioniert.
Ich habe einen HallSensor 49E den ich an meinen Arduino angeschlossen
habe. - Pin and GND, 5V an + und S Pin an Interrupt Pin 2.
Die Datenleitung S und 5V habe ich über einen 10 kOhm Widerstand auf
einem Breadboard miteinander verbunden
Mein Code ähnlich den kursierenden Beispielen sieht wie folgt aus:
void setup() {
pinMode(2, INPUT); // Eingangspin auf Eingang
stellen
// digitalWrite(2, HIGH); // und Pullup-Widerstand
einschalten
Serial.begin(115200);
// Interrupt 0 auf Routine readmicros setzen
attachInterrupt(digitalPinToInterrupt(2), detectMagnet, FALLING);
Serial.println("Hall-Effekt-Sensor Test");
}
void loop() {
Serial.println(digitalRead(2));
delay(1000);
}
// Interrupt-Routine
// Diese Funktion wird immer dann aufgerufen, wenn ein Magnet vom
Arduino erkannt wird
void detectMagnet() {
Serial.println("Magnet erkannt");
}
Mein Problem ist, dass immer eine logische 1 ausgegeben wird. Entferne
ich aber den 10kOHM Widerstand wird ununterbrochen das "Magnet erkannt"
Event aufgerufen und ausgegeben - sobald ich dann einen Magnet
dranhalte, wird das event nicht mehr aufgerufen und eine logische 1
ausgegeben.
Die Preisfrage ist jetzt warum zum Teufel es nicht andersrum mit dem
Pullup Widerstand funktioniert (den input PIN als Pullup Widerstand zu
deklarieren hab ich auch schon versucht ohne Erfolg).
Für jede Hilfe dankbar.
Nach kurzer Recherche ist der 49E ein linearer Sensor, den du direkt an
einen ADC Input ( Ohne PullUp) anschließen musst.
Die Höhe der Spannung ist proportional des Magnetfelds.
Nils schrieb:> Serial.println("Magnet erkannt");
Serielle Ausgaben in einer ISR können zur Totalblockade führen.
Da Serial selber Interrupts benötigt/verwendet.
Tipp: Vermeiden.
> den du direkt an> einen ADC Input ( Ohne PullUp) anschließen musst.
Der Widerstand scheint schon in Ordnung zu sein, laut Datenblatt ist es
ein Open Drain Output.
Also wie gesagt mit Widerstand krieg ich gar kein Signal. Aber ohne
sendet er permanent ein Signal, was ja nicht Sinn der Sache sein kann.
Er stoppt dann praktisch nur wenn ein Magnet detektiert wird.
Es ist auch vollkommen unabhängig davon ob ich im event FALLING, RISING
oder etwas Anderes reinschreibe.
Für mich macht das keinen Sinn. Ich dachte immer das sind Opencollector
weshalb man den Widerstand braucht...
Nils schrieb:> Die Preisfrage ist jetzt warum zum Teufel es nicht andersrum mit dem> Pullup Widerstand funktioniert (den input PIN als Pullup Widerstand zu> deklarieren hab ich auch schon versucht ohne Erfolg).
Hast du da einfach mal ein Messgerät an den Pin gehalten und die
Spannung kontrolliert? Welche Spannungen hast du in welcher
Konstellation bei welcher Belegung gemessen? Der AVR funktioniert
nämlich nur, wenn die Eingangsspannung an seinem Pin so ist, wie es im
Datenblatt verlangt wird. Wenn das funktioniert, dann kannst du
anfangen zu programmieren.
Ich habe leider kein Spannungsmessgerät.
Ja es ist diese Platine bei Amazon, heißt analog auswerten das ich es
nicht über eine Interruptroutine des Arduinos benutzen kann? Oder wie
genau ist das zu interpretieren. Eigentlich will ich ja über die
fallende Flanke auslesen....
Nein nichts. Allerdings steht ja unten in der Beschreibung:
4. Es ist durch den Spannungsregler, Hall Voltage Generator,
Differentialverstärker, Schmidt Trigger, Temperaturkompensation und die
Open Collector Output Stage Circuit bestehend aus magnetisch
empfindlichen Sensor Circuit
5. Sein Eingang für die magnetische Induktionsintensität ist der Ausgang
ein digitales Spannungssignal
Die PINS sind meines Erachtens nach GND(-),5V und Daten (S)
Nils schrieb:> 4. Es ist durch den Spannungsregler, Hall Voltage Generator,> Differentialverstärker, Schmidt Trigger, Temperaturkompensation und die> Open Collector Output Stage Circuit bestehend aus magnetisch> empfindlichen Sensor Circuit> 5. Sein Eingang für die magnetische Induktionsintensität ist der Ausgang> ein digitales Spannungssignal
Lausig übersetzt, das ist ja kaum verständlich.
Mal anders: Ist auf dem Chip wie auf dem Foto bei Amazon die Bezeichnung
A3141 zu lesen?
Falls ja: Dann passt, was man der "Beschreibung" entnehmen kann, recht
gut. Also doch Digital und braucht einen Pullup.
Datenblatt für den Sensor ist im Internet zu finden. Sehr viel besser
als diese lausige Beschreibung bei Amazon.
Das ist ein "Switch", also ein digitaler Ausgang, der nur das
Überschreiten einer bestimmten Magnetfeldstärke anzeigt.
https://arduinomodules.info/ky-003-hall-magnetic-sensor-module/
"The KY-003 Hall Magnetic Sensor consists of a 3144EUA-S sensitive
Hall-effect switch for high-temperature operation, a 680Ω resistor and a
LED."
https://www.mpja.com/download/A3144EUl.pdf
Das Datenblatt von Allegro. 3,3V ist anscheinend zu wenig, ab 4,5V
Betriebsspannung brauchbar und ein pull-Up ist nötig, da er nur einen
open-collector Ausgang hat. Der (680 Ohm) sitzt aber schon auf der
Platine.
c-hater schrieb:> So wie's aussieht, ist das ein rein analoger Hallsensor.
Laut dieser Seite nicht:
http://sensorkit.joy-it.net/index.php?title=KY-003_Hall_Magnetfeld-Sensor_Modul
(auch wenn da "wieder" was von analog auslesen steht)
Vielleicht mal mit der Lupe da ran gehen.
Denn, ohne genau zu wissen, was das jetzt für eine Kröte ist, würde ich
mir die nicht in den Mund (an den Arduino) stecken.
Also auf dem Sensor selbst steht 49E und darunter 419.
Deswegen kam ich auf die Bezeichnung. Auf dem Chip selber steht nix, ich
hab mal ein Bild angehängt.
Mein Problem ist aber das ich inzwischen alle Varianten durchhabe. Mit
Pullup, ohne, zich programmatische Varianten. Kann mir jemand vllt auch
eine Alternative empfehlen die auf jeden Fall funktioniert?
Ok ich hab den Fehler gefunden, anscheinend waren auf mehreren der
Module wie im Bild ersichtlich keine LEDs bzw die Widerstände montiert.
Kann ja nicht funktionieren.... Danke für die Hilfe euch allen
Nils schrieb:> anscheinend waren auf mehreren der Module wie im Bild ersichtlich keine> LEDs bzw die Widerstände montiert.
Nett.
Das hätte man mit dem Messgerät innerhalb einiger Minuten festgestellt.
Nils schrieb:> Ich habe leider kein Spannungsmessgerät.
Ändere das.
Für drei Euronen hat die Raterei ein Ende: Ebay 362439762108
Elektronik zusammenzubasteln ohne Multimeter ist wie einen Reifen
wechseln nur mit Zange und Hammer. Mit ein wenig Glück und Zufall geht
das schon...
Hallo,
Lothar M. schrieb:> Elektronik zusammenzubasteln ohne Multimeter ist wie einen Reifen> wechseln nur mit Zange und Hammer.
Eher wie kochen ohne Messer. Und beim Kochen sollte man auch immer
mehrere Messer zur Hand haben.
rhf