디지털시대의 디지털라이프

[코딩교육용자재2탄] Intel Genuino 101의 Gyro Sensor를 이용한 볼 컨트롤 입니다. 


코딩교육용자재 1탄으로 로봇팔(집게) 영상은 미리 보셨을 것입니다.   -- 보러가기 



이어서 2탄으로 Intel Genuino 101의 Gyro sensor를 이용한 Stabilizer를 진행하고 있습니다. 

Ball Stabilizer라고 하기엔 좀 그렇긴 하지만, 아래 동영상에 Stabilizer에대한 영상으로 보실 수 있습니다.

이 원리를 아주 조금만 응용하면 바로 적용이 가능하기 때문입니다.

 

제품 제작업체에서 동영상을 제공해 주셔서 이렇게 블로그로 올릴 수 있게 되었습니다.^^


 

지금 보시는 동영상은 샘플로 만들어진 제품을 Intel Genuino 101이 아닌 RC조종기로 테스트 하는 화면입니다. 



서보 모터 2개와 Wooden(MDF)를 이용해서 만들었습니다. 

서보 모터의 신호 선에 Genuino 101을 연결하고 자이로 센서의 값을 받아서 움직이게 하는 코딩만 올려주면 끝나는 아주 쉽기도 하지만 기계를 동작시킬 수 도 있는 재미있는 교육을 할 수 있습니다. 

 

민저 이 예제를 실행하기 위해서 준비한 것은 인텔의 제누이노 101입니다.

 

한국에서는 아직 생소한 Intel Genuino 101

아두이노, Arduino uno등은 아주 익숙하실 것입니다. 하지만, 제누이노 101은 아두이노와 같은 모양과 구조로 되어 있지만, 구성이 약간 다릅니다.

 

바로 Bluetooth 와  Accelerometer가 포함된 6축 Gyro Sensor를 내장되어 있기 때문입니다.

 

 

인텔 제누이노 101 특징.  


- Arduino로 할수 있는 것은 모두 할 수 있다.

- Gyro Sensor가 달려있다. (Arduino에 Gyro Sensor가 추가되면 많이 비싸다)

- Bluetooth가 기본 내장되어 있다. (역시 arduino에 Bluetooth 쉴드를  올리면 또 가격이 올라간다.

- 국내 정식으로 출시되는 제품도 5만원 이하로 구입할 수 있고 아두이노와 똑같은 구조와 성격이기 때문에 처음 아두이노 & 프로그래밍 & 사물인터넷을 배우고자 하는 사람들에게는 인텔의 Genuino 101이 훨씬 더 이득일 것이다.

나중에.... 나중에...... 또 다른 쉴드들을 올릴때도 똑같이 구성할 수 있기 때문이다.

 

 


하나는 Intel Genuino 101이며 하나는 Arduino UNO (호환제품)입니다.

한가지 의문점은 .... 왜 저 USB B 타입을 계속 고집하는 것인지 모르겠습니다. 요즘은 전부다 Micro USB 타입의 커넥터를 사용하고 있는데... 구형 프린터에서나 쓰는 저 USB 타입을 고수하는 이유는.... 혹시 아두이노 재단의 설립자도 보수적인 사람이 아닐까요? ㅋ

 

어쨌든...

 

Intel Quark SE가 포함된 Curie 모듈이 포함된 Genuino 101은 교육시장에서 더 좋은 호응을 얻을 수 있지 않을까 생각됩니다.

 

 

 

위 영상은 인텔 제누이노 101을 움직일때  움직이는 각도에 따라 서보모터가 동작하면서 같은 각도로 테이블이 기울어지는 영상입니다.

 

이것을 응용하여 재미있는 놀이도 만들 수 있습니다.


제누이노 101의 자이로센서를 이용한 미로찾기 놀이를 만들 수 있습니다.

 

 

===================================================================

#include "CurieIMU.h"

#include <Servo.h>
Servo servo1;  // 앞쪽 서보
Servo servo2;  // 왼쪽 서보
#define Servo1Pin 5 // 앞쪽 서보 모터 오렌지핀에 연결
#define Servo2Pin 6   // 왼쪽 서보 모터 오렌지핀에 연결 

float convertRawAcceleration(int aRaw) {
  float a = (aRaw * 2.0) / 32768.0;
  return a;
}

void Accelerometer(){
 int accX, accY, accZ;
 float ax, ay, az;

 CurieIMU.readAccelerometer(accX, accY, accZ);

 ax = convertRawAcceleration(accX)*100;
 ay = convertRawAcceleration(accY)*100;
 az = convertRawAcceleration(accZ)*100; 

 // 가속기 최소 최대 범위 제한 설정
 if(ax > 100) ax=100;
 if(ax < -100) ax=-100;
 if(ay > 100) ay=100;
 if(ay < -100) ay=-100;

 // 가속기 최대 최소값을 0~179 범위내로 변환
 accX = map(ax, -100, 100, 0, 179);
 accY = map(ay, -100, 100, 0, 179);

 servo1.write(accX); // 변환된 X 값 서보에 적용 동작
 servo2.write(accY); // 변환된 X 값 서보에 적용 동작

 Serial.print(accX);
 Serial.print(" / ");
 Serial.println(accY);
 delay(25);
}

void setup() {
    Serial.begin(9600); // 시리얼 초기화
    CurieIMU.begin(); // 가속기 초기화
    CurieIMU.setAccelerometerRange(2); // 가속기 범위 설정

    pinMode(Servo1Pin, OUTPUT); // 서버1 핀 출력설정
    pinMode(Servo2Pin, OUTPUT); // 서버2 핀 출력설정
 servo1.attach(Servo1Pin);  // 서버1 핀 연결설정
 servo2.attach(Servo2Pin);  // 서버2 핀 연결설정
}

void loop() {
 Accelerometer();
}

===================================================================

 

 

앞으로도 고급 MDF를 이용한 제품들을 계속 만들 예정입니다.

1탄으로 로봇팔.

2탄으로 Gyro Table.

3탄은 노코멘트입니다.^^

 

계속 제작중이며 6월초에 판매 예정입니다.