Ein kapazitiver offener Draht soll auf dem Arduino Uno eine LED umschalten oder dimmen.
Die verwendete Hardware:
– Arduino Uno
– 1nF Kondensator
– Draht
– 200 Ohm Widerstand
– LED
Pin 8 > 1nF Kondensator > Draht zum anfassen
Pin3 (PWM) > LED > Widerstand 200 Ohm > GND
Basierend auf dem vorherigen Artikel wird eine LED an PIN3 nun umgeschaltet oder gedimmt. Nur auf einigen Pins steht die PWM Dimmer Funktion analogWrite() zur Verfügung, deshalb wird hier der Pin 3 verwendet.
Wenn der Draht (kapazitiver Sensor) berührt wurde, wird 300ms gewartet. Dann wird entschieden:
– losgelassen heisst LED Umschalten.
– festgehalten heisst Dimmer hoch und runter fahren bis losgelassen wird.
Hier das fertige Programm.
// LED kapazitiv umschalten oder dimmen mit PWM // Pin8 > 1nF Kondensator > Draht offen // Pin3 (PWM) > LED > Widerstand 200 Ohm > GND // // von Matthias Busse 6.12.2014 Version 1.0 int touch, up=1, dim=0; void setup() { Serial.begin(4800); pinMode(3, OUTPUT); } void loop() { touch=readCapacitivePin(8); if(touch > 4) { delay(300); // Verzögerung entscheider über schalten oder dimmen touch=readCapacitivePin(8); if(touch < 4) { // schnell wieder losgelassen heisst umschalten if(dim > 0) dim=0; else dim=255; analogWrite(3, dim); } else { // festgehalten heisst dimmen while(readCapacitivePin(8) > 4) { if(dim >= 255) up=0; if(dim <= 0) up=1; if(up) dim++; else dim--; analogWrite(3, dim); delay(10); } } } delay(100); } // readCapacitivePin // http://playground.arduino.cc/Code/CapacitiveSensor // Input: Arduino pin number // Output: A number, from 0 to 17 expressing // how much capacitance is on the pin // When you touch the pin, or whatever you have // attached to it, the number will get higher uint8_t readCapacitivePin(int pinToMeasure) { volatile uint8_t* port; volatile uint8_t* ddr; volatile uint8_t* pin; byte bitmask; port = portOutputRegister(digitalPinToPort(pinToMeasure)); ddr = portModeRegister(digitalPinToPort(pinToMeasure)); bitmask = digitalPinToBitMask(pinToMeasure); pin = portInputRegister(digitalPinToPort(pinToMeasure)); *port &= ~(bitmask); *ddr |= bitmask; delay(1); uint8_t SREG_old = SREG; noInterrupts(); *ddr &= ~(bitmask); *port |= bitmask; uint8_t cycles = 17; if (*pin & bitmask) { cycles = 0;} else if (*pin & bitmask) { cycles = 1;} else if (*pin & bitmask) { cycles = 2;} else if (*pin & bitmask) { cycles = 3;} else if (*pin & bitmask) { cycles = 4;} else if (*pin & bitmask) { cycles = 5;} else if (*pin & bitmask) { cycles = 6;} else if (*pin & bitmask) { cycles = 7;} else if (*pin & bitmask) { cycles = 8;} else if (*pin & bitmask) { cycles = 9;} else if (*pin & bitmask) { cycles = 10;} else if (*pin & bitmask) { cycles = 11;} else if (*pin & bitmask) { cycles = 12;} else if (*pin & bitmask) { cycles = 13;} else if (*pin & bitmask) { cycles = 14;} else if (*pin & bitmask) { cycles = 15;} else if (*pin & bitmask) { cycles = 16;} SREG = SREG_old; *port &= ~(bitmask); *ddr |= bitmask; return cycles; }
Hier die Grundlagen im vorherigen Artikel.
von Matthias Busse
Pingback: Kapazitiver LED Umschalter mit einem einfachen, offenen Draht | Shelvin – Elektronik ausprobiert und erläutert
Hi Matthias,
ich habe den Dimmer auch mal ausprobiert. Aber mit einem ESP8266, da ich die Lampe auch gerne über Wlan ansteuern wollte. Jedenfalls klappt das ganze nur gut, wenn der Chip per USB an dem PC angeschlossen ist. Sobald ich die Verbindung trenne, wird fast nur noch eine kurze berührung erkannt.
Scheinbar irgendein Masseproblem? Hast du eine Idee wie ich weiterkomme?
Versuch mal den Arduino richtig zu grounden, indem du:
A) den GND Pin deines Arduino mit der Erde verbindest, oder mit einer großen ableitenden Masse (Wand, Heizung etc)
oder B) den Arduino auf den Boden legst
Mfg Tomi
Hallo Matthias,
Dank Deiner guten Beschreibung hat der Nachbau gleich geklappt.
Auch die Erweiterung mit einer 12V- Lastschaltung mit FET und LED funktioniert ebenfalls einwandfrei.
Erst mit dem Metallgehäuse einer Stehlampe als Sensorfläche dimmt die LED unkontrolliert auf und ab.
Auch Versuche mit unterschiedlichen Kondensatorwerten brachten keinen Erfolg.
Hintergrund ist, dass ich die Stehlampe mit einem Sensordimmer ausstatten will.
Danke schon mal für Rückmeldungen.
MfG
Herbert