Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

5.14 Kalibrierung

Wenn Sie analoge Eingangskomponenten verwenden, wie Fotowiderstände, Bodenfeuchtigkeitssensoren usw., stellen Sie möglicherweise fest, dass deren Messbereich nicht 0 bis 1023 beträgt, sondern eher ein Bereich wie 0 bis 800 oder 600 bis 1000. Denn unter normalen Bedingungen ist es unmöglich, die Grenzen dieser Geräte zu erreichen.

In diesem Fall kann eine Technik zur Kalibrierung der Sensoreingänge verwendet werden. Beim Start sollte das Steuerboard den Sensor fünf Sekunden lang messen und die höchsten und niedrigsten Werte aufzeichnen. Diese fünfsekündige Messung definiert die minimalen und maximalen erwarteten Werte der Messungen im Zyklus.

In diesem Projekt verwenden wir einen Fotowiderstand und einen passiven Summer, um ein Spiel zu implementieren, das einem theremin ähnelt, unter Verwendung der oben beschriebenen Kalibrierungstechnik.

Bemerkung

Das theremin ist ein elektronisches Musikinstrument, das keinen physischen Kontakt erfordert. Es erzeugt verschiedene Töne, indem es die Position der Hände des Spielers erkennt.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

Sie können sie auch separat über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

Arduino Uno R4 Minima

-

Breadboard

KAUFEN

Jumper-Kabel

KAUFEN

Widerstand

KAUFEN

Summer

KAUFEN

LED

KAUFEN

Fotowiderstand

KAUFEN

Schaltplan

../_images/circuit_8.8_calibration.png

Verdrahtung

../_images/5.14_calibration_bb.png

Code

Bemerkung

  • Öffnen Sie die Datei 5.14.calibration.ino unter dem Pfad 3in1-kit\learning_project\5.14.calibration.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

Nachdem der Code erfolgreich hochgeladen wurde, leuchtet die LED auf und wir haben 5 Sekunden Zeit, um den Erfassungsbereich des Fotowiderstands zu kalibrieren. Dies liegt daran, dass wir uns jedes Mal in einer anderen Lichtumgebung befinden könnten, wenn wir ihn verwenden (z.B. unterscheidet sich die Lichtintensität zwischen Mittag und Dämmerung).

Zu diesem Zeitpunkt müssen wir unsere Hände über dem Fotowiderstand auf und ab schwingen, und der Bewegungsbereich der Hand wird auf den Spielbereich dieses Instruments kalibriert.

Nach 5 Sekunden erlischt die LED und wir können unsere Hände über den Fotowiderstand schwingen, um zu spielen.

Wie funktioniert das?

  1. Initialwerte und Pins aller Komponenten festlegen.

    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. Ein Kalibrierungsprozess in setup() einrichten.

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

    Der Ablauf ist wie folgt:

    • Verwendung von millis() zur Zeitmessung mit einem Intervall von 5000ms.

    previousMillis = millis();
    ...
    while (millis() - previousMillis <= interval) {
    ...
    }
    
    • Während dieser fünf Sekunden wird mit der Hand um den Fotowiderstand gewedelt, die maximalen und minimalen Werte des erkannten Lichts werden erfasst und den Variablen lightHigh und lightLow zugewiesen.

    sensorValue = analogRead(photocellPin);
    if (sensorValue > lightHigh) {
        lightHigh = sensorValue;
    }
    if (sensorValue < lightLow) {
        lightLow = sensorValue;
    }
    
  3. Nun können Sie dieses Theremin spielen. Lesen Sie den Wert des Fotowiderstands in sensorValue und übertragen Sie ihn aus dem kleinen Bereich in den großen Bereich, um ihn als Frequenz des Summers zu verwenden.

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