PIC16f887 bơm nước tự động
Thứ Năm, 7 tháng 5, 2015 - Blade1407
Xem với phiên bản web đầy đủ
Xem với phiên bản web đầy đủ
Thiết kế sơ đồ nguyên lý, lập trình cho bài toán bơm nước tự động. Lập trình theo
yêu cầu sau:
Nếu M<M1: thì bật bơm nước vào.
Nếu M1≤ M ≤ M2: không làm gì.
Nếu M>M2: thì bật bơm hút ra.
Biết cảm biến mực nước trả về tín hiệu tương tự từ 0..5v, với M1 là ngưỡng dưới, M2 là ngưỡng
trên, M là mực nước thực tế hiện tại. Bơm vào và bơm ra đã được nối với đầu ra của rơle, giả sử:
M1=80cm (ADC=(80*1023)/100) ,
M2=90cm (ADC=(90*1023)/100)
yêu cầu sau:
Nếu M<M1: thì bật bơm nước vào.
Nếu M1≤ M ≤ M2: không làm gì.
Nếu M>M2: thì bật bơm hút ra.
Biết cảm biến mực nước trả về tín hiệu tương tự từ 0..5v, với M1 là ngưỡng dưới, M2 là ngưỡng
trên, M là mực nước thực tế hiện tại. Bơm vào và bơm ra đã được nối với đầu ra của rơle, giả sử:
M1=80cm (ADC=(80*1023)/100) ,
M2=90cm (ADC=(90*1023)/100)
--------------------
#include<main.h>
#define lcd_enable_pin pin_d2
#define lcd_rw_pin pin_d1
#define lcd_rs_pin pin_d0
#define lcd_data4 pin_d4
#define lcd_data5 pin_d5
#define lcd_data6 pin_d6
#define lcd_data7 pin_d7
#include<lcd.c>
int M1=80,M2=90;
float M,A;
void main()
{
setup_adc(adc_clock_div_2);
setup_adc_ports(sAN0);
lcd_init();
while (TRUE)
{
set_adc_channel(0);
delay_us(10);
A=read_adc();
M= (A*100)/1023;
lcd_gotoxy(1,1);
printf(lcd_putc,"M1=%d M2=%d",M1,M2);
lcd_gotoxy(1,2);
printf(lcd_putc," M=%0.2f",M);
if(M<M1) output_E(1); //E(1) từ hex đổi sang byte là 001. Vậy E2,E1,E0 = 0,0,1
else if(M>M2) output_E(2); //E(2) từ hex đổi sang byte là 010. Vậy E2,E1,E0 = 0,1,0
else output_E(0); //Tất cả các chân đều ở mức 0
}
}
DOWNLOAD Code và Mô Phỏng
Từ khóa :
Bài liên quan
Nhận xét
Không có nhận xét nào:
Đăng nhận xét