총 정리 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로 전송하고 다시 아두이노로 전송해 통신을 할 수 있었다.
취업 공고와 꿀팁을 살펴본 취준생 여러분
해당 블로그가 잘 운영되도록 좋아요 클릭해주시면 감사하겠습니다.
여러분의 좋아요가 가장 큰 힘이 됩니다.
'기타 > 전공지식 및 각종 레포트 자료' 카테고리의 다른 글
기초회로실험 기본장비 사용법 PART2 (0) | 2017.10.11 |
---|---|
기초회로 실험 레포트 PART1 기본 장비 사용법 (0) | 2017.10.11 |
PSpice 기본 사용법 알아보자. (1) | 2017.10.09 |
Do you know arduino? 2rd time how to set xbee? (0) | 2017.10.07 |
do you know arduino? 아두이노 스타트~ 오픈소스로 쉽게 사물인터넷 공부를 해보자 (1) | 2017.10.05 |