Projekt: Kapazitiver LED Touch-Dimmer

Es geschah, dass meine Tochter Licht ins Puppenhaus wollte.

An sich ja keine Sache.Ein paar Schalterchen, ein paar Lämpchen.
aber in der Diskussion um welche Lampe wo, wo die Schalter etc, kam die Aussage:
“Das Licht im Wohnzimmer soll man heller und dunkler machen können, genau wie im unserem Wohnzimmer!”

Im unserem Wohnzimmer haben wir einen Touchdimmer, der bei berühren das Licht dimmt.
Nun ja, nach kurzem Überlegen: ok, das mach’ ich, das gibt ein tolles neues Arduino-Projekt.
Ich habe mir einen Nano bestellt und inzwischen auf dem Uno angefangen zu experimentieren. Voller Vorfreude auf lange Abende des Tüftelns und codens.

Tja, aber leider ist der Arduino so einfach handzuhaben, dass ich nach 2h fertig war! =(

das ist alles so einfach!
Der fertige Dimmer wird über ein Touchpad gesteuert (einfach ein blanker Draht zum berühren).
Antippen schaltet An/Aus
länger halten dimmt das Licht, kurz loslassen wechselt die Richtung.
Und beim Ausschalten merkt er sich den letzten Stand.

Die LED wird über einen PWM-Pin angesteuert. Im Puppenhaus direkt, mit mehr Leistung muß halt noch ein FET dazwischen.

Klappt tadellos.
Ich bin begeistert!
Ein grosses Lob auf die Arduino Community!

Dimmer03.ino (8.27 KB)

Gar kein Problemchen, wobei wir behilflich sein könnten ??

Viele Grüße Uwe

Hey,

vielen Dank, dafür einen ‘Thumb up’ und ein ‘Danke’

Töchterchen ist auch zufrieden? Noch ein paar Anregungen: Externes Bedienerpult, Fernseher (3 LED, Flacker…) Zufallschaltung…

Evtl auch fürs große Puppenhaus zu verwenden, also Home-Control…

THX, GREETZ, Linpotec

Gunther, hört sich nach einer sehr schönen DIY Lösung an ;) Jetzt könnte man evtl. sogar mal schaun, ob man das auch so hinbekommt, wie bei den kommerzielen Produkten geht. Sprich, lediglich das Metall berühren. Wie das genau von statten geht, wüsste ich auf anhieb nicht.

hi,

mit metall berühren geht es ja.
aber leider nicht als kapazitiver taster, der bräuchte keine berührung, sondern es könnte was zwischen metall und hand sein.

trotzdem schöne sache.

gruß stefan

Dann habe ich mich wohl falsch ausgedrückt:

Um den Dimmer zu betätigen, muß man nur Metall berühren. (ich dachte, das sei kapazitiv????)

@ Uwe: Nein, diesmal keine Probleme. Ich konnte alle Antworten in diesem wunderbaren Forum finden! :)

Aber müssen wir denn immer nur über Probleme reden? ;)

Gute Frage, ob das nun kapazitiv ist. Wenn du mit dem Finger den “Draht” mehr oder weniger nur gegen ein anderes metallisches Gehäuseteil drückst, wäre es kein kapazitiver Kontakt.

Kannst ja vielleicht mal ein Bild/Video online stellen :wink:

Nein, nicht gegen ein anderes metallisches Gehäuseteil drücken.

Im Testaufbau (der aber zuhause ist) steht einfach ein Stückchen Draht in die Luft. Wenn ich den mit dem Finger berühre, dann wird das ausgewertet. Nur berühren, nicht irgendwo randrücken, das wäre ja wie ein normaler Schalter.

ich habs von hier und da ist es auch erklärt: Arduino Playground: Native Capacitive Sensors without additional Hardware

Dann haben wir hier einen kapazitiven Taster :wink: Dann könnte man auch eine normale Stehlampe umbauen, die ein Metallgehäuse hat. Voraussetzung Schutzkleinspannung und das Gehäuse darf nicht mit dem NT/GND Kontakt haben.

hi,

ok. falsche ausdrucksweise von mir. ich kenne kapazitive taster so, daß sie schon beim “näherkommen” reagieren, so daß man zb eine plexiglasplatte vor die metallfläche bauen kann.

gruß stefan

Das hängt glaube ich nur von der RC-Konstante ab. Siehe hier: http://playground.arduino.cc//Main/CapacitiveSensor?from=Main.CapSense

*Use a 1 megohm resistor (or less maybe) for absolute touch to activate. *With a 10 megohm resistor the sensor will start to respond 4-6 inches away. *With a 40 megohm resistor the sensor will start to respond 12-24 inches away (dependent on the foil size).

Serenifly: Das hängt glaube ich nur von der RC-Konstante ab.

Jaein. Es stimmt, dass alleine die Annäherung an eine metallische Fläche deren Kapazität gegenüber Erde verändert. Wenn die Eingangsschaltung entsprechend sensibel gemacht wird, dann kann das über größere Entfernungen wirken, es gibt sogar ein Musikinstrument das auf diesem Effekt beruht, das "Aetherophone".

Beim Arduino gibt es zwei mir bekannte und von mir verstandene Herangehensweisen: a) zwei Pins werden mit einem großen Widerstand verbunden. Der eine wird als Ausgang umgeschaltet, der andere ist mit einer Fläche verbundnen und bildet so mit seiner Kapazität und dem Widerstand ein RC-Glied. Im Arduino wird gemessen, wie lange der zweite pin braucht um seinen Pegel zu wechseln nach dem der Erste umgeschalten wurde. Wenn man mit Berührung / Annäherung die Kapazität der Fläche ändert, ändert sich auch die Zeit. Das funktioniert mit der Bibliothek, die du verlinkt hat, Serenifly. b) eine Untermenge: es wird nur ein Pin verwendet, an dem die Fläche hängt. Der wird auf low geschalten, dann auf INPUT_PULLUP. Nun passiert genau das gleiche: die am Pin hängende Kapazität wird über den internen Pullup aufgeladen. Da der interen Pullup aber vergleichsweise klein ist, ist das recht unempfindlich. Es können wirklich nur Berührungen erkannt werden, keine Annäherung. Dafür brauchst nur einen Pin pro Eingang. Das funktioniert mir dieser Funktion: Arduino Playground: Native Capacitive Sensors without additional Hardware

Edit: ich habe gerade gesehen, bei Wikipedia heißt das Aetherophone Theremin

Auch wenns etwas offT wird: nen kleines 1.8er LCD gäbe nen tollen Fernseher ab. Die haben nen SD-Karten-Slot hinten dran, wo man sogar das Bild gelegentlich wechseln könnte. Da kann dann sogar das Sandmännchen pünktlich erscheinen, wenn man noch eine RTC dazutüdelt..

ich habe nun über die Feiertage das ganze ins Puppenhaus eingebaut.

Und mußte erstmal feststellen, dass nichts mehr funktioniert. =(
die Ursache war (zunächst) schnell gefunden: die Kabel, die im Puppenhaus zur Tastfläche verlegt waren, hatten für sich schon eine recht hohe kapazität, so dass der Arduino immer den kapazititven Taster als “gedrückt” erkannt hat.

Zur Abhilfe habe ich eine gleitende Schwelle eingeführt.
Dafür wird der Rückgabewert der Funktion “readCapacitivePin()” langfristig gemittelt (ca 1h) damit ich den Ruhezustand des Pins bekommen.

 Tastschwellenfilter = 18000;
 TasterSchwelle = (TasterSchwelle * Tastschwellenfilter + float(_tastWert))/ (Tastschwellenfilter +1);
//_tastWert ist der Rückgabewert von readCapacitivePin()

wenn _tastWert dann deutlich über TasterSchwelle liegt wird als gedrückt ausgewertet.

Funktionierte zunächst ganz gut.
Bis ich den Laptop abstöpselte und das Puppenhaus zuschraubte.
Bei Drücken auf die Kontaktfläche nur wildes geflacker. =(

also wieder aufgeschraubt, laptop zur analyse angesteckt: Alles läuft wieder!
Mit der Zeit kam ich dann dahinter, dass alleine der Kontakt über das USB-Kabel mit dem Laptop reichte, um den Dimmer zum funktionieren zu bringen.

Offensichtich fehlt der Schaltung das “kapazitive Gegengewicht”, wenn kein Rechner dranhängt.
Ich versuchte zunächste mit einem Stück alufolie an Masse das zu simulieren, ohne Erfolg.
Da meine Tochter endlich spielen wollte, gabs die schnelle Lösung:
Anstatt einer Kontaktfläche gibt es nun zwei, direkt nebeneinander und die zweite hängt an Masse.
Wenn man mit dem Finger beide berührt, funktioniert das.

Lief das Programm nur mit einem eingesteckten Netzteil? Du musst irgendwo eine "allgemeine" Masse bestimmen. Wie sieht das ganze Gebilde aus (Bild). Vielleicht ist eine 2 Handbedienung möglich, in dem man am Puppenhaus eine Massestelle anbringt.

Der Arduino läuft mit Netzteil (7,5V), und natürlich haben alle beteiligten Komponenten eine gemeinsame Masse.
Ich denke, das Problem ist, dass die gemeinsame Masse ja auch “in der Luft hängt”.

Der kapazitive Eingang lebt aber davon, dass durch die Berührung mit dem Finger der Pin eine größere Kapazität gegen Erde (Masse) bekommt und daher die Umladung länger dauert. Wenn aber die Kapazität des Gesamtsystems gegen Erde zu klein ist, dann wird nicht der “menschliche” Kondensator am Pin umgeladen, sondern die virtuelle Kapazität des Systems gegen Erde.
Was bei zyklischem Abfragen aber nicht funktionert.

Dein Vorschlag mit der “Zweihandbedienung” mit Massefläche entspricht ja dem was ich umgesetzt habe: Die zweite Kontaktfläche, die beide berührt werden müssen, liegt auf Masse. Damit ist das gemeinsame Bezugssystem wieder hergestellt.

So sieht die Verdrahtung des Puppenhauses hinter der Rückwand aus:
Puppenhaus_verdrahtung.jpg
Das kabel nach rechts geht zum Netzteil.

die Elektronik:
Puppenhaus_Elektronik.jpg
Vorbereitet ist das ganze für 6 Dimmerkanäle, genutzt wird gerade erst einer. Ausserdem stellt die Platine die Versorgung für konventionellen 3,5V Puppenhauslampen zur Verfügung (Regler links auf Kühlkörper).
Das Layout ist für einen Nano vorgesehen, ich hatte aber nur einen Mini Pro zur Verfügung, deshalb die Umverdrahtung der Pins.

Und so sieht dann der “Taster” aus:
Puppenhaus_Taster.jpg
die obere Scheibe geht auf den kapazitiven Pin, die untere Scheibe liegt auf Masse.
Die beiden Scheiben sind so montiert, dass zwei Kinderfinger gut draufpassen.

Coole Sache !!!

Ist die Platine selbst gemacht ?

Captain-DJ: Ist die Platine selbst gemacht ?

jepp! tonertransfer methode. funktioniert hervorragend für einfach und nicht zu feingliedrige Leiterplatten. Und obendrauf einfach ein bedruckten Papier kleben als Bestückungsdruck.

Schön ! Dachte beim ersten hinsehen, warum hat der die Ausgänge verbunden, als ich dann sah, das die USB Stecker und das kleine Stück Platine der Druck war :D

Habe ein mal eine Platine selber erstellt, mit ausdruck auf Folie, belichten, ätzen. Ich habe einige male drüber gedruckt, aber richtig schwarz war es leider nicht. Entsprechend "abgefressen" sah es nach dem ätzen dann aus, aber weil es eher was grobes war, war es nicht so schlimm. Alle Bahnen nachgelötet und fertig. Noch mal mache ich das allerdings nicht :D