2016년 9월 30일 금요일

아두이노 설치 (2016.2.20)

드디어 아두이노 설치를 하는군요-_-...


일단 인터넷에 들어갑니다.

그리고 '아두이노 다운로드' 라고 치는데 꼭!!!!!!!!!!!! 영어로 쳐야합니다.
그리고 아두이노 다운로드를 합니다.
자,.. 여기 까지 잘~따라오셨죠???
실패할 경우에는 당근 제설치하면 되고, 추가로 알려드릴 것이 있어요!
혼자서 아두이노를 하고싶다면,
밑의 링크로 들어가셔서 모르는 것을 (영어로) 검색하시면 됩니다.

https://www.arduino.cc/

자 오늘은 여기까지~
부디 아두이노 설치 잘하시길바랍니다.^^

아두이노 초보자를 위한 강의 - LED 제어하기(2016.2.23)

안녕하세요~

오늘은 센서와 엑추에이터를 다룰려 했으나, 숙제가 많아서, 준비를 많이 못했어요. 대신, 가장 기초적인 엑추에이터인 LED 제어에 대한 프로그램을 알려드리겠습니다.



"와하핳하핳핳... 이름만 들어도 어려울 것 같고, 엑추에이터라니. 너무 단계를 뛰어 넘는건 아닌지?" 라고 생각하실 필요는 없어요. 어려운거 절대 아님니다.

엑추에이터는 신호를 받아, 동작하는 모든 것들을 말해요. 모터, 전등, 스위치 등이죠.

자! 엑추에이터 중 가장 쉬운 LED가 있는데요, 아마 사람들이 제일 많이 알고 있는 것일겁니다. 그 LED에 대한 제어를 위해, 아두이노 프로그램을 배워요. 그럼 예제를 볼까요?


#define LED 13                                         // LED connected to
                                                             // digital pin
void setup( )
{
    pinMode(LED, OUTPUT);                  // sets the digittal
                                                     // pin as output
}

void loop( )
{
   digitalwrite(LED, HlGH);                    // turns the LED on
   delay(1000);                                  // waits for a second
   digitalwrite(LED, LOW);                    // turns the LED off
   delay(1000);                                  //waits for a second
}

이 글을 보고있는 사람들이 제일 궁금해 하는 것은 아마 맨 위 문장일 것입니다.
'도대체 왜 LED옆에 왜 13을 붙였냐'가 문제일겁니다. LED앞에 define가 있는데, 이 뜻은 '정의를 내리다'라는 뜻입니다. 그래서 다른 LED들도 13입니다.

그러므로 LED는 13번 핀에(아두이노에 찾아보면 있어요^^) 꽃아야 합니다.

전부터 궁금한게 있었죠? 바로... pinMode!
이건, 입력핀과 출력핀을 구별해주는 역할을 하는 함수입니다.

이 함수는 많이 사용되니 알고 있어야하는 아주~아주~아주~아~주~중요한 것입니다.
자. 여러분은 이 생각도 했을 것입니다.

'괄호는 왜 비워났지? 쓰지도 않는데...'라는 생각. 이유는 함수안에 입력값이 있으면 이 값을 괄호안에 쓰기 때문입니다. setup, loop는 입력값이 없어서 비워놓은 거예요.

아두이노는 괄호를 아에 안 쓰고 그다음 반드시 써야하는 중괄호를 쓰면 중괄호 안에 있는게 '이 중괄호는 앞에있는 거랑 관련되구나.' 라고 생각해 버리기 때문에 에러가 납니다. 괄호는 짝을 맞춰 써야 해합니다.

digitalwrite는 뭐냐고요?
이름처럼 아두이노 디지털 핀에 on(=5v, HIGH), off(=Ov, LOW)값을 쓰는 함수입니다. 


오늘은 여기까지였습니다.



메이커페어 - 레이저로 감시하는 스마트 세이프

머리말
작년(2016)에 스마트 세이프로 메이커 페어에 나갔었어요.  사실 그렇게 인기가 있을 것같지는 않았는데..ㅎ 꽤 인기가 많았어요. 그래서 스마트 세이프로 메이커 페어에 나간건 잘 정한거라고 생각해요. 오늘 마침 작년 메이커 페어가 생각나서, 스마트 세이프 만드는 과정을 블로그로 정리할려고 해요.

내용

처음에는 레이저와 긴 삼색선을 납땜했어요.ㅋ

그다음엔 선을 하나씩 연결했어요.ㅠㅠ

이건 조도센서 선 연결...(여기까지만 해도1시간 작업)

레이저가 들어갈 구멍 드릴로 뚫기!

그리고 프레임을 가져와서..

레이저가 정확히 조도센서 방향으로 쏴지도록 잘 조절한후~~~

프레임을 각각의 위치에 맞게 끼워주면!!

이렇게~ 완성됩니다!



마무리

언뜻보기에는 쉬워보이겠지만.. 사실 이거 만드는데 몇주는 걸리는 사이즈예요. 사실 따져보자면 프레임 뽑거나 디자인하는 시간, 정보찾는 시간 같은거를 합하면 몇 주 걸리죠.
따라해보시는 것도 좋을 것 같네요.ㅎㅎ
그럼 오늘은 여기까지 였습니다!






스마트 금고 만들기

요즈음 글을 여러 이유로 못 쓰게 되서 7월쯤에서 끈겼네요. 오늘은 스마트 금고를 만들게요. 

작동은 어떤 사물이나 도둑같은게 가까이 오면 삐삐거리며 경고음을 냅니다. 밤에 금고걱정을 할 필요는 없겠죠^^(행복) 이런 편리한 스마트 금고를 만들 건데요. 


먼저 안에는 이렇게 되어있습니다. 지금 이 사진을 보고 선을 연결하라는 말이 아니라 그냥 안에만 보여주는 것입니다. 지금 조립하지 마세요~


완성되면 아래와 같은 모습이 되어요. 

                     



















2016년 9월 29일 목요일

똑똑한 지진 안전 알리미

발명 동기
얼마전 경주에서 발생한 지진으로 인해 많은 사람들이 놀랐을 겁니다. 지진은 갑작스럽게 발생하기 때문에, 사람들이 허둥지둥하다가, 사고를 당할 가능성이 많은 것 같습니다.


지진이 발생하면, 사람들에게 대피 요령 등을 알려주는 앱을 만들면 어떨까라는 생각에서 지진 안전 알리미를 발명하게 되었습니다.

디자인
지진 안전 알리미는 진동이 발생할 때, 진동값을 알려주는 진동센서와 진동값을 휴대폰에 전달해 주는 아두이노 및 블루투스로 구성되어 있습니다. 알리미 앱은 앱 인벤터를 이용해 구현하기로 하였습니다.



지진알리미는 다음그림과 같이 진도에 따른 대피요령을 알려줍니다.


작업 과정
작업 과정은 다음과 같습니다.

작업 과정 기록 영상(2016.8월 말부터 10월 초까지)

1. 재료준비
진동센서(SW-420), 블루투스(HC-06), 아두이노 우노, 가스센서(MQ-2), MDF 3T (3mm)

SW-420 진동센서는 지진의 진동을 감지합니다.
MQ-2 가스센서는 LPG가스, 부탄가스(i-butane), 프로판가스(propane), 메탄(methane) , 알콜(alcohol), 수소(hydrogen), 연기(smoke)를 감지합니다.
HC-06 블루투스 송수신기는 무선통신을 지원합니다.

2. 지진 및 가스 센서 장치 조립
보통 아두이노 코딩 방법은 센서별로 인터넷에 공개가 되어 있습니다. 이 소스코드를 이용해, 센서에서 값을 얻었습니다. 이 값은 블루투스 장치를 통해 스마트폰으로 전달해 줍니다.


3. 앱 개발
블루투스를 이용해, 센서 데이터를 스마트폰에 전달해 주기 위해, 앱 인벤터를 사용하였습니다. 다음은 앱인벤터로 코딩한 프로그램의 일부입니다.





블루투스 작업 방법은 한국과학창의재단의 앱인벤터 동영상을 참고하였어요. 여기에는 앱인벤터로 따라할 수 있는 좋은 예제들이 많이 있어요.


대피요령은 진동값에 따라 다음과 같이 조건문으로 처리하였습니다. 대피요령을 만들 때는 지진이 발생했을 때 상황을 인터넷에서 검색해 참고하였습니다.



대피위치는 메이커랜드가 진행되는 장소에서 지진이 발생했을 때 대피할 수 있는 위치를 네이버 지도에서 찾아, 알리미 앱에 코딩하였습니다.

원래 대피위치는 현재 내가 있는 위치에서 가장 가까운 대피소를 찾아서 보여주어야 합니다. 지금은 지진 발생 시 모든 대피 장소를 앱에 입력하는 것이 어려워, 아이디어 차원에서만 구현하였습니다. 지진이 발생할 때 대피할 수 있는 장소 정보를 나라에서 제공해 주면 좋겠습니다.

4완성된 모습
지진 안전 알리미는 다음과 같이 진동이 발생하면, 진도를 알려주고, 진도값에 따라 대피 요령을 알려줍니다. 지도와 연결해, 근처에 대피할 장소도 알려줍니다.






지진이 발생하면, 가스 누출이 되어, 화재가 나거나 사람이 다칠수도 있습니다. 그래서, 가스탐지기를 달아서, 가스 누출이 되었는 지를 알 수 있도록 하였습니다.


스마트 태양 에너지 추적 및 발전기

이 작품은 제가 어떤 대회에 제출하려고 만든 거예요. 대회에 제출하려면 여러가지 규정에 맞게 글도 써야 하고, 디자인도 해야 해요. 기존에 만든 제품과도 달라야 해요. 코드를 오픈하였으니 누구나 만들수 있을 겁니다. 하지만, 대회에 나갈때는 똑같이 만들면 안되요!^^ 어떻게 하였는 지 아래 글을 참고하세요^^

발명 동기
화석 에너지로 인해, 지구의 환경은 오염되고 있습니다. 우리가 살아가는 데 필요한 전기를 사용하기 위해서, 석유나 석탄을 이용해, 전기를 만들고 있습니다. 

화석 에너지에 비해, 태양 에너지는 환경 오염도 없고, 무한대입니다. 태양 에너지를 잘 이용하면 화석 에너지가 필요 없겠죠. 자연도 보호하고요.


하지만, 태양 에너지를 얻기 위해 사용하는 태양 전지는 그 효율이 그리 좋지 않다고 합니다. 기술자들의 말로는 14~22% 정도라네요(연합뉴스)...

현재 많은 태양 에너지 발전기가 나와 있지만, 태양이 태양 전지를 수직으로 비추고 있지 않을 때는 태양 전지 효율은 더 떨어진다고 합니다. 

스마트 태양 추적기를 만들어, 이런 문제를 해결하고, 더불어, 무선으로 태양 추적기의 상태를 휴대폰으로 확인해서, 문제가 있을 경우 바로 수리할 수 있게 하고 싶습니다. 

디자인
디자인은 태양을 따라 추적기가 회전할 수 있도록 큰 원판과 앞뒤로 움직이는 패널을 서로 연결하도록 하였습니다. 원판과 패널은 서보모터로 움직입니다.
태양과 태양전지가 수직인지 아닌지는 광센서를 이용하면 알 수 있습니다.
수직이 아니면, 수직이 아닌 정도를 계산해, 계산된 양만큼 서보모터를 움직입니다. 
현재 광센서의 값은 휴대폰으로 전송되도록, 블루투스를 이용하였습니다.

작업 과정
작업 과정은 다음과 같습니다.

작업 과정 기록 영상 (2016년 8월 중순 ~ 2016년 9월 말)

1. 재료준비
태양전지, 충전지 1.2V 두개, 아두이노나노, 블루투스(파란이빨아님) HC06, 서보모터2개, 전압센서


2. 패널조립 및 가공



3. 코딩


소스코드

SoftwareSerial mySerial(10, 11); // RX, TX
Servo horzServo;  // 수평서보모터 변수
Servo vertServo;  // 수직서보모터 변수

int horzAngle = 90; // 정수형변수 초기값은 90
int vertAngle = 90; // 정수형변수 초기값은 90
    
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600); // 시리얼 비긴 초당 9600비트 주고받기
  while (!Serial) { // 그동안 Serial 실행
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.println("Goodnight moon!");  // 시리얼 모니터에 "Goodnight moon!" 출력하기 

  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600); // 변수 마이시리얼 비긴 초당 9600비트 주고받기
  mySerial.println("Hello, world?");  // 마이시리얼 모니터에 "Hello, world?" 출력하기 

  // set servo
  horzServo.attach(6); vertServo.attach(5);  // 수평 및 수직서보모터에 붙이기 6, 5

  horzServo.write(80);  
  vertServo.write(80);  

  delay(500); // 기다리기 servoTime만큼
  horzServo.detach(); vertServo.detach();
}

void loop() { // run over and over
  if (mySerial.available()) { // 만약 마이시리얼을 사용 할 수 잇다면 
    Serial.write(mySerial.read());  // 시리얼 쓰기 마이시리얼 읽기
  }
  if (Serial.available()) { // 만약 시리얼을 사용 할 수 잇다면 
    mySerial.write(Serial.read());  // 마이시리얼 쓰기 시리얼 읽기
    
  }

  // 4개의 광센서 값을 analogRead( )로 읽어서, 각각 정수형 변수 leftTop, rightTop, leftBottom, rightBottom 에 넣는다.
  int leftTop = analogRead(A0);
  int rightTop = analogRead(A1);
  int leftBottom = analogRead(A2);
  int rightBottom = analogRead(A4);
  int vol = analogRead(A6);

  float vout = vol / 4.092;           // (vol * 5.0) / 1024.0;
  float vin = vout / 10.0;    // vout / (7500.0 / (30000.0 + 7500.0)); 
     
  mySerial.print(vin);
  mySerial.print(",");
  
  int averLeft = (leftTop + leftBottom) / 2;        // leftTop + leftBottom 광센서 값을 평균내서 averLeft변수에 넣는다.
  int averRight = (rightTop + rightBottom) / 2;     // rightTop + rightBottom 광센서 값을 평균내서 averRight변수에 넣는다.
  int averTop = (leftTop + rightTop) / 2; // leftTop + rightTop 광센서 값을 평균내서 averTop변수에 넣는다.
  int averBottom = (leftBottom + rightBottom) / 2;  // leftBottom + rightBottom 광센서 값을 평균내서 averBottom변수에 넣는다.
  int diffLeftRight = averLeft - averRight; // diffLeftRight변수에 넣는다.
  int diffTopBottom = averBottom - averTop; // diffTopBottom변수에 넣는다.
  mySerial.print((leftTop + leftBottom + rightTop + rightBottom) / 4);
  
  Serial.print(vin);  // 시리얼모니터에 vin 값 출력하기
  Serial.print(", ");
  Serial.print(leftTop);  // 시리얼모니터에 leftTop 값 출력하기
  Serial.print(", ");
  Serial.print(rightTop);  // 시리얼모니터에 rightTop 값 출력하기
  Serial.print(", ");
  Serial.print(leftBottom);  // 시리얼모니터에 leftBottom 값 출력하기
  Serial.print(", ");
  Serial.print(rightBottom);  // 시리얼모니터에 rightBottom 값 출력하기
  Serial.print(", ");
  Serial.print(diffLeftRight);  // 시리얼모니터에 diffLeftRight 값 출력하기
  Serial.print(", ");
  Serial.print(horzAngle);  // 시리얼모니터에 horzAngle 값 출력하기
  Serial.print(", ");
  Serial.print(diffTopBottom);  // 시리얼모니터에 diffTopBottom 값 출력하기
  Serial.print(", ");
  Serial.println(vertAngle);  // 시리얼모니터에 vertAngle 값 출력하기

  int servoTime = 100;  // 정수형 변수 servotime 초기값 100
  int errorValue = 30;  // 정수형 변수 errorValue 초기값 20


  if( -1 * errorValue < diffLeftRight && diffLeftRight < errorValue)  // 만약 마이너스1오류 값 <diffLeftRight 그리고 diffLeftRight <오류 값 으로
  {
    ;
  }
  else if(diffLeftRight < 0 && horzAngle < 150) // 만약 아니면 diffLeftRight < 0 그리고 horzAngle < 180 으로
  {
    horzServo.attach(6); vertServo.attach(5);  // 수평 및 수직서보모터에 붙이기 6, 5   
    horzAngle = horzAngle + 1;
    horzServo.write(horzAngle);
    Serial.println("right");      
    delay(servoTime); // 기다리기 servoTime만큼
    horzServo.detach(); vertServo.detach();
  }
  else if(diffLeftRight > 0 && horzAngle > 30)
  {
    horzServo.attach(6); vertServo.attach(5);  // 수평 및 수직서보모터에 붙이기 6, 5     
    horzAngle = horzAngle - 1;
    horzServo.write(horzAngle);
    Serial.println("left");      
    delay(servoTime); // 기다리기 servoTime만큼
    horzServo.detach(); vertServo.detach();
  }

  if( -1 * errorValue < diffTopBottom && diffTopBottom < errorValue)  // 만약 마이너스1 오류 값 <diffTopBottom 그리고 diffTopBottom <오류 값으로
  {
    ;
  }
  else if(diffTopBottom < 0 && vertAngle < 120) // 만약 아니면 diffTopBottom < 0 그리고 vertAngle < 120으로
  {
    horzServo.attach(6); vertServo.attach(5);  // 수평 및 수직서보모터에 붙이기 6, 5    
    vertAngle = vertAngle + 1;
    vertServo.write(vertAngle); 
    Serial.println("up");  
    delay(servoTime); // 기다리기 servoTime만큼
    horzServo.detach(); vertServo.detach();
  }
  else if(diffTopBottom > 0 && vertAngle > 30) // 만약 아니면 diffTopBottom < 0 그리고 vertAngle < 30으로
  {
    horzServo.attach(6); vertServo.attach(5);  // 수평 및 수직서보모터에 붙이기 6, 5    
    vertAngle = vertAngle - 1;
    vertServo.write(vertAngle);
    Serial.println("down");  
    delay(servoTime); // 기다리기 servoTime만큼
    horzServo.detach(); vertServo.detach();
  }
}


완성된 모습
완성된 모습은 다음과 같습니다.


스마트폰에 조도센서값이 표시되어, 제대로 태양을 추적하는 지를 무선으로 확인할 수 있습니다. 앞으로 스마트폰에 태양전지가 발전한 전력량등을 보완하려 합니다.


2016년 5월 8일 일요일

스핀로봇 만들기

안녕하세요~
한동안 숙제가 많아 제가 많이 준비를 했..못했어요ㅜ_ㅜ 어쨋거나, 오늘은 제가 준비를 하다가 못해서, 미국에서 산 스핀 봇 만들기 세트(당연히 한국에서 수입가능)를 이용해서 로봇을 만들어보겠습니다!

이렇게 생긴로봇^^
귀엽나요??? 귀여운 것 같기는 하네요.
참고로 저거 표지에 있던 그림 찍은겁니다.

준비물

자, 준비물은 이거!
위에 건 나무재질이여도 상관 없음.

3.만들기

시작해 볼까요?
와이어(노란 줄같은거)를 다리3개(꺾여진 플라스틱)와 몸통(플라스틱 중 가장 큰 것)이랑 연결! 다 연결하셨으면...
                                            이렇게 될 거에요

그 다리 끝에쯤에 모터를 달으면 되요. 이렇게!


그리고 준비물 사진 맨 위에 있는 스위치를 사각형으로 들어가 있는 곳 밑에 붙이세요. 양면 태이프가 붙여져 있을거에요.

붙이면 이렇게 되겠고요,

이제 건전지 캐이스를 달을 생각인데요, 달을 위치는 아무데나 달아도 되지만 제가 추천하는 위치는 가운데가 딱 적당할 것 같아요.

선 연결 할 차례가 왔네요! 선 연결하기가 가장 재미있는데,어.. 뭐, 주의 할 점이 필요 있나요? 그냥 같은 색깔끼리 연결하면 되요!

이제 펜을 끼울 차례인데, 고무줄로 펜이나 싸인펜을 끼워요. 건전지 끼웠고, 선 연결 했고, 싸인펜 달았고, 뭐 이것 저것 여러개 다 됐죠? 이제 스위치를 눌러요!
                                                이렇게 됬나요?

마무리

오늘은 여기서 마칠게요~ 요번 Make가 도움이 많이 됬으면 좋겠어요. 무언가를 창작하고 만드는 사람들이 Maker인데.. 그런 사람들이 나라에 많으면 선진국 처럼 좋아질 수 있지 않을까요? 여러분이 그런 Maker가 되기를 소망합니다!

아! 까먹을 뻔 했다. 궁금증이 있으시면 댓글로 올려주세요! 다음에 또 들러주세요~










2016년 4월 2일 토요일

아두이노 초보! 서보모터 제어방법

안녕하세요. 아두이노 초보자를 위한 강의를 재밌게 진행하기 위해 아두이노 공부를 했습니다~ 

이번에는 서보모터를 알아 볼꺼예요. 서보모터는 특정한 각도로 회전할 수 있어, 로봇 팔 같은 것 만드는 데 많이 사용되요.
서보 모터



회로 연결
아두이노의 2번핀과 서버 모터의 신호핀(노란색)을 연결하세요. 아두이노의 5볼트 전압핀과모터의 적색핀을 연결하세요. 아두이노의 GND핀과 모터의 황토색 핀을 연결하세요. 

코드 소스
여러분은 프로그래밍에 대하여 어떻게 생각하나요?
아마 여러분은 밑의 예제를 보자마자 이 창을 닫고 싶을 겁니다. 하지만 해보면 쉬워요.

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(2);  // attaches the servo on pin 2 to the servo object
}

void loop() {
  myservo.write(90);                  // sets the servo position according to the scaled value
  delay(2000);
  myservo.write(0);                    // waits for the servo to get there 
  delay(3000);
  myservo.write(150);
  delay(1000);
  myservo.write(160);
  delay(1000);
}

설명
예제를 보시죠. "근데, 이 영어는 뭐죠? 어려울 것 같아요!" 라고 생각하지 마세요. 하나씩 알려드릴테니까요.

자... 여기서 delay라는 게 있는데요, 이건 얼마나 기다릴지 정하는 함수입니다. 여기서1000은 1초이고, 2000은 2초이고, 3000은 3초 입니다.

그리고 myservo.write 라는 기호가 또 있네요^^ 이 함수는 몇 도 움직일지 정하는 함수인데요, 괄호 안에 90도 라고 쓰면 서보모터가(서보모터가 뭔지는 다들 대충 아시죠?) 90도 돌아갑니다.

void loop라는 기호가 있죠? '반복' 실행하는 함수입니다. 이 기호를 문단의 위에 써 주면 {} 안의 명령문을 반복합니다.

그리고 아두이노로 실행하고 싶으시면! 아두이노에 케이블을 꼿아 컴퓨터와 연결 시키고, 업로드하면 실행가능해요.

아! 그리고 팁이 있는데, 명령문 마지막에 다 끝난후엔 ;을 붙여 주세요. 안 그러면 컴퓨터가 이 명령문장이 끝난건지~ 안 끝난건지~ 이해를 못 해요!

컴퓨터는 생각을 못하니까 하나하나 다 말해 줘야 합니다. 아니면 이해를 못해요. 에러가 날 수도 있으니 조심하시길 바랍니다.

// 글자의 뒤에 있는 건 설명해 주는 겁니다.

그렇게 어렵지 않지요? 

끝인사
자, 오늘은 아두이노 코딩이 처음이니까 짧게 마침니다. 그리고 처음에 너무 이해하려 하지 마세요. 처음에는 그냥 듣는겁니다. 제가 만들기 중간중간에 알려드릴게요~
처음부터 잘하는 사람 없으니 천천히 열심히 하자구요!

거리측정기 만들기

1. 인사말

네,,, 벌써 4월이네요...
아시다시피 4월은 과학의 달 입니다.
과학의 달을 맞이해서 간단한 발명품 하나를 만들어 볼려고 합니다.
요번에 만들것은, 거리측정기 입니다!

2. 거리측정 원리

거리측정을 위해서 초음파센서를 만들어 볼꺼예요. 초음파로 거리를 측정하는 원리는 다음과 같아요. 발사된 초음파가 물체에 튕기면 그것이 반사되어서 돌아올때의 시간을 측정해, 초음파의 속도를 곱하면 거리를 구할 수 있어요.


3. 준비물

만들기 위한 재료는 초음파 센서, 아두이노, LCD예요. 
초음파 센서 아이콘에 대한 이미지 검색결과

초음파 센서 한 개
아두이노 아이콘에 대한 이미지 검색결과
아두이노 한 개

LCD
            

4. 회로도     

회로는 다음과 같이 연결해요. 복잡해 보여도 하나하나씩 잘 따라하면 할 수 있어요.


5. 소스 코드

회소스 코드는 다음과 같아요. 

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Ultrasonic ultrasonic(A0,A1);
void setup() {
//Lcd init
lcd.begin(16, 2); //16 rows, 2 columns
}
void loop() {
lcd.clear();
lcd.print(" Ardumotive ;) "); // You can change this message.
lcd.setCursor(0, 1); //Change line...
lcd.print("Distance: ");
lcd.print(ultrasonic.Ranging(CM));
lcd.print("cm");
delay(1000); // 1sec delay
}

6. 끝인사

거리측정기는 자로 일일이 잴 필요 없이 측정만 하면 되니까, 생활하는 데에 많은 도움이 될 것 입니다. 
소스코드가 오류났을 경우에는 아두이노와 연결이 잘 않됬거나, 포트를 잘 못 하셨거나-_- 아마 둘 중 하나일 겁니다. 아니라면 선이 절지됬거나, 부품에 문제가 있는 것 일지도 모릅니다. 그럴 때는 일일이 다 알아보아야 하기 때문에 노가다가 많아요! 그러니 부품들을 먼저 잘 점검하시고 만들기를 시작하세요!