alerte-obscurite.ino
Detection stays on the MCU (fast, real time), notification on the Linux (logger, mail, MQTT). This split of roles is the Yun/Tian philosophy: each processor does what it does best.
Hardware
An Arduino Tian (Microchip SAM3X8E + TianOS Linux on an Atheros AR9344, dual USB, Ethernet and Wi-Fi). 1 LDR + 10 kΩ resistor as a divider on A0.
Wiring
LDR between 5 V and A0, 10 kΩ resistor between A0 and GND.
How it works
The threshold with hysteresis avoids oscillation at dusk; logger writes into the Linux syslog, readable via journalctl or relayed by a system script.
Running it
Arduino IDE with the Arduino Tian board: upload over the « Native » USB port. Linux side: ssh root@arduino.local. The Bridge library is identical to the Yun's.
Variants
Replace logger with a curl to a notification API, or switch on a lamp driven by the Linux via GPIO/relay.
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.