총 정리 xbee, arduino, pc를 통해 통신 하는 과정



최종적으로 연결한 상태


1 ~ 2. Purpose


 설계 목표 :

먼저 우리는 Arduino, XBee, PC를 사용하여 데이터 통신을 할 수 있다.

데이터 플로우와 Arduino, XBee의 통신 과정을 이해해야한다.

통신 과정에서 데이터가 저장되는 레지스터를 설정하여 데이터의 흐름을 자세히 보아야 한다.

받는 공간에 정보에 알맞게 전송 할 때 원하는 정보로 변환 할 줄 알아야 한다.



3. Project contents


 과제 제목 :


Proj #3. pc  Arduino - Xbee(1) - Xbee(2) - Arduino  Pc



 과제 내용 :


using PC(1), We input the character(a,b,c)

Uno(1) send Character(A,B,C) to Xbee(1)

Xbee(1) transmit message by wireless communication to Xbee(2)

Xbee(2) receive message, and send Uno(2)

Uno(2) modify character(A,B,C) and send.

PC(2) should print character(a,b,c)

We have to know dataflow about all precess and register adress






4. Components


PC(installed arduino-IDE)

Arduino Uno R3

Xbee pro digimesh 2.4

Xbee shield DFR0015

Usb A-B cable

Wires

5. About Hardware



 아두이노 우노 R3 (출처 : 스케치로 시작하는 아두이노 프로그래밍)



아두이노 도면 (출처 : http://www.arduino.cc)

 Xbee shield(출처:www.dfrobot.com)


 
xbee pro digimesh 2.4(출처:www.arduino.cc)





 xbee pro digimesh 2.4 도면(출처:138.100.100.129/mrgroup/doku.php)




6. How to Connect

 Arduino xbee 사이 연결 하는 방법


기타 추가 설명 넣기

 project1, 2, 3




7.DATA FLOW








8. Coding






 arduino coding


#include <SoftwareSerial.h>

#include <EEPROM.h> //EEPROM 헤더파일 지정



SoftwareSerial Xbee(2,3); Rx,Tx //2,3번 핀을 Rx,Tx로 지정


int addr = 0;

char ch = 0;

char cch = 0;

String Message = "";


void setup()

{

Serial.begin(9600); // PC-Uno baud rate

Xbee.begin(9600); // Uno-Xbee baud rate

Serial.println("Ready to transmit");

}

void loop()

{

if(Serial.available()>0) // 입력을 변환 하고 Xbee로 전송에 대해.

{

delay(100);

while(Serial.available())

{

ch = Serial.read();

Message.concat(ch); //문자열 입력

}

if((ch>96)&&(ch<123)) // 아스키코드 96~123(알파벳소문자)으로 지정

{

Serial.print("PC input :");

Serial.print(ch);

EEPROM.write(addr,ch); //EEPROM에 저장( 주소, )

if(addr ==1023) addr=0; //EEPROM 용량 1023byte가 되면, 초기화

Serial.print("\n"); // 한줄 띄고

Serial.print("stored register Num : ");

Serial.println(addr); // EEPROM의 주소를 불러옴

cch = (EEPROM.read(addr))-32; // EEPROM의 주소의 값을 읽고 -32(아스키코드)를 해줌

Serial.println(cch); // 변환된 값을 출력

Xbee.print(cch); // 변환된 값을 Xbee에 보냄

ch = 0; // ch 값을 초기화

cch = 0;

addr++; // 주소를 +1씩 더해간다.

}

else // if문 외 값들에 대해

{

Serial.println(Message);

Xbee.print(Message); // 값을 출력

Serial.println("Sent, but No converted, No stored"); // xbee에 보냄


Message = "";

}

}

if(Xbee.available()) // Xbee로부터 받은 메시지에 대해

{

while(Xbee.available())

{

delay(100);

ch = Xbee.read();

Message.concat(ch); // 받은 메시지를 그대로 프린트


}

Serial.print(Message);

Message = "";

Serial.print("\n");

}

}







8. Result


 arduino simulation


아두이노를 통해 우리는 다른 아두이노로 정보를 전달 할 수 있었다. 소문자 a를 대문자A로 전송하는 과정을 수행 하였다. 그러나 아스키 코드의 범위를 전부 지정하게 되면 숫자 1에 대해서는 대문자가 없기 때문에 오류가 발생 하였다. 그래서 아스키코드에서 영문의 대소문자만을 전송 범위로 한정하였다. 결론적으로 소문자를 전송해 대문자 전송이 가능했고 pc 화면을 통해 확인 하였다.



usb로 신호를 주면 ATMEGA16U2가 먼저 그 신호를 받아 avr ATMEGA328 pin0에 신호를 보냅니다.ATMEGA328은 그 신호를 Sram에 저장하고 그 값을 출력 pin3에 보냅니다. 그리고 pin3 xbee Din에 들어갑니다.

Xbee 수신 - store register - ALU - store register - PC output print char


하드웨어 연결 및 인스톨과정 : 


9. bibliography & postscript


참고 문헌 : 재미삼아 아두이노 (아두이노 관한 함수), 스케치로 시작하는 아두이노 프로그래밍


후기 :

프로젝트1에서는 아두이노로 아스키코드를 플러스 1에서 출력하는 방법을 실험하였다. 직접적으로 아두이노로 변환하기 않더라도 아두이노 자체서에서 아스키 코드를 읽어내었다. 그러나 출제자의 의도와 달랐기 때문에 레지스터를 활용해 프로젝트2를 진행해 나갔다. 프로젝트2에서 처음에는 xctu를 활용해서 xbee를 활용하려 했으나 정보는 전달이 되는데 어디에 저장 됬는지는 알 수 없었다. 그래서 xctu를 사용하지 않고 아두이노에 xbee를 선을 통해 직접 연결 하였다. tx, rx를 교차시켜 정보를 보냈다. 그러나 xbee자체에 저장 공간이 없기 때문에 정보는 보냈으나 그 정보가 pc화면으로 직접 나타나지는 않았다. 그래서 정보를 받았는지를 확인하기 위해 command를 사용했고 +++를 사용하면 ok가 나오도록 하였다. 프로젝트3에서는 xbee간에 통신을 하고 서로 주고 받는 것을 하였다. 프로젝트의 목적 처럼 아두이노에서 아스키코드+1를 사용하여 다른 아두이노로 전송을 하였다. 이처럼 아두이노를 사용해 사용자가 원하는 공간에 정보를 저장하였다. 그리고 그 정보를 xbee를 통해 다른 xbee로 전송하고 다시 아두이노로 전송해 통신을 할 수 있었다.




취업 공고와 꿀팁을 살펴본 취준생 여러분 

해당 블로그가 잘 운영되도록 좋아요 클릭해주시면 감사하겠습니다.

여러분의 좋아요가 가장 큰 힘이 됩니다.



+ Recent posts