Nota

¡Hola, bienvenido a la Comunidad de Aficionados a Raspberry Pi, Arduino y ESP32 de SunFounder en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas.

¿Por qué unirse?

  • Soporte de expertos: Resuelve problemas posventa y desafíos técnicos con ayuda de nuestra comunidad y equipo.

  • Aprender y compartir: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Vistas previas exclusivas: Obtén acceso anticipado a anuncios de nuevos productos y avances.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.

  • Promociones festivas y sorteos: Participa en sorteos y promociones de fiestas.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [aquí] y únete hoy!

5.14 Calibración

Cuando usas componentes de entrada analógica, como fotoresistencias, sensores de humedad del suelo, etc., puedes notar que su rango de lectura no es de 0 a 1023, sino más bien un rango como de 0 a 800 o de 600 a 1000, porque es imposible alcanzar los límites de estos dispositivos con un uso normal.

En este caso, se puede utilizar una técnica para calibrar las entradas de los sensores. Durante el inicio, haz que la placa de control mida las lecturas del sensor durante cinco segundos y registre las lecturas más altas y más bajas. Esta lectura de cinco segundos define los valores mínimos y máximos esperados de las lecturas tomadas durante el ciclo.

En este proyecto, usamos una fotoresistencia y un zumbador pasivo para implementar un juego tipo theremin utilizando la técnica de calibración descrita anteriormente.

Nota

El theremin es un instrumento musical electrónico que no requiere contacto físico. Genera diferentes tonos detectando la posición de las manos del jugador.

Componentes Necesarios

En este proyecto, necesitamos los siguientes componentes.

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa SunFounder R3

COMPRAR

Protoboard

COMPRAR

Cables Puente

COMPRAR

Resistencia

COMPRAR

Buzzer

COMPRAR

LED

COMPRAR

Fotoresistor

COMPRAR

Esquemático

../_images/circuit_8.8_calibration.png

Cableado

../_images/calibration_bb.jpg

Código

Nota

  • Abre el archivo 5.14.calibration.ino en la ruta 3in1-kit\basic_project\5.14.calibration.

  • O copia este código en el Arduino IDE.

  • O carga el código a través del Arduino Web Editor.

Una vez que el código se haya cargado con éxito, el LED se encenderá y tendremos 5 segundos para calibrar el rango de detección de la fotoresistencia. Esto se debe a que podemos estar en un entorno lumínico diferente cada vez que lo usamos (por ejemplo, la intensidad de la luz es diferente entre el mediodía y el atardecer).

En este momento, necesitamos mover nuestras manos hacia arriba y hacia abajo sobre la fotoresistencia, y el rango de movimiento de la mano se calibrará al rango de reproducción de este instrumento.

Después de 5 segundos, el LED se apagará y podremos mover nuestras manos sobre la fotoresistencia para tocar.

¿Cómo funciona?

  1. Establece los valores iniciales y los pines de todos los componentes.

    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. Configura un proceso de calibración en 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);
    }
    

    El flujo de trabajo es el siguiente.

    • utilizando millis() para temporización con un intervalo de 5000 ms.

    previousMillis = millis();
    ...
    while (millis() - previousMillis <= interval) {
    ...
    }
    
    • Durante estos cinco segundos, mueve una mano alrededor de la fotoresistencia, se registran y asignan los valores máximos y mínimos de la luz detectada a lightHigh y lightLow respectivamente.

    sensorValue = analogRead(photocellPin);
    if (sensorValue > lightHigh) {
        lightHigh = sensorValue;
    }
    if (sensorValue < lightLow) {
        lightLow = sensorValue;
    }
    
  3. Ahora puedes comenzar a tocar este Thermin. Lee el valor de la fotoresistencia en sensorValue y mapealo del rango pequeño al grande para usarlo como la frecuencia del zumbador.

    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);
    }