Étape 2: Créer l’électronique
http://www.bareconductive.com/capacitance-Sensor
Le matériel requis pour ce projet se compose de :
1 x Arduino
résistances de 4 x 1 méga Ohm
2 x LED (pas nécessaire)
1 x prise 4 broches mâle
1 x prise jack femelle de 4 voies
1 x haut-parleur
Une sélection de câbles de pontage
Il s’agit d’un circuit relativement facile à créer. Tout d’abord, il faut connecter une 1 méga ohm résistance entre les 4 paires de sorties sur l’Arduino ; ces paires sont 2 et 4, 5 et 6, 8 et 9, 10 et 11. Nous prenons maintenant un fil de pins 4,6,9 et 11, ce sont nos entrées capteur. Broche 4 ira finalement à notre distance détection zone peinte, et broches 6, 9 et 11 ira aux boutons peints. À ce stade, nous voulons connecter ces câbles de 4 capteurs sur la prise jack femelle 4 voies.
La sortie Audio proviendront de la broche 7. Cela signifie que nous avons besoin de câbler dans un haut-parleur ou la prise casque entre les bornes 7 et terrain sur l’Arduino.
J’ai décidé que ce serait agréable d’avoir quelques LEDs sur l’appareil pour vous permettre de voir ce qui se passait. J’ai câblé par un « pouvoir sur » LED entre 3.3V et terrain sur l’Arduino et un "indicateur de fréquence" entre la broche 13 et au sol sur l’Arduino.
L’Arduino est alimenté via la prise de Vin sur la carte. J’ai décidé de fil à un interrupteur à bascule ici pour rendre agréable et facile pour l’activer et désactiver.
C’était facile, n’était-ce pas ? Maintenant pour le code...
Branchez votre Arduino sur votre ordinateur et télécharger le code suivant. Ce code nécessite la bibliothèque CapSense, donc si vous ne l’avez pas, rendez-vous sur le site d’Arduino et téléchargez-le là.
Dans un souci de tester et calibrer il vaut juste crocodile coupure de vos câbles de quatre capteurs à vos quatre domaines conductrices peinte/imprimé.
C’est là que tout devient un peu imprévisible... Comme tout le monde va être la peinture ou l’impression de différentes tailles de conducteurs nus points de contact avec différentes épaisseurs d’encre, une tache d’étalonnage est nécessaire. J’espère que c’est juste la distance capteur qu’il faudra calibré. Cela devrait être assez facile à faire en jouant la valeur total2 dans le code (vous devriez voir les valeurs provenant de la sonde dans le moniteur de la série). Si cela ne fonctionne pas pour vous, vous devrez peut-être essayer d’autres valeurs de résistance. J’ai peur de que cette étape est un peu tâtonnements.
Code de l’Arduino :
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include < CapSense.h >
CapSense cs_2_4 = CapSense(2,4) ; 1 mégohm résistance entre les broches 4 & 2, broche 2 est broche de capteur de distance, ajouter peinture nue
CapSense cs_5_6 = CapSense(5,6) ; 1 mégohm résistance entre les broches 6 et 5, broche 5 est capteur broche, ajouter peinture nue
CapSense cs_8_9 = CapSense(8,9) ; 1 mégohm résistance entre les bornes 9 & 8, broche 8 est capteur broche, ajouter peinture nue
CapSense cs_10_11 = CapSense(10,11) ; 1 mégohm résistance entre les bornes 11 & 10, broche 10 est capteur broche, ajouter peinture nue
const int ledPin = 12 ;
const int ledPin2 = 13 ;
durée de l’int ;
void setup()
{
cs_2_4.set_CS_AutocaL_Millis(0xFFFFFFFF) ; désactiver autocalibrate sur le canal 1 - à titre d’exemple
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, sortie) ;
pinMode (sortie 12,) ;
}
void loop()
{
commencer à long = millis() ;
total1 long = cs_2_4.capSense(30) ;
long total2 = total1 - 100 ; calibrage pour pad...
totalA long = cs_5_6.capSense(30) ;
totalB long = cs_8_9.capSense(30) ;
totalC long = cs_10_11.capSense(30) ;
Serial.println(Total2) ;
{
Si (total2 < 150) {//Start générant des tonalités différentes à différentes distances. Il faudra callibrating en modifiant la valeur de total2
noTone(7) ;
}
Si {(total2 > 150 et total2 < 200)
allumer la LED
digitalWrite (ledPin2, HIGH) ;
Tone(7,131,5000) ;
Delay(Duration) ;
noTone(7) ;
digitalWrite (ledPin2, basse) ;
Delay(Duration) ;
}
Si {(total2 > 250 et total2 < 300)
allumer la LED
digitalWrite (ledPin2, HIGH) ;
Tone(7,147,5000) ;
Delay(Duration) ;
noTone(7) ;
digitalWrite (ledPin2, basse) ;
Delay(Duration) ;
}
Si {(total2 > 350 et total2 < 400)
allumer la LED
digitalWrite (ledPin2, HIGH) ;
Tone(7,165,5000) ;
Delay(Duration) ;
noTone(7) ;
digitalWrite (ledPin2, basse) ;
Delay(Duration) ;
}
Si {(total2 > 400 et total2 < 450)
allumer la LED
digitalWrite (ledPin2, HIGH) ;
Tone(7,175,5000) ;
Delay(Duration) ;
noTone(7) ;
digitalWrite (ledPin2, basse) ;
Delay(Duration) ;
}
Si {(total2 > 450 et total2 < 500)
allumer la LED
digitalWrite (ledPin2, HIGH) ;
Tone(7,196,5000) ;
Delay(Duration) ;
noTone(7) ;
digitalWrite (ledPin2, basse) ;
Delay(Duration) ;
}
Si {(total2 > 500 et total2 < 550)
allumer la LED
digitalWrite (ledPin2, HIGH) ;
Tone(7,220,5000) ;
Delay(Duration) ;
noTone(7) ;
Delay(Duration) ;
}
Si {(total2 > 550 et total2 < 600)
allumer la LED
digitalWrite (ledPin2, HIGH) ;
Tone(7,247,5000) ;
Delay(Duration) ;
noTone(7) ;
digitalWrite (ledPin2, basse) ;
Delay(Duration) ;
}
Si {(total2 > 600)
allumer la LED
digitalWrite (ledPin2, HIGH) ;
Tone(7,262,5000) ;
Delay(Duration) ;
noTone(7) ;
digitalWrite (ledPin2, basse) ;
Delay(Duration) ;
}
}
Si (totalA > 800) {//if entrée on est pressé changement durée entre tons
allumer la LED
digitalWrite (ledPin2, HIGH) ;
durée = 500 ;
Serial.println ("retard 500") ;
}
Si (totalB > 800) {//if entrée deux est pressée changement durée entre tons
allumer la LED
digitalWrite (ledPin2, HIGH) ;
durée = 100 ;
Serial.println ("retard 100") ;
}
Si (totalC > 800) {//if entrée trois est pressée changement durée entre tons
allumer la LED
digitalWrite (ledPin2, HIGH) ;
Durée = 25 ;
Serial.println ("retard 25") ;
}
else {}
éteindre la LED
digitalWrite (ledPin2, basse) ;
}
délai arbitraire pour filtrer les données au port série
}
char getcap(char pin)
{
char i = 0 ;
DDRB & = ~ broche ; entrée
PORTB | = pin ; pullup sur
pour (i = 0; i < 16; i ++)
Si ((PINB et le pin)) break ;
PORTB & = ~ broche ; niveau bas
DDRB | = pin ; décharge
Return i ;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////