Trong dự án này, chúng tôi sẽ tạo ra một Hệ thống cảnh báo cháy sử dụng vi điều khiển ATMEGA8 và cảm biến cháy. Cảm biến cháy có thể thuộc bất kỳ loại nào, tuy nhiên chúng tôi đang sử dụng Cảm biến cháy dựa trên IR (Hồng ngoại). Mặc dù Cảm biến cháy dựa trên IR có một số nhược điểm chủ yếu là không chính xác, nhưng đây là cách rẻ nhất và dễ nhất để phát hiện đám cháy.
Cảm biến lửa dựa trên IR có tầm nhìn cảm nhận kém hơn, vì vậy chúng tôi sẽ gắn cảm biến cháy trên động cơ servo. Servo sẽ thực hiện quay con lắc 180 độ. Với cảm biến Lửa được gắn trên đó, chúng tôi có được tầm nhìn cảm nhận lửa hơn 270 độ. Servo sẽ quay liên tục do đó tạo ra một hệ thống cảnh báo cháy phòng hoàn chỉnh. Để chính xác hơn chúng ta có thể lắp thêm cảm biến khói vào hệ thống. Với điều đó, chúng tôi có thể có được độ chính xác cao hơn.
Các thành phần mạch
Phần cứng: + Nguồn điện 5v, động cơ Servo (sg90), ATMEGA8, BUZZER, Nút, điện trở 10KΩ, điện trở 1KΩ, điện trở 220Ω, tụ điện 100nF, BỘ LẬP TRÌNH AVR-ISP.
Phần mềm: Atmel studio 6.1, progisp hoặc flash magic.
Sơ đồ mạch & Làm việc
Để trục servo di chuyển hết sang trái, chúng ta cần cung cấp khẩu phần bật 1/18 và để trục quay hết mức sang trái, chúng ta cần cung cấp PWM với khẩu phần nhiệm vụ là 2/18. Chúng tôi sẽ lập trình ATMEGA8 để đưa ra tín hiệu PWM sẽ xoay trục servo đến 180 và sau đó về 0 sau một khoảng thời gian trễ nhất định.
Trong thời gian hoàn tất, Cảm biến cháy sẽ bật và bộ điều khiển sẽ ở trạng thái cảnh báo hoàn toàn. Nếu có hỏa hoạn, cảm biến cung cấp xung cao, xung này khi được bộ điều khiển phát hiện, nó sẽ đặt báo động. Báo thức sẽ được tắt bằng cách nhấn vào nút đặt lại được kết nối với nó.
Trong atmega8 cho ba kênh PWM, chúng tôi đã chỉ định ba chân. Chúng tôi chỉ có thể nhận đầu ra PWM tại các chân này mà thôi. Vì chúng ta đang sử dụng pwm1 chúng ta nên lấy tín hiệu PWM tại OC1A pin (PORTB 1 st PIN). Như trong sơ đồ mạch, chúng tôi đang kết nối tín hiệu servo với chân OC1A. Ở đây có một điều khác là hơn ba kênh PWM, hai kênh PWM 8-bit và một kênh PWM 16-bit. Chúng tôi sẽ sử dụng kênh PWM 16 bit ở đây.
Trong ATMEGA, có một số cách để tạo PWM, chúng
1. PWM đúng pha.
2. PWM nhanh.
Ở đây chúng ta sẽ giữ mọi thứ đơn giản, Vì vậy, chúng ta sẽ sử dụng phương pháp FAST PWM để tạo ra tín hiệu PWM.
Đầu tiên để chọn tần số của PWM, Điều này phụ thuộc vào ứng dụng thông thường, đối với đèn LED, bất kỳ tần số nào lớn hơn 50Hz sẽ làm được. Vì lý do đó, chúng tôi đang chọn đồng hồ đếm 1MHZ, vì vậy chúng tôi đang chọn không có prescalar. Số đo trước là một số được chọn để có đồng hồ đếm nhỏ hơn. Ví dụ: nếu xung nhịp của bộ dao động là 8Mhz, chúng ta có thể chọn một điểm đặt trước là '8' để lấy xung nhịp 1MHz cho bộ đếm. Giá trị đặt trước được chọn dựa trên tần số. Nếu chúng ta muốn có nhiều xung khoảng thời gian hơn, chúng ta phải chọn prescalar cao hơn.
Bây giờ để lấy PWM NHANH có xung nhịp 50Hz ra khỏi ATMEGA, chúng ta cần kích hoạt các bit thích hợp trong thanh ghi “ TCCR1B ”.
Đây, CS10, CS11, CS12 (VÀNG) —chọn thang đo trước để chọn đồng hồ bộ đếm. Bảng cho vị trí đặt trước thích hợp được hiển thị trong bảng dưới đây. Vì vậy, để đặt trước một (đồng hồ dao động = đồng hồ bộ đếm).
vì vậy CS10 = 1, hai bit khác bằng không.
ĐỎ (WGM10-WGM13): được thay đổi để chọn chế độ tạo dạng sóng, dựa trên bảng dưới đây, cho PWM nhanh. Chúng tôi có WGM11, WGM12 và WGM12 được đặt thành 1.
Bây giờ chúng ta biết rằng PWM là một tín hiệu với khẩu phần công việc khác nhau hoặc thời gian BẬT, TẮT khác nhau. Cho đến nay chúng tôi đã chọn tần số và loại PWM. Chủ đề chính của chương này nằm trong phần này. Để nhận được khẩu phần nhiệm vụ khác nhau, Chúng tôi sẽ chọn một giá trị từ 0 đến 255 (2 ^ 8 vì 8 bit). Giả sử chúng ta chọn giá trị 180, vì bộ đếm bắt đầu đếm từ 0 và đạt đến giá trị 180, phản hồi đầu ra có thể được kích hoạt. Kích hoạt này có thể đảo ngược hoặc không đảo ngược. Đó là đầu ra có thể được yêu cầu kéo lên khi đạt đến số lượng, hoặc nó có thể được yêu cầu kéo xuống khi đạt đến số lượng.
XANH LÁ (COM1A1, COM1A0): Lựa chọn kéo lên hoặc xuống này được chọn bởi các bit CM1A0 và CM1A1.
Như được hiển thị trong bảng, để đầu ra tăng cao khi so sánh và đầu ra sẽ ở mức cao cho đến giá trị tối đa. Chúng ta phải chọn chế độ đảo ngược để làm điều đó, vì vậy COM1A0 = 1; COM1A1 = 1.
Như thể hiện trong hình dưới đây, OCR1A (Thanh ghi so sánh đầu ra 1A) là byte lưu trữ giá trị do người dùng chọn. Vì vậy, nếu chúng ta thay đổi OCR1A = 180, bộ điều khiển sẽ kích hoạt sự thay đổi (cao) khi bộ đếm đạt 180 từ 0.
OCR1A phải là 19999-600 cho 180 độ và 19999-2400 cho 0 độ.