zu mir nicht wundern Ich bin noch nicht lange in der Materie und habe ein Problem.
Ich würde gerne ein Relay schalten bei einem gewissen Impuls/Frequenz diese wird erfasst durch einen NPN Sensor der wird mit 13,8 Volt beaufschlagt und mittels Reihenschaltung zweier Wiederstände auf 5,1 Volt Digitales Eingangssignal zum Arduino Uno weitergeleitet.
Die Digitalschaltung Funktioniert Sensor bekommt etwas Magnetisches vorne ran Arduino bekommt Signal und Relay wird geschaltet.
Nun möchte Ich das aber erweitern durch ein Drehzahl Signal einer Kardanwelle diese hat 4 "Nocken" und soll bei 800 Umdrehung Pro Minute (ca10 km/h das Relay Schalten das die Rundumleuchte eingeschaltet wird.
daran Scheiter Ich Aktuell!!
Ich habe mich mit pulsIn ausprobiert, Ich bekomme ein Signal rein weiß aber nicht wie ich die "if" Bedingung schreiben soll
bedanke mich schonmal für die Unterstützung
int SchalterZustand;
int InputPin = 4;
int RelayPin = 13;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(InputPin,INPUT);
pinMode(RelayPin,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
SchalterZustand = digitalRead(InputPin);
Serial.println(SchalterZustand,DEC);
if (SchalterZustand >= 1)
{
digitalWrite(RelayPin,HIGH);
}
if (SchalterZustand <= 0)
{
digitalWrite(RelayPin,LOW);
}
}
Der schaltet nur mit dem NPN-Transistor nach GND. Desen Betriebsspannung kommt aus dem Ausgang nicht raus. Du musst den Eingang auf INPUT_PULLUP einstellen, damit der ein sauberes HIGH Signal bekommt.
Was willst Du nun genau erfassen? Am Besten wird es sein, wenn Du jeweils die fallende Flanke erfasst, also alten Wert merken, wenn ungleich alter Wert und LOW, dann zählen. Schau Dir mal das Beispiel StateChangeDetection aus der IDE an.
Durch die änderung des Signales 5V 0V kann ich dieses doch Zählen und dadurch dann bei 3200 mal 800 Umdrehung x4 Nocken Signal Wechsel dann denn digitalWrite 13 ausgeben ?
Ja denn wert Habe ich auf LOW gesetzt das nur bei Kontakt mit Metall geschaltet wird
Ich möchte ein Schaltung machen die die Kardanwellen Drehzahl erfässt und bei 800 Umdrehen das Relay schaltet um eine Rundumleuchte zu betreiben
Na dann mach das gleich richtig.
Der PIN geht an den Schalter und vom Schalter gehts nach GND.
Dann wird im Setup der interne Pullup aktiviert und gut ist.
Wenn Du das mit dem Schalter nach +5V machen willst, dann brauchst Du einen externen Pulldown-Widerstand.
Ist recht einfach gemacht. Bis zum loop:
/*
gegeben: 800 UPM
Messzeit: 2 Sek
800/60 = 13,333~ Impulse / sekunde
Startwert auf 25 Impulse / 2 Sekunden
Mindestlaufzeit der Leuchte 5 sekunden
*/
const unsigned long messZeit = 2000; // Zeit in ms
const unsigned long sperrZeit = 3000;// Sperre für Ausschalten
const unsigned long minImpulse = 25; // Anzahl Impulse die auslösen
unsigned long laufZeit; // merker
unsigned long onStart;
unsigned long zaehler;
bool istgemessen = false;
const byte InputPin = 4;
const byte RelayPin = 13;
const byte schalterPin = 5;
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println(F("Start..."));
pinMode(InputPin, INPUT_PULLUP);
pinMode(RelayPin, OUTPUT);
pinMode(schalterPin, INPUT_PULLUP);
}
void loop()
{
if (digitalRead(schalterPin) == LOW)
{
messen();
auswerten();
}
}