#include <Arduino.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Définition des broches utilisées
#define PIR_PIN 14 // Utilisez la broche GPIO appropriée pour le capteur de mouvement
#define LED_PIN 33 // Utilisez la broche GPIO appropriée pour la LED rouge
#define LDR_PIN 32 // Utilisez la broche GPIO appropriée pour le capteur LDR
#define RELAY_PIN 16 // Utilisez une broche GPIO disponible pour le relais
#define ONE_WIRE_BUS 15 // Broche GPIO pour le bus OneWire (capteur de température)
// Définition des broches utilisées pour le capteur ultrasonique et le buzzer
#define TRIGGER_PIN 5 // Pin de déclenchement du capteur ultrasonique
#define ECHO_PIN 18 // Pin de réception du capteur ultrasonique
#define BUZZER_PIN 2 // Pin de contrôle du buzzer
// Température ambiante seuil pour allumer la lampe (en degrés Celsius)
#define TEMP_SEUIL 30
// Initialisation du bus OneWire pour le capteur de température
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
// Initialisation des broches pour le premier code
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(LDR_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT); // Définir la broche du relais en mode sortie
// Initialisation du capteur de température
sensors.begin();
// Initialisation des broches pour le capteur ultrasonique et le buzzer
Serial.begin(115200); // Initialisation de la communication série pour le débogage
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
// Lire l'état du capteur de mouvement
int motion = digitalRead(PIR_PIN);
int lightValue = analogRead(LDR_PIN);
// Lire la distance du capteur ultrasonique
long duration, distance;
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration * 0.0343) / 2;
Serial.print("Mouvement détecté: ");
Serial.println(motion);
// Si une intrusion est détectée ou si la luminosité est faible ou si la température dépasse la température ambiante seuil, allumer la lampe
if (motion == HIGH || lightValue < 500 || getTemperature() > TEMP_SEUIL ) {
digitalWrite(LED_PIN, HIGH);
digitalWrite(RELAY_PIN, HIGH); // Activer le relais pour allumer la lumière
if(distance < 100 && motion == HIGH ){
tone(BUZZER_PIN, 1000); // Activer le buzzer
delay(5000); // Maintenir la LED allumée pendant 1 seconde}
noTone(BUZZER_PIN); // Désactiver le buzzer
} else {
digitalWrite(RELAY_PIN, LOW); // Désactiver le relais pour éteindre la lumière
}}
// Affichage de la distance mesurée par le capteur ultrasonique
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Affichage de la température
Serial.print("Temperature: ");
Serial.print(getTemperature());
Serial.println(" °C");
//afficher la luminosité
Serial.print("Luminosité: ");
Serial.println(lightValue);
//Mouvement détecté
Serial.print("Mouvement détecté: ");
Serial.println(motion);
// Attente entre les lectures
delay(1000);
}
// Fonction pour obtenir la température actuelle
float getTemperature() {
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
return temperature;
}