2. Assemblaggio e Collegamenti
Il Concetto: Sensing Capacitivo
Sfruttiamo la conducibilità della frutta e del corpo umano. Toccando un frutto (collegato a un pin di "ricezione" tramite una resistenza) mentre si tiene un cavo collegato a terra (GND), si altera la capacità elettrica misurata da Arduino tra un pin di "invio" e quello di "ricezione". La libreria CapacitiveSensor rileva questa variazione.
FONDAMENTALE: La persona che suona deve sempre tenere in mano la pinza a coccodrillo collegata al pin GND di Arduino. Senza questo, il sistema non rileverà il tocco!
Schema di Collegamento (Esempio 4 Frutti)
IMPORTANTE: Scollegare sempre Arduino dall'alimentazione prima di fare o modificare i collegamenti.
- Pin di Invio (Send Pin - es. Pin 4): Comune a tutte le resistenze.
- Pin di Ricezione (Receive Pins) e Frutti:
- Pin 4 (Send) -> Resistenza 1MΩ -> Pin 2 (Receive 1) -> Pinza -> **Frutto 1**.
- Pin 4 (Send) -> Resistenza 1MΩ -> Pin 3 (Receive 2) -> Pinza -> **Frutto 2**.
- Pin 4 (Send) -> Resistenza 1MΩ -> Pin 5 (Receive 3) -> Pinza -> **Frutto 3**.
- Pin 4 (Send) -> Resistenza 1MΩ -> Pin 6 (Receive 4) -> Pinza -> **Frutto 4**.
- *(Aggiungi altri frutti collegando Pin 4 -> Nuova Resistenza -> Nuovo Pin Receive -> Pinza -> Frutto)*
- Buzzer Passivo:
- Terminale positivo (+) -> Pin digitale
9 (o altro pin PWM ~).
- Terminale negativo (-) -> Pin
GND di Arduino.
- Messa a Terra Utente:
- Pin
GND di Arduino -> Cavo con Pinza a Coccodrillo (da tenere in mano).
Schema Visivo Semplificato
+-----------------------+
| ARDUINO UNO |
|-----------------------|
| GND O --+-------------------> Pinza Coccodrillo (TERRA DA TENERE IN MANO)
| |
| Pin 9 O --------+-------------------> (+) Buzzer
| |
| Pin 4 O (Send) -+-R1-+--------------> Pin 2 (Receive 1) -> Pinza -> Frutto 1
| (1M Ohm) |
| +-R2-+--------------> Pin 3 (Receive 2) -> Pinza -> Frutto 2
| (1M Ohm) |
| +-R3-+--------------> Pin 5 (Receive 3) -> Pinza -> Frutto 3
| (1M Ohm) |
| +-R4-+--------------> Pin 6 (Receive 4) -> Pinza -> Frutto 4
| (1M Ohm) |
+-----------------|-----+
|
+-------------------> (-) Buzzer (collegato a GND)
Assemblaggio Pratico
- Collega Resistenze e Pin Receive: Collega un capo di ogni resistenza al Pin Send (4). Collega l'altro capo di ogni resistenza a un Pin Receive diverso (2, 3, 5, 6...).
- Collega Pinze ai Pin Receive: Usa jumper per collegare ogni Pin Receive a una pinza.
- Collega Pinze ai Frutti: Infila delicatamente la punta metallica di ogni pinza nel frutto corrispondente.
- Collega Buzzer: Ai pin 9 e GND.
- Prepara la Terra Utente: Collega una pinza a GND.
- Disponi la Frutta: Mettila in fila come una tastiera.
- Alimenta Arduino.
Precauzioni
- Non bagnare Arduino! Attenzione al succo di frutta.
- Collegamenti Stabili: Controlla che pinze e cavi siano ben inseriti.
- La Terra è Chiave: Ricorda all'utente di tenerla sempre!
- Sperimenta con la Soglia: Potrebbe servire aggiustarla nel codice.
3. Codice Arduino
Questo è il codice (sketch) da caricare sulla scheda Arduino.
Libreria necessaria: Assicurati di aver installato la libreria CapacitiveSensor dal Gestore Librerie dell'IDE (di Paul Badger).
/**
* Pianoforte di Frutta con Arduino
*
* Descrizione: Rileva il tocco sui frutti usando CapacitiveSensor e suona note.
* L'utente DEVE tenere il cavo GND.
* Hardware/Collegamenti: Vedi sezioni precedenti.
* Librerie: CapacitiveSensor by Paul Badger
* Creato da: Assistente AI - Data: 29 Aprile 2025
*/
#include <CapacitiveSensor.h>
// --- CONFIGURAZIONE ---
const int PIN_SEND = 4; // Pin invio segnale
const int NUM_TASTI = 4; // Numero di frutti/tasti
const int PIN_BUZZER = 9; // Pin PWM buzzer
// Pin ricezione per ogni frutto (corrispondenti ai collegamenti!)
const int PIN_RECEIVE[] = {2, 3, 5, 6};
// Soglia rilevamento tocco (DA AGGIUSTARE SPERIMENTALMENTE!)
// Inizia con 100. Aumenta se troppo sensibile, diminuisci se non rileva.
const long SOGLIA_TOCCO = 100;
// Note musicali (Hz) - Scala Do Maggiore
const int NOTE[] = {
262, // Do (C4)
294, // Re (D4)
330, // Mi (E4)
349 // Fa (F4)
// Aggiungi altre se hai più tasti: 392(Sol), 440(La), 494(Si), 523(Do5)
};
const int DURATA_NOTA = 150; // Durata nota (ms)
// --- FINE CONFIGURAZIONE ---
// Oggetti CapacitiveSensor
CapacitiveSensor sensori[NUM_TASTI];
// Stato precedente tasti
bool tastoPremuto[NUM_TASTI];
void setup() {
Serial.begin(9600); // Per debug
pinMode(PIN_BUZZER, OUTPUT);
Serial.println("Pianoforte di Frutta Inizializzato!");
Serial.println("Assicurati di tenere il cavo GND!");
// Inizializza sensori e stato tasti
for (int i = 0; i < NUM_TASTI; i++) {
sensori[i] = CapacitiveSensor(PIN_SEND, PIN_RECEIVE[i]);
tastoPremuto[i] = false;
}
}
void loop() {
// Controlla ogni sensore/tasto
for (int i = 0; i < NUM_TASTI; i++) {
// Legge valore sensore (media su 30 campioni)
long valoreSensore = sensori[i].capacitiveSensor(30);
// (Opzionale) Stampa valori per debug soglia
// Serial.print("Tasto "); Serial.print(i);
// Serial.print(": "); Serial.println(valoreSensore);
// Tocco rilevato? (Supera soglia)
if (valoreSensore > SOGLIA_TOCCO) {
// Se NON era già premuto, suona
if (!tastoPremuto[i]) {
Serial.print("Tasto "); Serial.print(i); Serial.println(" PREMUTO");
suonaNota(NOTE[i]); // Suona nota corrispondente
tastoPremuto[i] = true; // Segna come premuto
}
} else {
// Nessun tocco (sotto soglia)
// Se ERA premuto, segna come rilasciato
if (tastoPremuto[i]) {
Serial.print("Tasto "); Serial.print(i); Serial.println(" RILASCIATO");
tastoPremuto[i] = false; // Segna come rilasciato
}
}
} // Fine ciclo for
delay(10); // Pausa stabilità
}
// Funzione per suonare una nota
void suonaNota(int frequenza) {
tone(PIN_BUZZER, frequenza, DURATA_NOTA);
}