Ragazzi, seguendo qualche guida su internet ho realizzato alcuni sensori touch capacitivi con dell' alluminio e del cartone. Non è la prima volta che lo faccio, qualche tempo fa avevo realizzato un sensore capacitivo perfettamente funzionante. Questa volta volevo realizzare un piccolo progetto, ho costruito 4 sensori capacitivi, e dato che per ognuno servono 2 pin, li ho collegati a 8 pin digitali. Volevo realizzare un programma che tramite un piezo, ogni volta che premo su un sensore si riproduce una nota, e poi con due pulsanti volevo salire e scendere sulla scala musicale per riprodurre più note (Ad esempio creo una var. frequenza che quando premi un pulsante sale di un tot. per permettermi di cambiare le note, e con un altro pulsante scende). Detto questo ho collegato i sensori, i pulsanti e il piezo (I sensori capacitivi li ho collegati con una resistenza da 1 Mohm) e ho creato la struttura principale del programma. Però c'è un problema, ho fatto in modo che i valori dei sensori mi arrivino sul monitor seriale, ma i valori sono quasi sempre 0 o 30, mentre di solito col primo sensore che avevo costruito un pò di tempo fa superavano anche i mille, e questo accade per tutti i sensori. Inoltre non sembra che i valori ricevuti cambino a seconda se tocco o no con la mano, ma cambiano da soli. Non superano mai i 30.
Vi riporto qui sotto il codice:
#include <CapacitiveSensor.h>
CapacitiveSensor sensore = CapacitiveSensor(11, 10);
CapacitiveSensor sensore2 = CapacitiveSensor(9, 8);
CapacitiveSensor sensore3 = CapacitiveSensor(7, 6);
CapacitiveSensor sensore4 = CapacitiveSensor(5, 4); //Creo 4 oggetti corrispondenti ai 4 sensori capacitivi
int pinBottone = 13;
int pinBottone2 = 12; //Pin dei bottoni per scorrere la scala musicale
int pinPiezo = 3; //Pin del piezo
float frequenza; //Frequenza dei toni
void setup() {
Serial.begin(9600);
sensore.set_CS_AutocaL_Millis(30);
sensore2.set_CS_AutocaL_Millis(30);
sensore3.set_CS_AutocaL_Millis(30);
sensore4.set_CS_AutocaL_Millis(30); //Imposto l'intervallo in Millisecondi della calibrazione dei sensori capacitivi
pinMode(pinBottone, INPUT);
pinMode(pinBottone2, INPUT);
pinMode(pinPiezo, OUTPUT); //Imposto le uscite e le entrate dei vari pin
}
void loop() {
// put your main code here, to run repeatedly:
long tensione = sensore.capacitiveSensor(30);
long tensione2 = sensore2.capacitiveSensor(30);
long tensione3 = sensore3.capacitiveSensor(30);
long tensione4 = sensore4.capacitiveSensor(30);
Serial.print("Uscita primo sensore : ");
Serial.print(tensione);
Serial.println();
Serial.println("Uscita secondo sensore : ");
Serial.print(tensione2);
Serial.println();
Serial.println("Uscita terzo sensore : ");
Serial.print(tensione3);
Serial.println();
Serial.println("Uscita quarto sensore : ");
Serial.print(tensione4);
Serial.println();
delay(3000);
}
Allora ragazzi, il problema l'ho risolto, come ha detto @Brunello ho invertito i pin. Dopo aver provato che i sensori funzionassero ho iniziato a scrivere il codice per far suonare il piezo, ma qualcosa non va, quando lo eseguo, ai primi 3 sensori esce un rumore strano, sordo, mentre al quarto credo sia un do, poi se premo i pulsanti le note non cambiano.
Posto lo sketch:
#include <CapacitiveSensor.h>
CapacitiveSensor sensore = CapacitiveSensor(10, 11);
CapacitiveSensor sensore2 = CapacitiveSensor(8, 9);
CapacitiveSensor sensore3 = CapacitiveSensor(6, 7);
CapacitiveSensor sensore4 = CapacitiveSensor(4, 5); //Creo 4 oggetti corrispondenti ai 4 sensori capacitivi
int pinBottone = 13;
int pinBottone2 = 12; //Pin dei bottoni per scorrere la scala musicale
int pinPiezo = 3; //Pin del piezo
void setup() {
Serial.begin(9600);
sensore.set_CS_AutocaL_Millis(30);
sensore2.set_CS_AutocaL_Millis(30);
sensore3.set_CS_AutocaL_Millis(30);
sensore4.set_CS_AutocaL_Millis(30); //Imposto l'intervallo in Millisecondi della calibrazione dei sensori capacitivi
pinMode(pinBottone, INPUT);
pinMode(pinBottone2, INPUT);
pinMode(pinPiezo, OUTPUT); //Imposto le uscite e le entrate dei vari pin
}
void loop() {
// put your main code here, to run repeatedly:
long tensione = sensore.capacitiveSensor(30);
long tensione2 = sensore2.capacitiveSensor(30);
long tensione3 = sensore3.capacitiveSensor(30);
long tensione4 = sensore4.capacitiveSensor(30);
const int c = 261;
const int d = 294;
const int e = 329;
const int f = 349;
const int g = 392;
const int a = 440;
const int b = 493;
const int C = 523; //Frequenze delle note musicali
int switchState = 0;
int switchState2 = 0;
Serial.print("Uscita primo sensore : ");
Serial.print(tensione);
Serial.println();
Serial.println("Uscita secondo sensore : ");
Serial.print(tensione2);
Serial.println();
Serial.println("Uscita terzo sensore : ");
Serial.print(tensione3);
Serial.println();
Serial.println("Uscita quarto sensore : ");
Serial.print(tensione4);
Serial.println();
delay(500);
if (digitalRead(13) == HIGH) {
switchState = 1;
switchState2 = 0;
}
else {
switchState = 0;
switchState2 = 1;
}
if(digitalRead(12) == HIGH) {
switchState2 = 1;
switchState = 0;
}
else {
switchState = 1;
switchState2 = 0;
}
if( switchState == 1 && tensione >= 1000) {
tone(3, g);
}
else {
noTone(3);
}
if (switchState == 1 && tensione2 >= 1000) {
tone(3, a);
}
else{
noTone(3);
}
if(switchState == 1 && tensione3 >= 1000) {
tone(3, b);
}
else {
noTone(3);
}
if(switchState == 1 && tensione4 >= 1000) {
tone(3, C);
}
else {
noTone(3);
}
if (switchState2 == 1) {
if (tensione >= 1000) {
tone(3, c);
}
else {
noTone(3);
}
if(tensione2 >= 1000) {
tone(3, d);
}
else {
noTone(3);
}
if (tensione3 >= 1000) {
tone(3, e);
}
else {
noTone(3);
}
if (tensione4 >= 1000) {
tone(3, f);
}
else {
noTone(3);
}
}
}