Arduino Uno Projekt zwei kapazitive Touch Sensoren und Relaisshield schalten

In diesem Beitrag möchte ich dir zeigen wie du mit zwei kapazitiven Touch Sensoren ein Relaisshield steuern kannst.

Schaltung - Arduino UNO mit Relaisshield, Touch Sensor & LED
Schaltung – Arduino UNO mit Relaisshield, Touch Sensor & LED

Ziel

Das Ziel dieses Projektes ist es mit einem Touch Sensor ein Relais zu schalten welches “selbständig” nach 5 Sekunden abfällt und der andere Touch Sensor ein Relais schalten kann.

Hintergrund zu diesem kleinen Projekt

Die Idee zu diesem Projekt kam über ein Kommentar zum Beitrag Arduino Projekt: Relaiskarte mit Reedkontakten steuern

Solltest du auch Ideen haben oder Hilfe benötigen, dann kommentiere einfach den entsprechenden Beitrag oder schreibe mir per E-Mail oder über das Kontaktformular.

benötigte Bauteile für dieses Projekt

Für den Nachbau dieses Projektes benötigst du folgende Bauteile:

  • einen Arduino UNO*,
    • ein USB Datenkabel
  • zwei kapazitive Touch Sensoren,
  • min. ein zweifach Relaisshield
  • diverse Breadboardkabel,
  • ein 170 / 400 Pin Breadboard

* Du kannst natürlich auch jeden anderen Microcontroller der Arduino Familie nutzen. Du benötigst lediglich 4 digitale Pins sowie GND und 5V somit kannst du auch den etwas günstigeren Arduino Nano verwenden. 

Zusätzlich verbaue ich noch eine grüne, 5mm LED (mit dazugehörigem 220 Ohm Widerstand)

Aufbau & Anschluss

BauteilArduino UNO
LED 
Anodedigitaler Pin D5
KathodeGND
kapazitiver Touch Sensor I 
GNDGND
I/Odigitaler Pin D9
VCC5V
kapazitiver Touch Sensor II 
GNDGND
I/Odigitaler Pin D8
VCC5V
zweifach Relaisshield 
VCC5V
IN1digitaler Pin D7
IN2digitaler Pin D6
GNDGND
Aufbau der Schaltung "Arduino UNO mit Touch Sensor und Relaisshield"
Aufbau der Schaltung “Arduino UNO mit Touch Sensor und Relaisshield”

Programmieren

Für das Programmieren des Sketches verwende ich die Arduino IDE. Du benötigst für das Programm keine zusätzlichen Bibliotheken!

Schritt 1 – definieren der Pins

Zunächst definieren wir an welche Pins wir die Sensoren / Aktoren angeschlossen haben. Ich verwende hier die Schreibweise mit “#define” natürlich kannst du auch mit “int sensor = 5;” arbeiten, das Ergebnis ist jeweils das gleiche. Der Vorteil mit “#define” ist das weniger Speicherplatz belegt  / reserviert wird.

#define led 5

#define relais1 6
#define relais2 7

#define touch1 8
#define touch2 9

Schritt 2 – definieren welche Pins als Ein / Ausgang dienen sollen

Nachdem wir definiert haben an welche Pins die Sensoren / Aktoren angeschlossen sind müssen wir noch definieren ob diese als Eingang (für die Touch Sensoren) oder als Ausgang (LED & Relaisshield) agieren sollen.

void setup() {
  pinMode(led, OUTPUT);
  
  pinMode(relais1, OUTPUT);
  pinMode(relais2, OUTPUT);
  
  pinMode(touch1, INPUT);
  pinMode(touch2, INPUT);
}

Zusätzlich wird in der Funktion “setup” noch die Relais initial deaktiviert.

digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);

Schritt 3 – lesen der Zustände der kapazitiven Touch Sensoren

Mit der Funktion “digitalRead” können wir lesen ob der Touch Sensor berührt wurde. die Funktion liefert uns ein HIGH / 1 zurück wenn dieser berührt wurde, ansonsten LOW oder 0.

void loop() {
  if(digitalRead(touch1)==HIGH){}
  
  if(digitalRead(touch2)==HIGH){}
}

Schritt 4 – aktivieren / deaktivieren der Relais

In die zuvor geschriebenen If-Bedingungen schreiben wir nun welche Aktion stattfinden soll. 

Wenn der Touch Sensor 1 betätigt wird soll das Relais1 sowie die LED aktiviert werden.
Wenn der Touch Sensor 2 betätigt wird soll das Relais2 aktiviert bzw. deaktiviert werden.

int relais2Status = 0;

void loop() {
  if(digitalRead(touch1)==HIGH){
    digitalWrite(relais1, LOW);
    digitalWrite(led, HIGH);
  }
  
  if(digitalRead(touch2)==HIGH){
    relais2Status = relais2Status==0?1:0;
    digitalWrite(relais2, relais2Status);
  }
}

Schritt 5 – starten / stoppen eines “Timers” für ein Relais

Im letzten Schritt programmieren wir eine Funktion welche prüft ob eine Zeitspanne überschritten wurde um dann die LED sowie das Relais zu deaktivieren.

Wir benötigen dazu eine Konstante welche den Wert für den Abstand zwischen zwei Zeiten festlegt sowie eine Variable zum speichern des letzten Zeitstempels.

const int PAUSE = 5000;
int lastMillis = 0;

void setup(){
   doTimer();
   lastMillis = millis();
   ...
}

void doTimer(){
  int currentMillis = millis();
  if((currentMillis - PAUSE) > lastMillis){
    lastMillis = currentMillis;
    digitalWrite(relais1, HIGH);
    digitalWrite(led, LOW);
  }  
}

der fertige Code

#define led 5

#define relais1 6
#define relais2 7

#define touch1 8
#define touch2 9

int relais2Status = 0;
const int PAUSE = 5000;
int lastMillis = 0;

void setup() {
  pinMode(led, OUTPUT);
  
  pinMode(relais1, OUTPUT);
  pinMode(relais2, OUTPUT);
  
  pinMode(touch1, INPUT);
  pinMode(touch2, INPUT);

  digitalWrite(relais1, HIGH);
  digitalWrite(led, LOW);
  
  digitalWrite(relais2, LOW);

  lastMillis = millis();
}

void loop() {
  doTimer();
  
  if(digitalRead(touch1)==HIGH){
    digitalWrite(relais1, LOW);
    digitalWrite(led, HIGH);
  }
  
  if(digitalRead(touch2)==HIGH){
    relais2Status = relais2Status==0?1:0;
    digitalWrite(relais2, relais2Status);
  }
}

void doTimer(){
  int currentMillis = millis();
  if((currentMillis - PAUSE) > lastMillis){
    lastMillis = currentMillis;
    digitalWrite(relais1, HIGH);
    digitalWrite(led, LOW);
  }  
}

 

 

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.