Descrizione
[vc_row][vc_column][vc_column_text]
📘 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.
[/vc_column_text][/vc_column][/vc_row]















