ระบบเครื่องวัดและควบคุมอุณหภูมิ

ขั้นตอนการทำงาน ผู้จัดทำ



โครงสร้างของระบบ

ระบบเครื่องวัดและควบคุมอุณหภูมิใช้ไม้กระดานอัดและอะคริลิกหนา 4 มม. ประกอบเป็นตู้ ขนาด 30 x 40 x 30 ซม. ภายในออกแบบให้มีหลอดไส้ให้ความร้อนขนาด 100 วัตต์ จำนวน 1 หลอด พัดลมขนาด 12 โวลต์ เพื่อกระจายความร้อนให้ทั่วถึง และเซนเซอร์วัดอุณหภูมิ การควบคุมการปิด-เปิดของพัดลมและหลอดไฟใช้ตัวควบคุมผ่านรีเลย์


หลักการทำงานโดยรวมของระบบเครื่องวัดและควบคุมอุณหภูมิ เซ็นเซอร์ ( Sensor ) ทำหน้าที่รับค่าอุณหภูมิส่งและข้อมูลไปยัง PIC18F8722 เมื่อ PIC18F8722 รับมาก็ทำการแปลงจากอนุกรม (Serial) เป็นเลขฐานสอง (Binary) แล้วส่งต่อไปยังชุดแสดงผล 7-segment ขับรีเลย์ ( Relay ) ดังที่แสดงในรูป





รูปที่ 1 บล็อกไดอะแกรมการทำงานโดยรวม


ขั้นตอนการประกอบอุปกรณ์

แผ่นอะคิลิคหนา 4 มม. ขนาด 40 x 30 ซม. จำนวน 1 แผ่น ใช้เป็นส่วนด้านในชิ้นงาน แผ่นอะคิลิคหนา 4 มม. ขนาด 30 x 30 ซม. จำนวน 2 แผ่น เป็นส่วนด้านหน้าและด้านหลังของชิ้นงาน ไม้กระดานอัดหนา 4 มม. ขนาด 40 x 30 ซม. จำนวน 3 แผ่น เป็นส่วนด้านบน ฐาน และด้านข้าง ของชิ้นงาน ดังรูป




(ก.)




(ข.)




(ค.)




(ง.)


รูปที่ 2 ( ก ) ภาพด้านข้างใช้แผ่นอะคริลิกขนาด หนา 4 มม. กว้าง 30 ซม. ยาว 40 ซม.
( ข ) ภาพด้านข้างใช้ไม้กระดานอัดขนาด หนา 4 มม. กว้าง 30 ซม. ยาว 40 ซม.
( ค ) ภาพด้านหน้าใช้แผ่นอะคริลิกขนาด หนา 4 มม. กว้าง 30 ซม. ยาว 30 ซม.
( ง ) ภาพด้านหลังใช้แผ่นอะคริลิกขนาด หนา 4 มม. กว้าง 30 ซม. ยาว 30 ซม.


จากรูปที่ 2 ( ค ) แผ่นอะคริลิกด้านหน้าของกล่องจะเป็นส่วนที่สั่งการทำงาน โดยมีสวิตช์เปิด – ปิด สวิตช์ปรับเพิ่มขึ้น ลดลงของอุณหภูมิ และมีปุ่มเซ็ตเพื่อสั่งการทำงาน ในการแสดงผลอุณหภูมิจะใช้ 7 – Segment ในการแสดงอุณหภูมิปัจจุบัน และ อุณหภูมิที่ต้องการ ภายในกล่องจะมีการติดตั้งอุปกรณ์ต่างๆไว้ บอร์ดควบคุมการทำงานจะอยู่ในตำแหน่งด้านล่างติดกับฐานของชิ้นงาน โดยในบอร์ดจะประกอบไปด้วย บอร์ดจ่ายไฟ บอร์ด ET-BASE PIC8722 ( ICD2 ) รีเลย์ 2ชิ้น ดังรูป




รูปที่ 3การติดตั้งบอร์ดควบคุมการทำงาน


ใช้แผ่นอะคิลิคหนา 4 มม. ขนาด 40 x 30 ซม. ใช้เป็นส่วนรองด้านในชิ้นงานบนแผ่นอะคริลิคนี้จะติดตั้งพัดลมเอาไว้ เพื่อกระจายความร้อนที่ได้จากหลอดไฟให้ทั่วถึงภายในกล่อง และยังมีเซ็นเซอร์ตรวจจับอุณหภูมิ ติดตั้งไว้บริเวณตรงกลางของกล่อง นอกจากนี้ยังมีหลอดไส้ที่เป็นตัวให้ความร้อนติดอยู่ภายใน โดยยึดติดกับด้านบนของกล่องเอาไว้ ดังแสดงในรูป




รูปที่ 4 แสดงการวางอุปกรณ์ต่างๆภายในกล่อง


การออกแบบวงจร


1.ชุดควบคุมใช้ไมโครคอนโทรลเลอร์ PIC18F8722 ด้านอินพุตเชื่อมต่อเซนเซอร์อุณหภูมิที่ขา b0 เชื่อมต่อสวิตซ์ตั้งค่าอุณหภูมิเข้า ที่ขา a3 , a4 และ a5 ด้านเอาท์พุตเชื่อมต่อ 7-segment เข้าที่ขา d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 common e0 , e1 , e2 , e3 และ e4 หลอดไฟเชื่อมต่อที่ขา c0 พัดลมกระจายความร้อนเชื่อมต่อกับขา c1 และบัซเซอร์เชื่อมต่อที่ขา c3 ดังแสดงในรูป




รูปที่ 5 การออกแบบวงจร


2.ชุดตรวจจับอุณหภูมิ วงจรเชื่อมต่อของชุดตรวจจับอุณหภูมิ ซึ่งประกอบด้วย 3 ขาใช้งาน ได้แก่ขา Ground ขา DATA และ optional ( VDD ) ซึ่งชุดตรวจจับในการเชื่อมต่อไมโครคอนโทรลเลอร์ ใช้ตัวต้านทานพูลอัพเชื่อมต่อกับทั้งสองขากับชุดจ่ายไฟ 5 โวลต์




รูปที่ 6 การเชื่อมต่อชุดตรวจจับอุณหภูมิเข้ากับไมโครคอนโทรลเลอร์


3. ชุดหลอดไฟให้ความร้อนออกแบบโดยใช้หลอดไส้ ขนาด 100 w แรงดันไฟฟ้ากระแสสลับ 220V โดยเชื่อมต่อเข้าที่ขา c0 ดังแสดงในรูปที่ 7
4. พัดลมกระจายความร้อน ขนาด 4.5 นิ้ว แรงดันไฟฟ้ากระแสตรง 12 โวลต์ ทำหน้าที่กระจายความร้อนเพื่อให้ความร้อนกระจายไปได้ทั่ว เชื่อมต่อเข้าที่ขา c1 ดังแสดงในรูปที่ 7
5. บัซเซอร์ เตือนขณะกดปุ่มสั่งการ เชื่อมต่อเข้ากับขา c3 ของไมโครคอนโทรลเลอร์ ดังแสดงในรูปที่ 7




รูปที่ 7การเชื่อมต่อชุดหลอดไฟ พัดลม และบัซเซอร์เข้ากับไมโครคอนโทรลเลอร์


6. ชุดแสดงผล 7-segment เป็นการเชื่อมต่อวงจรชุดแสดงผล 7- segment เข้ากับไมโครคอนโทรลเลอร์โดยใช้ 7- segment ขนาด 4 บิตในการเชื่อมต่อไมโครคอนโทรลเลอร์ใช้ตัวต้านทานพูลอัพต่อเข้ากับแรงดันไฟ 5 โวลต์เพื่อต่อกับสวิตช์ S1 และ S2 เข้าที่ a3 และ a4 โดยสวิตช์ S1และ S2 มีไว้สำหรับตั้งค่าอุณหภูมิส่วนชุด 7- segment ต่อเข้ากับไมโครคอนโทรลเลอร์ ที่ขา d0 , d1 , d2 , d3 , d4 , d5 , d6 , d7 , d8 common e0 , e1 , e2 , e3 และ e4 ดังรูป




รูปที่ 8 การเชื่อมต่อชุดแสดงผล 7-segmentเข้ากับไมโครคอนโทรลเลอร์


7.ชุดสวิตช์สั่งการ เป็นสวิตช์ชนิดกดติดปล่อยดับ (Momentary) คือขณะกดปุ่มสวิตช์เป็นการต่อ (ON) เมื่อปล่อยมือออกจากปุ่มสวิตช์เป็นการตัด (OFF) โดยเชื่อมต่อสวิตช์เข้ากับไมโครคอนโทรลเลอร์ โดยสวิตช์ S1 S2 มีไว้สำหรับตั้งค่าอุณหภูมิ เข้าที่ขา a3 a4 และ s3 มีไว้สำหรับเซ็ตการทำงาน เข้าที่ขา a5 ดังรูป




รูปที่ 9การเชื่อมต่อสวิตช์เข้ากับไมโครคอนโทรลเลอร์ โดย s1 อยู่ในตำแหน่งด้านซ้าย s2 อยู่ในตำแหน่งตรงกลาง และ s3 อยู่ตำแหน่งทางด้านขวา


โค้ดควบคุมการทำงาน


/* sw a3-5
7segment d0-d8 common e0-4
buzzer c3
relay c0-1
se•sor b0
*/
#include
#include "touch.c"
int a[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int e,b,f,x;
int al;
int w=1;
int t= 1;
int nl;
int pl;
int tl;
int o,p;
int i = 300 ;
void sound(){
output_c(0x08);
delay_ms(300);
output_c(0x00);
delay_ms(150);
}
void readTem(){
int temp;
byte i , buffer[9];
if(touch_present()){
touch_write_byte(0xcc);
touch_write_byte(0x44);
delay_ms(5); //delay_ms(20);
touch_present();
touch_write_byte(0xcc);
touch_write_byte(0xbe);
for(i=0;i<9;i++){
buffer[i]=touch_read_byte();
}
// temp=buffer[0]/2;
temp=(buffer[1]<<4)|(buffer[0]>>4);
e=temp;
}
}
void Tem_1(){
readTem();
al=e;
pl = e ;
b = e/10;
f = e%10;
for(x=0;x<200;x++)
{
output_d(a[b]);
output_e(0x01);
delay_ms(5);
output_d(a[f]) ;
output_e(0x02);
delay_ms(5);
}
}
void main()
{
for(x=0;x<10;x++){
output_e(0x01);
output_d(0xfe);
delay_ms(i);
output_e(0x02);
output_d(0xfe);
delay_ms(i);
output_e(0x04);
output_d(0xfe);
delay_ms(i);
output_e(0x08);
output_d(0xfe);
delay_ms(i);
output_e(0x08);
output_d(0xfd);
delay_ms(i);
output_e(0x08);
output_d(0xfb);
delay_ms(i);
output_e(0x08);
output_d(0xf7);
delay_ms(i);
output_e(0x04);
output_d(0xf7);
delay_ms(i);
output_e(0x02);
output_d(0xf7);
delay_ms(i);
output_e(0x01);
output_d(0xf7);
delay_ms(i);
output_e(0x01);
output_d(0xef);
delay_ms(i);
output_e(0x01);
output_d(0xdf);
delay_ms(i);
}
for(x=0;x<=200;x++){
output_e(0x01);
output_d(0x87);
delay_ms(5);
output_e(0x02);
output_d(0xc6);
delay_ms(5);
output_e(0x04);
output_d(0x86);
delay_ms(5);
output_e(0x08);
output_d(a[5]);
delay_ms(5);
}
while(1)
{
loop2 :
output_e(0x00);
delay_ms(5);
while(w==1){
Tem_1();
if(input(PIN_a3)==0){
output_e(0x00);
sound();
al = e ;
while(1){
b = e/10;
f = e%10;
o = al/10;
p = al%10;
output_d(a[b]);
output_e(0x01);
delay_ms(5);
output_d(a[f]) ;
output_e(0x02);
delay_ms(5);
output_e(0x10);
output_d(0x3f);
delay_ms(5);
output_d(a[o]);
output_e(0x04);
delay_ms(5);
output_d(a[p]) ;
output_e(0x08);
delay_ms(5);
if(!input(pin_a5)&& input(pin_a4)==1){
output_e(0x00);
sound();
al++;
}
else if(!input(pin_a4)==1&& input(pin_a5)==1){
output_e(0x00);
sound();
al--;
}
else if(input(PIN_a3)==0){
if(al<=pl){
output_c(0x08);
delay_ms(150);
output_c(0x00);
delay_ms(50);
output_c(0x08);
delay_ms(150);
output_c(0x00);
delay_ms(50);
output_c(0x08);
delay_ms(150);
output_c(0x00);
delay_ms(50);
output_c(0x08);
delay_ms(150);
output_c(0x00);
delay_ms(50);
}
if(al>40){
output_c(0x08);
delay_ms(150);
output_c(0x00);
delay_ms(50);
output_c(0x08);
delay_ms(150);
output_c(0x00);
delay_ms(50);
output_c(0x08);
delay_ms(150);
output_c(0x00);
delay_ms(50);
output_c(0x08);
delay_ms(150);
output_c(0x00);
delay_ms(50); }
if(al>pl && al<=40){
sound();
while(1) {
readTem();
b = e/10;
f = e%10;
tl = e;
o = al/10;
p = al%10;
for(x=0;x<100;x++)
{
output_d(a[b]);
output_e(0x01);
delay_ms(5);
output_d(a[f]) ;
output_e(0x02);
delay_ms(5);
output_e(0x10);
output_d(0x3f);
delay_ms(5);
output_d(a[o]);
output_e(0x04);
delay_ms(5);
output_d(a[p]) ;
output_e(0x08);
delay_ms(5);
output_c(0x03);
}
if( tl==al || tl>al ){
output_c(0x00);
while(t==1){
loop :
if(input(PIN_a3)==0){
sound();
goto loop2 ;
}
readTem();
b = e/10;
f = e%10;
tl = e;
o = al/10;
p = al%10;
for(x=0;x<100;x++)
{
output_d(a[b]);
output_e(0x01);
delay_ms(5);
output_d(a[f]) ;
output_e(0x02);
delay_ms(5);
output_e(0x10);
output_d(0x3f);
delay_ms(5);
output_d(a[o]);
output_e(0x04);
delay_ms(5);
output_d(a[p]) ;
output_e(0x08);
delay_ms(5);
output_c(0x00);
}
if(tl while(1){
readTem();
b = e/10;
f = e%10;
tl = e;
o = al/10;
p = al%10;
for(x=0;x<100;x++)
{
output_d(a[b]);
output_e(0x01);
delay_ms(5);
output_d(a[f]) ;
output_e(0x02);
delay_ms(5);
output_e(0x10);
output_d(0x3f);
delay_ms(5);
output_d(a[o]);
output_e(0x04);
delay_ms(5);
output_d(a[p]) ;
output_e(0x08);
delay_ms(5);
output_c(0x03);
}
if( tl==al || tl>al ){
output_d(0x00);
output_e(0x00);
output_c(0x00);
goto loop ;
}
if(input(PIN_a3)==0){
sound();
goto loop2 ;
}
}
}
}
}
}
}
}
}
}
}
}
}