코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-12-24 10:50:35
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 | 브레드 보드 | 점퍼 케이블 |
파트 |
스위치가 있는 부분을 떼어내고 그 자리에 충전 회로를 넣고 글루건을 발라주어 위치를 고정 시켜 줍니다.
스탠드 머리 부분 빈공간에 아두이노를 넣고 밑의 사진과 같이 브레드보드 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의 밝기가 자주 변하지 않도록 일정 시간 딜레이를 줍니다.
}
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 모듈 사용하기를 참고하세요)
판다마니아