Page 1

Proto Knowledge

Module by : Noomnamon

XBee-PRO

ฝูงผึ้งสื่อสารไรสาย 2.4GHz สําหรับระบบสมองกลฝงตัว ตอนที่ 2

มาตอกันดวยตัวอยางการสื่อสารขอมูลไรสายผานโมดูล XBee-PRO ระหวาง ATmega16 ไมโครฯ AVR ตัวเกง กับคอมพิวเตอร เพื่อสรางระบบควบคุมจากคอมพิวเตอรแบบ ไรสายอยางงาย หลังจาก ได้ แนะน�าตัว ให้ รู้จัก หน้า ค่า ตา ไป แล้ว ใน TPE#7 มาถึง บทความ ใน ตอนที่ 2 ซึ่ง จะ ว่า กัน ถึง การ สื่อสาร ข้อมูล ไร้สาย ผ่าน XBee-PRO ระหว่าง คอมพิวเตอร์ กับ ระบบ สมองกล ฝงตัว ซึ่ง ในที่ นี้ เลือก ใช้ ไมโคร คอนโทรลเลอร์ ATmega16 มา เป็น ตัวแทน

เตรียมยุทโธปกรณ ก็ว่ากันเอามันหน่อยครับ จริงๆก็คือการตระเตรียมเครื่องมือ และอุปกรณ์เพื่อท�าการทดลอง และทดสอบกันครับ ประกอบด้วย 1. โมดูล XBee-PRO 2 ตัว

2. บอร์ด เชื่อม ต่อ XBee-PRO กับค อมพิวเตอร์ (จาก TPE #7 ก็ค ือ บอร์ด ZX-XBee)

3. บอร์ด เชื่อม ต่อ XBee-PRO กับ ไมโคร คอนโทรลเลอร์ ในที่นี้ ใช้ บอร์ด ADX-XBee จาก INEX มี วงจร และ หน้าตา ของ บอร์ด แสดง ใน รูป ที่ 1 4. บอร์ด ไมโคร คอนโทรลเลอร์ ATmega16 จะ ใช้ ของ ค่าย ไหน อย่างไร หรือ อยาก ท�า เอง ก็ ดู วงจร ได้ จาก รูป ที่ 2 5. เครื่อง โปรแกรม ไมโคร คอนโทรลเลอร์ AVR แบบ ISP ในที่นี้ ใช้ รุ่น PX-4000 จาก INEX มี หน้าตา ใน รูป ที่ 3

The Prototype Electronics

37


RF Module : XBee PRO

ภาระกิจ ต้องการ เชื่อม ต่อ คอมพิวเตอร์ กับ ไมโคร คอนโทรลเลอร์ ATmega16 ผ่าน โมดูล XBee-PRO โดย คอมพิวเตอร์ สามารถ ควบคุม การ ติด ดับ ของ LED ที่ต่อ กับ ขา พอร์ต ของ ไมโคร คอนโทรลเลอร์ ATmega16 ได้ จาก การ กด แปน คีย์ บอร์ด โดย มี เงื่อนไข คือ ทุกครั้ง ที่ กด คีย์ a ทาง ฝง คอมพิวเตอร์ LED ที่ ฝง ไมโคร คอนโทรลเลอร์ จะ ถูก กลับ สถานะ การ ติด ดับ พร้อมกัน นั้น ทาง ฝง ไมโคร คอนโทรลเลอร์ จะ ส่งข้อความ บอก สถานะ ของ LED กลับ มา แสดงผล ที่ หน้าต่าง โปรแกรม เทอร์ มินอล ใน รูป ที่ 4 แสดง ไดอะแกรม เชื่อม ต่อ ระหว่าง คอมพิวเตอร์ กับ ไมโคร คอนโทรลเลอร์ ATMega16 ผ่าน โมดูล XBee-PRO RSSI ASS. ON

RESET

- RxTx + RxD

OUT R1 22k

ADX-Xbee TxD S

+

+

S

IN IC1 LM1117-3.3 GND

1

K1 TxD

S

Vcc

K2 RxD

+

RST

S1 RESET

SK1 XBee socket

C2 10/16V

RSSI 6 R2 510

ON

2 TxD 3 RxD R6 20k

R5 10k

ASS.

13 15 R3 R4 510 510 LED3 ASS.

LED1 RSSI

+

5

S

C1 0.1/50V

+5V TxD RxD GND

รูปที่ 2 วงจรไมโครคอนโทรลเลอร์ ATmega16 ซึ่งใช้ในการติดต่อ กับโมดูล XBee-PRO เพื่อควบคุมอุปกรณ์เอาต์พุต

K3 XBee-BUS

LED2 ON

รูปที่ 1 หน้าตาและวงจรของ ADX-XBee5V บอร์ดเชื่อมต่อ Xbee กับ ไมโครคอนโทรลเลอร์

การ​เตรียมการ การเตรียมการฝงคอมพิวเตอรและโมดูล 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 จากนั้น น�า โมดูล XBeePRO ตัว ที่ 2 มา ติดตั้ง บน บอร์ด ZX-XBee แทน 4) จ่ายไฟแก่บอร์ด ZX-XBee ใช้โปรแกรม X-CTU ก�าหนดค่าของ โมดูล XBee-PRO ตัวที่ 2 ให้มีค่าดังนี้ MY = AB12 DH = 00 DL = 05 จากนั้นปิดไฟเลี้ยง 38

The Prototype Electronics

รู ป ที่ 3 PX-4000 เครื่ อ ง โปรแกรม ไมโคร คอนโทรลเลอร์ AVR แบบ ISP ขนาดเล็กกระทัดรัด เชื่อมต่อกับพอร์ต USB

การ​เตรียมการ​ฝง​ไมโคร​คอนโทรลเลอร (1) สร้ า ง ไ ฟล์ โ ปร เ จ็ ก ต์ ข อง โ ปรแกรม ภ าษา C จาก AVR studio โดย ตั้งชื่อ เป็น xbee_01 และ พิมพ์ โปรแกรม ภาษา C ตาม ตัวอย่าง ไฟล์ xbee_01.c (2) คอมไพล์ และ ดาวน์โหลด โปรแกรม ไป ยัง ไมโคร คอนโทรลเลอร์ ATmega16 โดย ใช้ เครื่อง โปรแกรม ภายนอก ซึ่ง ต้อง ก�าหนด บิต ฟิวส์ ใน การ โปรแกรม ให้ ถูกต้อง ด้วย ดัง แสดง ใน รูป ที่ 5 จากนั้น ปิดไฟ เลี้ยง ปลด เครื่อง โปรแกรม ออก (3) ติดตั้ง โมดูล XBee-PRO ตัว ที่ 1 ที่ ก�าหนด ค่า MY,DH และ DL จาก ขั้น ตอนที่ (2) ใน หัวข้อ การ เตรียมการ ฝง คอมพิวเตอร์ ลง บน บอร์ด ADXXBee5V ต่อ สาย จาก จุด ต่อ RxD และ TxD เข้ากับ พอร์ต PD1 และ PD0 ของ ไมโคร คอนโทรลเลอร์ ATmega16 ตามล�าดับ ส่วน พอร์ต PB0 ต่อ LED และ ตัว ต้านทาน จ�ากัด กระแส


ต่อไป ยัง พอร์ต อนุกรม ของ คอมพิวเตอร์ หรือ ต่อ พอร์ต USB ผ่าน ตัว แปลง USB เป็น พอร์ต อนุกรม

รูปที่ 4 ไดอะแกรมการเชื่อมต่อระหว่างคอมพิวเตอร์กับไมโคร คอนโทรลเลอร์ ATmega16 ผ่านโมดูล XBee-PRO

รูปที่ 7 แสดงข้อความ Status: ON ที่ไมโครคอนโทรลเลอร์ส่งมายัง คอมพิวเตอร์

รูปที่ 6 แสดงข้อความ MCU Ready! ที่ไมโครคอนโทรลเลอร์ส่งมายังฝง คอมพิวเตอร์ +V

RSSI ASS. ON

RESET

- RxTx + RxD

10

+12V 0.1µF

IC2

IC1

ULN2003

ATmega16

PB0

LED RY

220Vac 50Hz

NO C

1

IN1

OUT1

16

1.8k

NC

RY1 RELAY12V

ADX-Xbee TxD

GND

OUTLET 220Vac 600W

S

+

+

S

รูปที่ 5 หน้าต่างกําหนดบิตฟวส์ของ AVRProg ที่ใช้ในการโปรแกรม ATmega16 ด้วยเครื่องโปรแกรม PX-4000

XBee-TxD

PD0

XBee-RxD

PD1

รูปที่ 8 แนวทางในการต่อยอดวงจรสื่อสารข้อมูลอนุกรม ไร้สายผ่าน โมดูล XBee-PRO ทางฝงไมโครคอนโทรลเลอร์เพื่อใช้ควบคุมหลอดไฟ หรือเครื่องใช้ไฟฟาที่ใช้ไฟบ้าน

The Prototype Electronics

39


RF Module : XBee PRO

โปรแกรม​ที่ ​​1​ไฟล ​xbee_01.c​โปรแกรม​ภ าษา​C​ส� า หรั บ ​ไมโคร​ คอนโทรลเลอร​ ATmega16​ เพื่อ​สื่อสาร​ขอมูล​กับ​คอมพิวเตอร​ผาน​ โมดูล​XBee-PRO //---------------------------------------------// // Header file for AVR MCU #include <avr/io.h> #include <avr/interrupt.h>// Header file for use sei()function #include <avr/signal.h> // Header file for use define vector interrupt

#include <avr/delay.h> // For used _delay_ms function #define F_OSC 16000000 // Constant for Crystal frequency in Hz #define 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); // enable interrupts sei();

} //-------------------------------------------------------// //----------- Function for send 1 character -------------// //-------------------------------------------------------// void uart_putc(unsigned char c) { // Wait for transmit Ready while(!(UCSRA & (1 << UDRE))); UDR = c; // send character } //-------------------------------------------------------// //-------------- Function for send string ---------------// //-------------------------------------------------------// void uart_puts(char *s) { // Loop for send string while (*s) { // Send character uart_putc(*s); 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') { // Toggle LED PORTB ^= 0x01; if(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 } } } //------------------------------------------------------// //-------------- Function for send string --------------// //------------------------------------------------------// void main() { // PB0 as output for LED DDRB |= 0x01; uart_init(9600); // Initial UART uart_puts("MCU Ready!\r\n");// Send message to terminal program while(1); // Break program }

40

The Prototype Electronics

ขั้นตอน​การ​ทดสอบ

(1) เปิด โปรแกรม X-CTU แล้ว เลือก แถบ Terminal เลือก ใช้ โปรแกรม

เทอร์ มินอล ของ X-CTU เพื่อ แสดงผล การ ท�างาน ของ ฝง คอมพิวเตอร์ (2) จ่ายไฟ ให้ กับ ไมโคร คอนโทรลเลอร์ หรือ การ รี เซต เริ่มต้นการ ท�างาน หลังจากนั้น ที่ หน้าต่าง โปรแกรม เทอร์ มินอล ของ X-CTU จะ ได้รับ ข้อความ MCU Ready! ที่ ส่ง มาจาก ไมโคร คอนโทรลเลอร์ เพื่อ แสดง ความ พร้อม ใน การ ท�างาน ตาม รูป ที่ 6 โดย ใน ขณะนี้ LED จะ ดับ เป็น สภาวะ เริ่มต้น (3) ทดสอบ กดปุม a ที่ คีย์ บอร์ด 1 ครั้ง และ สังเกต ว่า LED จะ ติด สว่าง (ถูก กลับ สถานะ ใน แบบ ท็อกเกิล) พร้อมกั นั้น ที่ หน้าต่าง โปรแกรม เทอร์ มินอล ของ X-CTU จะ ได้รับ ข้อความ ล่าสุด เป็น “Status: ON” ตาม รูป ที่ 7 (4) ทดสอบ กด คีย์ a หลายๆ ครั้ง จะ พบ ว่า ทุกครั้ง ที่ มี การ กด คีย์ ที่ ฝ   ง ค อมพิ ว เตอร์ LED จะ ก ลั บ ส ถานะ ก าร ติ ด ดั บ พร้ อ มกั น นั้ น ไ มโคร คอนโทรลเลอร์ ATmega16 ส่งข้อความ แสดง สถานะ ล่าสุด กลับ มา แสดง ยัง หน้าต่าง เทอร์ มินอล ของ X-CTU

สรุปผล​การ​ปฏิบัติ​ภารกิจ ใน ภารกิจ นี้ เป็นการ ทดสอบ การ สื่อสาร ข้อมูล อย่าง ง่ายๆ เพื่อ ให้คุณ ผู้อ่าน ได้ เห็น แนวทาง การ ก�าหนด คุณสมบัติ การ ท�างาน เพื่อ ใช้ ใน การ สื่อสาร กัน ระหว่าง กัน ของ โมดูล XBee-PRO คุณ ผู้อ่าน สามารถ ใช้งาน โมดูล XBee-PRO ร่วมกับ ไมโคร คอนโทรลเลอร์ ตระกูล ใดๆ ก็ได้ต าม ความ ถนัด ใน การ พัฒนา โปรแกรม โดย ไม่จ�ากัด อยู่ที่ ไมโคร คอนโทรลเลอร์ AVR เบอร์ ATmega16 เท่านั้นค รับ นอกจากนั้น ภาษา ที่ ใช้ ใน การ พัฒนา โปรแกรม ก็ สามารถ เลือก ได้ ตาม ความ ถนัด เช่น เดียวกัน ไม่ว่า จะ เป็น แอสเซมบลี, เบสิก หรือ C ส่วน การ พัฒนา โปรแกรม เชื่อม ต่อ ทาง ฝง คอมพิวเตอร์ ใน กรณีที่ ไม่ ต้องการ ให้ แสดง เพียง ข้อความ อย่างเดียว ก็ สามารถ พัฒนา โปรแกรม ประเภท GUI (Graphic User Interface) ขึ้น มา รับ ส่ง ข้อมูล ผ่าน พอร์ต อนุกรม แทน การ ใช้ โปรแกรม เทอร์ มินอล ก็ได้ โดย ใช้ ซอฟต์แวร์ ใน กลุ่ม Visual Studio จาก ไมโคร ซอฟต์ ( VB, VC#, VC++เป็นต้น) โดย ใน ส่วน นี้ ก็ พอ มี หนังสือ แนะน�า การ พัฒนา โปรแกรม จ�าหน่าย ใน ร้านหนังสือ

ภารกิจ​ตอเนื่อง จาก ตัวอย่างที้ น�าเสนอ ใน ตอนนี้ สามารถ น�าไป ต่อ ยอด เพื่อ ใช้งาน จริง ได้ โดย แทนที่จะ ควบคุม การ ติด ดับ ของ LED ธรรมดาๆ หาก ต้องการ ควบคุม การ ปิด เปิด หลอดไฟ ใน บ้าน หรือ ไฟ สนามหญ้า หน้าบ้าน ที่ ไกลออกไป ก็ สามารถ ท�าการ ปรับ วงจร ทาง ฝง ไมโคร คอนโทรลเลอร์ โดย น�า สัญญาณ ไป ต่อ เข้ากับ วงจร ขับ รีเลย์ เพื่อ ใช้งาน รีเลย์ ใน การ ตัดต่อ การ ท�างาน ของ อุปกรณ์ ไฟฟา 220Vac อีก ทอด หนึ่ง ดัง ใน รูป ที่ 8 ทั้ง ยัง สามารถ เพิ่มจ�านวน ช่อง ใน การ ควบคุ ม ได้ ด้วย การ แก้ไข โปรแกรม เพียง เล็กน้อย

www.tpemagazine.com

XBee-Pro Article (Thai) Chapter2  

มาต่อกันด้วยตัวอย่างการสื่อสารข้อมูลไร้สายผ่านโมดูล XBee-PRO ระหว่าง ATmega16 ไมโครฯ AVR ตัวเก่งกับ คอมพิวเตอร์ เพื่อสร้างระบบควบคุมจาก คอมพ...

Read more
Read more
Similar to
Popular now
Just for you