งาน 4 ตัวบ่งชี้ระดับน้ำและตัวควบคุมโดยใช้ไมโครคอนโทรลเลอร์ PIC
นี่เป็นโครงการที่ใช้งานง่ายและอเนกประสงค์ซึ่งบ่งบอกระดับน้ำและควบคุมโดยอัตโนมัติโดยใช้ PIC Microcontroller ส่วนการตรวจวัดระดับน้ำจะตรวจจับระดับน้ำในถังและส่งไปยังส่วนรับสัญญาณ (ไร้สาย) แผนกรับเชื่อมต่อกับส่วนควบคุมซึ่งประมวลผลข้อมูลที่ได้รับและสร้างสัญญาณภาพเสียงและควบคุมการทำงานของมอเตอร์เมื่อใดก็ตามที่ต้องการ โครงการแบ่งออกเป็น 4 ส่วน 1. ส่วนแหล่งจ่ายไฟ ส่วนแหล่งจ่ายไฟจัดหาแหล่งจ่ายไฟที่จำเป็นสำหรับโมดูลรับและควบคุม โมดูลตัวรับต้องใช้แหล่งจ่ายไฟ + 5V โมดูลคอนโทรลเลอร์ต้องการการจ่ายไฟ + 5v และ + 12v แผนภูมิวงจรรวม:

2. มาตราการตรวจวัดระดับน้ำ ASK เครื่องส่งสัญญาณ RF ASK เครื่องส่งสัญญาณ RF โมดูลเซ็นเซอร์ระดับทำด้วย HT12E encoder และตัวส่งสัญญาณ RF ASK (Amplitude Shift Keying) วงจรนี้สามารถขับด้วยแบตเตอรี่ 9V สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเครื่องส่งสัญญาณนี้โปรดอ่านบทความเครื่องส่งสัญญาณ RF ไร้สายและตัวรับสัญญาณโดยใช้โมดูล RF ASK วงจรนี้วางอยู่ใกล้กับถังเก็บน้ำและเชื่อมต่อกับถังตามที่แสดงในภาพด้านล่าง

3. ส่วนรับสัญญาณ

โมดูลตัวรับทำด้วยตัวถอดรหัส HT12D และตัวรับสัญญาณ ASK RF ข้อมูลที่ส่งมาจากโมดูลเซ็นเซอร์ได้รับจากโมดูลนี้และมอบให้กับโมดูลควบคุม สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับตัวรับสัญญาณนี้โปรดอ่านบทความตัวส่งและตัวรับสัญญาณ RF ไร้สายโดยใช้โมดูล RF ASK 4. ส่วนควบคุม

วิญญาณของแผนกควบคุมคือ PIC16F877A มันประมวลผลข้อมูลที่ได้รับจากมาตราผู้รับ จอแสดงผล LCD, LED บ่งชี้และสถานะมอเตอร์มีการปรับปรุงตามข้อมูล คุณสามารถดาวน์โหลดไฟล์ hex และ mikroC ซอร์สโค้ดที่ด้านล่างของบทความนี้
MikroC Code
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
char txt1[] = "Water";
char txt2[] = "Level";
char txt3[] = "Indicator";
char txt4[] = "And Controller";
char mtr1[] = "Motor ";
char mtr2[] = "OFF";
char mtr3[] = "ON";
char wtr1[] = "Level: ";
char wtr2[] = "Very Low";
char wtr3[] = "Low";
char wtr4[] = "Medium";
char wtr5[] = "High";
char wtr6[] = "Full";
void main()
{
int i = 0;
int c = 16;
int b = 0;
CMCON = 0x07;
ADCON1 = 0x06;
TRISA = 0x0F; // set direction to be input
PORTA = 0x00;
PORTD = 0x00;
PORTC = 0x00;
TRISB = 0x00; // set direction to be output
TRISC = 0x00; // set direction to be output
TRISD = 0x80; // set direction to be output
PORTD.F2 = 1;
PORTD.F7 = 1;
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,txt1); // Write text in first row
Lcd_Out(2,1,txt2); // Write text in second row
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Out(1,1,txt3); // Write text in first row
Lcd_Out(2,1,txt4); // Write text in second row
Delay_ms(500);
// Moving text
for(i=0; i<15; i++)
{
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Delay_ms(125);
}
i=0; //Motor Status OFF
do
{
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,wtr1);
Lcd_Out(2,1,mtr1);
if(c>0)
{
PORTD.F2 = 1 //LCD Backlight ON
c--;
}
else
PORTD.F2 = 0; //LCD Backlight OFF
if(b>0)
{
PORTD.F0 = 1; //Buzzer ON
Delay_ms(125);
PORTD.F0 = 0; //Buzzer OFF
b--;
}
if(PORTD.F7 == 0) //Manual Backlight ON
c = 16;
if(PORTA == 0x0F)
{
PORTD.F1 = 1;
Lcd_Out(1,8,wtr2);
Lcd_Out(2,7,mtr3);
PORTC = 1;
if(i == 0)
{
c = 16; //Backlight
b=3; //Buzzer
}
i=1;
}
else if(PORTA == 0x0E)
{
Lcd_Out(1,8,wtr3);
if(i == 1)
Lcd_Out(2,7,mtr3);
else
Lcd_Out(2,7,mtr2);
PORTC = 3; //LED Bar
}
else if(PORTA == 0x0C)
{
Lcd_Out(1,8,wtr4);
if(i == 1)
Lcd_Out(2,7,mtr3);
else
Lcd_Out(2,7,mtr2);
PORTC = 7; //LED Bar
}
else if(PORTA == 0x08)
{
Lcd_Out(1,8,wtr5);
if(i == 1)
Lcd_Out(2,7,mtr3);
else
Lcd_Out(2,7,mtr2);
PORTC = 15; //LED Bar
}
else if(PORTA == 0x00)
{
Lcd_Out(1,8,wtr6);
Lcd_Out(2,7,mtr2);
PORTD.F1 = 0; // Motor OFF
if(i == 1)
{
c = 16; //Backlight
b = 3; //Buzzer
}
i=0; //Motor Status Updated
PORTC = 31; //LED Bar
}
else
PORTA = 0x0F;
Delay_ms(125);
}while(1); // Endless loop
}
การทำงาน
สำหรับการส่งและรับข้อมูลเราใช้คู่เข้ารหัสของ Holtek HT12E และ HT12D ทั้งคู่เป็นแรงดันไฟฟ้าในการทำงานของ CMOS ICs ตั้งแต่ 2.4 ถึง 12v ความต้านทานของออสซิลเลเตอร์ถูกเลือกตามแผ่นข้อมูล เมื่อระดับน้ำเพิ่มขึ้นหมุดข้อมูลของเครื่องเข้ารหัสจะลงดินสอดคล้องกับระดับน้ำซึ่งจะถูกส่งไปยังเครื่องรับผ่านโมดูล ASK RF ข้อมูลที่ได้รับจะถูกถอดรหัสโดยตัวถอดรหัส HT12D LED บนเครื่องรับแสดงว่ากำลังรับข้อมูล จากนั้นข้อมูลจะถูกส่งไปยัง PIC สำหรับการประมวลผล

ความคิดเห็น
แสดงความคิดเห็น