Ngày nay các bộ vi điều khiểnđang có ứng dụng ngày càng rộng rãi trong các lĩnh vực kỹ thuật và đời sống xãhội, đặc biệt là trong kỹ thuật tự động hóa và điều khiển từ xa.Trong hoạt động
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘI
TRƯỜNG ĐIỆN – ĐIỆN TỬ
BÁO CÁO ĐỒ ÁN 2
ĐỀ TÀI:
Giảng viên hướng dẫn: Vũ Hồng Vinh
Hà Nội, 6-2022
Nhóm Sinh viên thực hiện Lớp MSSV
Nguyễn Đình Hùng Điện tử 11 20182555
Phi Quang Huy
Nguyễn Anh Đức
Trần Anh Quân
Điện tử 11 Điện tử 11 Điện tử 11
2018xxx 2018xxx 2018xxx
Trang 3MỤC LỤC
MỤC LỤC 2 LỜI NÓI ĐẦU 4 DANH MỤC HÌNH VẼ 5
Trang 4-LỜI NÓI ĐẦU
LỜI NÓI ĐẦU
Thế kỷ 21 mở ra một thời đại mới, thời đại khoa học công nghệ đòi hỏi con
người luôn luôn không ngừng tìm tòi học tập để tiến bộ Thiết bị và công nghệ luôn
được đổi mới tiên tiến hiện đại để góp phần nâng cao chất lượng cũng như các máy
móc, thiết bị hoạt động có hiệu quả, an toàn ổn định Ngày nay các bộ vi điều khiển
đang có ứng dụng ngày càng rộng rãi trong các lĩnh vực kỹ thuật
và đời sống xã
hội, đặc biệt là trong kỹ thuật tự động hóa và điều khiển từ xa Trong hoạt động sản xuất nông nghiệp hiện nay, việc tự động hoá khâu sản
suất là rất quan trọng Nhiều năm trở lại đây, có rất nhiều ứng dụng của vi điều
khiển vào hoạt động chăn nuôi, Một trong những yếu tố của ngành nông nghiệp là
chăn nuôi gia cầm có một khâu quan trọng là ổn định trong khâu sản xuất con
giống, cụ thể là việc ấp nở con giống từ trứng ra cầm Từ thực tế thấy được tầm
quan trọng của việc ấp nở con giống từ trứng gia cầm và đặc biệt
là việc ổn định
nhiệt lò ấp trứng Vì vậy, em đã lựa chọn đề tài “Thiết kế mạch cảm ứng nhiệt để
điều chỉnh nhiệt lò ấp trứng”.
Mục tiêu của đề tài là khai thác chức năng của ATmega16, cảm biến nhiệt
LM305 để điều chỉnh nhiệt độ của lò ấp trứng Khi cảm biến nhiệt
đo được nhiệt độ
4
Trang 5trong lò cao hơn nhiệt độ đã cài đặt thì ATmega16 điều khiển quạt làm giảm nhiệt
độ của lò xuống Ngược lại khi nhiệt độ trong lò thấp hơn nhiệt độ
đã cài đặt thì
ATmega16 điều khiển đèn bật lên để tăng nhiệt độ của lò lên.
Để tiện theo dõi em xin trình bày đề tài theo ba phần:
- Phần 1: Cơ sở lý thuyết
- Phần 2: Thiết kế
- Phần 3: Mô phỏng và trình bày kết quả
Trước khi trình bày, em xin gửi lời cảm ơn chân thành đến thầy Tào Văn
Cường đã trực tiếp hướng dẫn, định hướng, góp ý để em có thể hoàn thành đề tài
này Do trình độ và kinh nghiệm thực tế còn hữu hạn, đề tài không tránh khỏi
những thiếu sót, em rất mong nhận được những ý kiến đóng góp, giúp đỡ chân tình,
quý báu của quý thầy cô cùng các bạn sinh viên.
Trang 6DANH MỤC HÌNH VẼ
5
Trang 7DANH MỤC BẢNG BIỂU
Trang 8TÓM TẮT ĐỒ ÁN
7
Trang 9CHƯƠNG 3 THIẾT KẾ, MÔ PHỎNG VÀ KẾT QUẢ THỰC TẾ
1 Thiết kế mạch
- Mạch đo và hiển thị đúng nhiệt độ đo được
- Mạch sẽ cho người dùng cài đặt một nhiệt độ cố định mà
người dùng muốn.
- Khi nhiệt độ mà cảm biến đo được lớn hơn nhiệt độ cài đặt thì
tự động quạt được bật để làm mát, còn ngược lại nếu nhiệt
độ nhỏ hơn nhiệt độ người dùng cài đặt thì tự động đèn sưởi
được bật để tăng nhiệt độ.
- Ứng dụng thực tế của mạch : mạch này có thể áp dụng vào một số công việc như : làm ổn định nhiệt độ trong phòng, làm lò sấy, ấp trứng, ủ hạt giống ,v v…
2 Mạch nguyên lý
Mạch dùng nguồn DC 5V-2A ,đèn và quạt được nối ngoài , điều
khiển từ Atmega 16 qua Relay 5V Nhiệt độ người dùng cài đặt
được lưu vào EEPROM tránh trường hợp mất điện Vi điều khiển
tiếp nhận giá trị analog từ cảm biến nhiệt độ LM35 rồi biến đổi
ADC kênh ADC0 Sau khi quá trình biến đổi ADC kết thúc, kết
quả được lưu vào thanh ghi ADCW Chúng ta tiến hành in kết
quả nhiệt độ ra màn hình LCD1602 và xét điều kiện nếu ADCW
> Nhiệt độ cài đặt thì quạt được tự động bật làm giảm nhiệt và
ngược lại thì đèn sưởi được bật để tăng nhiệt đến khi bằng nhiệt
độ cài đặt.
Trang 103 Mô phỏng mạch
3.1 Code
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <alcd.h>
unsigned char i;
unsigned char m = 35;
unsigned char n = 0;
char chuoi[50];
// Voltage Reference: Int., cap on AREF
#define ADC_VREF_TYPE ((1<<REFS1) | (1<<REFS0) | (1<<ADLAR))
// Read the 8 most significant bits
9
Trang 11// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCH;
}
void ktnd()
{
do{
lcd_gotoxy(5, 0);
lcd_puts("CAI DAT");
lcd_gotoxy(3, 1);
lcd_puts("DC ND"); lcd_puts(": ");
itoa(m, chuoi);
lcd_puts(chuoi);
lcd_putchar(223); lcd_puts("C");
Trang 12if(PINB.1==0)
{
m ;
if(m==0)m=99;
while(PINB.1==0);
}
if(PINB.3==0)
{
n++;
while(PINB.3==0);
lcd_clear();
}
}
while(n % 2 == 0);
}
void mode()
{
if (PINB.2 == 0) {
lcd_clear();
ktnd();
n++;
}
}
void main(void)
11
Trang 13DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3)
| (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3)
| (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(1<<PORTB7) | (1<<PORTB6) | (1<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);
DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3)
| (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3)
| (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
Trang 14// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: Int., cap on AREF
// ADC Auto Trigger Source: Free Running
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
lcd_init(20);
lcd_gotoxy(3, 0);
lcd_puts("DANG TAI ");
delay_ms(300);
lcd_clear();
while (1)
{
i=read_adc(7);
lcd_gotoxy(0, 0);
if (i > m)
{
13
Trang 15lcd_puts("QUAT:BAT");
lcd_puts(" DEN:TAT");
PORTC.0 = 1;
PORTC.1 = 0;
PORTD = 0xff;
}
else
{
lcd_puts("QUAT:TAT");
lcd_puts(" DEN:BAT");
PORTC.1 = 1;
PORTC.0 = 0;
PORTD = 0x00;
}
lcd_gotoxy(0, 1);
lcd_puts("Nhiet Do: ");
lcd_putchar(0x30+i/10);
lcd_putchar(0x30+i%10);
lcd_putchar(223); lcd_puts("C"); mode();
delay_ms(60);
}
}
Trang 163.2 Kết quả
Hình Chọn ngưỡng nhiệt độ để điều khiển công tắc
- Chọn ngưỡng mức cài đặt nhiệt độ là 35°C
- Nhiệt độ cài đặt là 35°C, nhiệt độ đo được là 27°C nên đèn được bật để giữ ấm, nếu nhiệt độ đo được vượt ngưỡng cài đặt là 35°C thì quạt sẽ được tự động bật để giảm nhiệt độ
15
Trang 174 Chạy mạch thực tế
Chiều mai chụp ảnh chạy sau.
5 Kết luận
- Mạch chạy mô phỏng đúng yêu cầu đề ra
- Đề tài khai thác được chức năng của Atmega 16 và cảm biến nhiệt LM35.