Go Down

Topic: Fenstersteuerung im Auto mit Arduino Nano verwirklichen (Read 220 times) previous topic - next topic

laforge-1701e

May 19, 2017, 03:51 pm Last Edit: May 19, 2017, 05:12 pm by laforge-1701e Reason: Insert Code
Hallo Gemeinde,

mir schwebt folgendes vor:

Ich möchte in mein Auto die Automatische Fenster auf/zu Funktion mittels Arduino verwirklichen.
Die Schaltung an den Fenstermotoren ist denkbar einfach und bereits getestet.
Arduino Nano ins Auto verpflanzen, Spannungsregler auf 5V davor und 5V Relais (2er Platine) dran.
Da ich das KeyFob Signal (öffnen/Schliessen) nicht auslesen kann, wollte ich es über die Anzahl der Öffnungs/Schliessimpulse am Door Lock Actuator versuchen.

Drücke ich Tür auf, zähler 1, nochmal innerhalb 2 sek, Zähler 2, nochmal innerhalb 2Sek, Zähler 3 und Relais impuls ein, für Fenster auf, Zähler = 0
Verstreichen 5 Sek während des Hochzählens, Zähler = 0.
Dasselbe mit Tür zu: 1 x Drücken Zähler 1, innerhalb 2Sek drücken, Zähler 2, innerhalb 2Sek drücken, Zähler 3, Relais ein, Fenster zu, Zähler =0

Ich habe es nun schon mit Delay und Millis versucht aber bisher sind die Ergebnisse noch zu ungenau, bzw. bekomme ich den TimeOut nicht vernünftig hin. Er zählt und zählt.

Wie behandele ich die 12V Impulse? Setze ich die auch per Regler auf 5V runter?

Wie setze ich am TimeOut und Countreset an?

PS: Code ist noch die Breadboard Variante mit Taster und LED

Gruß

Karsten

Code: [Select]
const byte LED = 6;
const byte Button = 7;
const byte LED2 = 8;

byte ButtonState;
byte lastState = LOW;
byte count = 0;

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(Button, INPUT);
}

void loop() {
  ButtonState = digitalRead(Button);

  if(ButtonState && ButtonState != lastState)  // button latch, no debounce needed.
  {
    if(count < 3) // This will check to see if the count is within a range of 0 - 3, and anything over that, it will reset count back to 0.
      count += 1; // same as count = count + 1;
    else
      count = 0;
     
    digitalWrite(LED, HIGH);
    delay(200);
    digitalWrite(LED, LOW);
    Serial.println(count);
  }
 // if (count = 3)
 // {
    //digitalWrite(LED2, HIGH);
    //delay(5000);
    //digitalWrite(LED2, LOW);
    //count = 0;
 // }
 // else
  lastState = ButtonState;
}
Can´t be done is no option!

HotSystems

Bitte den Sketch hier im Forum in Code-Tags posten.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.


Damit wird dieser für alle besser lesbar.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

laforge-1701e

#2
May 26, 2017, 04:33 pm Last Edit: May 26, 2017, 04:39 pm by laforge-1701e Reason: Faults
Moin,

nachdem die Resonanz eher nüchtern ausfiel, habe ich mit viel probieren (das ist ja das schöne am Arduino) eine Version erstellt, welche mit TimeOut und Wechselschutz funktioniert.
Das 4. Relais an der 4 Relais Platine werde ich dann noch gegen Zündung am Auto legen, das der Arduino bei Fahrbetrieb NICHT mitläuft.

Hier für alle die es Interessiert mal der Code:

Code: [Select]
// Global Open/Close - Written by LaForge from www.dr-Mustang.com

const byte LED = 6;
const byte UPREL = 8;
const byte LED3 = 9;
const byte DWNREL = 11;
const byte DACCREL = 12;
const int Button = 7;
const int Button2 = 10;

byte ButtonState;
byte ButtonState2;
byte lastState = LOW;
byte lastState2 = LOW;
byte count = 0;
byte count2 = 0;

unsigned long previousMillis = 0; // speichert wie viele Sekunden seit derletzten Änderung vergangen sind
unsigned long interval = 2000;    // Interval zwischen zwei Änderungen

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  pinMode(UPREL, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(DWNREL, OUTPUT);
  pinMode(DACCREL, OUTPUT);
  pinMode(Button, INPUT);
  pinMode(Button2, INPUT);
}

void loop() {
  
  ButtonState = digitalRead(Button);
    
  if(ButtonState && ButtonState != lastState)  // button latch, no debounce needed.
  {
    if(count < 3) // This will check to see if the count is within a range of 0 - 3, and anything over that, it will reset count back to 0.
      count += 1; // same as count = count + 1;
    else
      count = 0;
      count2 = 0;    // Den Input 2 auf 0 setzen um den Zähler zu löschen! Verhindert Zählspeicher und versehentliches Auslösen!
          
    digitalWrite(LED, HIGH);
    delay(200);
    digitalWrite(LED, LOW);
    Serial.println(count);
  }
  lastState = ButtonState;

  if(count == 3){
    digitalWrite(UPREL, HIGH);
    digitalWrite(DACCREL, HIGH);
    delay(5000);
    digitalWrite(UPREL, LOW);
    digitalWrite(DACCREL, LOW);
    count = 0;
  }

  ButtonState2 = digitalRead(Button2);

  if(ButtonState2 && ButtonState2 != lastState2)  // button2 latch, no debounce needed.
  {
    if(count2 < 2) // This will check to see if the count is within a range of 0 - 255, and anything over that, it will reset count back to 0.
      count2 += 1; // same as count = count + 1;
    else
      count2 = 0;
      count = 0;    // Den Input 1 auf 0 setzen um Zähler zu löschen!
    
    digitalWrite(LED3, HIGH);
    delay(200);
    digitalWrite(LED3, LOW);
    Serial.println(count2);
  }
  lastState2 = ButtonState2;

  if(count2 == 2){
    digitalWrite(DWNREL, HIGH);
    digitalWrite(DACCREL, HIGH);
    delay(5000);
    digitalWrite(DWNREL, LOW);
    digitalWrite(DACCREL, LOW);
    count2 = 0;
  }
 
// Code der immer läuft kommt ÜBER die MILLIS Abfrage, dann klappt der TimeOut
    
    if (millis() - previousMillis > interval) {
        previousMillis = millis();   // aktuelle Zeit abspeichern
        count = 0;
        count2 = 0;
        }
}


Jetzt warte ich noch auf meinen China Arduino Nano (2,47€) und löte das mit Dioden und Spannungswandlern ins Auto.

Gruß

Karsten
Can´t be done is no option!

laforge-1701e

So,

das Projekt ist fertig, der Arduino NANO im Auto verpflanzt.
Die Fenster lassen sich problemlos per Fernbedienung steuern.

https://www.youtube.com/watch?v=BI7sJGvcCqw

Gruß

Karsten
Can´t be done is no option!

DrDiettrich

Die mangelnde Resonanz liegt wohl an Deiner mangelhaften (um nicht zu sagen unverständlichen) Beschreibung.

Was für Regler sollen das denn sein, mit denen Du die 12V Signale auf 5V umsetzst? Normalerweise nimmt man dafür einfache Spannungsteiler.

Und die Beschreibung der Anzahl Drücke (Tastendrücke?), was hat die mit den Impulsen der Bordelektronik zu tun? Eine Taster-Abfrage ohne Entprellen liefert nur Murks.

Aber wenn jetzt alles läuft, dann hat sich Deine Frage wohl auch so schon erledigt.

Go Up