alerte-obscurite.ino
La détection reste côté MCU (rapide, temps réel), la notification côté Linux (logger, mail, MQTT). Cette répartition des rôles est la philosophie des cartes Yun/Tian : chaque processeur fait ce qu'il fait de mieux.
Matériel requis
Une Arduino Yun (ATmega32U4 + Linux Linino sur Atheros AR9331, Wi-Fi et Ethernet, emplacement microSD). 1 LDR + résistance 10 kΩ en diviseur sur A0.
Câblage
LDR entre 5 V et A0, résistance 10 kΩ entre A0 et GND.
Fonctionnement
Le seuil avec hystérésis évite les oscillations à la tombée du jour ; logger écrit dans le syslog du Linux, consultable par journalctl ou relayé par un script système.
Exécution
Arduino IDE : sélectionne le port série pour téléverser, puis la carte Arduino Yun pour le moniteur. Côté Linux : ssh root@arduino.local (mot de passe de la distribution). L"app Yunwizard configure le réseau.
Variantes
Remplacer logger par un curl vers une API de notification, ou allumer une lampe pilotée par le Linux via GPIO/relais.
alerte-obscurite.ino
// LDR sur A0 : seuil franchi -> notification cote Linux (log + LED).
#include <Bridge.h>
#include <Process.h>
const int LDR = A0;
const int SEUIL = 300; // a calibrer
const unsigned long HYSTERESIS = 30000;
bool nuit = false;
unsigned long dernierEtat = 0;
void setup() {
Bridge.begin();
Serial.begin(9600);
}
void notifier(const char *message) {
Process p;
p.runShellCommand(String("logger 'capteur: ") + message + "'");
while (p.running());
Serial.println(message);
}
void loop() {
if (millis() - dernierEtat < 1000) return;
dernierEtat = millis();
int valeur = analogRead(LDR);
if (!nuit && valeur < SEUIL) {
nuit = true;
notifier("obscurite detectee");
} else if (nuit && valeur > SEUIL + 80) { // hysteresis 80
nuit = false;
notifier("retour a la lumiere");
}
}
// Cote Linux : journalctl -f (ou logread) voit passer les alertes,
// et un script logrotate/cron peut les pousser par mail.