PIC16f887 bơm nước tự động

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)

--------------------

#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 :

Không có nhận xét nào:

Đăng nhận xét