Descrizione
📘 Descrizione del modulo FC‑06
- Il modulo FC‑06 è un sensore di vibrazione/urto basato su interruttore a molla (meccanico), spesso simile ai moduli KY‑002 o SW‑520D. Quando viene colpito o vibra, il contatto chiude brevemente il circuito (Electrothinks).
- Funziona a tensioni comprese tra 3,3 V e 5 V, compatibile con Arduino (elkine.altervista.org, components101.com, ProtoSupplies).
- Il modulo include solitamente:
- LED Power (alimentazione).
- LED Shock/DO che si accende quando viene rilevata una vibrazione/urto (iot-guider.com).
- Uscita digitale parallela, cioè un pin digitale che passa normalmente da HIGH a LOW (o viceversa) al rilevamento del movimento (ProtoSupplies, ArduinoModulesInfo, phippselectronics.com).
Pinout tipico (3 pin)
- VCC → +5 V (o 3,3 V)
- GND → massa
- S (Signal) → uscita digitale
🔧 Collegamenti con Arduino
Schema tipico using Arduino Uno:
FC‑06 VCC → Arduino 5 V (o 3,3 V)
FC‑06 GND → Arduino GND
FC‑06 S → Arduino pin digitale (ad esempio D2 o D3)
Optional: LED o buzzer su un altro pin per avviso visivo/acustico.
Ogni volta che si scuote o colpisce il modulo, il pin digitale cambia stato brevemente, il LED DO si illumina e il segnale viene letto da Arduino (ProtoSupplies, Electrothinks, iot-guider.com).
💻 Esempi di codice
1. Semplice rilevazione (LED integrato)
const int shockPin = 2; // ingresso dal sensore
const int ledPin = 13; // LED integrato
void setup(){
pinMode(shockPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
int val = digitalRead(shockPin);
if(val == LOW){ // LOW se sensore attivo (o HIGH a seconda del modulo)
digitalWrite(ledPin, HIGH);
Serial.println("Shock detected!");
} else {
digitalWrite(ledPin, LOW);
}
delay(100);
}
2. Allarme lampeggiante + led verde/rosso
int shockPin = 2;
int greenLed = 3;
int redLed = 4;
void setup(){
pinMode(shockPin, INPUT);
pinMode(greenLed, OUTPUT);
pinMode(redLed, OUTPUT);
}
void loop(){
if(digitalRead(shockPin) == HIGH){
digitalWrite(greenLed, LOW);
for(int i=0;i<10;i++){
digitalWrite(redLed, HIGH);
delay(150);
digitalWrite(redLed, LOW);
delay(150);
}
} else {
digitalWrite(greenLed, HIGH);
digitalWrite(redLed, LOW);
}
}
Questo esempio è tratto da tutorial sul modulo KY‑002/SW‑18010P, che funziona in modo equivalente a FC‑06 (ipsiaplcarduinolab.altervista.org, Arduino Project Hub, getelectronics.net).
3. Usare interrupt per rilevare impulsi rapidi
volatile bool shockFlag = false;
void inputChange() {
shockFlag = true;
}
void setup(){
pinMode(2, INPUT);
pinMode(13, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), inputChange, FALLING);
}
void loop(){
if(shockFlag){
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
shockFlag = false;
}
}
Questo approccio è utile per non perdere impulsi brevi in presenza di vibrazioni rapide (forum.arduino.cc, components101.com).
⚙️ Consigli pratici e tuning
- Debounce: il sensore produce spesso segnali di rimbalzo (bounce). È bene aggiungere un filtro software con delay, o usare la modalità interrupt con controllo temporale (forum.arduino.cc, ProtoSupplies).
- Sensibilità: moduli con potenziometro (es. FC‑06) permettono di regolare la soglia di attivazione. Prova a ruotarlo lentamente fino a ottenere comportamento stabile (elkine.altervista.org, forum.arduino.cc).
- Orientamento: se il sensore include anche un tilt switch, l’orientamento rispetto alla gravità può influenzare il segnale. Testare in varie posizioni (forum.arduino.cc).
🛠 Applicazioni tipiche
- Antifurti e intrusioni: rilevare vibrazioni su porte, finestre o oggetti.
- Rilevatori di caduta o urto: usato in dispositivi mobili, pacchi o robot.
- Progetti interattivi: scuotere o colpire un oggetto per attivare LED, buzzer o serie di eventi.
✅ Riepilogo
| Caratteristica | Dettagli |
|---|---|
| Alimentazione | 3,3–5 V |
| Uscita | Digitale (LOW o HIGH al tocco) |
| Sensibilità regolabile | Sì, tramite potenziometro |
| Funzionamento | Basato su molla o palla interna |
| Modalità lettura | Polling digitale o interrupt |
Perfetto! Integrare il sensore di shock/vibrazione FC-06 in un progetto pratico è un ottimo modo per sfruttarne le potenzialità. Ecco 3 progetti specifici con guida, schemi e codice:
🔧 Progetto 1: Datalogger di vibrazioni su microSD
Obiettivo: Registrare data/ora e numero di vibrazioni su una scheda SD.
🧰 Componenti necessari:
- Arduino Uno/Nano
- Sensore FC-06
- Modulo microSD (es. con chip CS)
- Modulo RTC (es. DS3231 per data/ora)
- Cavi jumper, breadboard
🖇️ Collegamenti principali:
| Componente | Collegamento con Arduino |
|---|---|
| FC-06 S | D2 |
| microSD | SPI: D10-CS, D11-MOSI, D12-MISO, D13-SCK |
| RTC | I2C: A4-SDA, A5-SCL |
💻 Codice esempio:
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <RTClib.h>
const int shockPin = 2;
const int chipSelect = 10;
RTC_DS3231 rtc;
File dataFile;
void setup() {
Serial.begin(9600);
pinMode(shockPin, INPUT);
if (!SD.begin(chipSelect)) {
Serial.println("Errore SD");
while (1);
}
if (!rtc.begin()) {
Serial.println("Errore RTC");
while (1);
}
attachInterrupt(digitalPinToInterrupt(shockPin), logShock, FALLING);
}
void loop() {
delay(1000); // inattività
}
void logShock() {
DateTime now = rtc.now();
dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.print(now.timestamp());
dataFile.println(" - Vibrazione rilevata");
dataFile.close();
}
}
🔁 Espandibile: puoi aggiungere contatori giornalieri, buzzer di notifica, Wi-Fi ecc.
📡 Progetto 2: Allarme vibrazioni wireless (con ESP8266/ESP32)
Obiettivo: Inviare una notifica Wi-Fi o HTTP se viene rilevata una vibrazione.
🧰 Componenti:
- ESP8266 (NodeMCU) o ESP32
- FC-06
- LED (facoltativo)
🖇️ Collegamenti:
- FC-06 S → D1 (GPIO5)
- FC-06 VCC → 3.3V
- GND → GND
💻 Codice esempio:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char* ssid = "TUO_WIFI";
const char* password = "TUA_PASSWORD";
const int shockPin = D1;
bool shockDetected = false;
void setup() {
pinMode(shockPin, INPUT);
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
attachInterrupt(digitalPinToInterrupt(shockPin), onShock, FALLING);
}
void loop() {
if (shockDetected) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://tuo_server/notifica.php?vibrazione=1");
http.GET();
http.end();
}
shockDetected = false;
}
}
void onShock() {
shockDetected = true;
}
🧠 Puoi usare:
- IFTTT o Telegram Bot per notifiche push
- Blynk, Node-RED, Home Assistant per dashboard smart
🤖 Progetto 3: Robot che cambia direzione quando sbatte
Obiettivo: Robot evita ostacoli cambiando direzione se rileva un urto (con due motori).
🧰 Componenti:
- Arduino Uno/Nano
- FC-06 montato sul frontale
- L298N (driver per motori DC)
- Due motorini
- Batteria Li-ion o pacco 6xAA
🖇️ Collegamenti base:
- FC-06 S → D2
- Motori e driver secondo schema L298N
- FC-06 GND e VCC → Arduino
💻 Codice esempio:
#define shockPin 2
#define in1 3
#define in2 4
#define in3 5
#define in4 6
void setup() {
pinMode(shockPin, INPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
moveForward();
}
void loop() {
if (digitalRead(shockPin) == LOW) {
moveBackward();
delay(500);
turnRight();
delay(500);
moveForward();
}
}
void moveForward() {
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
}
void moveBackward() {
digitalWrite(in1, LOW); digitalWrite(in2, HIGH);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
}
void turnRight() {
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
}
🚗 Espandibile con:
- Sensori IR/ultrasuoni per evitare ostacoli
- Giroscopio per autobilanciamento
🌍 Progetto: Rilevatore di terremoti low-cost con soglia e allarme
🎯 Obiettivo:
- Rilevare scosse o vibrazioni con una certa sensibilità.
- Attivare un allarme (buzzer/LED/sirena).
- Registrare gli eventi via seriale o SD.
- (Facoltativo) Inviare notifiche via Wi-Fi o GSM.
🧰 Componenti necessari:
| Componente | Quantità | Note |
|---|---|---|
| Arduino Uno / Nano | 1 | Qualsiasi compatibile va bene |
| Sensore FC-06 | 1 | Sensore di vibrazione/shock |
| Buzzer attivo o passivo | 1 | Per l’allarme acustico |
| LED rosso/giallo/verde | 2–3 | Per stato e allarme |
| Resistenze 220–330Ω | 2–3 | Per i LED |
| Modulo SD (facoltativo) | 1 | Per log degli eventi |
| RTC DS3231 (facoltativo) | 1 | Per data/ora |
| Modulo GSM/WiFi (opz.) | 1 | Per notifica SMS o web |
| Breadboard + jumper | – | Collegamenti |
🔌 Collegamenti essenziali
| FC-06 Pin | Arduino |
|---|---|
| VCC | 5 V |
| GND | GND |
| S | D2 |
| Buzzer | D8 (via transistor se necessario) |
| LED Rosso| D9 |
| LED Verde| D10 |
💡 Funzionamento
- Il sensore FC-06 invia un impulso (LOW) quando rileva vibrazioni.
- Arduino conta gli impulsi in una finestra temporale (es. 10 secondi).
- Se supera una soglia impostata → scatta allarme (buzzer/LED).
- Altrimenti resta in standby con LED verde acceso.
- Può anche salvare gli eventi su SD o inviare notifiche.
💻 Codice completo
const int shockPin = 2;
const int ledVerde = 10;
const int ledRosso = 9;
const int buzzer = 8;
int shockCount = 0;
unsigned long lastCheck = 0;
const int interval = 10000; // 10 secondi
const int threshold = 5; // soglia eventi
void setup() {
pinMode(shockPin, INPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledRosso, OUTPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(shockPin), countShock, FALLING);
}
void loop() {
if (millis() - lastCheck >= interval) {
lastCheck = millis();
Serial.print("Shock rilevati: ");
Serial.println(shockCount);
if (shockCount >= threshold) {
allarme();
} else {
standby();
}
shockCount = 0; // reset contatore
}
}
void countShock() {
shockCount++;
}
void allarme() {
digitalWrite(ledVerde, LOW);
digitalWrite(ledRosso, HIGH);
for (int i = 0; i < 5; i++) {
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
}
digitalWrite(ledRosso, LOW);
}
void standby() {
digitalWrite(ledVerde, HIGH);
digitalWrite(ledRosso, LOW);
}
⚙️ Personalizzazioni utili
📈 Modifica la soglia
const int threshold = 5;
→ aumenta se hai vibrazioni ambientali non significative.
📁 Aggiunta SD
Per registrare scosse:
#include <SD.h>
...
File dataFile;
dataFile = SD.open("quake.txt", FILE_WRITE);
if (dataFile) {
dataFile.print("Scossa alle ");
dataFile.println(millis());
dataFile.close();
}
📲 Inviare allarmi via GSM (SIM800L/SIM900)
Serial.println("AT+CMGF=1");
Serial.println("AT+CMGS="+391234567890"");
Serial.print("Terremoto rilevato!");
Serial.write(26); // Ctrl+Z
🧪 Test consigliati
| Test | Metodo | Atteso |
|---|---|---|
| Colpo secco su tavolo | Toccare vicino al sensore | LED rosso e buzzer si attivano |
| Vibrazione costante | Motore vibrante | Raggiunta soglia dopo alcuni secondi |
| Ambiente statico | Nessun movimento | Nessuna attivazione |
📦 Espansioni possibili
- Integrazione con Home Assistant / MQTT (via ESP8266)
- Salvataggio dati con timestamp su SD/RTC
- Notifiche via Telegram bot o Pushbullet
- Filtro software per eliminare falsi positivi
✅ Conclusione
Questo progetto offre una base concreta per un sistema anti-vibrazione / terremoto, utile in:
- Cantieri
- Monitoraggio di oggetti fragili
- Sistemi civili di primo allarme
|
GENERALI |
MODELLO |
Sensore di Shock FC-06 |
|
MATERIALI |
pbc + metallo +componenti |
|
|
COMPATIBILITA’ |
ARDUINO |
|
|
COMPONENTI ELETTRICI |
VOLTAGGIO DI INPUT |
5V |
|
PESO E DIMENSIONI |
PESO DEL PRODOTTO |
10g |
|
PESO DEL PACCHETTO |
0.2 kg |
|
|
DIMENSIONI DEL PRODOTTO (L x W x H) |
24 x 1.5 x 1 cm |
|
|
DIMENSIONI DEL PACCHETTO (L x W x H) |
10 x 5 x 2 cm |
|
|
CONTENUTO DELLA CONFEZIONE |
CONTENUTO DELLA CONFEZIONE |
1 x Modulo |
Abbiamo disponibili datasheet di tutti i componenti, qualora non fosse presente nella scheda download del prodotto inviaci un messaggio dal modulo contattaci e lo pubblicheremo il prima possibile nel nostro sito.
Tutorial: Come usare il Sensore Shock Tilt FC-06
Il modulo FC-06 rileva vibrazioni e movimenti bruschi. Perfetto per progetti di sicurezza o monitoraggio.
Cosa serve
- Arduino Uno
- Cavo USB
- Breadboard
Passi
- Collegare VCC a 5V su Arduino.
- Collegare GND al pin GND su Arduino.
- Collegare OUT al pin digital 2 su Arduino.
- Scaricare il codice sorgente fornito.
- Aprire l’IDE di Arduino e caricare lo sketch.
- Verificare i dati sul datasheet per calibrazione precisa.
Codice di esempio
const int shockPin = 2;
void setup() {
pinMode(shockPin, INPUT);
}
void loop() {
int shockState = digitalRead(shockPin);
if (shockState == HIGH) {
Serial.println("Shock rilevato");
}
}
Mini-progetto
Creare un sistema di allarme domestico che invia una notifica via email quando viene rilevata una vibrazione.
Errori comuni
- Collegamento errato del pin OUT.
- Ignorare la calibrazione necessaria.
- Non verificare i dati sul datasheet.
Accessori consigliati
- Modulo Wi-Fi ESP8266
- Buzzer
- Relay Module 5V
Domande frequenti
Qual’è l’alimentazione minima?
Verifica sul datasheet per la tensione di alimentazione minima necessaria.
Può essere usato con Raspberry Pi?
Sì, ma potrebbe richiedere un convertitore livello logico.















