Tijekom pandemije COVID-19, e-radionica.com nastavlja s normalnim radom. Sve mjere opreza se redovno poduzimaju te su naručeni paketi sigurni. Opcija dostave uslugama Hrvatske Pošte i osobno preuzimanje privremeno su onemogućeni iz sigurnosnih razloga.

KKM: Modul sa senzorom vibracija

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

Osnovne karakteristike

Modul sa senzorom vibracija je breakout modul za SW-420 senzor vibracija s LM393 komparatorom. Osim u detektorima vibracija nalazimo ga i u protuprovalnim uređajima.

DSC_8540
Karakteristike:
Model: SW-420
Napon: 3.3V-5V
Struja: >15mA
Dimenzije: 3.8 x 1.3 x 0.7 cm
Težina: 5g

Princip rada

Glavni dio modula je senzor vibracija SW-420. Ovi senzori uglavnom imaju kuglicu u unutrašnjosti. Kada se ista pomiče, "udari" se detektiraju na rubovima i to u svim smjerovima zahvaljujući kučištu oblika valjka. Modul na sebi ima dvije signalizacijske ledice: crvena je power ledica, a zelena se aktivira prilikom detekcije vibracija ili titranja. Kada nema detektiranih vibracija izlazna logika modula je LOW i vice versa.
Na modulu se nalazi i LM393 analogni komparator napona. On radi kao mali voltmetar s integriranim prekidačima. Mjeri napon u dvije različite točke i uspoređuje razliku. Ako je napon u prvoj točki veći od napona u drugoj prekidač je upaljen, u obratnom stanju prekidač je isključen. Napon za usporedbu podešavamo pomoću ugrađenog potenciometra na modulu, odnosno s njim određujemo kada će modul slati signal HIGH preko digital output pina. To nam omogućuje da modul koristimo i bez logičkih kontrolera.

Kako povezati modul s Croduinom

Vcc - 3.3V ili 5V
gnd - gnd
D0 - digitalni pin 2

Kod za modul

U ovom tutorijalu naučit ćemo kako koristiti interrupt na Croduinu. Interrupt se poziva ovisno kada se na određenom pinu dogodi promjena( ovisno što postavimo onda Croduino gleda kada se dogodi promjena koju smo postavili) i onda izvrši ISR(Interrupt Service Routines). ISR je funkcija koja ima posebna pravila i koja se izvršava kada se pozove interrupt(funkcija ne smije u sebi imati delay i nesmijemo koristiti Serial monitor).

volatile boolean flag=false; // varijabla u koju spremamo true ili false ovisno o tome dali je LED dioda upaljena ili ugašena
int ledPin=13; // pin na koji spajamo LED diodu
int interruptPin=2; //pin na koji spajamo senzor vibracije(digitalni pin 2 i 3 na Croduinu su pinovi koje možemo koristiti kao interrupt)
int i; //varijabla koja se koristi u for petlji
void setup() {
Serial.begin(9600); //započinjemo serijsku komunikaciju
pinMode(ledPin,OUTPUT);//postavljamo pin 13 na koji je spojena LED dioda kao izlazni pin
pinMode(interruptPin,INPUT); // pin na koji spajamo senzor vibracije postavljamo kao ulazni pin
attachInterrupt(digitalPinToInterrupt(interruptPin),tipkalo,RISING); // Postavljamo interrupt ( pin 2)
//pozivajući funkciju tipkalo na svaki rastući brid signala na ulazu.
// za interrupt možemo koristiti pin 2 ili pin 3
// funkcija koja se izvodi prilikom interrupta treba biti jednostavna i bez pauza (možemo nešto upaliti ili ugasiti)
// interrupt se može aktivirati na rastući brid signala (RISING), padajući brid (FALLING),
// kada se stanje promjeni(CHANGE), kada je ulaz na HIGH (HIGH) ili kada je ulaz za interrupt na LOW (LOW)
}
//ovdje možemo dodati neki kod koji se treba izvoditi te možemo koristiti delay i Serial monitor
// za naš primjer ćemo svake sekunde ispisivati broj od 0 do 20( kada pritisnemo tipkalo izvršit će se
//funkcija koja je navedena u interruptu i onda će se nastaviti izvođenje ovoga koda
void loop() {
for(i=0;i<20;i++){
Serial.println(i);
delay(1000);
}
}
// funkcija koja se poziva kada se aktivira interrupt
// ova funkcija treba biti kratka i u njoj ne treba koristiti delay i Serial monitor
// možemo samo promijeniti stanje volatile varijable ( u našem slučaju je to varijabla flag),
// a možemo paliti ili gasiti nešto na određenim pinovima(npr ovo možemo postaviti kao tipkalo za isključenje u slučaju nužde,
// te ako je aktivirano možemo sve izlaze pogasiti i uključiti alarm (najčešće se interrupt koristi za takve situacije)
void tipkalo(){
if(flag){
flag=false;
digitalWrite(ledPin,LOW);
}
else{
flag=true;
digitalWrite(ledPin,HIGH);
}
}
Leave a Reply