아두이노는 스피커에 주파수를 입력하여 소리를 낼 수 있습니다.


http://arduino.cc/en/Reference/Tone 에 들어가면 Tone에 대한 설명이있습니다.



위의 그림처럼 연결해주고 소스에서 톤을 넣어주면 소리가 나게 됩니다.


아래는 소스입니다.


소스 코드 1 


  #include "pitches.h"


// notes in the melody:

int melody[] = {

  NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};


// note durations: 4 = quarter note, 8 = eighth note, etc.:

int noteDurations[] = {

  4, 8, 8, 4,4,4,4,4 };


void setup() {

  for (int thisNote = 0; thisNote < 8; thisNote++) {


    int noteDuration = 1000/noteDurations[thisNote];

    tone(8, melody[thisNote],noteDuration);


    int pauseBetweenNotes = noteDuration * 1.30;

    delay(pauseBetweenNotes);

    noTone(8);

  }

}


void loop() {

  // no need to repeat the melody.

}


tone( 'pinNum' , 'toneNote' , 'toneDuration' ); 를 채워주면되는데

Note는 음계 ( 도레미파솔라시도 )

Duration 는 지속시간(ms) 입니다.


아두이노 셈플 소스를 재생해보면 띠리리띠리띠띠! 라는 소리를 들을 수 있습니다.

따로 동영상을 촬영하지않아서 넘어가겠습니다.





이제 피아노! 를 만들어봅시다.


위의 회로를 사용하여 아래그림처럼 꾸몄습니다.


버튼의 용도는 2345 6789 핀을 이용해서

도래미파 솔라시도 이런식으로 넣어주었고 

소리의 경우 출력과 그라운드를 별도의 스피커에 넣어주였습니다.


음표는 같이 동봉된  pitches.h 를 보고 만드시면 됩니다.









방학하고 막 만든 LED 큐브 입니다. 아두이노와 연동은 아직 하지않은 상태고요 3x3x3 배열로 구성했습니다.


혼자납댐하다보니 피사의 사탑이

되었내요.


위에는 작동영상입니다.


카메라가 없어서 휴대폰으로 영상을 촬영하였습니다.




1. 버튼다루기!!


버튼이란 눌렸을때 , 안눌렸을때 를 구분하는 기능을 합니다. 오락실가면 보는 버튼들을 생각하시면되죠.


이번에 할 소스는 '버튼' 을 이용하여 'LED'를 껏다 켰다 하기입니다.


설계도를보시면 5V로 출력하는 부분이 스위치에 연결되어있고 

- 하나는 저항을 통해 접지

- 다른하나는 2번핀으로 들어갑니다.

* 여기서 저항을 사용하는이유 => 저항이없으면 모든전력이 GND로 들어가게됩니다, 하지만 저항이있기에 남는전류가 2번핀으로 들어가게되여 입력되게 됩니다.


위 설계도는 버튼을 눌렀을때 , 안눌렀을때 를 구분하는법입니다. 이제 빵판에 버튼을 이용해 LED를 제어해보도록 하겠습니다.




우선 편하게 진행하기위해 5v는 +에 접지는 -에 꼳아줍니다.

그다음 

버튼을 설치합니다.

버튼은 대각선으로 작동합니다. 버튼이 눌렸을때 대각선끼리 이어준다고 생각하시면됩니다.

이렇게되면 위의 설계도처럼 완성이되었내요.


다음은 LED를 설치합니다. 1일차와 같은원리니 어렵지 않다고 생각합니다.


 소스코드 1


const int buttonPin = 2;

const int ledPin =  11;

int buttonState = 0;

// v

void setup() {

    pinMode(ledPin, OUTPUT);      

    pinMode(buttonPin, INPUT);     

}


void loop(){

    buttonState = digitalRead(buttonPin);


   if (buttonState == HIGH) {     

      digitalWrite(ledPin, HIGH);  

  } 

  else {

     digitalWrite(ledPin, LOW); 

  }

}


위의 소스코드를 적고 작동시키면 아래와 같이 실행될 것입니다.






2. 버튼 2개로 LED 제어하기



빨간 LED는 아직사용할것이 아니니 신경쓰지 마셔도됩니다.

위의 설계도를 참고하여  버튼을 하나더 추가한뒤 소스를 변경해줍니다.


 소스코드 2


const int buttonPin = 2;

const int buttonPin2 = 4;

const int ledPin =  11;

int buttonState = 0;

int buttonState2 = 0;


void setup() {

    pinMode(ledPin, OUTPUT);      

    pinMode(buttonPin, INPUT);     

    pinMode(buttonPin2, INPUT);         

}


void loop(){

    buttonState = digitalRead(buttonPin);

    buttonState2 = digitalRead(buttonPin2);


   if (buttonState == HIGH && buttonState2 == HIGH) {     

      digitalWrite(ledPin, HIGH);  

  } 

  else {

     digitalWrite(ledPin, LOW); 

  }

}


위의 소스코드를 적고 작동시키면 아래와 같이 실행될 것입니다.






- 보너스

위의 방법을 활용하여 버튼2개눌렸을때 3개눌렸을때를 제어해봅시다.



솔직히 동영상이나 설명만보면어렵고

제글을 보러오신분들은 직접 해보시는걸 추천합니다. 사진만 따라하셔도 도움이 되리라 생각드려요.

C를 하신다는 가정하에 글을적기에 소스코드는 따로 설명드리지않습니다.


내일 또 오겠습니다.

'Programming > Arduino' 카테고리의 다른 글

74HC595를 이용한 3핀->8핀 만들기  (1) 2013.01.17
4일차 가변저항으로 LED 제어하기  (2) 2013.01.12
3일차 아두이노 피아노 만들기!!!  (2) 2013.01.11
보너스 - LED CUBE  (0) 2013.01.09
1일차 LED에 불켜보기.  (0) 2013.01.07

아두이노(Arduino)란?

하드웨어와 소프트웨어가 모두 오픈소스이며 물리적인 하드웨어를 지향합니다.

즉 소프트웨어적인것이아니라 눈으로보이는 것들을 지향하죠.


아두이노 개발툴은 Processing 를 기반으로하며 http://Arduino.cc 에서 다운로드가 가능합니다.

개발툴의 개발언어는 C언어를 기반으로하지만 개발툴 자체는 JAVA로 개발되어있어서 운영체제에 상관없이 개발이 가능합니다.


본론으로 들어가 아두이노가 어떻게 생겼는지 보면





이런식으로 생겼습니다. 손바닥보다 조금 작은 크기인데 각각의 위치가 어떤역활을 하는지보면



아래와 같은 식으로 이루어져있으며 통신은 USB통신을 사용합니다.


아두이노 IDE를 설치하고 처음실행하게되면 아래와같은 창이 뜹니다.



보시다싶이 위에가 소스입력창 아래가 컴파일출력창입니다.

아두이노를 usb로 연결한 후 usb에 연결된 번호를 장치관리자에서 확인한 후

< 보드 -> 시리얼포트 -> 아두이노가 연결된 포트 > 를 설정해줍니다


그뒤 < 파일 -> 예제 -> 1.Basic -> Blink > 를 열어줍니다.


예제소스

 /*

  Blink

  Turns on an LED on for one second, then off for one second, repeatedly.

 

  This example code is in the public domain.

 */

 

// Pin 13 has an LED connected on most Arduino boards.

// give it a name:

int led = 13;

// 13은 13번 포트를 의미하며 13번 포트는 아두이노에 내장된 led 와연결이되어있다.


// the setup routine runs once when you press reset:

void setup() {                

  // initialize the digital pin as an output.

  pinMode(led, OUTPUT);     

}


// the loop routine runs over and over again forever:

void loop() {

  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

  delay(1000);               // wait for a second

  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

  delay(1000);               // wait for a second

}


소스를 간단히 보면 setup() , loop()로 나누어져있는대 

셋업은 처음부팅시 설정

loop는 반복하는 구간이다.


13번포트를 출력으로 설정한뒤 loop()에서 전력을 넣었다 끊었다 하고 그사이에 딜레이를 1000ms(1초)를 주어 깜빡이도록 해두었다.


아래는 포트를 11번으로 설정한뒤 LED를 꼳아서 아두이노를 돌려본 동영상이다.



이제 간단히 아두이노에 대해서 알아봣다. 처음에는 책만봤을때는 어려웟는데

확실히 비전공자를 위한 개발툴이다보니 ubee430같은것 보다 접근이 쉬웠다. 특정 운영체제를 깔지않아도되고 통신도 usb만꼳으면 바로된다.

내일 새로업로드하겠습니다.


+ Recent posts