프로젝트

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

키를 재봅시다.

2014-09-22 18:12:29

개요

어렸을 때, 집에서 벽에다 키를 표시하면서 재거나 줄자로 재던 경험이 있을 것입니다.
몸무게는 집에서도 쉽게 잴 수 있지만 키는 한번에 간단하게 재기 힘듭니다.

출처 : torrent.zak.kr / www.kokran.es.kr

집에서도 일일히 자로 재지않고 신체검사 시간 때 처럼 가만히 서있으면 키를 잴 수 있게 만든다면 어떨까요?
본문에서는 초음파 센서를 이용해서 키를 재고 LCD에 표시해보겠습니다.


미리보기 동영상

시작 전 개념이해하기

부품목록

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

하드웨어 Making

회로도



브레드 보드 레이아웃

소프트웨어 Coding

다음 스케치를 아두이노에 업로드 하세요.

/* 본 스케치는 여러 커뮤니티를 참고하여 
 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); //키 출력 }

소프트웨어 및 하드웨어 설명

1. 하드웨어 설명

버튼을 누르면 키를 재고 LCD에 표시합니다. 다시 버튼을 누르면 키를 재는 것을 멈추게 합니다.
2M가 되는 부분에 초음파센서를 설치하고 사람과 초음파 센서 사이의 거리를 2M에서 뺍니다.

2. 소프트웨어 설명


 char changeString[3];                    
 dtostrf(distance, 3, 2, changeString);   //float -> char
 lcdString = (String)changeString;        //char -> string
 lcdString += "cm";
 lcd.print(lcdString);                    //키 출력

lcd.print 함수은 String만 가능 합니다. float을 String으로 바꾸기 위해서는 중간에 char로 변경한 후 다시 String으로 바꿔야 합니다.

kocoafab

LCD, 푸시버튼, 초음파 센서, 키 측정, float to String
profile

김수현 2016-02-25 00:04:31

참고하겠습니다. 실용적이네요~~!

profile

리아 2019-10-26 16:36:10

완성 후 벽에 높이 상관 없이 붙이기만 하면 되나요?