1. 2018 스마트디바이스지능통신 중간 고사(100)
Smart Device M2M
Date: 2018-04-18
1. 10 개의 Sensor 정보를 Server에 지속적으로 전달하기 위한 현실적인 방
법을 제안하라. 이 기능을 구현하기 위한 System 분해도를 구체적으로 제시
하시오. (20)
- 10개의 Sensor는 Arduino에 부착할 수 있으므로 1개의 Arduino만 사용; 이
Arduino에 무선(WiFi 혹은 Bluetooth) Module을 장착함
- WiFi로 연결한 경우는 직접 Internet을 통해 Server로 정보를 보내고,
Bluetooth인 경우는 Smartphone의 Internet 기능을 이용해 Server로 정보
를 보냄
- 10개의 Sensor 정보를 구분하기 위해 자체적인 Sensor 제어 문법을 정의
하고 전체 정보를 SW적으로 합하여 무선으로 정보 전송
2. Bluetooth를 지원하는 HC-05 Module과 Arduino Mega ADK를 연결하려
한다. (60)
1) HC-05와 Arduino의 HW 결선도(VCC, GND, TXD, RXD)를 그려라. (10)
2. 2) 1)과 같이 Arduino에 연결된 HC-05가 정상 동작하는지 확인하는 Arduino
Sketch Code를 제시하라. (10)
[기본 함수 사용]
수업 시간에 제시한 Code를 써도 정답 처리
[StringTok 사용]
#include <StringTok.h>
SoftwareSerial serialBth(11, 10);
void setup() {
Serial.begin(9600);
serialBth(115200);
}
void loop() {
StringTok stInput;
// Tx
stInput.inputSerial();
if (!stInput.isEmpty()) serialBth.print(stInput.toString());
// Rx
stInput.inputSerial(serialBth);
if (!stInput.isEmpty()) Serial.print(stInput.toString());
delay(1000);
3. }
3) 1)과 같이 연결된 Bluetooth를 통해 Sensor 정보를 무선으로 보내려 한다.
이러한 통신을 지원하기 위한 Arduino Sketch Code를 제시하라. Sensor 정보
를 얻는 함수는 double getSensor() {}로 가정한다. (20)
#include <StringTok.h>
SoftwareSerial serialBth(11, 10);
void setup() {
Serial.begin(9600);
serialBth(115200);
}
void loop() {
double sen = getSensor();
String sSen = String(sen, 5) + “ “;
Serial.print(sSen);
serialBth.print(sSen);
delay(1000);
}
4) Sensor 정보에 실린 불필요한 잡음을 최대한 제거하면서 Sensor 정보를
보내려 한다. 3)에 제시한 Code를 어떻게 수정해야 하나? (20)
#include <StringTok.h>
#define MAX_AVG (10)
SoftwareSerial serialBth(11, 10);
4. void setup() {
Serial.begin(9600);
serialBth(115200);
}
void loop() {
double sen = getSensorAvg(MAX_AVG);
String sSen = String(sen, 5) + “ “;
Serial.print(sSen);
serialBth.print(sSen);
delay(1000);
}
double getSensorAvg(int nAvg) {
double ans = 0.;
for (int i = 0; i < nAvg; i++) ans += getSensor();
return ans;
}
3. 아래 Arduino Code를 가독성, 협업, 유지 보수 등을 고려하여 수정한 새
로운 Code를 제시하라. 4곳 이상에 수정을 가해야 함. (20)
int a = 6;
int b[] = {31,28,31,30,31,30};
long c = 24, d;
void setup() {
Serial.println(“6개월 동안 시간 계
산”);
}
void loop() {
d = 0;
d = b[0] + b[1] + b[2] + b[3] +
b[4] + b[5];
Serial.begin(9600);
Serial.println(c*d);
delay(1000);
}
#define MAX_MONTH (6)
5. #define HOUR_PER_DAY (24)
#define SERIAL_BPS (9600)
#define DELAY_MS (1000);
void setup() {
Serial.begin(SERIAL_BPS);
Serial.println(“6개월 동안 시간 계산”);
}
void loop() {
static int nMonthDay[MAX_MONTH] = {31,28,31,30,31,30};
long nHour = getTotalHour(nMonthDay, MAX_MONTH);
Serial.println(nHour);
delay(DELAY_MS);
}
long getTotalHour(int nMonthDay[], int nMaxMonth) {
long nDay = 0;
for (int i = 0; i < nMaxMonth; i++) nDay += nMonthDay[i];
return nDay*HOUR_PER_DAY;
}