Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore พัดลมอัจฉริยะ

พัดลมอัจฉริยะ

Published by kowit, 2018-05-10 05:23:02

Description: พัดลมอัจฉริยะเป็นมินิโปรเจคที่นักศึกษาต้องการศึกษาค้นคว้าการเขียนโปรแกรมควบคุม Arduino

Search

Read the Text Version

เรื่องพดั ลมอจั ฉริยะอปุ กรณ์ทีใ่ ช้งาน 1. Arduino UNO R3 บอร์ดไมโครคอนโทรลเลอร์แบบ Open-source บนแพลตฟอร์ม Arduino ของแท้จาก ผ้ผู ลติ arduino.cc ประเทศอิตาลี ออกแบบมาให้ใช้งานได้งา่ ย ใช้ชิพ ATmega328 รันท่ีความถ่ี 16 MHz หนว่ ยความจาแฟลช 32 KB แรม 2 KB บอร์ดใช้ไฟเลยี ้ ง 7 ถงึ 12 V มรี ะดบั แรงดนั ไฟฟา้ ในการทางานและ ขาสญั ญาณอยทู่ ี่ 5 V (TTL) มี Digital Input / Output 14 ขา (เป็น PWM ได้ 6 ขา) มี Analog Input 6 ขา Serial UART 1 ชดุ I2C 1 ชดุ SPI 1 ชดุ เขียนโปรแกรมบนซอฟท์แวร์ Arduino IDE และโปรแกรมผา่ นพอร์ต USB เหมาะสาหรับผ้ทู ส่ี นใจเริ่มต้นเรียนรู้การพฒั นาไมโครคอนโทรลเลอร์หรือแม้แตผ่ ้ทู ี่ไมเ่ คยเรียนรู้ด้าน อเิ ลก็ ทรอนิกสม์ าก่อนก็สามารถนามาสร้างต้นแบบทเ่ี กี่ยวกบั อเิ ลก็ ทรอนิกสไ์ ด้ Features:  ATmega328 microcontroller  Input voltage - 7-12V  14 Digital I/O Pins (6 PWM outputs)  6 Analog Inputs  32KB Flash Memory (0.5KB for boot loader)  2KB SRAM  1KB EEPROM  16Mhz Clock Speed 2. DHT11 เป็นเซน็ เซอร์ทใ่ี ช้วดั Humidity and Temperature แบบดจิ ิตอล สอ่ื สารผา่ นโปรโตรคอล one-wire ซง่ึ มีสเปกดงั นี ้ a. - รองรับแหลง่ จา่ ยพลงั งานได้ตงั้ แต่ 3.3V - 5.5V b. - ให้คา่ ความชืน้ สมั พทั ธ์ และอณุ หภมู ิ เป็นข้อมลู ดจิ ิตอล จงึ ไมต่ ้องการการสอบเทยี บคา่ c. - ใช้พลงั งานต่า โดยขณะ standby จะใช้กระแสประมาณ 150 ไมโครแอมป์ และขณะแปลงสญั าณ- สง่ ข้อมลู ใช้กระแสประมาณ 2.5 มิลลแิ อมป์ d. – มอี ายกุ ารใช้งานยาวนาน

3. HC-06 Bluetooth Module เป็นโมดลู แปลงการสอื่ สารข้อมลู อนกุ รมเป็นการสอ่ื สารข้อมลู ไร้สายผา่ น สญั ญาณ Bluetooth แบบพร้อมใช้งาน มสี เปกดงั นี ้ a. Running in slave role: Pair with BT dongle and master module b. Coupled Mode: Two modules will establish communication automatically when powered. c. PC hosted mode: Pair the module with bluetooth dongle directly as virtual serial. d. Bluetooth protocal : Bluetooth Specification v2.0+EDR e. Frequency : 2.4GHz ISM band f. Modulation : GFSK(Gaussian Frequency Shift Keying) g. Emission power : ≤4dBm, Class 2 h. Sensitivity : ≤-84dBm at 0.1% BER i. Speed : Asynchronous: 2.1Mbps(Max) / 160 kbps, Synchronous: 1Mbps/1Mbps j. Security : Authentication and encryption k. Profiles : Bluetooth serial port l. CSR chip : Bluetooth v2.0 m. Wave band : 2.4GHz—2.8GHz, ISM Band n. Protocol : Bluetooth V2.0 o. Power Class : (+6dbm) p. Reception sensitivity: -85dBm q. Voltage : 3.6 - 6V r. Current : Paring - 35mA, Connected - 8mA s. Temperature : -40C~ +105C4. จอ LCD16X2 พร้อมตดิ ตงั้ โมดลู สอ่ื สารแบบ I2C เป็นจอแสดงผลรูปแบบหนงึ่ ที่นิยมนามาใช้งานกนั กบั ระบบ สมองกลฝังตวั อยา่ งแพร่หลาย จอ LCD มที งั้ แบบแสดงผลเป็นตวั อกั ขระเรียกวา่ Character LCD ซงึ่ มกี าร กาหนดตวั อกั ษรหรืออกั ขระทส่ี ามารถแสดงผลไว้ได้อยแู่ ล้ว

5. บอร์ดรีเลย์ 3 ชอ่ งอปุ กรณ์อเิ ลก็ ทรอนิกส์ทที่ าหน้าทเ่ี ป็นสวติ ซ์ตดั -ตอ่ วงจร โดยใช้แมเ่ หลก็ ไฟฟา้ และการที่จะให้ มนั ทางานก็ต้องจา่ ยไฟให้มนั ตามทก่ี าหนด6. Adapter 9V 1A สาหรับเสยี บจา่ ยไฟให้บอร์ด arduino uno r3 และอปุ กรณ์อน่ื7. ตวั ต้านทาน เป็นอปุ กรณ์ทใี่ ช้ในการต้านทานการไหลของกระแสไฟฟา้ นยิ มนามาประกอบในวงจรทางด้านไฟฟา้ อิเลก็ ทรอนกิ ส์ทวั่ ไป8. พดั ลมขนาด 12 นวิ ้

อธิบายวงจร 1. การตอ่ วงจรเซน็ เซอร์วดั อณุ หภมู ิ DHT11 แบบดิจิตอล จากภาพด้านลา่ ง pin2 ขอเซน็ เซอร์เป็น pin data ที่สง่ ข้อมลู อณุ หภมู แิ บบดจิ ตอลให้บอร์ดควบคมุ arduino uno R3 ที่ pin 2 การใช้งานตวั เซ็นเซอร์ dht11 นตี ้ ้องตอ่ ไฟเลยี ้ ง +5V ให้ ดงั ภาพด้านลา่ ง และตอ่ ไฟเลยี ้ งให้บอร์ดควบคมุ arduino uno R3 จาก adapter 9V 1 A เพื่อให้ regulator ของบอร์ดควบคมุ แปลงไฟเป็น +5V อกี ทเี พื่อ นาไปเลยี ้ งตวั เซน็ เซอร์ 2. การตอ่ วงจร hc-05 bluetooth module ขา TXD ตอ่ เข้า PIN10 และ RXD ตอ่ เข้า PIN11 ของบอร์ด ควบคมุ arduino uno r3 hc-05 นใี ้ ช้ไฟเลยี ้ ง +5V จากบอร์ดควบคมุ arduino uno r3

3. การตอ่ วงจร lcd16x2 พร้อมโมดลู สอ่ื สาร I2C ขา SCA ตอ่ เข้า A4 และ SCL ตอ่ เข้า A5 ของบอร์ด ควบคมุ arduino uno r3 พร้อมใช้ไฟเลยี ้ ง +5V จากบอร์ดควบคมุ arduino uno r34. การตอ่ วงจร switch พดั ลมทงั้ 3 เบอร์ ใช้การตอ่ แบบ pull up โดยใช้ตวั ต้านทาน 10 กิโลโอห์ม ซง่ึ เมอื่ กดแล้วจะให้แรงดนั เป็น +5V ตอ่ เข้า A0,A1 และ A2 ทีบ่ อร์ดควบคมุ arduino uno r3 ตามลาดบั

5. การตอ่ วงจรบอร์ด relay จะใช้ IN1 ตอ่ เข้า PIN5 ,IN2 ตอ่ เข้า PIN6 และ IN3 ตอ่ เข้า PIN7 ของ บอร์ดควบคมุ arduino uno r3 ตามลาดบั ยกตวั อยา่ งเม่อื จะใช้ speed เบอร์ 1 ตวั relay1 จะ ทางานนนั่ คือ จะเป็น NO ตวั อ่นื ก็จะเป็น NC

6. การตอ่ วงจรบอร์ด relay กบั มอเตอร์พดั ลม ขา Common ของ Relay ทกุ ตวั จะตอ่ ไฟ L 220 V และ NO ของรีเลยจ์ ะตอ่ ขดลวดตาม speed low ,mid ,hi ตามลาดบัโปรแกรม#include <SoftwareSerial.h> //library สาหรับติดตอ่ Bluetooth hc-06#include \"DHT.h\" //library สาหรับติดตอ่ เซน็ เซอร์วดั อณุ หภมู ิ dht11#include <Wire.h> //library สาหรับการใช้ wire การสอ่ื สารเช่น spi ,i2c#include <LiquidCrystal_I2C.h> //library สาหรับตดิ ตอ่ จอ lcd16x2 ผา่ นการสอื่ สารแบบ I2C// Set the LCD address to 0x27 for a 16 chars and 2 line displayLiquidCrystal_I2C lcd(0x27, 16, 2);//กาหนด address ของ lcd และขนาดของจอ lcd เป็น 16 ตวั อกั ษร 2 บรรทดัSoftwareSerial Genotronex(10, 11); // RX, TX //กาหนดให้ท่ขี า 10 เป็น rxและขา 11 เป็น txint ledpin=13; // ประกาศตวั แปร ledpin แบบจานวนเตม็ ให้มคี า่ เทา่ กบั 13 คือ ใช้ ขา13int BluetoothData; // ประกาศตวั แปรเก็บข้อมลู ของ Bluetooth จาก android แบบจานวนเตม็String inData; //ประกาศตวั แปรเก็บข้อมลู แบบสตริงint C_speed=0; //ประกาศตวั แปร C_speed แบบจานวนเตม็ ให้มคี า่ เทา่ กบั 0int Mode=1,M_Mode=1; //ประกาศตวั แปร Modeและ M_Mode ให้เป็นแบบจานวนเตม็ มคี า่ เทา่ กบั 1

#define DHTPIN 2 // กาหนดให้ DHT11 ใช้ PIN2#define DHTTYPE DHT11 // กาหนดให้ DHTTYPE เป็นแบบ DHT11DHT dht(DHTPIN, DHTTYPE); //ให้ dht เป็นแบบ Object สาหรับเรียกใช้งานฟังก์ชนั librarychar buf[10]; //ประกาศตวั แปร buf ขนาด 10 byteString inputString = \"\"; // ประกาศตวั แปร inputSting ให้เป็น String ใช้สาหรับเก็บข้อมลู Bluetooth ท่ีเข้ามาboolean stringComplete = false; // ประกาศตวั แปร stringComplete ให้เป็นแบบ booleanint No1=5; //ประกาศตวั แปร No1 เป็นจานวนเต็ม ให้มีคา่ เทา่ กบั 5 ใช้เป็น PIN5int No2=6; //ประกาศตวั แปร No2 เป็นจานวนเตม็ ให้มีคา่ เทา่ กบั 6 ใช้เป็น PIN6int No3=7; //ประกาศตวั แปร No3 เป็นจานวนเต็ม ให้มคี า่ เทา่ กบั 7 ใช้เป็น PIN7void setup() { //ฟังก์ชน่ั setup ใช้สาหรับตงั ้ คา่ pin ,ประกาศคาสง่ั เริ่มใช้งาน library เป็นต้น // put your setup code here, to run once: Serial.begin(9600); //คาสง่ั ให้เร่ิมใช้งาน serial ท่ี baud rate = 9600 Genotronex.begin(9600); //คาสงั่ ให้เริ่มงาน software serial ที่ baud rate = 9600 dht.begin(); // คาสงั่ ให้เร่ิมใช้งาน dht11 pinMode(No1,OUTPUT); //คาสงั่ กาหนด PIN no1 เป็นแบบ Output pinMode(No2,OUTPUT); //คาสงั่ กาหนด PIN no2 เป็นแบบ Output pinMode(No3,OUTPUT); //คาสง่ั กาหนด PIN no3 เป็นแบบ Output delay(100); //คาสง่ั หนว่ งเวลา 100 ms digitalWrite(No1,LOW); //คาสงั่ ให้ PIN no1 มสี ถานเป็น LOW คอื 0V digitalWrite(No2,LOW); //คาสงั่ ให้ PIN no2 มสี ถานเป็น LOW คือ 0V digitalWrite(No3,LOW); //คาสง่ั ให้ PIN no3 มีสถานเป็น LOW คอื 0V lcd.begin(); //คาสง่ั ให้เริ่มใช้งานจอ lcd 16x2}

void loop() { delay(1000); //คาสงั่ หนว่ งเวลา 1000 ms คือ 1 วนิ าที int t = dht.readTemperature(); //ประกาศตวั แปร t เป็นแบบจานวนเต็มและเก็บคา่ อณุ หภมู ิจาก dht11 String myString = String(t); //ประกาศตวั แปร myString เป็นแบบสตริง พร้อมแปลงตวั แปร t เป็นสตริง Genotronex.print(\"KT\"); //คาสง่ั สง่ “KT” ให้ android Genotronex.print(myString);//คาสงั่ สง่ อหุ ณภมู ิ ให้ android if (Mode == 1) //เปรียบเทยี บตวั แปร Mode เทา่ กบั 1 ทางานเมอ่ื เงื่อนไขนี ้Mode เทา่ กบั 1 คือ auto mode Genotronex.print(\"/1\"); //คาสงั่ สง่ “/1” ให้ android กรณีเป็น auto mode if (Mode == 0) //เปรียบเทยี บตวั แปร Mode เทา่ กบั 0 ทางานเม่ือเง่ือนไขนี ้Mode เทา่ กบั 1 คอื manual mode Genotronex.print(\"/0\");//คาสงั่ สง่ “/0” ให้ android กรณีเป็น manual mode if (C_speed==0) //เปรียบเทยี บตวั แปร C_speed เทา่ กบั 0 เบอร์ 0 Genotronex.println(\"*0\"); //คาสงั่ สง่ “*0” ให้ android กรณี speed เทา่ กบั เบอร์ 0 else if (C_speed==1) //เปรียบเทยี บตวั แปร C_speed เทา่ กบั 1 เบอร์ 1 Genotronex.println(\"*1\");//คาสงั่ สง่ “*1” ให้ android กรณี speed เทา่ กบั เบอร์ 1 else if (C_speed==2) //เปรียบเทียบตวั แปร C_speed เทา่ กบั 2 เบอร์ 2 Genotronex.println(\"*2\");//คาสงั่ สง่ “*2” ให้ android กรณี speed เทา่ กบั เบอร์ 2 else if (C_speed==3) //เปรียบเทียบตวั แปร C_speed เทา่ กบั 3 เบอร์ 3 Genotronex.println(\"*3\"); //คาสง่ั สง่ “*3” ให้ android กรณี speed เทา่ กบั เบอร์ 3 lcd.setCursor(0, 0); //คาสง่ั ตงั ้ คา่ cursor ให้ไปตาแหนง่ 0,0 if(Mode==0) //เปรียบเทยี บตวั แปร Mode เทา่ กบั 0 lcd.print(\"Manual Mode \"); //คาสง่ั แสดงข้อความ Manual Mode ทีจ่ อ lcd else lcd.print(\"Auto Mode \"); //คาสงั่ แสดงข้อความ Auto Mode ที่จอ lcd lcd.setCursor(0,1); //คาสง่ั ตงั ้ คา่ cursor ให้ไปตาแหนง่ 0,1

lcd.print(\"T= \");//คาสงั่ แสดงข้อความ T= ท่ีจอ lcd lcd.print(t); //คาสง่ั แสดงข้อความอณุ หภมู ทิ ่ีจอ lcd lcd.print(\" S= \");//คาสง่ั แสดงข้อความ S= ทีจ่ อ lcd lcd.print(C_speed); //คาสงั่ แสดงข้อความความเร็วเบอร์ท่จี อ lcd while (Genotronex.available()>0) { //ลปู while ตรวจสอบวา่ มกี ารสง่ ข้อมลู หรือไม่ char toSend = (char)Genotronex.read(); //คาสง่ั อา่ นข้อมลู จาก android และเก็บไว้ในตวั แบบ toSend inputString += toSend; //นาคา่ ทอ่ี ยใู่ นตวั แปร toSend เก็บไว้ในตวั แปร inputString if (toSend == '\n') //ตรวจสอบวา่ มกี ารสง่ ข้อมลู จบแล้วด้วยการเปรียบเทยี บกบั “\n” { if(inputString == \"+++\n\"){ // ตรวจสอบกรณีลมื สง่ \n มา Serial.println(\"OK. Press h for help.\"); //คาสงั่ แสดงข้อความจาก serial }if((inputString==\"S1\n\")||(inputString==\"ÿS1\")||(inputString==\"ÿÿS1\")||(inputString==\"ÿÿÿS1\")&&(Mode==0)) //เปรียบ inputString วา่ android สง่ ให้เปลยี่ นเป็นเบอร์ 1 หรือไม่ { C_speed=1; //ให้ตวั แปร c_speed เทา่ กบั 1 }if((inputString==\"S2\n\")||(inputString==\"ÿS2\")||(inputString==\"ÿÿS2\")||(inputString==\"ÿÿÿS2\")&&(Mode==0)) //เปรียบ inputString วา่ android สง่ ให้เปลยี่ นเป็นเบอร์ 2 หรือไม่ { C_speed=2; //ให้ตวั แปร c_speed เทา่ กบั 2 }

if((inputString==\"S3\n\")||(inputString==\"ÿS3\")||(inputString==\"ÿÿS3\")||(inputString==\"ÿÿÿS3\")&&(Mode==0)) //เปรียบ inputString วา่ android สง่ ให้เปลย่ี นเป็นเบอร์ 3 หรือไม่ { C_speed=3; //ให้ตวั แปร c_speed เทา่ กบั 3 }if((inputString==\"S0\n\")||(inputString==\"ÿS0\")||(inputString==\"ÿÿS0\")||(inputString==\"ÿÿÿS0\")&&(Mode==0)) //เปรียบ inputString วา่ android สง่ ให้เปลยี่ นเป็นเบอร์ 0 หรือไม่ { C_speed=0; //ให้ตวั แปร c_speed เทา่ กบั 3 } if(inputString==\"M\n\") //เปรียบ inputString วา่ android สง่ ให้เปลยี่ น Mode manual หรือไม่ { M_Mode=3; //ให้ตวั แปร m_mode เทา่ กบั 3 นน่ั คือใช้ manual } if(inputString==\"A\n\") //เปรียบ inputString วา่ android สง่ ให้เปลย่ี น Mode auto หรือไม่ { M_Mode=1;//ให้ตวั แปร m_mode เทา่ กบั 1 นน่ั คอื ใช้ auto } inputString = \"\"; // เครียร์ข้อมลู ของตวั แปร inputString ให้เป็นคา่ วา่ ง } }//Manual Mode if(analogRead(0)>500){ //ตรวจสอบวา่ มกี ารกด switch เบอร์ 1 หรือไม่ C_speed=1; //ให้ตวั แปร c_speed เทา่ กบั 1

Mode=0;} //ให้ตวั แปร mode เทา่ กบั 0 นนั่ คือใช้ manual if(analogRead(1)>500){ //ตรวจสอบวา่ มกี ารกด switch เบอร์ 2 หรือไม่ C_speed=2; //ให้ตวั แปร c_speed เทา่ กบั 2 Mode=0;} //ให้ตวั แปร mode เทา่ กบั 0 นนั่ คือใช้ manual if(analogRead(2)>500){ //ตรวจสอบวา่ มกี ารกด switch เบอร์ 3 หรือไม่ C_speed=3; //ให้ตวั แปร c_speed เทา่ กบั 3 Mode=0;} //ให้ตวั แปร mode เทา่ กบั 0 นน่ั คอื ใช้ manual if((analogRead(0)<500)&&(analogRead(1)<500)&&(analogRead(2)<500)&&(M_Mode==1)) //เปรียบวา่ ไมม่ กี ารกด switch ให้เปลย่ี นเป็น mode manual Mode=1; //ให้ตวั แปร mode เทา่ กบั 1 นน่ั คอื ใช้ auto if((analogRead(0)>500)||(analogRead(1)>500)||(analogRead(2)>500)||(M_Mode==3)) //เปรียบวา่ มีการกด switch ให้เปลยี่ นเป็น mode auto Mode=0; //ให้ตวั แปร mode เทา่ กบั 0 นนั่ คือใช้ manual//Auto Modeif(Mode==1){ //ตรวจสอบวา่ เป็น auto mode หรือไม่ if(t>=32){ // ถ้าอณุ หภมู มิ ากวา่ หรือเทา่ 32 ให้ความเร็วมอเตอร์เบอร์ 3 C_speed=3; } else if ((t<=31)&&(t>28)){ // ถ้าอณุ หภมู ิน้อยวา่ หรือเทา่ 31 และมากกวา่ 28 ให้ความเร็วมอเตอร์เบอร์ 2 C_speed=2; } else if ((t<=28)&&(t>=25)){ // ถ้าอณุ หภมู ิน้อยวา่ หรือเทา่ 28 และมากกวา่ 25 ให้ความเร็วมอเตอร์เบอร์ 1 C_speed=1; } else if (t<25) // ถ้าอณุ หภมู นิ ้อยวา่ 25 ให้ความเร็วมอเตอร์เบอร์ 0

C_speed=0;} if(C_speed==1){ //ตรวจสอบวา่ เป็นเบอร์ 1 หรือไม่ digitalWrite(No1,HIGH); //รีเลย์ตวั ที่ 1 ทางาน digitalWrite(No2,HIGH); //รีเลย์ตวั ที่ 2 ไมท่ างาน digitalWrite(No3,HIGH); //รีเลย์ตวั ที่ 3 ไมท่ างาน } else if(C_speed==2){ //ตรวจสอบวา่ เป็นเบอร์ 2 หรือไม่ digitalWrite(No1,LOW); //รีเลย์ตวั ท่ี 1 ไมท่ างาน digitalWrite(No2,LOW); //รีเลย์ตวั ที่ 2 ทางาน digitalWrite(No3,HIGH); //รีเลย์ตวั ที่ 3 ไมท่ างาน } else if(C_speed==3){ //ตรวจสอบวา่ เป็นเบอร์ 3 หรือไม่ digitalWrite(No1,LOW); //รีเลย์ตวั ท่ี 1 ไมท่ างาน digitalWrite(No2,HIGH); //รีเลย์ตวั ท่ี 2 ไมท่ างาน digitalWrite(No3,LOW); //รีเลย์ตวั ที่ 3 ทางาน } else { //ตรวจสอบวา่ เป็นเบอร์ 0 หรือไม่ digitalWrite(No1,LOW); //รีเลย์ตวั ที่ 1 ไมท่ างาน digitalWrite(No2,HIGH); //รีเลย์ตวั ที่ 2 ไมท่ างาน digitalWrite(No3,HIGH); //รีเลย์ตวั ที่ 3 ไมท่ างาน }}


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook