xbee-pro article (thai) chapter2
DESCRIPTION
มาต่อกันด้วยตัวอย่างการสื่อสารข้อมูลไร้สายผ่านโมดูล XBee-PRO ระหว่าง ATmega16 ไมโครฯ AVR ตัวเก่งกับ คอมพิวเตอร์ เพื่อสร้างระบบควบคุมจาก คอมพิวเตอร์แบบไร้สายอย่างง่ายTRANSCRIPT
The Prototype Electronics 37The Prototype Electronics 37
XBee-PROฝูงผึ้ง สื่อสาร ไรสาย 2.4GHz สําหรับ ระบบสมองกล ฝงตัว ตอนที่ 2
Prot
o Kn
owled
geModule
by:Noomnamon
Prot
o Kn
owled
ge
มา ตอกัน ดวย ตัวอยาง การ สื่อสาร ขอมูล ไรสาย ผาน โมดูล XBee-PRO ระหวาง ATmega16 ไมโครฯ AVR ตัว เกง กับ คอมพิวเตอร เพื่อ สราง ระบบ ควบคุม จาก คอมพิวเตอร แบบ ไรสาย อยาง งาย หลังจากได้แนะน�าตัวให้รู้จักหน้าค่าตาไปแล้วในTPE#7มาถึงบทความในตอนที่2ซึ่งจะว่า
กันถึงการสื่อสารข้อมูลไร้สายผ่านXBee-PROระหว่างคอมพิวเตอร์กับระบบสมองกลฝงตัวซึ่งในที่
นี้เลือกใช้ไมโครคอนโทรลเลอร์ATmega16มาเป็นตัวแทน
เตรียมยุทโธปกรณ
ก็ว่ากันเอามันหน่อยครับจริงๆก็คือการตระเตรียมเครื่องมือ และอุปกรณ์เพื่อท�าการทดลองและทดสอบกันครับประกอบด้วย
1.โมดูลXBee-PRO2ตัว
2.บอร์ดเชื่อมต่อXBee-PROกับคอมพิวเตอร์(จากTPE#7ก็คือบอร์ดZX-XBee)
3.บอร์ดเชื่อมต่อXBee-PROกับไมโครคอนโทรลเลอร์ในที่นี้ใช้บอร์ดADX-XBeeจากINEX
มีวงจรและหน้าตาของบอร์ดแสดงในรูปที่1
4. บอร์ดไมโครคอนโทรลเลอร์ ATmega16 จะใช้ของค่ายไหนอย่างไรหรืออยากท�าเอง ก็ดู
วงจรได้จากรูปที่2
5. เครื่องโปรแกรมไมโครคอนโทรลเลอร์AVRแบบ ISP ในที่นี้ใช้รุ่นPX-4000จาก INEXมี
หน้าตาในรูปที่3
38 The Prototype Electronics
ภาระกิจ
ต้องการเชื่อมต่อคอมพิวเตอร์กับไมโครคอนโทรลเลอร์ATmega16
ผ่านโมดูลXBee-PROโดยคอมพิวเตอร์สามารถควบคุมการติดดับของ
LEDที่ต่อกับขาพอร์ตของไมโครคอนโทรลเลอร์ATmega16ได้จากการกด
แปนคีย์บอร์ด โดยมีเงื่อนไขคือทุกครั้งที่กดคีย์ aทางฝงคอมพิวเตอร์ LED
ที่ฝงไมโครคอนโทรลเลอร์จะถูกกลับสถานะการติดดับพร้อมกันนั้นทางฝง
ไมโครคอนโทรลเลอร์จะส่งข้อความบอกสถานะของLEDกลับมาแสดงผลที่
หน้าต่างโปรแกรมเทอร์มินอล ในรูปที่ 4 แสดงไดอะแกรมเชื่อมต่อระหว่าง
คอมพิวเตอร์กับไมโครคอนโทรลเลอร์ATMega16ผ่านโมดูลXBee-PRO
รูป ที่ 3 PX-4000 เครื่อง โปรแกรม ไมโคร คอนโทรลเลอร์ AVR แบบ ISP ขนาดเล็ก กร ะทัด รัด เชื่อม ต่อ กับ พอร์ต USB
+S
RSSI
ASS.
ON
RESET
- RxTx+
+S
RxD TxD
ADX-Xbee
รูป ที่ 1 หน้าตา และ วงจร ของ ADX-XBee5V บอร์ด เชื่อม ต่อ Xbee กับ ไมโคร คอนโทรลเลอร์
รูป ที่ 2 วงจร ไมโคร คอนโทรลเลอร์ ATmega16 ซึ่ง ใช้ ใน การ ติดต่อ กับ โมดูล XBee-PRO เพื่อ ควบคุม อุปกรณ์ เอาต์พุต
การเตรียมการ
การ เตรียมการ ฝง คอมพิวเตอร และ โมดูล XBee-PRO
(1) ติดตั้งโมดูล XBee-PRO ลงบนบอร์ด ZX-XBee (ก�าหนดเป็น
โมดูล XBee-PRO ตัวที่ 1) แล้วต่อสายเข้าพอร์ตอนุกรมของคอมพิวเตอร์
(หรือผ่านตัวแปลงUSB เป็นพอร์ตอนุกรม ในกรณีที่ต้องต่กับพอร์ต USB)
จ่ายไฟ+9Vdcให้แก่บอร์ดZX-XBee
(2)เปิดโปรแกรมX-CTUแล้วท�าการก�าหนดค่าดังนี้
MY=05
DH=00
DL=AB12
(3)จากนั้นปิดไฟเลี้ยงแล้วถอดโมดูลXBee-PROตัวที่1ออกเพื่อ
น�าไปต่อกับไมโครคอนโทรลเลอร์ ATmega16 จากนั้นน�าโมดูล XBee-
PROตัวที่2มาติดตั้งบนบอร์ดZX-XBeeแทน 4) จ่ายไฟแก่บอร์ด ZX-XBee ใช้โปรแกรม X-CTU ก�าหนดค่าของ
โมดูลXBee-PROตัวที่2ให้มีค่าดังนี้
MY=AB12
DH=00
DL=05
จากนั้นปิดไฟเลี้ยง
การเตรียมการฝงไมโครคอนโทรลเลอร
(1)สร้างไฟล์โปรเจ็กต์ของโปรแกรมภาษาCจากAVRstudio
โดยตั้งชื่อเป็น xbee_01 และพิมพ์โปรแกรมภาษา C ตามตัวอย่างไฟล์
xbee_01.c
(2)คอมไพล์และดาวน์โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์
ATmega16โดยใช้เครื่องโปรแกรมภายนอกซึ่งต้องก�าหนดบิตฟิวส์ในการ
โปรแกรมให้ถูกต้องด้วยดังแสดงในรูปที่5จากนั้นปิดไฟเลี้ยงปลดเครื่อง
โปรแกรมออก
(3) ติดตั้งโมดูล XBee-PRO ตัวที่ 1 ที่ก�าหนดค่า MY,DH และ DL
จากขั้นตอนที่(2)ในหัวข้อการเตรียมการฝงคอมพิวเตอร์ลงบนบอร์ดADX-
XBee5Vต่อสายจากจุดต่อ RxD และ TxD เข้ากับพอร์ต PD1 และ PD0
ของไมโครคอนโทรลเลอร์ATmega16ตามล�าดับส่วนพอร์ตPB0ต่อLED
และตัวต้านทานจ�ากัดกระแส
RF Module : XBee PRO
1
5
+5VTxDRxD
23
TxDRxD
RST
R122k
Vcc
SK1XBee
socket
S1RESET
K3XBee-BUS
C10.1/50V
+
S
+
S
GND
IC1LM1117-3.3
INOUT
GND
K1TxD
K2RxD
R510k
R620k
6 13 15
ASS.ONRSSI
R2510
LED1RSSI
R3510
R4510
LED3ASS.
LED2ON
C210/16V
The Prototype Electronics 39
รูป ที่ 5 หน้าต่าง กําหนด บิต ฟวส์ ของ AVRProg ที่ ใช้ ใน การ โปรแกรม ATmega16 ด้วย เครื่อง โปรแกรม PX-4000
ต่อไปยังพอร์ตอนุกรมของคอมพิวเตอร์หรือต่อพอร์ต
USBผ่านตัวแปลงUSBเป็นพอร์ตอนุกรม
รูป ที่ 6 แสดง ข้อความ MCU Ready! ที่ ไมโคร คอนโทรลเลอร์ ส่ง มายัง ฝง คอมพิวเตอร์
รูป ที่ 4 ไดอะแกรม การ เชื่อม ต่อ ระหว่าง คอมพิวเตอร์ กับ ไมโคร คอนโทรลเลอร์ ATmega16 ผ่าน โมดูล XBee-PRO
รูป ที่ 7 แสดง ข้อความ Status: ON ที่ ไมโคร คอนโทรลเลอร์ ส่ง มายัง คอมพิวเตอร์
+S
RSSI
ASS.
ON
RESET
- RxTx+
+S
RxD TxD
ADX-Xbee
XBee-TxD
XBee-RxD
IC1ATmega16
PD0
PD1
IN1 OUT1
+V
IC2ULN2003
0.1µF
16
LEDRY
1.8k
NO
C
NC
10
1
+12V
GND
PB0RY1
RELAY12VOUTLET220Vac600W
220Vac50Hz
รูป ที่ 8 แนวทางใน การ ต่อ ยอด วงจร สื่อสาร ข้อมูล อนุกรม ไร้สาย ผ่าน โมดูล XBee-PRO ทาง ฝง ไมโคร คอนโทรลเลอร์ เพื่อ ใช้ ควบคุม หลอดไฟ หรือ เครื่องใช้ ไฟฟา ที่ ใช้ ไฟ บ้าน
40 The Prototype Electronics
RF Module : XBee PRO
โปรแกรมที่ 1ไฟลxbee_01.cโปรแกรมภาษาCส�าหรับไมโคร
คอนโทรลเลอร ATmega16 เพื่อสื่อสารขอมูลกับคอมพิวเตอรผาน
โมดูลXBee-PRO
(2)จ่ายไฟให้กับไมโครคอนโทรลเลอร์หรือการรีเซตเริ่มต้นการท�างาน
หลังจากนั้นที่หน้าต่างโปรแกรมเทอร์มินอลของ X-CTU จะได้รับข้อความ
MCU Ready! ที่ส่งมาจากไมโครคอนโทรลเลอร์เพื่อแสดงความพร้อมใน
การท�างานตามรูปที่6โดยในขณะนี้LEDจะดับเป็นสภาวะเริ่มต้น
ขั้นตอนการทดสอบ
(1)เปิดโปรแกรมX-CTUแล้วเลือกแถบTerminalเลือกใช้โปรแกรม
เทอร์มินอลของX-CTUเพื่อแสดงผลการท�างานของฝงคอมพิวเตอร์
(3)ทดสอบกดปุมaที่คีย์บอร์ด1ครั้งและสังเกตว่าLEDจะติดสว่าง
(ถูกกลับสถานะในแบบท็อกเกิล)พร้อมกันั้นที่หน้าต่างโปรแกรมเทอร์มินอล
ของX-CTUจะได้รับข้อความล่าสุดเป็น“Status:ON”ตามรูปที่7
//---------------------------------------------//#include <avr/io.h> // Header fi le for AVR MCU
#include <avr/interrupt.h>// Header fi le for use sei()function#include <avr/signal.h> // Header fi le for use defi ne vector
interrupt
#include <avr/delay.h> // For used _delay_ms function
#defi ne F_OSC 16000000 // Constant for Crystal frequency in Hz
#defi ne UART_BAUD_CALC(x,F_OSC) ((F_OSC)/((x)*16l)-1) // Equation for calculate baudrate//---------------------------------------------------////------------- Function for initial USART -------------////------------------------------------------------------//void uart_init(unsigned int baud) { UBRRH = (unsigned int)(UART_BAUD_CALC(baud,F_OSC)>>8); // Keep baudrate high byte
UBRRL = (unsigned int)UART_BAUD_CALC(baud,F_OSC); // Keep baudrate low byte
// Enable receiver and transmitter, enable RX interrupt
UCSRB |= (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); // Asynchronous 8N1
UCSRC |= (1 << URSEL) | (1 << UCSZ1)| (1 << UCSZ0); sei(); // enable interrupts}//-------------------------------------------------------////----------- Function for send 1 character -------------////-------------------------------------------------------//void uart_putc(unsigned char c) { while(!(UCSRA & (1 << UDRE))); // Wait for transmit Ready UDR = c; // send character}//-------------------------------------------------------////-------------- Function for send string ---------------////-------------------------------------------------------//void uart_puts(char *s) { while (*s) // Loop for send string { uart_putc(*s); // Send character s++; // Point to next character
}}//-------------------------------------------------------////-------------- Function for send string ---------------////-------------------------------------------------------// SIGNAL(SIG_UART_RECV) { char key=0; // For Keep character key = UDR; // Keep character if(key=='a' || key=='A') {
PORTB ^= 0x01; // Toggle LEDif(PORTB & 0x01) // Get status LED{
uart_puts("Status: ON \r\n");// Send message LED ON}
else { uart_puts("Status: OFF \r\n");// Send message LED OFF } }}
void main(){ DDRB |= 0x01; // PB0 as output for LED uart_init(9600); // Initial UART uart_puts("MCU Ready!\r\n");// Send message to terminal program while(1); // Break program }
//------------------------------------------------------////-------------- Function for send string --------------////------------------------------------------------------//
(4) ทดสอบกดคีย์ a หลายๆครั้ง จะพบว่า ทุกครั้งที่มีการกดคีย์
ที่ฝ งคอมพิวเตอร์LEDจะกลับสถานะการติดดับพร้อมกันนั้นไมโคร
คอนโทรลเลอร์ATmega16ส่งข้อความแสดงสถานะล่าสุดกลับมาแสดงยัง
หน้าต่างเทอร์มินอลของX-CTU
สรุปผลการปฏิบัติภารกิจ
ในภารกิจนี้เป็นการทดสอบการสื่อสารข้อมูลอย่างง่ายๆ เพื่อให้คุณ
ผู้อ่านได้เห็นแนวทางการก�าหนดคุณสมบัติการท�างานเพื่อใช้ในการสื่อสาร
กันระหว่างกันของโมดูล XBee-PRO คุณผู้อ่านสามารถใช้งานโมดูล
XBee-PRO ร่วมกับไมโครคอนโทรลเลอร์ตระกูลใดๆ ก็ได้ตามความถนัด
ในการพัฒนาโปรแกรม โดยไม่จ�ากัดอยู่ที่ไมโครคอนโทรลเลอร์ AVR เบอร์
ATmega16เท่านั้นครับ
ภารกิจตอเนื่อง
จากตัวอย่างที้น�าเสนอในตอนนี้สามารถน�าไปต่อยอดเพื่อใช้งานจริง
ได้โดยแทนที่จะควบคุมการติดดับของLEDธรรมดาๆหากต้องการควบคุม
การปิดเปิด หลอดไฟในบ้านหรือไฟสนามหญ้าหน้าบ้านที่ไกลออกไป ก็
สามารถท�าการปรับวงจรทางฝงไมโครคอนโทรลเลอร์โดยน�าสัญญาณไป
ต่อเข้ากับวงจรขับรีเลย์เพื่อใช้งานรีเลย์ในการตัดต่อการท�างานของอุปกรณ์
ไฟฟา 220Vac อีกทอดหนึ่งดังในรูปที่ 8 ทั้งยังสามารถเพิ่มจ�านวนช่องใน
การควบคุมได้ด้วยการแก้ไขโปรแกรมเพียงเล็กน้อย
นอกจากนั้นภาษาที่ใช้ในการพัฒนาโปรแกรมก็สามารถเลือกได้
ตามความถนัดเช่นเดียวกัน ไม่ว่าจะเป็นแอสเซมบลี, เบสิก หรือ C ส่วน
การพัฒนาโปรแกรมเชื่อมต่อทางฝงคอมพิวเตอร์ในกรณีที่ไม่ต้องการให้
แสดงเพียงข้อความอย่างเดียว ก็สามารถพัฒนาโปรแกรมประเภท GUI
(GraphicUser Interface) ขึ้นมารับส่งข้อมูลผ่านพอร์ตอนุกรมแทนการใช้
โปรแกรมเทอร์มินอลก็ได้โดยใช้ซอฟต์แวร์ในกลุ่มVisualStudioจากไมโคร
ซอฟต์ ( VB, VC#, VC++เป็นต้น) โดยในส่วนนี้ก็พอมีหนังสือแนะน�าการ
พัฒนาโปรแกรมจ�าหน่ายในร้านหนังสือ
www.tpemagazine.com