Der Flammensensor KY-026 besteht aus einer Photodiode, die vor allem auf den Infrarot-Bereich von 760 bis 1100nm anspricht und etwas zusätzlicher Logik.

Durch ein Potentiometer kann die Empfindlichkeit des Sensors eingestellt werden, da dieser sonst auch auf kurze Impulse von TV-Fernbedienungen oder andere IR-Lichtquellen reagiert.

Für das Projekt benötigen wir

Im Video zeige ich den Aufbau des Projektes, den Test der einzelnen Komponenten und das Endergebnis. Die verwendeten Arduino Sketches findet ihr hier im Anschluss.

Arduino Projekt: Flammensensor KY-026 und Buzzer = Jukebox

Der Aufbau:

Funktionstest des Buzzers:

/********************************
 * makerblog.at - Tutorial
 * Fire Started Xmas Jukebox
 * 
 * Buzzer Test
 * 
 * Passiver Buzzer (die ohne weissen Aufkleber!)
 * Arduino GND -> - (GND)
 * Arduino 5V -> + (5V, meist mittleres Pin)
 * Arduino D11 -> S (Signal)
 * 
 * Funktionstest des Buzzers. 
 * Spielt wiederholt einen Ton ab.
 * 
 *********************************/

#define BUZZER_PIN 11

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  
  tone(BUZZER_PIN, 262, 250);
  delay(400);

  tone(BUZZER_PIN, 294, 250);
  delay(400);

  tone(BUZZER_PIN, 330, 250);
  delay(400);

  tone(BUZZER_PIN, 349, 250);
  delay(400);

  tone(BUZZER_PIN, 392, 250);
  delay(400);

  tone(BUZZER_PIN, 440, 250);
  delay(400);

  tone(BUZZER_PIN, 494, 250);
  delay(400);

  tone(BUZZER_PIN, 523, 400);
  delay(1000);

}Code-Sprache: C++ (cpp)

Funktionstest und Kalibrierung des Flammensensors:

/********************************
 * makerblog.at - Tutorial
 * Elegoo 37 Sensor Kit v2.0 - https://amzn.to/2JpJPgd
 * 
 * FLAME SENSOR TEST (z.B. aus Elegoo 37 Sensor Kit)
 * Arduino A0 -> AO (Analog Output)
 * Arduino 5V -> +
 * Arduino GND -> -
 * Arduino D7 -> DO (Digital Output)
 * 
 * Funktionstest des Flammensensors zur
 * Kalibrierung mit dem Potentiometer. 
 * 
 * Ziel: 
 * - LED1 am Sensor leuchtet immer
 * - LED2 am Sensor leuchtet erst, wenn Kerzenflamme nahe kommt (dann geht DO auf HIGH)
 * 
 *********************************/

#define SENSOR_PIN_A A0
#define SENSOR_PIN_D 7

void setup() {
  Serial.begin(9600);
  pinMode(SENSOR_PIN_D, INPUT);

  // Erste Messungen vom Sensor ignorieren, liefert manchmal Müll beim Start

  for (int x=0; x<10; x++) {
    int v = analogRead(SENSOR_PIN_A);
    delay(20);
  }
  
}

void loop() {

  // -----------------------------------------------------------
  // Ausgabe am besten über den [Serial Plotter] im Menu [Tools]
  // -----------------------------------------------------------
  
  // Fixe Obergrenze des Diagramms auf 1024 (autom. Skalierung verhindern)
  Serial.print(1024);
  Serial.print(",");
  // Digitalwert * 100 für bessere Sichtbarkeit, aus 1 wird 100
  Serial.print(digitalRead(SENSOR_PIN_D)*100); 
  Serial.print(",");
  // Analogwert zwischen 0 und 1024
  Serial.println(analogRead(SENSOR_PIN_A));
  delay(20);
}Code-Sprache: C++ (cpp)

Und der finale Sketch:

#include <NonBlockingRtttl.h>

#define BUZZER_PIN 11
#define SENSOR_PIN 7

/*
const char* song1 = "Rudolph the Red Nosed Raindeer:d=8,o=5,b=250:g,4a,g,4e,4c6,4a,2g.,g,a,g,a,4g,4c6,2b.,4p,f,4g,f,4d,4b,4a,2g.,g,a,g,a,4g,4a,2e.,4p,g,4a,a,4e,4c6,4a,2g.,g,a,g,a,4g,4c6,2b.,4p,f,4g,f,4d,4b,4a,2g.,g,a,g,a,4g,4d6,2c.6,4p,4a,4a,4c6,4a,4g,4e,2g,4d,4e,4g,4a,4b,4b,2b,4c6,4c6,4b,4a,4g,4f,2d,g,4a,g,4e,4c6,4a,2g.,g,a,g,a,4g,4c6,2b.,4p,f,4g,f,4d,4b,4a,2g.,4g,4a,4g,4a,2g,2d6,1c.6.";
const char* song2 = "Jingle Bells:d=4,o=5,b=170:b,b,b,p,b,b,b,p,b,d6,g.,8a,2b.,8p,c6,c6,c6.,8c6,c6,b,b,8b,8b,b,a,a,b,2a,2d6";
const char* song3 = "We Wish you a Merry Christmas:d=8,o=5,b=140:4d,4g,g,a,g,f#,4e,4c,4e,4a,a,b,a,g,4f#,4d,4f#,4b,b,c6,b,a,4g,4e,4d,4e,4a,4f#,2g";
*/

// Kurzversionen zum Testen
const char* song1 = "Rudolph:d=8,o=5,b=150:g,4a,g,4e,4c6,4a,2g.,g,a,g,a,4g,4c6,2b.";
const char* song2 = "Jingle:d=4,o=5,b=170:b,b,b,p,b,b,b,p,b,d6,g.,8a,2b.";
const char* song3 = "We Wish:d=8,o=5,b=140:4d,4g,g,a,g,f#,4e,4c,4e,4a,a,b,a,g,4f#,4d";

long randomIndex = 0; // zufälligen Song auswählen
byte playIt = 0; // 0 = gestoppt, 1=spielend

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(SENSOR_PIN, INPUT);

  randomSeed(analogRead(0)); // Zufallsgenerator seeden

 // Anfangs spielt kein Song, auf 1 setzen, falls beim Einschalten 
 // gleich losgepielt werden soll
  playIt = 0; 
  
}

void loop() {

  if (playIt) {
    if (!rtttl::isPlaying()) {
      if (randomIndex == 0) {
        rtttl::begin(BUZZER_PIN, song1);
      } else if (randomIndex == 1) {
        rtttl::begin(BUZZER_PIN, song2);
      } else if (randomIndex == 2) {
        rtttl::begin(BUZZER_PIN, song3);
      }
    }
    else {
      rtttl::play();
    }

    if (rtttl::done()) {
      playIt = 0;
    }
  } else {
    if (digitalRead(SENSOR_PIN)) {
      randomIndex = random(3);
      playIt = 1;
    }
    delay(100);
  }

}Code-Sprache: C++ (cpp)

Viele weitere Melodien im RTTTL Format gibt es hier:

http://mines.lumpylumpy.com/Electronics/Computers/Software/Cpp/MFC/RingTones.RTTTL

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Time limit is exhausted. Please reload the CAPTCHA.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.