306 lines
8.9 KiB
Markdown
306 lines
8.9 KiB
Markdown
# Sistema Allarme Camper Ultra Low Power
|
|
|
|
Sistema di allarme per camper ottimizzato per consumo energetico minimo, con rilevamento intelligente delle vibrazioni e controllo remoto via RF.
|
|
|
|
## Caratteristiche
|
|
|
|
- **Ultra Low Power**: ~3.5mA armato, autonomia 60+ giorni con batteria 12V 7Ah
|
|
- **Rilevamento Intelligente**: Conta N cambi di stato in finestra temporale per ridurre falsi positivi
|
|
- **Sleep Mode PWR_DOWN**: Sistema dorme il 99% del tempo (~0.1µA)
|
|
- **Interrupt-Driven**: Risposta immediata senza polling continuo
|
|
- **Watchdog Timer**: Lampeggio LED senza sprechi energetici
|
|
- **Configurabile**: Debug serial e tipo sensore via #define
|
|
- **Controllo RF**: Attivazione/disattivazione tramite telecomando 433MHz
|
|
|
|
## Hardware Richiesto
|
|
|
|
### Componenti Principali
|
|
- **Arduino Pro Mini 3.3V 8MHz** (consigliato per ultra low power)
|
|
- Dissaldare LED power sulla board (risparmio ~10mA)
|
|
- Mantenere regolatore di tensione onboard
|
|
- **RX480E-4** - Ricevitore RF 433MHz (⚠️ richiede 5V - vedi nota sotto)
|
|
- **Sensore vibrazione SW-420** - Modulo con switch vibrazioni
|
|
- Dissaldare LED power e LED signal dal modulo (risparmio ~15mA)
|
|
- Regolazione sensibilità tramite potenziometro onboard
|
|
- **Buzzer attivo** 3.3V-5V compatibile
|
|
- **LED** x2 (status + intrusione)
|
|
- **Resistenze** 1.5kΩ per LED (low power)
|
|
|
|
**⚠️ Nota importante RF Receiver:**
|
|
Il RX480E-4 richiede alimentazione a 5V. Con Pro Mini 3.3V hai due opzioni:
|
|
1. Usare regolatore 5V separato per il solo ricevitore RF
|
|
2. Usare ricevitore RF compatibile 3.3V (es. RXB6, moduli superheterodyne)
|
|
|
|
### Alimentazione
|
|
- Batteria 12V 7Ah (autonomia ~67 giorni)
|
|
- Oppure batteria 9V 500mAh (autonomia ~5 giorni)
|
|
- Regolatore step-down se necessario
|
|
|
|
## Schema Collegamento
|
|
|
|
```
|
|
Arduino Pin → Componente
|
|
────────────────────────────
|
|
Pin 2 → SW-420 D0 (INT0)
|
|
Pin 6 → RX480E-4 DATA (PCINT22)
|
|
Pin 9 → Buzzer
|
|
Pin 12 → LED intrusione
|
|
Pin 13 → LED status
|
|
|
|
VCC (3.3V) → SW-420 VCC
|
|
VCC (5V) → RX480E-4 VCC (richiede regolatore separato)
|
|
GND → Tutti i GND comuni
|
|
```
|
|
|
|
## Configurazione Software
|
|
|
|
### Parametri Configurabili
|
|
|
|
Nel file `src/src.ino`, modifica le seguenti define:
|
|
|
|
```cpp
|
|
// Debug Serial (disabilita in produzione)
|
|
#define DEBUG_SERIAL
|
|
|
|
// Stato iniziale all'accensione
|
|
#define STARTUP_STATE 1 // 0=sempre disarmato, 1=sempre armato, 2=check RF
|
|
|
|
// Rilevamento vibrazione intelligente
|
|
#define VIBRATION_WINDOW_MS 2000 // Finestra temporale (ms)
|
|
#define VIBRATION_THRESHOLD 80 // N° cambi di stato richiesti
|
|
#define VIBRATION_TIMEOUT_MS 3000 // Timeout inattività (ms)
|
|
|
|
// Durate allarme
|
|
#define TRIGGER_DURATION_MS 5000 // Durata buzzer (ms)
|
|
#define ARMING_DELAY_MS 2000 // Delay armamento (ms)
|
|
```
|
|
|
|
### Modalità di Avvio
|
|
|
|
| STARTUP_STATE | Comportamento |
|
|
|---------------|---------------|
|
|
| 0 | **ALWAYS_DISARMED** - Parte sempre disarmato (ignora RF) |
|
|
| 1 | **ALWAYS_ARMED** - Parte sempre armato (massima sicurezza) |
|
|
| 2 | **CHECK_RF** - Controlla stato RF all'avvio (default) |
|
|
|
|
## Installazione
|
|
|
|
### 1. Arduino IDE Setup
|
|
|
|
```
|
|
Tools → Board → Arduino Pro or Pro Mini
|
|
Tools → Processor → ATmega328P (3.3V, 8MHz)
|
|
Tools → Programmer → (seleziona il tuo FTDI/USB-Serial)
|
|
```
|
|
|
|
**Nota:** Il codice è compatibile con 8MHz. Le funzioni millis() e watchdog timer si adattano automaticamente alla frequenza del clock.
|
|
|
|
### 2. Upload Codice
|
|
|
|
1. Apri `src/src.ino` nell'Arduino IDE
|
|
2. Abilita `#define DEBUG_SERIAL` per test
|
|
3. Compila e carica (`Ctrl+U`)
|
|
4. Apri Serial Monitor (9600 baud) per vedere l'output
|
|
|
|
### 3. Test Funzionalità
|
|
|
|
**Con DEBUG_SERIAL abilitato:**
|
|
```
|
|
Alarm Ready
|
|
(Premi telecomando) → Sistema si arma
|
|
(Scuoti sensore) → INTRUSIONE
|
|
```
|
|
|
|
### 4. Produzione
|
|
|
|
1. Commenta `#define DEBUG_SERIAL`
|
|
2. Ricompila e carica
|
|
3. Sistema pronto per installazione
|
|
|
|
## Funzionamento
|
|
|
|
### Stati del Sistema
|
|
|
|
```
|
|
DISARMED (Disarmato)
|
|
↓ (RF HIGH)
|
|
ARMING (Armamento - 2s)
|
|
↓
|
|
ARMED (Armato - lampeggio LED)
|
|
↓ (Vibrazioni > soglia)
|
|
TRIGGERED (Allarme - buzzer 5s)
|
|
↓ (Timeout o RF LOW)
|
|
DISARMED / ARMED
|
|
```
|
|
|
|
### Rilevamento Vibrazioni Intelligente
|
|
|
|
Il sistema conta i **cambi di stato** del sensore in una finestra temporale:
|
|
|
|
- **Soglia default**: 80 cambi in 2000ms
|
|
- **Vantaggio**: Filtra falsi positivi (vibrazioni stradali, vento)
|
|
- **Personalizzabile**: Regola `VIBRATION_THRESHOLD` e `VIBRATION_WINDOW_MS`
|
|
|
|
**Esempio:**
|
|
```
|
|
Vibrazione stradale leggera → 5 cambi in 2s → Ignorata ✓
|
|
Intrusione reale → 80+ cambi in 2s → ALLARME! ✓
|
|
```
|
|
|
|
## Consumo Energetico
|
|
|
|
### Consumi per Stato
|
|
|
|
| Stato | Consumo | Durata Tipica |
|
|
|-------|---------|---------------|
|
|
| **DISARMED** | ~3.0 mA | Continuo |
|
|
| **ARMING** | ~1.5 mA | 2 secondi |
|
|
| **ARMED** | ~3.5 mA | Continuo |
|
|
| **TRIGGERED** | ~32 mA | 5 secondi |
|
|
|
|
### Autonomia Stimata
|
|
|
|
**Con batteria 12V 7Ah:**
|
|
- Allarme armato continuo: **~67 giorni**
|
|
- Uso misto (8h armato/giorno): **~6 mesi**
|
|
|
|
**Con batteria 9V 500mAh:**
|
|
- Allarme armato continuo: **~5 giorni**
|
|
|
|
### Breakdown Consumo (Armato)
|
|
|
|
```
|
|
RX480E-4 (sempre on): 3.0 mA (86%)
|
|
LED lampeggio (media): 0.1 mA (3%)
|
|
ATmega328P (wake-up): 0.4 mA (11%)
|
|
─────────────────────────────────
|
|
TOTALE: 3.5 mA
|
|
```
|
|
|
|
## Preparazione Hardware
|
|
|
|
### Arduino Pro Mini: Rimozione LED Power (Obbligatoria)
|
|
|
|
**Risparmio: ~10mA**
|
|
|
|
Il LED power sulla board Pro Mini consuma continuamente ~10mA e deve essere rimosso:
|
|
|
|
1. Individua il LED sempre acceso sulla scheda (solitamente vicino al regolatore)
|
|
2. Dissalda il LED con saldatore a punta fine
|
|
3. Verifica con multimetro la riduzione di consumo
|
|
|
|
### Sensore SW-420: Rimozione LED (Obbligatoria)
|
|
|
|
**Risparmio: ~15mA**
|
|
|
|
Il modulo SW-420 ha tipicamente 2 LED (power + signal) che consumano inutilmente:
|
|
|
|
1. Individua i 2 LED sul modulo SW-420
|
|
2. Dissalda entrambi i LED con saldatore a punta fine
|
|
3. Il sensore continuerà a funzionare normalmente via pin digitale D0
|
|
|
|
**Dopo rimozione LED:** Consumo totale sistema ridotto da ~28mA a ~3.5mA armato
|
|
|
|
### Ottimizzazione Opzionale: RF con Switch MOSFET
|
|
|
|
**Risparmio: ~3mA → autonomia >1 anno**
|
|
|
|
Aggiungi MOSFET P-channel per accendere RX solo periodicamente:
|
|
- Complicato da implementare
|
|
- Latenza attivazione fino a 10 secondi
|
|
- Non consigliato per questo progetto
|
|
|
|
## Calibrazione
|
|
|
|
### Sensore SW-420: Regolazione Hardware
|
|
|
|
Il modulo SW-420 ha un potenziometro per regolare la sensibilità fisica:
|
|
|
|
1. Ruota il potenziometro completamente in senso orario (minima sensibilità)
|
|
2. Alimenta il modulo e osserva l'uscita digitale D0
|
|
3. Ruota gradualmente in senso antiorario fino a rilevare vibrazioni medie
|
|
4. Evita di renderlo troppo sensibile (rileverà vibrazioni ambientali)
|
|
|
|
**Obiettivo:** Rilevare vibrazioni da intrusione ma ignorare vibrazioni stradali/vento
|
|
|
|
### Calibrazione Software Threshold
|
|
|
|
Dopo aver calibrato il potenziometro hardware:
|
|
|
|
1. Abilita `#define DEBUG_SERIAL`
|
|
2. Carica il codice
|
|
3. Arma il sistema
|
|
4. Prova diverse intensità di vibrazione
|
|
5. Osserva sul Serial Monitor quanti cambi vengono rilevati
|
|
6. Regola `VIBRATION_THRESHOLD` di conseguenza
|
|
|
|
**Consigli:**
|
|
- Soglia troppo bassa → Troppi falsi positivi
|
|
- Soglia troppo alta → Sistema poco sensibile
|
|
- Default 80 cambi/2s → Buon compromesso con SW-420
|
|
|
|
### Misura Consumo
|
|
|
|
Con multimetro in serie sulla linea VCC:
|
|
```
|
|
Sistema DISARMED → Deve leggere ~3.0mA
|
|
Sistema ARMED → Deve leggere ~3.5mA (media)
|
|
LED lampeggia → Picchi fino a 5-6mA
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Sistema non si arma
|
|
- Verifica connessione RX480E-4
|
|
- Controlla che telecomando trasmetta
|
|
- Abilita DEBUG_SERIAL per diagnostica
|
|
|
|
### Troppi falsi positivi
|
|
- Aumenta `VIBRATION_THRESHOLD`
|
|
- Aumenta `VIBRATION_WINDOW_MS`
|
|
- Verifica montaggio sensore vibrazione
|
|
|
|
### Consumo troppo alto
|
|
- Verifica che RX sia modello a basso consumo
|
|
- Rimuovi LED power da Pro Mini
|
|
- Controlla che DEBUG_SERIAL sia disabilitato
|
|
|
|
### Serial Monitor non funziona
|
|
- Verifica baud rate 9600
|
|
- Controlla che `#define DEBUG_SERIAL` sia attivo
|
|
- Verifica connessione FTDI (TX→RX, RX→TX)
|
|
|
|
## Tecniche Low Power Implementate
|
|
|
|
- ✅ **SLEEP_MODE_PWR_DOWN** - Consumo minimo 0.1µA
|
|
- ✅ **Interrupt esterni** - Wake-up istantaneo
|
|
- ✅ **Watchdog Timer** - Funziona in PWR_DOWN
|
|
- ✅ **Disabilitazione moduli** - ADC, TWI, SPI, Timer2, USART
|
|
- ✅ **Brown-out Detector disable** - Durante sleep
|
|
- ✅ **Pin non usati OUTPUT LOW** - Riduce leakage current
|
|
- ✅ **Eliminazione delay()** - Sostituiti con sleep
|
|
- ✅ **LED low current** - 2mA invece di 20mA
|
|
|
|
## File del Progetto
|
|
|
|
```
|
|
camper/
|
|
├── src/
|
|
│ └── src.ino # Codice principale
|
|
├── README.md # Questo file
|
|
└── .gitignore # Git ignore per Arduino
|
|
```
|
|
|
|
## Licenza
|
|
|
|
Questo progetto è rilasciato come open source.
|
|
|
|
## Crediti
|
|
|
|
Sviluppato per sistema allarme camper ultra low power.
|
|
Hardware target: Arduino Pro Mini 3.3V 8MHz (LED power dissaldato)
|
|
|
|
---
|
|
|
|
**Autonomia target raggiunta: 60+ giorni con batteria standard 12V 7Ah**
|