Cảm biến rung (góc nghiêng) là gì? Một câu hỏi rất thường gặp khi chúng ta đi vào khai thác một linh kiện mới.
Và trong bài hôm nay chúng ta sẽ học cách sử dụng ngắt (interrupt) để ứng dụng trong một dự án cụ thể.
Vậy ngắt trong môi trường Arduino có thực sự khó? Và cách thức hoạt động như thế nào?
Nếu bạn là một người mới và chưa biết Arduino là gì? Để hiểu hơn về nền tảng này. Các bạn xem bài viết bên dưới nhé.
Cảm biến góc nghiêng (rung động) là gì?
Có rất nhiều cách đặt tên cho cảm biến này: Cảm biến góc nghiêng, cảm biến rung động hay còn gọi là cảm biến bóng lăn.
Dù nó có mang nhiều tên gọi đi chăng nữa thì nguyên lý hoạt động của chúng thì giống nhau.
Nguyên lý hoạt động
Cách thức hoạt động của cảm biến rung (góc nghiêng):
- Cảm biến theo chiều thẳng đứng: Quả bóng bán dẫn bên trong sẽ rơi xuống và chạm vào 2 điện cực của cảm biến làm cho dòng điện chạy qua.
- Cảm biến theo chiều góc nghiêng: Lúc này quả bóng sẽ không chạm vào điện cực của cảm biến và không cho dòng điện chạy qua.
Như vậy, tương tự cảm biến rung hoạt động giống như một công tắc và được điều khiển dưới dạng tín hiệu Digital trong Arduino. Cho ra mức tín hiệu CAO hoặc THẤP.
attachInterrupt() trong Arduino
Ngắt (interrupt) là một tín hiệu khẩn cấp gửi đến bộ xử lý yêu cầu tạm dừng các hoạt động hiện tại để thực thi một nhiệm vụ quan trọng hơn, nhiệm vụ này gọi là trình phục vụ ngắt. Sau khi kết thúc nhiệm vụ trong ISR, bộ đếm chương trình sẽ được trả về giá trị trước đó để thực thi các nhiệm vụ đang còn dang dở. Như vậy, ngắt có mức độ ưu tiên cao nhất và thường được dùng để xử lý các sự kiện bất ngờ nhưng không tốn nhiều thời gian.
Cú pháp
attachInterrupt(interrupt, ISR, mode);
Thông số
interrupt: Số thứ tự của ngắt.
ISR: Tên hàm sẽ gọi khi có sự kiện ngắt được sinh ra.
Mode: Kiểu kích hoạt ngắt, bao gồm:
- LOW: Trạng thái chân digital ở mức thấp.
- HIGH: Trạng thái chân digital ở mức cao.
- RISING: Chuyển trạng thái chân digital ở mức thấp sang mức điện áp cao.
- FALLING: Chuyển trạng thái chân digital ở mức cao sang mức điện áp thấp.
Sơ đồ đấu nối
Các linh kiện cần thiết cho dự án
Arduino Uno R3
Cảm biến rung
Breadboard
Dây test đực cái
Code mẫu
int SensorLED = 13;
int SensorINPUT = 3;
unsigned char state = 0;
void setup() {
pinMode(SensorLED, OUTPUT);
pinMode(SensorINPUT, INPUT);
attachInterrupt(1, blink, RISING);
}
void loop(){
if(state!=0){
state = 0;
digitalWrite(SensorLED,HIGH);
delay(500);
}
else
digitalWrite(SensorLED,LOW);
}
void blink(){
state++;
}