아두이노 기초강좌 3

Electronics 2010.04.28 04:40


오늘은 아두이노를 쓰는 근본적인 이유라고나 할까? 그 이유를 체감할 수 있는 것을 만들어 보기로 한다. 아두이노를 이용해서 세상과 반응 하는 기계를 만드는 것이다. 말은 거창하지만 별거 아니다. 단지 빛에 반응해서 LED를 끄고 켜는 것을 만들어 보는 것이다.

세상과 반응하려면 세상을 읽어야 한다. 기계도 오감을 가질 수 있을까? 사람 처럼은 힘들어도 어느 정도는 가능하다. 빛센서를 이용해서 밝기를 감지할 수도 있고, 카메라를 달면 사물의 모양도 감지 할 수 있지만 아두이노는 카메라신호에서 웃는 얼굴을 구분하는 프로그램을 돌리기에는 좀 벅차다. 그런건 컴퓨터를 이용해서 해야하고 프로그래밍도 좀 어렵다. 그러나 게임기 Wii의 리모콘에 달려있는 적외선카메라는 아두이노에도 붙여서 적외선의 점의 좌표를 전달 해 줄 수 있다.

소리는 마이크로 들을 수 있고, 압력 센서나 정전기 센서로 촉각도 가질 수 있고, 온도계를 달면 온도를 감지 할 수 있으며, 냄새는 가스감지 센서 같은걸로 특정한 가스는 감지 할 수 있지만 사람 처럼 다양한 냄새를 구분하는건 힘들다. 연구실 수준에서는 가능한것도 같지만 일반인이 사서 쓰기는 힘들다. 맛을 보는 것은 냄새보다 더 어려운 것 같다.
전정기관이나 반고리관이 하는 일도 할 수 있다. 가속도 센서로는 기울기와 가속을 감지 할 수 있고, 자이로 센서로 회전을 감지 할 수 도 있다.

그리고 아두이노는 사람의 오감으로는 감지 할 수 없는, GPS신호를 받아 야외에서는 지구상에서의 위치도 파악 할수도 있고, 기압계를 달면 기압을 잴 수도 있고, 홀센서라는걸 쓰면 자기장도 감지 할 수 있고, 역시 자기장을 감지하는 나침반 센서를 이용해서 방향도 알 수 있다. 

세상과 교감하는 방법은 과학 기술적 지식과 창의력만 있으면 얼마든지 만들어 낼 수 도 있다. 흙의 습도에 따른 전기 전도도의 차이를 이용하면 화분의 흙이 얼마나 말랐는지를 감지할 수도 있다. 솔직히 새로 만드는 것까지는 바라지 않는다. 사람들이 이미 만들어서 인터넷에 올려 놓은 걸 잘 찾아내기만 해도 무궁무진하다는 것만 말하고 싶다.

오늘은 여러가지 빛 센서중에 Cds라고 불리는 것을 써보겠다. 황화카드뮴이라는 물질의 전기 전도도가 빛에 따라서 바뀌는 것을 이용한 센서로 알고 있다. 다시 말하면 빛에 따라서 저항값이 달라지는 센서인 것이다. 저항 처럼 단자가 두개 나와있다. 

회로는 아래와 같이 꾸며준다. 아날로그 포트5번에 센서와 10K오옴(갈색 흑색 주황색 은회색 띠) 저항을 사진처럼 브레드보드의 가로줄 구멍에 함께 꽂아서 넣어 주고 센서는 아두이노보드의 +(5V,빨간전선)에 저항은 - (GND,까만전선)에 연결한다. 이렇게 하면 아날로그 포트에 센서의 저항값의 변화에 따라  다른 값의 전압이 입력된다. 저항을 회로처럼 쓰지 않고 센서를 직접 +에 연결하면 전류값이 높아질 수 있어서 아두이노의 칩이 타버릴 수도 있다. 이보드에는 LED는 13반 포트에 아예 납땜되어 있다. 참고로 이 아두이노는 moderndevice라는 곳에서 파는 RBBB라는 복제보드이다. 



코드는 아래와 같다.
int sensorPin = 5;
int ledPin = 13;
int val = 0;

void setup()
{
pinMode(ledPin, OUTPUT);
}
 void loop()
{
   val = analogRead(sensorPin);
   if (val > 500)
      {
       digitalWrite(ledPin, HIGH);
      }
   else  
      {
       digitalWrite(ledPin, LOW);
      } 
}   

int sensorPin = 5; 는 아날로그 포트 5번을 센서로 쓰겠다는 것이고, 
int ledPin = 13; 는 디지털 포트 13번은 LED 출력으로 지정한 것이다.
처음 보는 명령어로 analogRead가 있다. 말그대로 아날로그 신호를 읽고 쓰는 명령어 되겠다. 웃긴건 출력포트는 setup()에서 pinMode를 써서 OUTPUT으로 지정을 해주는데, 입력은 해주질 않았다. 그러면 입력은 다 안해도 되는건가? 그런게 아니다. 디지털 입력은 INPUT이라고 지정해줘야한다. 아날로그 입력의 경우에만  pinMode로 지정해주지 않아도 되는 것이었다. 왜 그런지는 나도 모른다 --;; 

그리고 if문도 처음 나온다. 프로그래밍을 해본 사람은 쉽겠지만, 안해봤어도 눈치로 대충 때려잡을 수 있는 수준의 코드가 아닌가 싶다. 만약(if) val 값이 500보다 크면 LED 켜고 아니면(else) LED를 끈다는 말이다. 조건문은 소괄호안에 넣고, 중괄호로 각각의 경우에 실행할 문장을 감싸준다는 것도 눈치챘을 것이다. else이하의 문장을 생략할 수도 있다. 그런경우가 바로 정치인들이 많이 쓰는 '아니면 말고'와 같은 식의 코드가 되겠다. else가 있다면 '아니면 요렇게'라는 뒷감당까지 해주는 친절한 코드가 되는 것이다. 

val은 변수라고 하는 것으로 프로그래머가 임의로 정하는 데이타 저장소와 같은 것이다. 프로그램 윗부분에 int val = 0; 이라고 선언을 해줄때 생겨난 놈으로써 아날로그입력 값을 저장하고 또 써먹기 위해서 만든 것이다.

아날로그입력은 입력신호가 0V 일때는 0, 5v일때는 1023의 값을 가지는 아날로그를 디지털로 바꿔주는 변환기(ADC; Aanlog to Digital Converter)이다. 위의 if 문에서 판단의 근거로 사용한 500은 약 2.4v가 된다. 하지만 그것은 내 방의 조도에 맞춘 것이기 때문에, 이 물건을 쓸 곳의 밝기 변화에 맞추어 값을 변화 시켜주어야 한다.

어두웠다가 덜 어두웠다가 하는 정도의 밝기 변화인지, 밝았다가 아주 밝았다가 하는 밝기 변화인지에 따라 저 500이라는 값이 달라져야 한다는 말이다. 근데 그걸 어떻게 알아내는가? 그건 다음시간에 알아보기로 하겠다.
저작자 표시 동일 조건 변경 허락
신고

'Electronics' 카테고리의 다른 글

아두이노 기초강좌 5  (36) 2010.06.22
아두이노 기초강좌 4  (15) 2010.05.11
아두이노 기초강좌 3  (13) 2010.04.28
아두이노 기초강좌 2  (34) 2010.04.14
아두이노 기초 강좌 1  (36) 2010.04.07
꽃보다 남자? 물감보다 아두이노!  (15) 2010.03.30
Trackback 0 : Comments 13
  1. 안씨 2010.04.28 17:32 신고 Modify/Delete Reply

    항상 잘 읽고 있습니다. 힘내주세요~ㅋ

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010.04.29 04:52 신고 Modify/Delete

      감사합니다. 지난번 숙제를 아무도 안해서 좀 김이 빠지긴 했었습니다만 다시 김채워서 어젯밤에 또 올렸죠^^
      힘내도록 하겠습니다!!

  2. rararabra 2010.06.16 22:35 신고 Modify/Delete Reply

    저 arduino duemilanove/328 가지고 있는데, 그걸로도 이 실험 할 수 있는 건가요? 제가 완전 초보라 전혀 다르게 생긴것을 보니 감이 안 잡혀서요. 암튼, 님의 강좌에 천번만번 감탄하고 갑니다. 너무 잘 설명해주셔서 쏙쏙 잘 들어오네요. 지금은 모르는 아두이노가 나와서 살짝 막혔지만, 앞에 1~2장 정말 속시원히 읽었습니다. 감사합니다! :D

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010.06.17 15:45 신고 Modify/Delete

      아두이노는 많은 클론보드들이 있습니다만 다들 호환이 됩니다. 핀갯수가 같아서 복제보드와 아두이노의 핀들이 1:1로 매칭이 된다는 이야기죠.
      제 글에 복제보드에 대한 설명이 부족했나보군요ㅜㅜ

  3. rararabra 2010.06.18 00:23 신고 Modify/Delete Reply

    아이고오 욕심도 많으셔라. 어떻게 시시각각인 구독자 수준을 죄다 맞추겠습니까. 님의 강좌, 이미 훌륭합니다! 제가 모자랄 뿐이지요. 솔직히 지금도 3강은 제 수준으로는 좀 무리지만, 한번 제가 가진 모델로 다시 도전해보겠습니다. 그리고 이해가 가지 않는 것 다시 시시콜콜히 질문드립지요. :-)

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010.06.21 22:59 신고 Modify/Delete

      헐 욕심인가요 ㅎㅎ 뭐 전 나름대로 가장 알아보기 쉬운 강좌를 써보자는 목표가 있었거든요 ^^

  4. rararabra 2010.06.21 17:03 신고 Modify/Delete Reply

    얏호! 님하 성공했어요. 비록 사진에는 없지만, 마음을 가라앉히고 차분히 5V랑 ground찾아서 조심스럽게 연결했더니 되는거 있죠!!! 이거 LED 불들어올때보다 훨씬 신기하고 재미있네요. 다시한번 감사합니다! :D

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2010.06.21 23:00 신고 Modify/Delete

      제가 아두이노 오리지날을 사려고도 해봤습니다만, 어쩌다 보니 이미 복제보드로 시작하게 되버려서 그냥 가고 있었습니다 ^^ 다행이네요 그래도 성공하셨다니 축하드립니다~

  5. 정지철 2010.12.25 21:20 신고 Modify/Delete Reply

    아..아직 모델구입전입니다만..강좌잃으면서 너무사고싶내요 ㅜㅜ
    외국이라서 다음주에나 받아볼듯하지만 ㅜㅜ

  6. 안성우 2012.10.12 10:14 신고 Modify/Delete Reply

    정말정말 감사합니다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
    이제 숨통이 트이네요
    온몸에 전율이 돋기 시작했습니다.
    정말 ... 감사합니다 ㅠ

    • Favicon of http://blog.whattomake.co.kr BlogIcon MrKiss 2012.10.15 17:33 신고 Modify/Delete

      댓글 남겨주셔서 감사합니다. 게으른 블로그 관리에 자극이 되네요

  7. 서덕기 2013.02.19 10:18 신고 Modify/Delete Reply

    좋아요. 다음편이 기대됩니다.

  8. Jun 2014.08.30 12:24 신고 Modify/Delete Reply

    최근에 아두이노를 알게되어서 사서 시작했는데 막막했었었는데 차근차근 뭔가 진행되고있습니다.

    감사합니다.. 스타터킷에는..스타터들은.. ㅠㅠ 전혀 뭐가 먼지..모르는..애들이 많아서 고민이었는데

    많은 도움이되고 있습니다!

Write a comment

티스토리 툴바