Đọc (read) file XML với Python
1. XML (Extensible Markup Language) là gì? XML (Extensible Markup Language) gọi là ngôn ngữ đánh...
Kết quả sẽ mở trong tab mới, giới hạn trong website này.
Truy cập nhanh
Tìm kiếm gần đây
Hướng dẫn mô phỏng buzzer Arduino trên Proteus: chọn linh kiện BUZZER ACTIVE, chỉnh thông số, viết code bật tắt và dùng tone(). Kèm các lỗi khiến mô phỏng không nghe tiếng.
Bài này hướng dẫn mô phỏng buzzer Arduino trên Proteus và viết code cho nó kêu. Nếu mô phỏng mà không nghe tiếng, thủ phạm thường là chọn nhầm loại buzzer hoặc đặt Operating Voltage cao hơn 5V. Đọc xong, bạn sẽ tự làm được còi báo cho các project như báo cháy, báo nhiệt độ hay báo khi bấm nút.
Mục tiêu bài học:
Buzzer (còi chip) là linh kiện phát ra âm thanh khi có dòng điện đi qua. Nó thường dùng để báo hiệu một sự kiện. Ví dụ: báo động khi có cháy, kêu bíp khi nhấn nút, hay cảnh báo khi cảm biến phát hiện chuyển động.
Có 2 loại buzzer phổ biến:
| Loại | Cách hoạt động | Cách điều khiển |
|---|---|---|
| Chủ động (active) | Có sẵn mạch dao động bên trong | Chỉ cần cấp HIGH là kêu |
| Thụ động (passive) | Không có mạch dao động | Cần cấp xung (dùng hàm tone()) |
Buzzer chủ động chỉ kêu một tần số cố định. Buzzer thụ động đổi được tần số, nên phát được nhiều nốt nhạc khác nhau.
Phần này gồm 3 bước: chọn đúng linh kiện, nối dây và chỉnh thông số. Làm sai bước 1 hoặc bước 3 là mô phỏng im re.
Trong cửa sổ Pick Devices, gõ từ khóa buzzer. Proteus trả về 2 kết quả. Chúng ta chọn dòng BUZZER – ACTIVE với mô tả DC Operated Buzzer – Outputs Via Sound Card.
Dòng còn lại (BUZZER – DEVICE) chỉ là ký hiệu vẽ sơ đồ. Nó không phát ra âm thanh khi mô phỏng.
Mạch rất gọn, chỉ có 2 dây:
| Chân buzzer | Nối với |
|---|---|
| Chân dương (+) | Chân số 8 của Arduino Uno |
| Chân âm (−) | GND |
Nhấp đúp vào buzzer để mở hộp thoại Edit Component. Sửa 2 thông số sau:
Mục Frequency (mặc định 500Hz) là tần số tiếng kêu. Bạn có thể đổi để nghe tiếng cao hoặc trầm hơn.
Lưu ý: Với 5V và 100Ω, dòng qua buzzer khoảng 50mA. Mức này vượt giới hạn tối đa 40mA của mỗi chân ATmega328P. Proteus vẫn mô phỏng bình thường. Khi làm mạch thật, hãy xem dòng của buzzer trong datasheet. Nếu lớn hơn 20mA thì điều khiển qua transistor.
Buzzer chủ động điều khiển y hệt LED. Cấp HIGH thì kêu, cấp LOW thì im. Nếu đã học bài điều khiển LED đơn thì code này quá dễ luôn.
int buzzerPin = 8; // Chân nối với buzzer
void setup() {
pinMode(buzzerPin, OUTPUT); // Cấu hình chân 8 là OUTPUT
}
void loop() {
digitalWrite(buzzerPin, HIGH); // Bật buzzer
delay(1000); // Kêu trong 1 giây
digitalWrite(buzzerPin, LOW); // Tắt buzzer
delay(1000); // Im lặng 1 giây
}Hàm loop() lặp liên tục. Kết quả là buzzer kêu 1 giây, nghỉ 1 giây, rồi lặp lại.
Để chạy trên Proteus, trong Arduino IDE chọn Sketch > Export Compiled Binary để xuất file .hex. Sau đó nhấp đúp vào Arduino trong Proteus, chọn file .hex ở mục Program File rồi bấm Run.
Còi báo thực tế thường kêu vài tiếng ngắn liên tiếp. Chỉ cần thêm vòng lặp for và rút ngắn thời gian delay():
int buzzerPin = 8; // Chân nối với buzzer
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
// Kêu 3 tiếng bíp ngắn
for (int i = 0; i < 3; i++) {
digitalWrite(buzzerPin, HIGH);
delay(150);
digitalWrite(buzzerPin, LOW);
delay(150);
}
delay(2000); // Nghỉ 2 giây rồi lặp lại
}Buzzer thụ động cần sóng vuông mới kêu. Hàm tone(chân, tần số) tạo sóng vuông với tần số (Hz) cho trước trên chân đó, thấp nhất 31Hz. Hàm noTone(chân) dùng để tắt.
int buzzerPin = 8; // Chân nối với buzzer
void setup() {
pinMode(buzzerPin, OUTPUT);
}
void loop() {
tone(buzzerPin, 1000); // Phát sóng vuông 1000 Hz
delay(500);
noTone(buzzerPin); // Ngừng phát
delay(500);
}Lưu ý: Trên Uno, tone() làm nhiễu PWM ở chân 3 và 11. Khi mô phỏng, BUZZER – ACTIVE chỉ kêu theo tần số ở mục Frequency. Muốn nghe đúng tần số của tone(), hãy thay bằng linh kiện SPEAKER.
Mạch chạy, code đúng mà vẫn im re? Kiểm tra lần lượt các lỗi sau:
tone() phát giai điệu “Đô Rê Mi Fa Sol La Si”. Tần số tham khảo: 262, 294, 330, 349, 392, 440, 494 Hz. Nhớ dùng SPEAKER trong Proteus nhé.Tóm lại, buzzer chủ động chỉ cần digitalWrite(), còn buzzer thụ động thì dùng tone(). Trên Proteus, nhớ chọn đúng loại ACTIVE và đặt Operating Voltage 5V là nghe được tiếng. Muốn thử tone() thì đổi sang SPEAKER.