Hallo zusammen,
ich habe mir an einem Arduino R4 einen E18-D50NK Sensor angeschlossen. Dieser setzt die Variable State auf 1 sobald etwas in der Nähe ist. Über einen Taster setze ich die Variable wieder auf 0. Den Zustand zeige ich mir über die serielle Schnittstelle an. Das funktioniert auch einwandfrei - solange die Schaltung mit dem USB Kabel am Rechner hängt. Sobald ich das USB Kabel abklemme und auf ein Netzteil wechsle, geht der Arduino zwar an, aber die LED auf dem Arduino bleibt dauerhaft an und lässt sich durch den Taster nicht auf 0 setzen.
Ich habe den Widerstand zwischen Außenkontakt Klinkenstecker und GND gemessen; dieser ist kleiner 1 Ohm. Zusätzlich habe ich den Arduino GND mit der Heizung verbunden um zusätzliche Erdung zu schaffen; leider ohne Erfolg.
Sobald ich das Netzgerät einstecke - egal ob mit oder ohne USB Anschluss zum Rechner - bleibt die LED auf dem R4 an und lässt sich nicht quittieren.
Mein Scetch sieht folgendermaßen aus:
const int sensorPin = 2; // Pin des Näherungsschalters
const int buttonPin = 3; // Pin des Tasters
int state = 0; // Zustand, 0 oder 1
bool buttonPrevState = HIGH; // vorheriger Zustand des Tasters (entprellt)
void setup() {
pinMode(sensorPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP); // Taster mit internem Pullup
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
int sensorState = digitalRead(sensorPin);
int buttonState = digitalRead(buttonPin);
// Wenn Sensor auslöst, setze state auf 1 (bleibt so)
if (sensorState == HIGH) {
state = 1;
}
// Erkennung eines kurzen Tastendrucks (Flanke von HIGH nach LOW)
if (buttonPrevState == HIGH && buttonState == LOW) {
state = 0; // Zurücksetzen der Variable bei Tastendruck
}
buttonPrevState = buttonState; // Zustand merken
Serial.println(state); // Ausgabe aktueller Zustand
if (state == 1)
{
digitalWrite(13, HIGH);
}
else
{
digitalWrite(13, LOW);
}
delay(1); // Verzögerung für bessere Lesbarkeit
}
An was kann es denn liegen?
Vielen Dank für Eure Tipps!
const int sensorPin = 2; // Pin des Näherungsschalters
const int buttonPin = 3; // Pin des Tasters
bool state = 0; // Zustand, 0 oder 1
const uint8_t ledPin = 13;
void setup()
{
pinMode(sensorPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP); // Taster mit internem Pullup
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
bool btnIsPress()
{
static bool ret = false;
static uint32_t pressTime = 0;
const uint32_t debounceTime = 50;
if (digitalRead(buttonPin) == LOW)
{
if (ret == false)
{
ret = true;
pressTime = millis();
}
}
else if (millis() - pressTime > debounceTime)
{
ret = false;
}
return ret;
}
void loop()
{
bool sensorState = digitalRead(sensorPin);
if (btnIsPress() == true) // Erkennung auf gedrückte Taste
{ state = LOW; }
else if (sensorState == HIGH) // Wenn Sensor auslöst, setze state auf 1 (bleibt so)
{ state = HIGH; }
Serial.println(state); // Ausgabe aktueller Zustand
digitalWrite(ledPin, state);
}
Der soll die LED mit dem Tastendruck aus machen und aus lassen, solange die Taste gedrückt ist, egal ob der Sensor die dann wieder einschalten will.
Sobald die Taste losgelassen ist, wird der Sensor ausgewertet.
// Edit:
Der Sensor arbeitet bei 6V Mindestspannung und braucht 300mA.
Mich würde nicht wundern, wenn der im Netzteilmodus einfach dauerhaft HIGH liefert.
@my_xy_projekt Ich habe gerade die Spannung zwischen 5V und GND in den verschiedenen Konfigurationen gemessen. Mit nur USB Kabel 4,72 V mit nur Netzteil 5,01 V und mit beidem 5,01 V.
Du schreibst, der Sensor benötigt 6 V. Die bekommt er ja nie über den Arduino, da der nur 5 V ausgibt, oder?
Doch, @my_xy_projekt hat es im Posting #5 nachträglich verkündet. Allerdings weiß ich nicht wie er auf die Werte kommt. Bei den Datenangaben zu dem Sensor, die ich gefunden habe, stand etwas von 5V / 100mA (max.).
Man sollte ja davon ausgehen, dass ein 12V Netzteil so um die 500mA stabil liefern kann. Ich würde ja fast vermuten, wenn es mit dem Netzteil Probleme gibt, dann ist es defekt. Oder der Wandler auf dem R4 Board hat einen Schlag.
Angaben bei Amazon sind oft wie eine halluzinierende KI. Blödsinn.
Spezifikation des einstellbaren digitalen Abstandssensors
Versorgungsspannung: 5V
Stromverbrauch: weniger als 100 mA
Einstellbarer Messbereich: von 5 bis 80 cm
Bereichseinstellknopf - Multiturn-Potentiometer
Ausgangssignal: digital (low wenn ein Objekt erkannt wird, sonst high)
LED-Diode, die die Erkennung des Objekts signalisiert
Reaktionszeit: weniger als 2 ms
Verpolungsschutz
Arbeitstemperatur: -25 °C bis +55 °C
Durchmesser: 18 mm
Sensorlänge: 45 mm
Wenn Du meinen Code aufspielst, sollte während der gedrückten Taste die LED aus gehen.
Lässt Du die Taste los und ie geht sofort wieder an, dann zieht der Sensor den Eingang hoch.
Hab ein Amperemeter in die 5V Leitung gehängt. Der Sensor hat 3,6 mA und sobald ein Gegenstand in die Nähe kommt, sprich, er löst aus, geht er auf 2,94 mA runter.
Wenn ich mit Netzteil arbeite, bleibt der Wert stets auf 3,15 mA.
@my_xy_projekt: ich probiere als nächstes deinen Code und melde mich.