Nota

Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Unisciti agli appassionati per approfondire Raspberry Pi, Arduino ed ESP32 insieme a noi.

Perché unirti?

  • Supporto esperto: Risolvi problemi post-vendita e sfide tecniche grazie all’aiuto della nostra community e del nostro team.

  • Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime speciali.

  • Sconti esclusivi: Approfitta di sconti riservati sui nostri prodotti più recenti.

  • Promozioni e omaggi festivi: Partecipa a promozioni e omaggi durante le festività.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

5.14 Calibrazione

Quando si utilizzano componenti con ingresso analogico, come fotoresistenze, sensori di umidità del terreno, ecc., si può notare che il loro intervallo di lettura non è 0-1023, ma piuttosto un intervallo come 0-800 o 600-1000, poiché è impossibile raggiungere i limiti di questi dispositivi con un uso normale.

In questo caso, è possibile utilizzare una tecnica di calibrazione degli ingressi dei sensori. Durante l’avvio, la scheda di controllo misura i valori dei sensori per cinque secondi e registra le letture massime e minime. Questo intervallo di cinque secondi definisce i valori minimi e massimi previsti per le letture che verranno effettuate durante il ciclo.

In questo progetto, utilizziamo una fotoresistenza e un buzzer passivo per realizzare un gioco simile a un theremin, sfruttando la tecnica di calibrazione descritta sopra.

Nota

Il theremin è uno strumento musicale elettronico che non richiede contatto fisico. Genera diversi toni rilevando la posizione delle mani del musicista.

Componenti necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

È sicuramente comodo acquistare un intero kit, ecco il link:

Nome

OGGETTI IN QUESTO KIT

LINK

Kit Starter 3 in 1

380+

3 in 1 Starter Kit

Puoi anche acquistarli separatamente dai link qui sotto.

INTRODUZIONE COMPONENTI

LINK DI ACQUISTO

Scheda SunFounder R3

ACQUISTA

Breadboard

ACQUISTA

Cavi di Collegamento

ACQUISTA

Resistore

ACQUISTA

Cicalino

ACQUISTA

LED

ACQUISTA

Fotoresistore

ACQUISTA

Schema

../_images/circuit_8.8_calibration.png

Collegamenti

../_images/calibration_bb.jpg

Codice

Nota

  • Apri il file 5.14.calibration.ino nel percorso 3in1-kit\basic_project\5.14.calibration.

  • Oppure copia questo codice nell”Arduino IDE.

  • Oppure carica il codice tramite Arduino Web Editor.

Dopo che il codice è stato caricato con successo, il LED si accenderà e avremo 5 secondi per calibrare l’intervallo di rilevamento della fotoresistenza. Questo perché ogni volta che lo usiamo, potremmo trovarci in un ambiente con illuminazione diversa (ad esempio, la luce può variare tra mezzogiorno e il crepuscolo).

In questo momento, dobbiamo muovere le mani sopra la fotoresistenza, e il movimento della mano verrà calibrato per determinare l’intervallo di gioco di questo strumento.

Dopo 5 secondi, il LED si spegnerà e potremo muovere le mani sopra la fotoresistenza per suonare.

Come funziona?

  1. Imposta i valori iniziali e i pin di tutti i componenti.

    const int buzzerPin = 9;
    const int ledPin = 8;
    const int photocellPin = A0;  //photoresistor attach to A2
    
    int lightLow = 1023;
    int lightHigh = 0;
    
    int sensorValue = 0;        // value read from the sensor
    int pitch = 0;           // sensor value converted into LED 'bars'
    
    unsigned long previousMillis = 0;
    const long interval = 5000;
    
  2. Imposta un processo di calibrazione nel setup().

    void setup()
    {
        pinMode(buzzerPin, OUTPUT); // make buzzer output
        pinMode(ledPin, OUTPUT); // make the LED pin output
    
        /* calibrate the photoresistor max & min values */
        previousMillis = millis();
        digitalWrite(ledPin, HIGH);
        while (millis() - previousMillis <= interval) {
            sensorValue = analogRead(photocellPin);
            if (sensorValue > lightHigh) {
                lightHigh = sensorValue;
            }
            if (sensorValue < lightLow) {
                lightLow = sensorValue;
            }
        }
        digitalWrite(ledPin, LOW);
    }
    

    Il flusso di lavoro è il seguente.

    • Usare millis() per il temporizzatore con un intervallo di 5000ms.

    previousMillis = millis();
    ...
    while (millis() - previousMillis <= interval) {
    ...
    }
    
    • Durante questi cinque secondi, muovi la mano attorno alla fotoresistenza; i valori massimi e minimi rilevati vengono registrati e assegnati rispettivamente a lightHigh e lightLow.

    sensorValue = analogRead(photocellPin);
    if (sensorValue > lightHigh) {
        lightHigh = sensorValue;
    }
    if (sensorValue < lightLow) {
        lightLow = sensorValue;
    }
    
  3. Ora puoi iniziare a suonare questo Thermin. Leggi il valore della fotoresistenza in sensorValue e mappalo da un intervallo piccolo a uno grande, utilizzandolo come frequenza per il buzzer.

    void loop()
    {
    /* play*/
    sensorValue = analogRead(photocellPin); //read the value of A0
    pitch = map(sensorValue, lightLow, lightHigh, 50, 6000);  // map to the buzzer frequency
    if (pitch > 50) {
        tone(buzzerPin, pitch, 20);
    }
    delay(10);
    }