ich verzweifle grade an einer vermutlich einfachen Funktion. Ich habe zwar einen passenden Beitrag gefunden aber es will einfach nicht funktionieren. Nach drei Tagen versuche ich es mal hier. Bitte habt Nachsicht mit mir, mein letzter Beitrag in einem Forum dürfte einige Jahre zurückliegen.
Ich möchte einfach nur ein Relais schalten. Im Code befindet sich ein Ultraschall-Sensor. Bei einer bestimmten Entfernung in cm soll es schalten. Es funktioniert sogar sehr gut mit dem (mittlerweile) eingebauten Servo und auch mit dem Relais. Leider schaltet es beim einschalten Stromversorgung einmal sofort. Das möchte ich nicht, es soll nur dann schalten, wenn die Entfernung stimmt.
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define Steuer_PIN 8 //==> Pin für Relais-Steuerung
LiquidCrystal_I2C lcd(0x27,16,2); // Set the LCD address to 0x27 for a 16 chars and 2 line display
int trigPin =12 ; // TRIG
int echoPin =11 ; // ECHO
Servo servo;
float duration_us, distance_cm;
void setup() {
Serial.begin (9600);
pinMode(Steuer_PIN, OUTPUT);
digitalWrite(Steuer_PIN,HIGH);
lcd.init(); // Initialize the lcd
lcd.backlight(); // Open the backlight
pinMode(trigPin, OUTPUT); // Config trigger pin to output mode
pinMode(echoPin, INPUT); // Config echo pin to input mode
servo.attach(9);
}
void loop() {
// Generate 10-microsecond pulse to TRIG pin
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Measure duration of pulse from ECHO pin
duration_us = pulseIn(echoPin, HIGH);
// Calculate the distance
distance_cm = 0.017 * duration_us;
lcd.clear();
lcd.setCursor(0, 0); // Start to print at the first row & first line
lcd.print("Abstand: ");
lcd.setCursor(0, 1); // Print at the first row & second line
lcd.print(distance_cm);
lcd.print(" cm");
if (distance_cm <= 100 || distance_cm >=120){
servo.write(90);
digitalWrite(Steuer_PIN,LOW);
delay(500);
}
else {
servo.write(0);
digitalWrite(Steuer_PIN,HIGH);
}
if (distance_cm > 400 || distance_cm <= 0){
Serial.println("zu weit !!");
}
else {
Serial.print(distance_cm);
Serial.println(" cm");
}
delay(500);
}
Wer kann mich erlösen und mir helfen? Muss ich um einen Pin zu schalten eine andere Library verwenden?
Der Steuer_Pin schaltet sofort beim Anschluß der Stromversorgung. Dabei spielt es keine Rolle, ob ich ein Relais oder ein MOSFET Modul verwende. Die Kontroll LED signalisiert immer kurz einen Schaltvorgang. Bei Verwendung des Servo ist alles gut. Nehme ich Abstand auf z.B. 1,10m dreht der Servo. Ändere ich den Abstand, dreht er zurück.
jetzt muß ich vielleicht aufpassen das ich alles richtig wiedergebe und nichts falsch erzähle. Das Board wird im Geräte Manager als CH340 angezeigt. Ich lade den Code mit Board: "Arduino Nano" Prozessor ATmega328P (Old Bootloader) hoch. Das angesteuerte Gerät ist im Moment (nach meinen Tests) ein MOSFET
Ein Schaltplan wäre bei dem Quatsch mit dem angeschlossenen Servo vielleicht schon fast zu peinlich. Sollte ja nur ein Test sein.
Das Ding ist ein von mir gebauter Geocache, den ich schon einige Zeit mit dem Servo betreibe. Jetzt möchte ich statt des Servo einen Magnetschalter 5V einbauen. Lacht mich bitte nicht aus aber die Verkabelung wird nachdem alles funktioniert wieder richtig gemacht.
Und was genau ist das für ein Mosfet ?
Du musst uns schon komplette Infos geben, wenn wir helfen sollen.
Ups....sorry. Den Mosfet habe ich leider übersehen.
Und bedenke dabei, der Mosfet wird meist anders angesteuert a,s ein fertiges Relaismodul, das wir immer noch nicht kennen.
Und es ist kein LogicLevel Mosfet. Da gibt es schnell Probleme.
Und vorsicht bei deinem Aufbau gibt es schnell einen Kurzschluss und dann ist alles hin.
Das war nur ein Versuch für ein LOW-aktives Relais. Da Du nicht geschrieben hast, was Du benutzt, ist Hilfe schwer. Wenn es HIGH-aktiv ist, dann eben auf LOW setzen oder genauer beschreiben, was Du schalten willst.
Wenn ich das hier beenden soll, schreibt einfach einen dezenten Hinweis. Mit meinen geschriebenen Erklärungen kann man vielleicht nicht unbedingt etwas anfangen, das ist selbst mir klar.
@wwerner Habe LOW und HIGH bereits versucht. Bin ja echt kein Profi aber bevor ich hier frage versuche ich natürlich erstmal die banalen Dinge. Danke trotzdem für den Tipp @fony Ja, ich sagte ja, das die Verkabelung im Moment peinlich ist aber nach so vielen Versuchen sieht es doch bei Vielen irgendwann so aus. GND ist klar. @HotSystems Danke für den Hinweis mit dem Kurzschluß WAGO Klemmen sind wahre Alleskönner. Mir ist noch kein Kabel raus gerutscht. Relais habe ich hier gekauft
Mittlerweile weiß ich natürlich auch nicht mehr was ich noch alles schon probiert habe, daher sind Eure Hinweise auf jeden Fall alle Zielführend. Was mich wundert, ist die Tatsache, daß es mit allen angeschlossenen Geräten das selbe Verhalten gibt, außer mit dem Servo. Der wird ja aber über eine Library angesteuert, ist dort vielleicht der Unterschied zu suchen?
Nicht wen du den MOSFET mit LOW im Setup schaltest das ist ein N MOSFET was wird mit High eingeschaltet.
Wenn es um Relais Module geht sind auch welsche was mit High einschalten, das muss man testen wen kein Datenblatt dabei ist.
Natürlich muss man ganzen Sketch anpassen, zu dem was man nutzt
... man man man, da gibt sich jemand die Mühe die Lösung zu schreiben und ich habe es erst nicht gesehen.
@fony Das war die Lösung. Bin per Remote auf dem PC, an dem das angeschlossen ist und habe das MOSFET jetzt mit LOW geschaltet und hoch geladen. Bin in den Keller gerannt und siehe da ... so soll es sein.
Vielen Dank an ALLE !! die meine Unwissenheit mit viel Geduld ertragen haben. Manchmal ist es banal und man sollte (wenn auch nur mit Bleistift und Zettel) einen Schaltplan erstellen. Ich verspreche die Verkabelung "Kurzschlussfrei" zu bauen und benutze trotzdem die WAGO Klemmen.
Es ist damit zu rechnen, daß ich diese Community nochmal irgendwann bemühen werde. Tolle Community und sehr freundliche Menschen hier! Top
Das mag durchaus sein, nur ich sehe in deinem Aufbau keine WAGO Klemmen.
Sind die Kabel etwa schon rausgerutscht ?
Das gebe ich gerne zurück. Speziell wenn alle Fragen der Helfer zeitnah vom Fragesteller beantwortet werden, dann kann man auch sehr gut helfen.
Und das macht allen Helfern Spaß. Leider ist das nicht immer so.