/*
**************************************************************
* Coal Stoker Flame Size Detector *
* Inspired by Uri Shaked project at *
* https://wokwi.com/arduino/projects/305193627138654786 *
* Layout used as starting point *
* Copyright 2022 John Clark *
* Version 0.10 *
**************************************************************
*/
#include <OneWire.h>
#include <DallasTemperature.h>
// Broches pour le capteur MQ-2
#define MQ2_ANA A1
#define MQ2_DIG 2
#define Threshold 400
// Broches pour les LEDs et le buzzer
#define greenLED 3
#define yellowLED 4
#define redLED 5
#define buzzerPin 7
// Broche pour le capteur DS18B20
#define ONE_WIRE_BUS 6
// Broche pour le capteur de flamme KY-026
#define FLAME_PIN 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
pinMode(MQ2_ANA, INPUT);
pinMode(MQ2_DIG, INPUT);
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(FLAME_PIN, INPUT);
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
noTone(buzzerPin);
// Initialiser le générateur de nombres aléatoires
randomSeed(analogRead(0));
}
void loop() {
// Générer des valeurs aléatoires pour les capteurs
int gasLevel = random(0, 1024); // MQ-2
int flameState = random(0, 2); // KY-026 (0 ou 1)
float tempC = random(10, 41); // Température en °C (entre 10 et 40)
// Afficher les valeurs du capteur de gaz
Serial.print("Gaz Analogique : ");
Serial.println(gasLevel);
Serial.print("Gaz Numérique : ");
Serial.println(gasLevel > Threshold ? HIGH : LOW);
// Conversion en pourcentage (0-100%) pour le capteur de gaz
int gasPercentage = map(gasLevel, 0, 1023, 0, 100);
Serial.print("Gaz (en pourcentage) : ");
Serial.print(gasPercentage);
Serial.println(" %");
if (gasLevel > Threshold) {
Serial.println("Alerte : Fumée détectée !");
tone(buzzerPin, 200);
digitalWrite(redLED, HIGH);
} else {
noTone(buzzerPin);
digitalWrite(redLED, LOW);
}
// Afficher les valeurs de température
float tempF = (tempC * 9.0) / 5.0 + 32.0; // Convertir en Fahrenheit
Serial.print("Température : ");
Serial.print(tempC);
Serial.print(" °C / ");
Serial.print(tempF);
Serial.println(" °F");
// Indiquer la température avec les LEDs et afficher un message d'alerte si nécessaire
if (tempC < 15.0) {
// Température trop basse
Serial.println("Alerte : Température trop basse (Rouge) !");
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, HIGH);
tone(buzzerPin, 1000);
} else if (tempC < 20.0) {
// Température initiale
digitalWrite(greenLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
noTone(buzzerPin);
Serial.println("Température initiale (Verte)");
} else if (tempC < 30.0) {
// Température moyenne
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(redLED, LOW);
noTone(buzzerPin);
Serial.println("Température moyenne (Orange)");
} else {
// Température trop élevée
Serial.println("Alerte : Température élevée (Rouge) !");
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, HIGH);
tone(buzzerPin, 1000);
}
// Afficher les valeurs du capteur de flamme
Serial.print("État du capteur de flamme : ");
Serial.println(flameState);
// Conversion en pourcentage pour le capteur de flamme
int flamePercentage = flameState == LOW ? 100 : 0;
Serial.print("Flamme (en pourcentage) : ");
Serial.print(flamePercentage);
Serial.println(" %");
if (flameState == LOW) {
Serial.println("Alerte : Flamme détectée !");
digitalWrite(redLED, HIGH);
tone(buzzerPin, 1000);
} else {
Serial.println("Aucune flamme détectée.");
digitalWrite(redLED, LOW);
noTone(buzzerPin);
}
delay(1000); // Attendre 1 seconde avant la prochaine lecture
}Loading
ds18b20
ds18b20