4
The Prototype Electronics 37 XBee-PRO ฝูงผึ้งสื่อสารไรสาย 2.4GHz สําหรับระบบสมองกลฝงตัว ตอนที่ 2 Proto Knowledge Module by : Noomnamon มาตอกันดวยตัวอยางการสื่อสารขอมูลไรสายผานโมดูล 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

XBee-Pro Article (Thai) Chapter2

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: XBee-Pro Article (Thai) Chapter2

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

Page 2: XBee-Pro Article (Thai) Chapter2

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

Page 3: XBee-Pro Article (Thai) Chapter2

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 ทาง ฝง ไมโคร คอนโทรลเลอร์ เพื่อ ใช้ ควบคุม หลอดไฟ หรือ เครื่องใช้ ไฟฟา ที่ ใช้ ไฟ บ้าน

Page 4: XBee-Pro Article (Thai) Chapter2

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