코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-22 18:12:29
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 우노 | 1 | |
2 | 브레드 보드 | 1 | |
3 | 5V 배터리 | 1 | USB 전원 어댑터를 사용하셔도 됩니다. |
4 | 전원플러그 | 1 | 배터리 사용시 필요한 부품입니다. |
5 | 푸시버튼 | 1 | |
6 | LCD | 1 | LCD-00709을 사용했습니다. 다른 LCD를 사용할 경우 연결방법이 다를 수 있습니다. |
7 | Potentiometer | 1 | |
8 | 점퍼 케이블 | 25 | |
9 | 초음파 센서 | 1 | |
10 | 하드보드지 | 1 | 벽에 붙일 때 사용하는 것으로 대체하셔도 됩니다. |
11 | 10k ohm 저항 | 1 |
부품명 | 아두이노 우노 | 브레드 보드 | 푸시버튼 | Potentiometer | LCD |
사진 | X1 | X1 | X1 | X1 | X1 |
부품명 | 5V 배터리 | 전원 플러그 | 점퍼 케이블 | 초음파 센서 |
사진 | X1 | X1 | X1 | X1 |
/* 본 스케치는 여러 커뮤니티를 참고하여
kocoafab에서 작성하였습니다.
누구나 무료로 사용하실 수 있습니다.*/
#include <LiquidCrystal.h>
#define Button 9 //버튼과 연결된 9번 핀
#define EchoPin 8 //초음파 센서 Echo 핀과 연결된 8번 핀
#define TrigPin 7 //초음파 센서 Trig 핀과 연결된 7번 핀
int oneTimeFlag;
LiquidCrystal lcd(12,11,5,4,3,2); //RS 핀, E핀, 데이터 핀 4개
String lcdString = "stop"; //맨 처음 stop이라는 글자 출력
float duration, distance;
void setup() {
pinMode(Button, OUTPUT);
digitalWrite(Button, HIGH);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("stop");
pinMode(Button, INPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
Serial.begin(9600);
}
void loop() {
if(digitalRead(Button) == LOW) { //버튼이 눌리지 않았을 경우
if(oneTimeFlag==0){ //방금 전에 버튼이 눌렸다면
oneTimeFlag = 1; //버튼 바로 누름 전 상태 표시
if(lcdString.equals("stop")) { //LCD에 stop이라고 출력되어 있으면
lcd.clear();
lcd.setCursor(0,0); //커서 0,0에 세팅
lcd.print("----------------");
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
measure(); //키 측정 함수 호출
} else {
lcd.clear();
lcd.setCursor(0,0); //키 측정 하지않을 경우(방금 전 버튼을 누르지 않았을 떄)
lcdString = "stop"; //stop 출력
lcd.print(lcdString);
}
}
}else {
oneTimeFlag = 0;
}
}
//키 측정 함수
void measure() {
//초음파 보내기
digitalWrite(TrigPin, HIGH);
delay(10);
digitalWrite(TrigPin, LOW);
duration = pulseIn(EchoPin, HIGH); //echo 핀이 HIGH한 시간 확인
distance = ((float)(340 * duration) / 10000) / 2; // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산
Serial.println(distance);
distance = 200.0 - distance; //센서에 위치로 부터 반대로 빼기
Serial.println(distance);
char changeString[3];
dtostrf(distance, 3, 2, changeString); //float -> char
lcdString = (String)changeString; //char -> string
lcdString += "cm";
lcd.print(lcdString); //키 출력
}
char changeString[3]; dtostrf(distance, 3, 2, changeString); //float -> char lcdString = (String)changeString; //char -> string lcdString += "cm"; lcd.print(lcdString); //키 출력
kocoafab