코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-24 10:33:35
아두이노를 사용할려면 프로그래밍은 매우 중요한 요소입니다. 부품끼리 다 연결하여도 프로그래밍을 하지 않으면 그 작품은 동작을 하지 않게 됩니다.
이 프로그래밍 때문에 많은 사람들이 아두이노를 접하기 힘들어 하고, 또 아두이노를 공부하시는 분 중에서도 프로그래밍 때문에 고민 해보신 분이 많을 겁니다.
이러한 문제를 해결하기 위해 프로그래밍을 간단하게 만들어 주거나, 코딩없이 바로 아두이노를 사용하게 하는 여러가지 제품들이 나오고 있습니다.
참고 : KocoaFab Blog
이 컨텐츠에서는 프로그래밍을 몰라도 아두이노에 이미 제작된 파일을 업로드만 하면 원하는 곳에 자신이 원하는 부품을 연결하여 안드로이드 어플을 통해서 그 부품을 작동 할 수 있게 해보겠습니다.
(블루투스 모듈 연결만 하면 나머지 핀에 LED, Piezo, Servo, Sensor, 초음파 거리 센서 를 마음대로 연결하고 따로 프로그래밍을 통하지 않고 안드로이드에서 해당 부품을 사용해 볼 수 있습니다. 스케치 업로드에 대한 내용은 링크를 참고하시면 됩니다.)
아두이노를 처음 사용해 보시는 분들이라도 스케치를 받아서 업로드만 할 수 있으면 간단한 센서나 LED 등을 사용할 수 있습니다.
기본 세팅
실제 사용한 사진
- 아두이노 Get Started(LED, Servo, Flex센서, 가변저항, 초음파, 피에조 등)
- 안드로이드와 아두이노 간의 블루투스 통신 기초
- 안드로이드와 아두이노 간의 블루투스 통신 응용
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지 보드 | 1 | 아두이노 호환보드 |
2 | 블루투스 모듈(HC-05) | 1 | 블루투스 |
3 | 브레드보드 | 1 | 브레드보드 |
4 | 점퍼케이블 | 00 | 점퍼케이블 수량은 연결할 부품에 따라 늘어나거나 줄어듭니다. |
부품명 | 오렌지보드 | 블루투스 모듈 | 브레드보드 | 점퍼케이블 |
파트 |
* 기본 세팅은 블루투스만 연결 해 주면 됩니다. 이후 자신이 원하는 부품을 연결하여 사용하시면 됩니다.
#include
#include
SoftwareSerial BTSerial(2,3);
byte buffer[1024];
byte data;
int bufferPosition;
int pin, pin1, val;
boolean state, inputMode;
Servo servo;
void setup(){
BTSerial.begin(9600);
Serial.begin(9600);
bufferPosition = 0;
}
void loop(){
if(BTSerial.available()){
data = BTSerial.read();
buffer[bufferPosition++] = data;
if(data == '\n'){
if(buffer[1] == 'A'){
pin = 14 + (buffer[2]-48);
}
else{
pin = ((buffer[1]-48)*10) + buffer[2]-48;
}
switch(buffer[0]){ // 입력받은 부품의 종류에 따른 동작을 정해준다.
case 's':
servoAct(pin);
break;
case 'l':
ledAct(pin);
break;
case 'i':
sensorAct(pin);
break;
case 'u':
pin1 = ((buffer[3]-48)*10) + buffer[4]-48;
ultraAct(pin, pin1);
break;
case 'p':
piezoAct(pin);
break;
}
bufferPosition = 0;
}
}
}
void ledAct(int pin){ // LED동작
pinMode(pin, OUTPUT);
boolean ana = checkAnalog(pin);
if(ana){
val = valAnalog(3);
analogWrite(pin, val);
}
else{
val = valDigital(3);
digitalWrite(pin, val);
}
}
void servoAct(int pin){ // Servo 동작
servo.attach(pin);
val = valAnalog(3);
servo.write(val);
}
void sensorAct(int pin){ // 센서 동작
pinMode(pin, INPUT);
val = analogRead(pin);
Serial.print("Sensor Value : ");
Serial.println(val);
BTSerial.println(val);
}
void ultraAct(int trig, int echo){ // 초음파 동작
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
float duration, distance;
digitalWrite(trig, HIGH);
delay(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
distance = ((float)(340 * duration) / 10000) / 2;
Serial.print(distance);
Serial.println("cm");
BTSerial.println(distance);
}
void piezoAct(int pin){ // Piezo 동작
int hz = valAnalog(6) * 10;
int time = valAnalog(3) * 100;
tone(pin, hz, time);
}
int valAnalog(int start){ // 아날로그 입력값으로 변경하는 함수
return (buffer[start]-48)*100 + (buffer[start+1]-48)*10 + buffer[start+2]-48;
}
int valDigital(int temp){ // 디지털 입력값으로 변경하는 함수
if(buffer[temp] - 48 > 0)
return 1;
else
return 0;
}
boolean checkAnalog(int pin){ // 연결된 핀이 아날로그입력이 되는지 확인하는 함수
if(pin == 3 || pin == 5 || pin ==6
|| pin == 9 || pin == 10 || pin == 11 || pin >= 14)
return 1;
else
return 0;
}
이 코드는 아두이노에 미리 각 부품의 내용을 넣어 둔 후, 안드로이드에서 전송한 데이터를 가지고 그에 맞는 부품을 실행 하는 코드입니다.
(해당 안드로이드 파일은 easyArduino.apk 를 받으셔서 사용하시면 됩니다.)
LED / Servo모터 / Sensor(입력핀 1개) / 초음파 거리 센서 / Piezo부저 이렇게 5개를 넣었습니다.(더 추가 하실 부품이 있으시면 case를 추가 시킨 후 그에 맞는 센서 동작을 넣어 주시면 됩니다.
switch(buffer[0]){ case 's': servoAct(pin); break; case 'l': ledAct(pin); break; case 'i': sensorAct(pin); break; case 'u': pin1 = ((buffer[3]-48)*10) + buffer[4]-48; ultraAct(pin, pin1); break; case 'p': piezoAct(pin); break; }
안드로이드에서 보내준 데이터에 제일 첫번째 값(data[0])은 해당 부품의 종류 입니다. 블루투스로 받은 데이터에 첫번째 값을 비교하여 부품의 종류를 구분하고 그 부품에 맞는 동작을 실행합니다.
추가 하실 부품이 있으시면 여기에 넣으시면 됩니다. 안드로이드 소스를 원하시는 분은 링크에서 받으시면 됩니다. 안드로이드 소스는 따로 내용에 넣지 않습니다.
if(buffer[1] == 'A'){ pin = 14 + (buffer[2]-48); } else{ pin = ((buffer[1]-48)*10) + buffer[2]-48; }
그다음 보내주는 데이터 2, 3번째 값(data[1], data[2])은 Pin 번호 입니다. 아날로그 핀은 14~19번으로도 인식 되므로 아날라고 핀이 들어오면 뒤에 값에 14를 더해 주면 됩니다.
(위에 소스 밑부분에 PWM, 아날로그 / 디지털 핀 구별 하는 함수가 있습니다.)
4번째 값(배열에 data[3] 값) 부터는 해당 부품에 따라 값의 종류가 다릅니다. 밑의 흐름도를 보시고 들어오는 값을 확인하세요.
이 컨텐츠에서 제작한 프로젝트의 흐름도 입니다. 우선 제일 처음화면에서 아무 버튼이나 누르면 Pin 번호를 누르는 화면이 나옵니다.
그다음 선택을 누르면 LED / Servo인 경운 전송할 값을 입력하는 창이 나오고, Sensor일 경우는 바로 기본화면으로 돌아가고, 초음파 일경우에는 Pin번호 확인창이 하나 더 뜹니다.(초음파는 Trig와 Echo 2개가 필요함으로) 마지막 Piezo는 Hz값과 부저 시간을 입력 받습니다.
작동할 부품의 명령들을 다 입력 하셧으면 전송 버튼을 누르게 되면 아두이노로 전송되면서 센서인 경우는 센서의 값을 받아 밑에 표시해 줍니다.(Value : XXX)
판다마니아