프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

Flex센서를 사용해서 원격으로 파워포인트의 슬라이드를 움직여 봅시다.

2014-09-12 12:33:25

개요

학교 과제나 회의, 발표 등 여러가지 이유로 파워포인트를 사용해 보셨을 겁니다.

그러나 파워포인트는 발표 중 슬라이드를 넘기기 위해 이동을 하거나 다른 한명이 같이 나가야 하는데요,

출처 : 중앙일보(2011. 10. 24)


이러한 불편를 해소하기 위해 파워포인트 리모컨과 같은 제품이 있습니다.

리모컨을 사용하여 원격으로 슬라이드를 앞으로 넘기거나 뒤로 돌리는 것을 할 수 있습니다.

출처 : Aliexpress.com


이번 프로젝트는 파워포인트 리모컨 대신 Flex센서와 블루투스 모듈을 통해 원격으로 파워포인트를 제어해 봅시다.

동영상 미리 보기





시작전 개념 이해하기

 - 안드로이드와 아두이노 간의 블루투스 통신 기초
 - 안드로이드와 아두이노 간의 블루투스 통신 응용
 - flex센서 사용하기

부품 목록

NO 부품명 수량 상세설명
1 아두이노 플로라(Flora) 1 아두이노
2 블루투스 모듈(HC-05) 1 블루투스
3 Flex센서 1 Flex센서
4 3.7V 리튬 이온 폴리머 전지 1 리튬전지
5 점퍼케이블 10 점퍼케이블
6 10KΩ 저항 2 저항

부품명 아두이노 플로라 블루투스 모듈 Flex센서 3.7V 리튬전지 점퍼케이블 10KΩ
파 트


하드웨어 Making

회로도

브레드보드 레이아웃


제작



장갑의 손등 부분에 Flora 보드를 고정 시키고, 검지와 중지에 각각 Flex센서를 붙입니다.
(이 컨텐츠에서는 테이프로 감아서 고정 시켰지만, 고정시킬 다른 방법이 있으시면 그 방법을 쓰시기 바랍니다. 테이프로 둘둘 감았을 경우 Flex센서의 값이 정확하게 측정이 되긴 하지만 손가락을 구부리기가 힘들어서 사용하는데 불편합니다.)

Flora 보드에 리튬 배터리와 블루투스 모듈을 연결 하시면 됩니다.
(보드와 각 부품을 연결시 선을 여유있게 하셔야 손가락을 구부릴 때 선의 길이가 맞습니다.)

소프트웨어 Coding

아두이노 소스

 * 본 소스는 스케치를 사용하여 작성 / 업로드 합니다. 스케치에 대한 사용법은 링크를 참고하시기 바랍니다.
 * 밑의 프로세싱 소스를 작성하기 전에 아두이노 소스를 작성, 업로드 하시기 바랍니다.
 * 아두이노에 소스를 업로드 시킨 후, 아두이노와 USB의 연결을 끊으시고 프로세싱 소스를 작성, 실행 하셔도 됩니다.
 * 아두이노 소스를 수정 했을 경우, 프로세싱 소스도 수정해야 합니다. 수정 하실 경우 밑의 설명을 읽고 수정하시기 바랍니다.
#include <SoftwareSerial.h>
  
  SoftwareSerial BTSerial(0, 1); // SoftwareSerial(RX, TX)
  byte buffer[1024]; // 데이터를 수신 받을 버퍼
  int bufferPosition; // 버퍼에 데이타를 저장할 때 기록할 위치
  const int flexPin = 10;  // 검지 손가락 Flex센서와 연결된 Pin
  const int flexPin1 = 9; // 중지 손가락 Flex센서와 연결된 Pin
  
void setup(){
  BTSerial.begin(9600); 
  Serial.begin(9600); 
   
  pinMode(flexPin, INPUT);     
  pinMode(flexPin1, INPUT);
}

void loop(){
  
  int flexVal = analogRead(flexPin);
  int flexVal1 = analogRead(flexPin1);
// 각각의 손가락에 연결된 Flex센서의 값을 받아서 저장합니다. if (flexVal < 850) { // 검지 손가락을 구부렸을 경우 '1'을 보낸다. BTSerial.write('1'); BTSerial.write('\n'); delay(1000); } if (flexVal1 < 850) { // 중지 손가락을 구부렸을 경우 '2'를 보낸다. BTSerial.write('2'); BTSerial.write('\n'); delay(1000); } else{ delay(1000); } }

프로세싱 소스

 * 밑의 소스는 프로세싱으로 작성 / 업로드 합니다. 프로세싱에 대한 사용법은 링크를 참고하시기 바랍니다.
import processing.serial.*;
import java.awt.*;
import java.awt.event.KeyEvent;

Serial myPort;

boolean temp;

void setup(){
  println(Serial.list());
  println(Serial.list()[0]);
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  
  myPort.bufferUntil('\n');
  
}

void draw(){
  serialEvent(myPort);
}

void serialEvent(Serial myPort){

  String inputString = myPort.readStringUntil('\n');
  try{
    inputString = trim(inputString);
    RobotTest(inputString);
  }catch(NullPointerException ne){
    inputString = "0";
  }
  // 블루투스 통신을 통해 받아온 데이터를 받습니다.
}

void RobotTest(String temp) {
  try{
    Robot robot = new Robot();

     robot.setAutoDelay(1000);
     
     if(temp.equals("1")){
     robot.keyPress(KeyEvent.VK_RIGHT);
     }
// '1'이 들어왔을 경우 키보드 오른쪽 버튼을 누릅니다. else if(temp.equals("2")){ robot.keyPress(KeyEvent.VK_LEFT); }
// '2'가 들어왔을 경우 키보드 왼쪽 버튼을 누릅니다. }catch(Exception e){ } }


컴퓨터에서 블루투스 연결 방법

 * 블루투스를 연결 하기위해서는 컴퓨터에서 블루투스를 지원해야 합니다.(이 컨텐츠는 블루투스가 지원되는 노트북에서 하였습니다.)
 * 밑에서 한 과정들은 윈도우 7 운영체제에서 실행하였습니다.


화면 맨 오른쪽 밑에 시계 옆에 화살표 버튼을 누르시면 밑의 사진과 같이 블루투스가 있습니다. 


이것을 실행 하면 밑의 창이 나오는데 빈 공간에 마우스 오른쪽 버튼을 누르면 장치 추가 메뉴가 있습니다.(빨간 네모)


장치 추가 메뉴를 선택하면 현재 컴퓨터와 연결된 장치들을 검색하여 보여주는데 그중 HC-05(사용한 블루투스 모듈명)을 선택하시고 다음으로 넘어갑니다.

다음 화면에서 가운데에 있는 장치의 연결 코드 입력을 선택 합니다.


그러면 다음 화면에 장치의 연결 코드를 입력하십시오 라고 나오는데 '1234'를 입력합니다.(초기값은 대부분 1234나 0000 중에 하나입니다.)


맞는 연결 코드를 입력하셧으면 장치 연결이 완료 됩니다.


제어판 -> 하드웨어 및 소리 -> 장치 및 프린터에 가셔도 위와 같은 방법으로 하면 빨간 네모 처럼 블루투스 장치가 나오게 됩니다.
(위와 마찬가지로 빈 공간에 마우스 오른쪽 버튼으로 추가 가능합니다.)


그 후 위의 빨간 네모에 있는 장치에 마우스 오른쪽 버튼을 누르신 후 속성을 누르시면, 2번째 탭(하드웨어)에 연결된 블루투스 포트 번호가 나옵니다.
이 포트를 사용하여 블루투스 통신을 하게 됩니다.


소프트웨어 설명


 아두이노
  * 스케치를 사용하여 작성한 소스입니다. 
  if (flexVal < 850) {            
     digitalWrite(ledPin, HIGH);  
     BTSerial.write('1');
     BTSerial.write('\n');
     delay(1000);
  } 
  
    if (flexVal1 < 850) {            
     digitalWrite(ledPin, HIGH);  
     BTSerial.write('2');
     BTSerial.write('\n');
     delay(1000);
  } 

아두이노 소스는 간단합니다. Flex센서 2개에서 각각 데이터 값을 받아오고, 그 받아온 데이터값이 일정값 이하이면(손가락이 구부려졌을 경우) 각각의 경우의 맞는 값을 블루투스 통신을 이용해 넘겨 줍니다.

* 이 컨텐츠에서 사용한 Flex센서 값의 범위(사용 저항 10kΩ) 에 맞게 850 이하로 손가락의 구부림을 확인 했습니다. 이 컨텐츠를 보시고 하시는 분은 자신이 사용하는 Flex센서의 값에 맞게 범위를 조절해 주십시오.

블루투스 통신으로 검지 손가락이 구부려 졌을 경우 '1'을 중지 손가락이 구부려 졌을 경우 '2'를 보냈습니다.


 프로세싱
  * 프로세싱을 상용하여 작성한 소스입니다.
void setup(){
  println(Serial.list());
  println(Serial.list()[0]);
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  
  myPort.bufferUntil('\n');
}
프로세싱을 실행 하게 되면 밑의 사진과 같이 컴퓨터와 연결된 포트 번호를 모두 출력하고 그 다음 연결 할 포트의 번호를 출력합니다.

위의 블루투스 연결과정을 보시고 맞는 포트번호를 찾아 Serial.list()[x] 의 x 부분을 수정하시면 됩니다.(맨 처음부터 0, 1, 2 ...)
(밑에서 나온 사진에서 블루투스가 연결된 포트가 9번이므로 Serial.list()[1] 을 하면 됩니다.)


  String inputString = myPort.readStringUntil('\n');
  try{
    inputString = trim(inputString);
    RobotTest(inputString);
  }catch(NullPointerException ne){
    inputString = "0";
  }
String inputString 에다가 블루투스를 통해 들어온 데이터를 받은 후 받은 데이터의 공백을 제거한 뒤, RobotTest(String) 함수를 실행합니다.

void RobotTest(String temp) {
  try{
    Robot robot = new Robot();

     robot.setAutoDelay(1000);
     
     if(temp.equals("1")){
     robot.keyPress(KeyEvent.VK_RIGHT);
     }
     else if(temp.equals("2")){
       robot.keyPress(KeyEvent.VK_LEFT);
     }
  }catch(Exception e){
    
  }
RobotTest() 함수는 들어온 String 값이 "1" 이나 "2"일 경우 키보드 오른쪽 버튼이나, 왼쪽 버튼을 누르게 합니다.

(파워포인트 슬라이드 쇼에서 오른쪽 버튼을 누르게 되면 다음 슬라이드로, 왼쪽 버튼을 누르게 되면 전 슬라이드로 넘어갑니다.)


 * 사용방법은 프로세싱을 실행 하여 블루투스를 연결하고, 파워포인트를 실행하여 슬라이드 쇼를 실행 하면 Flex센서 값에 따라 슬라이드 조정이 됩니다.



판다마니아

아두이노, 프로세싱, Flex센서, 블루투스, 통신, Flora