10. 5. 2017

Jednoduchý dotykový senzor

Dneska se podíváme na to, jak si vyrobit vlastní jednoduchý dotykový senzor pro arduino. Jisně, na trhu je spousta takových senzorů už hotových a připravených k použití. Ale nebudu platit desítky až stovky korun za něco co si vyrobím z věcí co najdu doma.


Arduino se senzorem z plechovky

Jak takový senzor funguje?

Dotykový, neboli kapacitní senzor funguje na principu změny kapacity kondenzátoru. Kondenzátor jsou v podstatě dvě vodivé desky oddělené izolantem, jenže v tomhle případě druhá vodivá deska je člověk.
kapacitní senzor s pevným odporem
(zdroj playground.arduino.cc)

Konstrukce

Na výrobu takového senzoru nám postačí 1 odpor s libovolnou hodnotou od 470KOhm až po desítky mega ohmů. Od odporu se odvíjí citlivost senzoru. Čím je odpor větší, tím větší vzdálenost můžeme mít ruku od senzoru kterou arduino ještě dokáže detekovat. Aby jsme si mohli citlivost nastavovat, místo odporu použijeme trimr, nebo potenciometr. Já použila trimr s odporem 1MOhm.

Jako vodivou desku můžeme použít kus alobalu, nebo kousek plechu. Prostě cokoliv z kovu. Třeba ocelová plechovka od nápoje se hodí protože jde snadno pájet a jde stříhat nůžkama.

Kapacitní senzor s nastavitelnou citlivostí

Zapojíme si trimr/potenciometr podle obrázku. Krajní piny na arduino D2 a D4. Na prostřední pin trimru připojíme plech přípájený na drátku. Senzor si z každé strany polepíme izolepou, nebo nějakou nálepkou jako izolant když se senzoru dotkneme přímo a taky aby vypadal dobře když ho použijeme místo tlačítka. Kapacitní senzor má výhodu v tom, že není potřeba debouncing, ale v téhle verzi nejde použít pro interrupt.

Kód

V manažeru knihoven si najdeme CapacitiveSensor, nebo si ji stáhneme z Arduino.cc
Kód je jednoduchý a úsporný. Pokaždé když arduino detekuje zvýšení kapacity senzoru, tak rozsvítí interní ledku na pinu 13:

#include "CapacitiveSensor.h"
#define SendPin 4
#define ReceivePin 2
#define mez 100;
CapacitiveSensor cs = CapacitiveSensor(SendPin, ReceivePin);
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
long cap = cs.capacitiveSensor(100); // počet měření
if (cap > mez) { //citlivost pro rozsvícení ledky
digitalWrite(LED_BUILTIN, HIGH);
}
else {
digitalWrite(LED_BUILTIN, LOW);
}
}

Proměnná cap může mít hodnoty 0 až do 2mil. Záleží na velikosti plochy senzoru a podle toho si upravíme i minimální citlivost v kódu na řádku 4: #define mez = 100 ;

Hodnota cap se u mě většinou pohybuje v rozmezí 0-60 což je samotná kapacita kablíku a plechu + něco z okolí.

That's all folks.

A na konec ještě sketch ke stažení.

Žádné komentáře:

Okomentovat