프로젝트

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

고장난 스탠드를 이용하여 DIY 스탠드 만들기

2014-12-24 10:50:35

개요 및 부품 목록

가전제품을 사용하다 보면 고장나는 일이 있습니다. 가끔 가전제품이 고장나면 수리를 맡기던가 수리가 불가능하면 그냥 버리게 됩니다.



이런 고장난 가전제품를 재활용 하여 자신이 원하는 기능이 추가된 다른 무언가를 만들어 보는건 어떠세요? 이번 프로젝트와 같이 기능이 추가된 스탠드를 만든다거나, 멋진 액자를 만드는 등 다양하게 이용할 수 있을것 같습니다.

이번 프로젝트에서는 고장난 스탠드를 분해하여, 그 안에 MPU6050조도 센서, LED를 장착하고, MPU6050과 조도 센서를 이용하여 스탠드 고개 각도에 따라 LED On/Off를 제어하고, 주변의 밝기에 따라 LED의 밝기를 조절하는 스탠드를 만들어 보겠습니다.


미리보기 동영상





시작 전 개념 이해하기

 - GY-521 MPU 6050모듈 사용하기
 - 포토 레지스터로 LED 밝기 조절하기

부품 목록

NO 부품명 수량 상세설명
1 오렌지 보드 1 아두이노
2 포토 레지스터 1 조도센서
3 GY521 MPU 6050 1 3축 자이로 + 가속도 센서
4 TP4056 1 충전 모듈
5 백색 LED 6 고휘도 LED
6 저항 10kΩ 1 저항
7 브레드보드 2 브레드 보드
8 점퍼케이블  24 점퍼 케이블

부품명 오렌지보드 포토 레지스터 MPU6050 TP4056
파트
부품명 백색 LED 저항 10K Ohm 브레드 보드 점퍼 케이블
파트

하드웨어 Making 및 소프트웨어 Coding

회로도




브레드보드 레이아웃



스탠드 연결

스위치가 있는 부분을 떼어내고 그 자리에 충전 회로를 넣고 글루건을 발라주어 위치를 고정 시켜 줍니다.



스탠드 머리 부분 빈공간에 아두이노를 넣고 밑의 사진과 같이 브레드보드 2개를 붙여 줍니다.

그 후 아두이노 보드에 스탠드 본체에 붙인 충전단자에서 나온 +선은 VIN에 -선은 GND에 연결해 줍니다.

추가로 저는 LED를 한줄로 6개 나열 해서 연결하였는데, LED 숫자를 늘리거나 배치를 바꾸셔서 해보시는 것도 좋은 방법입니다.



마지막으로 조도센서를 스탠드 위로 연결한 다음 붙이면 끝입니다.


소프트웨어 코딩

* 이 소스는 스케치를 사용하여 작성 / 업로드 합니다. 스케치에 대한 사용법은 링크를 참고하시기 바랍니다.
#include<Wire.h>

const int MPU=0x68;  //MPU 6050 의 I2C 기본 주소
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
int lightValue = 0;

int pinNum[] = {3, 5, 6, 9, 10, 11}; // LED와 연결된 핀 번호 설정

void setup(){
  Wire.begin();      //Wire 라이브러리 초기화
  Wire.beginTransmission(MPU); //MPU로 데이터 전송 시작
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     //MPU-6050 시작 모드로
  Wire.endTransmission(true); 

  Serial.begin(9600);
}

void loop(){
  Wire.beginTransmission(MPU);    //데이터 전송시작
  Wire.write(0x3B);               // register 0x3B (ACCEL_XOUT_H), 큐에 데이터 기록
  Wire.endTransmission(false);    //연결유지
  Wire.requestFrom(MPU,14,true);  //MPU에 데이터 요청

//데이터 한 바이트 씩 읽어서 반환
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) if(AcX < -2000){ // 스탠드 고개가 올라가면 조도 센서 값에 따라 LED의 밝기를 세팅해 줍니다. lightValue = map(analogRead(A0), 700, 50, 30, 255); } else if(AcX > 13000){ // 스탠드 고개가 내려가면 LED의 밝기를 0으로 세팅해 줍니다. lightValue = 0; } for(int i = 0; i <=6; i++){ // 위에서 세팅된 LED 밝기만큼 LED의 불을 켜줍니다. analogWrite(pinNum[i], lightValue); } delay(333); // LED의 밝기가 자주 변하지 않도록 일정 시간 딜레이를 줍니다. }

소프트웨어 설명

이번 프로젝트에서는 X축의 Gyro값만을 사용합니다. MPU6050에 대한 자세한 코드 내용은 GY-521 MPU 6050 모듈 사용하기를 참고하시기 바랍니다.

int pinNum[] = {3, 5, 6, 9, 10, 11};

LED와 연결된 아두이노 핀번호를 선언해 줍니다. 밝기 조절을 위해서 PWM을 이용해서 3, 5, 6, 9, 10, 11 번 핀을 사용했습니다.(연결은 위에 회로도나 브레드보드 레이아웃을 확인하세요)

  if(AcX < -2000){ // 스탠드 고개가 올라가면 조도 센서 값에 따라 LED의 밝기를 세팅해 줍니다.
    lightValue = map(analogRead(A0), 700, 50, 30, 255);
  }
  else if(AcX > 13000){ // 스탠드 고개가 내려가면 LED의 밝기를 0으로 세팅해 줍니다.
    lightValue = 0;
  }
   
  for(int i = 0; i <= 6; i++){ // 위에서 세팅된 LED 밝기만큼 LED의 불을 켜줍니다.
    analogWrite(pinNum[i], lightValue);
  }

스탠드 고개와 조도센서를 이용하여 LED를 제어하는 부분입니다. MPU6050에서 측정된 X축의 값이 -2000 이하이면 조도센서에서 받은 값을 30~255로 재분배하여 LED의 밝기를 세팅해 줍니다. X축의 값이 13000이상이 되면 LED의 밝기를 0으로 세팅해 줍니다.

그 후 for문을 사용하여 위에서 세팅한 밝기에 맞게 LED를 켜줍니다.

X축의 값 범위를 세팅할 때에는 스탠드 각도에 따른 MPU6050의 값을 확인하여 맞는 스탠드 각도를 확인한 후 위에 if문을 수정하시기 바랍니다.

(MPU6050의 측정값 확인은 GY-521 MPU6050 모듈 사용하기를 참고하세요)

판다마니아

아두이노, LED, 조도센서, MPU6050,