#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#include <IRremote.h>
#include <Adafruit SSD1306>
#include <Adafruit GFX>
// =============================
// Configuration OLED SH1107
// =============================
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 128
Adafruit_SH1107 display = Adafruit_SH1107(128, 128, &Wire);
// =============================
// Broches des composants
// =============================
// Capteur ultrason
#define TRIG_PIN 9
#define ECHO_PIN 10
// Récepteur IR
#define IR_RECEIVE_PIN 2
// LEDs
#define LED_VERTE 6
#define LED_ROUGE 7
// =============================
// Variables système
// =============================
bool systemeActif = false;
long distance;
long duree;
// Distance maximale de détection
const int DISTANCE_ALARME = 30;
// =============================
// Initialisation
// =============================
void setup() {
Serial.begin(9600);
// Initialisation OLED
display.begin(0x3C, true);
display.clearDisplay();
display.setTextColor(SH110X_WHITE);
display.setTextSize(1);
afficherMessage("SYSTEME SECURITE",
"Concepteur:",
"Nguru Lusenge");
delay(3000);
// Configuration HC-SR04
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Configuration LEDs
pinMode(LED_VERTE, OUTPUT);
pinMode(LED_ROUGE, OUTPUT);
// Initialisation IR
IrReceiver.begin(IR_RECEIVE_PIN);
Serial.println("Systeme initialise...");
Serial.println("Attente commande IR");
}
// =============================
// Boucle principale
// =============================
void loop() {
// Vérification télécommande IR
if (IrReceiver.decode()) {
unsigned long commande = IrReceiver.decodedIRData.command;
Serial.print("Commande IR recue : ");
Serial.println(commande);
// Bouton POWER = activation
if (commande == 0x45) {
systemeActif = true;
Serial.println("SYSTEME ACTIVE");
}
// Bouton OK = désactivation
if (commande == 0x40) {
systemeActif = false;
digitalWrite(LED_ROUGE, LOW);
Serial.println("SYSTEME DESACTIVE");
}
IrReceiver.resume();
}
// Fonction surveillance
if(systemeActif){
digitalWrite(LED_VERTE, HIGH);
distance = mesurerDistance();
Serial.print("Distance mesuree : ");
Serial.print(distance);
Serial.println(" cm");
if(distance <= DISTANCE_ALARME){
// Intrusion détectée
digitalWrite(LED_ROUGE,HIGH);
afficherMessage(
"!!! ALERTE !!!",
"Intrusion",
"Distance:"
);
display.setCursor(0,50);
display.print(distance);
display.print(" cm");
display.display();
Serial.println("!!! INTRUSION DETECTEE !!!");
}
else{
digitalWrite(LED_ROUGE,LOW);
afficherDistance(distance);
}
}
else{
digitalWrite(LED_VERTE,LOW);
afficherMessage(
"SYSTEME SECURITE",
"Etat:",
"DESACTIVE"
);
}
delay(500);
}
// =============================
// Mesure distance HC-SR04
// =============================
long mesurerDistance(){
digitalWrite(TRIG_PIN,LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN,HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN,LOW);
duree = pulseIn(ECHO_PIN,HIGH);
long distanceCm = duree * 0.034 / 2;
return distanceCm;
}
// =============================
// Affichage OLED message
// =============================
void afficherMessage(String ligne1,
String ligne2,
String ligne3){
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,10);
display.println(ligne1);
display.setCursor(0,35);
display.println(ligne2);
display.setCursor(0,55);
display.println(ligne3);
display.display();
}
// =============================
// Affichage distance
// =============================
void afficherDistance(long d){
display.clearDisplay();
display.setCursor(0,10);
display.println("SECURITE ACTIVE");
display.setCursor(0,35);
display.print("Distance :");
display.setCursor(0,55);
display.print(d);
display.print(" cm");
display.setCursor(0,80);
display.println("Surveillance");
display.display();
}Loading
grove-oled-sh1107
grove-oled-sh1107