Paso 2: Crear la electrónica
http://www.bareconductive.com/Capacitance-sensor
El hardware necesario para este proyecto consiste en:
1 x Arduino
resistencias de 4 x 1 mega Ohm
2 x LED (no necesario)
1 x jack de 4 vías macho
1 x conector jack hembra de 4 vías
1 altavoz de x
Una selección de cables de puente
Este es un circuito relativamente fácil crear. A tenemos que conectar una 1 mega ohm resistencia entre 4 pares de salidas de Arduino; estos pares son 2 y 4, 5 y 6, 8 y 9, 10 y 11. Ahora tomamos un cable de pines 4,6,9 y 11, estos son nuestros aportes de sensor. Pin 4 finalmente a nuestra área pintada de detección a distancia, y los pines 6, 9 y 11 se destinarán a los botones pintados. En esta etapa nos vamos a conectar estos cables de 4 sensor al conector jack hembra de 4 vías.
La salida de Audio vendrá del pin 7. Esto significa que necesitamos conectar un altavoz o auriculares entre el pin 7 y tierra en el Arduino.
Decidí que sería bueno tener algunos LED en el dispositivo para que pueda ver lo que estaba sucediendo. Alambré hasta una potencia de LED entre 3,3 v y tierra en el Arduino y un indicador frecuencia entre pin 13 y la tierra en el Arduino.
El Arduino es alimentado con el zócalo en la placa de Vin. Decidí conectar en un interruptor de palanca aquí para que sea agradable y fácil de encender y apagar.
Eso fue fácil, ¿no? Ahora para el código de...
Conectar tu Arduino al ordenador y descargar el siguiente código. Este código requiere la biblioteca CapSense, así que si no la tienes, dirígete a la página de Arduino y descargar allí.
Por el bien de la prueba y calibrarlo vale solo cocodrilo sujetando los cables del cuatro sensor a sus cuatro áreas conductoras de pintado/impreso.
Esto es donde todo es un poco impredecible... Como todo el mundo va a ser la pintura o diferentes tamaños de puntos de contacto de Conductor desnudo con distintos grosores de tinta de impresión, es necesario un punto de calibración. Esperemos sea solo el sensor de la distancia que habrá calibrado. Eso debería ser bastante fácil de hacer por jugar el valor total2 en el código (se deben ver los valores desde el sensor en el monitor serial). Si eso no funciona para usted puede que necesite probar otros valores de resistencia. Me temo que este paso es un poco ensayo y error.
Código de Arduino:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include < CapSense.h >
CapSense cs_2_4 = CapSense(2,4); es de 1 megaohmio resistencia entre pines 4 & 2, pin 2 pin del sensor de distancia, añadir pintura desnudos
CapSense cs_5_6 = CapSense(5,6); resistencia de 1 megohm entre 6 y 5, pin 5 es el pin del sensor, añadir pintura desnudos
CapSense cs_8_9 = CapSense(8,9); 1 megaohmio resistencia entre los pines 9 y 8, pin 8 es pin sensor, añadir pintura desnudos
CapSense cs_10_11 = CapSense(10,11); 1 megaohmio resistencia entre pines 11 y 10, pin 10 es pin sensor, añadir pintura desnudos
const int ledPin = 12;
const int ledPin2 = 13;
duración del int;
void setup()
{
cs_2_4.set_CS_AutocaL_Millis(0xFFFFFFFF); Apague la autocalibrate en el canal 1 - apenas como un ejemplo
cs_5_6.set_CS_AutocaL_Millis(0xFFFFFFFF);
cs_8_9.set_CS_AutocaL_Millis(0xFFFFFFFF);
cs_10_11.set_CS_AutocaL_Millis(0xFFFFFFFF);
Serial.Begin(9600);
pinMode (13, salida);
pinMode (12, salida);
}
void loop()
{
tiempo Inicio = millis();
largo total1 = cs_2_4.capSense(30);
largo total2 = total1 - 100; calibración de pad...
totalA de largo = cs_5_6.capSense(30);
totalB largo = cs_8_9.capSense(30);
totalC largo = cs_10_11.capSense(30);
Serial.println(total2);
{
Si (total2 < 150) {//Start generando diferentes tonos para diferentes distancias. Esto será necesario calibrar modificando el valor del total2
noTone(7);
}
Si (total2 > 150 y total2 < 200) {}
encender LED
digitalWrite (ledPin2, HIGH);
Tone(7,131,5000);
Delay(Duration);
noTone(7);
digitalWrite (ledPin2, LOW);
Delay(Duration);
}
Si {} (total2 > 250 y total2 < 300)
encender LED
digitalWrite (ledPin2, HIGH);
Tone(7,147,5000);
Delay(Duration);
noTone(7);
digitalWrite (ledPin2, LOW);
Delay(Duration);
}
Si {} (total2 > 350 y total2 < 400)
encender LED
digitalWrite (ledPin2, HIGH);
Tone(7,165,5000);
Delay(Duration);
noTone(7);
digitalWrite (ledPin2, LOW);
Delay(Duration);
}
Si {} (total2 > 400 y total2 < 450)
encender LED
digitalWrite (ledPin2, HIGH);
Tone(7,175,5000);
Delay(Duration);
noTone(7);
digitalWrite (ledPin2, LOW);
Delay(Duration);
}
Si {} (total2 > 450 y total2 < 500)
encender LED
digitalWrite (ledPin2, HIGH);
Tone(7,196,5000);
Delay(Duration);
noTone(7);
digitalWrite (ledPin2, LOW);
Delay(Duration);
}
Si {} (total2 > 500 y total2 < 550)
encender LED
digitalWrite (ledPin2, HIGH);
Tone(7,220,5000);
Delay(Duration);
noTone(7);
Delay(Duration);
}
Si {} (total2 > 550 y total2 < 600)
encender LED
digitalWrite (ledPin2, HIGH);
Tone(7,247,5000);
Delay(Duration);
noTone(7);
digitalWrite (ledPin2, LOW);
Delay(Duration);
}
Si {} (total2 > 600)
encender LED
digitalWrite (ledPin2, HIGH);
Tone(7,262,5000);
Delay(Duration);
noTone(7);
digitalWrite (ledPin2, LOW);
Delay(Duration);
}
}
Si (totalA > 800) {//if entrada uno es cambio presionado duración entre tonos
encender LED
digitalWrite (ledPin2, HIGH);
duración = 500;
Serial.println ("retraso 500");
}
Si (totalB > 800) {//if entrada dos cambio presionado duración entre tonos
encender LED
digitalWrite (ledPin2, HIGH);
duración = 100;
Serial.println ("retraso 100");
}
Si (totalC > 800) {//if entrada tres cambio presionado duración entre tonos
encender LED
digitalWrite (ledPin2, HIGH);
Duración = 25;
Serial.println ("retardo de 25");
}
Else {}
Apagar el LED
digitalWrite (ledPin2, LOW);
}
retardo arbitrario limitar datos al puerto serie
}
char getcap(char pin)
{
char i = 0;
DDRB & = ~ pin; entrada
PORTB | = pin; pullup en
para (i = 0; i < 16; i ++)
Si ((PINB y pin)) break;
PORTB & = ~ pin; bajo nivel
DDRB | = pin; descarga
volver i;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////