반응형

【 아두이노 기초 】 #12 멜로디 출력 실습 I




 스피커를 통해 멜로디를(Melody) 출력해본다. 

단순한 멜로디출력이지만 음이 만들어지는 원리와 음의 주파수에 대해 이해할 수 있게 된다. 



▶ 실물 회로도면 :



▶ 실제 회로 구성 모습 



▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : 스피커, 저항 (100Ω) 


▶ 회로 도면   : 


※ 스피커는 일단 타입의 소형 스피커 혹은 피에조 스피커 등 사용해보고 소리가 비교적 잘 들리는 것을 선택한다. 


▶ 실습 절차  : 



▶ 프로그램 (코드& 설명) : 


  


▶ 실행 영상 : 

  




※ 다음 글에서는 간단한 음악을 플레이 해보도록 하겠다


제대로 동작 하려면, Pitches.h 라이브러리가 설치 되어 있어야 한다. 

라이브러리가 등록이 되어 있지 않으면 아래와 같은 에러가 나타난다. 


"exit status 1 보드 Arduino/Genuino Uno 컴파일 에러" 와 같은 에러가 나는 경우 아래 첨부파일에 있는 헤더파일(.h)을 아두이노 스케치의 라이브러리에 추가 해주어야 한다. 

만약 이와 같은 에러가 발생할 경우,  

아래 에러 해결 글을 참조 할 것

클릭! 컴파일 에러 잡기 



▶ 아두이노 코드 다운로드 : 


sketch_Melody.ino

pitches.h



 

[ 회로 설명 ]


위  LM386은 IC 는  OPAMP  IC 의 한 종류이고, 

저전압 오디오 신호를 증폭해 주는 IC 입니다.


3번 핀에 가변저항을 이용하여 입력 Audio(음성) 신호가 입력이 되고 5번 핀 출력에 증폭이 되어 나오는 회로가 됩니다. 

 ( 참고 : 1번 8번 핀에 콘덴서나 저항 등의 특별한 연결이 없을 경우 위 이미지에 표시 된 것 처럼 게인이 20 인 회로가 됩니다. 

증폭도 구하는 식 : 20log(x) = 26 db (데시벨) ,    x = 19.9...   즉, 약20배 정도의 전압 증폭을 보여줍니다. 그리고 1, 번 8번 핀에 콘덴서를 달거나 콘덴서와 저항의 조합을 달게 되면 더 올라가게 됩니다.    (26db는 IC를 제조한 회사에서 회로 데이터 시트를 다운받아 참고,  Vs에 6v, 1kHz 전압의 경우)  )


출력에 연결된 0.05uF과 10옴의 저항 회로는 출력 스피커에 의한 발진(진동)을 제거해 주는 역할 을 하게 됩니다(bypass) , 

 그리고 오디오신호(음성등의 신호)와 함께 5V 직류전압이 같이 바이어스 되어 입출력이 되는데요, 신호를 증폭하고 난 후의 5V 전압은 출력에서 제거를 하고 오디오 신호만 출력해야 합니다. 그렇지 않을 경우 스피커가 과열되거나 해서 탈 수 있습니다. 그래서 콘덴서(여기서는 250uF)를 달아서 직류 전압성분을 제거 하는 역할 을 하게 됩니다.  250uF의 콘덴서는 f=1/2πRC, 8옴의 스피커일 경우 80Hz 까지의 저음을 들을 수가 있고 더 낮은 저역통과를 원하면 콘덴서 용량을 키워 주면 됩니다.




아래는 디바이스 마트 등에서 판매하는 모노 디지털 증폭모듈(lm386) 입니다.



반응형
반응형

【 아두이노 기초 】 #11 FND 구동 실습 II



 앞서 FND에 '0'이라는 숫자를 표시해 보았다.  이제 FND에 숫자 0부터 9까지 카운트를 해보도록 하자.


참조 링크 : FND 구동실습 I 



▶ 실물 회로도면 :




▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : FND (507, Common Anode 타입, 공통단자 +전압 연결),  220Ω 


▶ 회로 도면   : 


※ FND 는 크게 Anode(# 507) 타입과 cathode (#500) 타입 두 가지로 나뉜다. cathode(음극) 타입은 공통단자가 GND(그라운드, : 흔히 말하는 -마이너스 단자 )로 연결시켜 사용하는 타입이다. 위 도면에서 FND 내부의 LED 방향을 유심히 살펴보자. 


▶ FND 세그먼트와 핀 배치  : 

▽ #507


▽ #500





▶ 프로그램 (코드& 설명) : 


// 공통단자가 +VCC 연결인 507 Anode 타입을

// 사용할 경우 위 코드처럼 LOW를 출력해야 

// 해당 세그먼트가 켜진다  



▶ 실행 영상 : 

  



 


※ 추가로 알파벳 대문자 혹은 소문자 출력도 코딩을 해보면 좋다.


▶ 아두이노 코드 다운로드 : 

sketch_FND0to9.ino




반응형
반응형

【 아두이노 기초 】 #10 FND 구동 실습 I


 아두이노 I/O 포트 제어를 통해 FND(7 segment display)를 제어 해보자.


▶ 실물 회로도면 :




▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : FND (507, Common Anode 타입, 공통단자 +전압 연결),  220Ω 


▶ 회로 도면   : 


※ FND 는 크게 Anode(# 507) 타입과 cathode (#500) 타입 두 가지로 나뉜다. cathode(음극) 타입은 공통단자가 GND(그라운드, : 흔히 말하는 -마이너스 단자 )로 연결시켜 사용하는 타입이다. 위 도면에서 FND 내부의 LED 방향을 유심히 살펴보자. 


▶ FND 세그먼트와 핀 배치  : 

▽ #507


▽ #500





▶ 프로그램 (코드& 설명) : 


// 공통단자가 +VCC 연결인 507 Anode 타입을

// 사용할 경우 위 코드처럼 LOW를 출력해야 

// 해당 세그먼트가 켜진다  



▶ 실행 영상 : 


  FND에 숫자 '0'을 표시해보도록 하자.  기타 원하는 숫자 혹은 위치에 LED segment를 켜보도록 연습해본다.


 



※ 다음 글에서 이번 과제에 이은 FND 구동을 위한 응용 예제를 다루어 보도록 하겠다. 


▶ 아두이노 코드 다운로드 : 

sketch_FND.ino




반응형
반응형

【 아두이노 기초 】 #09 시리얼 통신을 통한 I/O 구동 실습

 시리얼(Serial) 통신을 이용하여 아두이노의 포트 제어를 실습해 볼 수 있다.  



▶ 실물 회로도면 :




▶ 부대품 목록 : 아두이노 보드, 브레드 보드


▶ 부품 목록    : LED X 5 (보유수량 만큼),  220Ω(LED 수량 만큼) 


▶ 회로 도면   : 


※ LED 극성에 주의 한다. 


▶ 실제 연결 모습  : 


아두이노의 0, 1 번 포트는 하드웨어 시리얼 통신을 위한 TX, RX 포트 임으로 아두이노의 2번 포트 부터 사용하도록 한다.




▶ 프로그램 (코드& 설명) : 



2~5번 LED 코드 내용도 위와 같은 형태로 해서 작성한다. 



▶ 실행 영상 : 


 (전체화면으로 보세요)



※ 다음 시간에는 이런 입출력 기능을 이용하여 FND (7segment Display) 를 제어 해도도록 하겠다. 


▶ 아두이노 코드 다운로드 : 

sketch_SerialLEDon_off.ino


반응형
반응형

【 아두이노 기초 】 #08  포토레지스터( CDS ) 제어

 

 빛에 따라 저항 값이 변하는 포토레지스터, 일명 CDS를 이용하여 LED를 켜고 끄는 실습을 해보자.  빛을 차단하면 LED가 켜지고 빛에 노출되면 LED가 꺼지도록 해보자. 또는 그 반대도 가능하다.

 

 

 

 

▶ 실물 회로도면 :

 

 

 

 

▶ 부대품 목록 : 아두이노 보드, 브레드 보드

 

▶ 부품 목록    : LED, 220Ω , 10㏀, CDS

 

▶ 회로 도면   : 

 

▶ 실제 연결 모습  : 

 

 

 

▶ 프로그램 (코드& 설명) : 

 

int LED=6;         //우노에서는 디지털 포트는 숫자만 입력int LIGHT=A0;  //아날로그 포트는 A0 형태로 입력int val=0;int fix=0;
void setup() { pinMode(LED,OUTPUT); Serial.begin(9600);}
void loop() { val=analogRead(LIGHT); fix = constrain (val,0,255); analogWrite(LED, fix); Serial.println( fix ); delay(100);

 

}

 

 

▶ 프로그램 (코드 다운로드) : 

LED_CDS-6.zip
다운로드

 

 

▶ 실행 영상 : 

 

 (전체화면으로 보세요)

반응형
반응형

【 아두이노 기초 】 #07  아날로그 입력과 출력

 아두이노 보드에서 아날로그 신호를 입력하고 출력하는 기능에 대해 다루어 보고자 한다. 신호 데이터 값은 시리얼 모니터 기능을 통해 쉽게 확인이 가능하다.

 

 

 

 

▶ 실물 회로도면 :

 

 

▶ 부대품 목록 : 아두이노 보드, 브레드 보드

 

▶ 부품 목록    : 가변저항 (용량값은 무관)

 

▶ 회로 도면   : 

 

 

▶ 프로그램 (코드& 설명) : 

 

 

 

▶ 실행 영상 : 

 

 (전체화면으로 보세요)

반응형
반응형

【 아두이노 기초 】 #06  채터링과 디바운스


스위치를 사용하게 되면 흔히 발생하는 채터링현상과 이를 방지하기 위한 디바운스에 대해 알아보도록 하자.



 하드웨어적 해결 방법은 스위치 쪽에 RS-플립플롭 회로를 연결하는 방법으로 할 수 있다.  하지만 여기서는 소프트웨어적으로 알고리즘을 통해 해결해보도록 하겠다.


▶ 실물 회로도면 :








▶ 부대품 목록 : 아두이노 보드, 브레드 보드

▶ 부품 목록    : PB SW 1개 ,  저항 10KΩ


▶ 프로그램 : 


 아래 로직을 실행 해서 시리얼 모니터로 확인해보면, 채터링 현상이 일어나는 것을 확인 해 볼 수 있다.



그럼, 채터링을 방지하기 위해 아래 로직처럼 수정해 보자~!




▶ 실행(동작) 영상 :

 아래 영상을 확인해 보면 스위치를 누르는 대로 즉각 반응이 오며 채터링 현상이 일어나지 않는 것을 확인 할 수 있다.

(영상을 확대해서 보세요)





▶ 실습 절차 : (위 회로도 참고)


▶ 실습 방법 : 일반적인(기계적) 푸시버튼 스위치를 준비하고 회로 연결을 한다. 


▶ 포인트 : 아두이노 메뉴 :  툴(Tool) 》시리얼 모니터(Serial monitor) 를 띄워서 확인해본다.  



▶ 아두이노 코드 다운로드 ( ~.ino ) 


bounce_ok.ino

deBounce_ok1.ino

debounce2_opti.ino




반응형
반응형

【 아두이노 기초 】 #05 LED ON / OFF 제어 실험하기

 

 아두이노에 LED와 버튼 스위치(PB SW)를 연결하여 스위치를 통해 LED On / Off 제어하는 실험이다.

 

▶ 실물 도면 :

 

 

 

 

▶ 부대품 목록 : 아두이노 보드, 브레드 보드

▶ 부품 목록 : LED 1 개,  PB SW 1개 ,  저항 10KΩ

 

▶ 실제 연결 이미지 :

 

 

▶ 실행(동작) 영상 :

 

Button.ino
다운로드

반응형
반응형

아두이노 기초 】 #04 밝기 (Fade IN / OUT) 제어 실험하기

 

 아두이노의 11번 포트와 GND포트에 LED를 직접 꽂고 Digital PWM 출력기능이 있는 digital 포트를 이용해 LED의 밝기를 조절 하는 회로를 구성한다. 

 동작 : 차츰 밝아 졌다가-Faid in, 다시 조금씩 어두워지도록-Faid out 한다)

 

 

 

▶ 실행(동작) 영상 :

 

Fade.ino
다운로드

# 아두이노 기초

반응형
반응형

【 아두이노 기초 】#03 LED ON / OFF 제어 실험하기

 

《 아두이노 보드 구조 》
아두이노를 가지고 본격적인 제어를 하기전에 먼저 보드 구조에 대해 설명 드립니다.

아두이노 핀 아웃

  아두이노는 위 이미지처럼 각각의 역할을 하는 핀(포트,port)으로 구성되어 있습니다. 전원을 연결하는 핀도 있고,
아날로그 신호(0V~5V) 입력 핀과 디지털 신호(0V 또는 5V)를 입력하거나 출력할 수 있는 핀으로 구성되어 있습니다.

 핀을 포트(port)라고도 부르는데요, 영어로 항구라는 뜻이며, 항구로 배가 들어오거나 나가듯 신호가 들어오고 나가기 때문에 핀을 포트(port)라고도 부릅니다.
 아두이노에서는 코딩을 통해 이런 포트로 신호(전압과 전류)를 출력 시켜 LED를 켜거나 끌 수 있게 됩니다. '아날로그 In핀'은 아날로그 값인 0V에서 5V 사이의 값을 입력받아 처리하는 핀으로 입력만 가능한 핀이며, '디지털 In/Out핀'은 0V 아니면 5V 두 개의 값을 입력하거나 출력이 가능한 핀입니다. 
  그리고 모든 신호는 각 포트에서 나와서 GND(그라운드, 또는 - 마이너스) 로 흘러 들어가게 연결되어야 합니다.  
( 마치, 건전지를 사용할 때, +에서 나온 전기가 전구나 회로를 거쳐 -로 연결되는 구조와 같습니다 )  
따라서 LED 연결을 예로 들면,   전기가 들어가야하는 LED의 + 리드선(다리)과  빠져나가는 - 리드선이 있는데,   +리드선을 아두이노의 신호가 나오는 포트에 연결하고, -리드선을 아두이노의 GND로 연결해주게 됩니다. 

LED의 +리드선과 -리드선

  따라서 기본적으로 아두이노에서 제어하는 형태는, 아날로그 핀으로 들어오는 신호(전압)를 가지고 디지털 핀으로 어떤 다른 신호를 입력 받거나 출력하게 되는 구조이며, 또는 여러개의 디지털 핀중에서 특정 디지털 핀으로 들어오는 신호를 가지고 판단해서(코드의 if문 등으로) 다른 디지털 핀으로 LED를 켜거나 하는 등의 출력을 내보낼 수 있는 형태로 제어하게 됩니다.

  참고로, 아두이노는 코딩과 같은 소프트웨어의 개념과 전압/전류/전기신호/전자부품의 이해와 같은 하드웨어적인 부분을 함께 이해해야 제어할 수 있기 때문에, 현재 설명드린 의미를 처음부터 완전하게 이해하기는 쉽지 않을 거예요. 따라서, 우선 설명을 듣고 완전히 이해하지 못하더라도 다음 실습으로 안내를 따라 계속 진행해보세요.

  이런 실습들이 계속 경험으로 쌓이다보면, 이전에 이해되지 못하던 부분이 다른 부분에서 퍼즐 맞추어지듯 종합적으로 이해되기 시작할 거예요. 그러니, 초반에 어렵거나 이해못하고 넘어가는 부분에 대해 염려하지 말고, 자신감을 가지고 시작해 보세요.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 13번 포트와 GND가 인접해 있기 때문에 아래 처럼 연결하면  브레드 보드를 이용 하지 않고 손 쉽게 LED를 동작 시켜 볼 수 있다.  

 

 

▶ 실습 방법 : LED 를 위 그림과 같이 연결하여 아래 프로그램에 의해 1초 마다 ON / OFF 동작을 하도록 실습해 본다. 

 

 주의 :  LED 극성에 주의, LED의 +단자(보통 긴 다리)를 13번 포트에 연결하고 -단자를 GND에 연결하여야 한다.  본래 전자회로에서 LED를 순방향 연결하여 켤 경우 직렬로 적당량의 저항(100Ω ~ 500) 저항을 연결하여야 LED 및 회로가 보호된다.  그러나 아두이노의 경우 손상이 가지 않도록 포트내부적으로 처리 되어 있기에 LED 하나 정도 직결 하여 간단히 실험하기에는 크게 문제가 없다. 

 

 

▶ 포인트 : 브레드 보드를 이용하지 않고 저항 연결 없이 그리처럼 GND와 인접한 13번, 12번, 11번 포트 등을 이용하면 된다. 

 

 

▶ 프로그램 : 

 

const int LED = 13;   // LED 는 디지털핀이라 선언
 
void setup() {
pinMode(LED, OUTPUT); // LED출력핀으로 설정
}
 
void loop() {
repeatedly:
  digitalWrite(LED, HIGH); // LED를 켠다
  delay(1000);               //  1초 동안 대기
  digitalWrite(LED, LOW); //  LED를 끈다
  delay(1000);        //  1초 동안 대기

 

}

 

▶ 스케치 프로그램 사용법 :

 

스케치 화면을 처음 실행 시키면 아래와 같은 화면이 실행 되고, 크게 setup() 함수 영역과 loop() 함수 영역으로 나뉜다.  사용할 함수를 선언하거나, 기본적인 셋팅 사항을 setup() 영역에 입력하고, 실제로 반복루프 형태로 처리되어 실행되어야 할 내용들은 모두 loop() 영역에 입력하면 된다.

 

 

 

 스케치 프로그래밍은 C프로그래밍 베이스라고 보면 되는데, C프로그램 작성시 비교적 간단한 프로그램도 디버깅(실행 에러 잡기)으로 인해 몇 일을 헤메는 경우가 많았던 C프로그램과 달리 스케치 프로그래밍은 매우 쉽다. 기존 C 프로그래밍에서 해줘야 했던 세세한 설정이나, 메모리 번지 지정, 자질 구레한 설정들을 내장 함수 및 라이브러리 형태로 대부분 제작되어 있기 때문에 사용자는 프로그램 동작과 직결되는 핵심 구문만 프로그래밍 하면 쉽게 동작이 되도록 하였다. 이런 라이브러리 또한 오픈 소스 형태로 되어 있어, 전세계의 아마추어 및 전문 프로그래머에 의해 지금도 업데이트 되고 있다.    

 

 프로그래밍을 실행 시키기 전 반드시 해야 할 것이 있다. 

아래 처럼 아두이노 보드를 PC의 USB 포트에 연결하고서 보드 설정(아두이노 우노 일 경우 → "Arduino/Genuino Uno") 과  포트 설정을 올바르게 선택해주어야 한다. 

 연결 포트는 PC가 달라지거나 아두이노 보드가 바뀌면 달라질 수 있다.  일반적으로 (Arduino/Genuino Uno) 라고 표시가 되어 있는 포트를 선택하면 된다. 

 아두이노 나노의 경우 이런 표시가 없는데, 보통 com1, com2 이 외 하나의 포트가 나타나고 이를 선택하면 문제가 없다. 

 또한 매번 설정을 할 필요는 없는데, 동일한 연결을 다시 시도하게 되면 이후에는 자동으로 선택이 되어져 있어 별다른 선택을 할 필요가 없다. 

 

 

 

↓ 아두이노 동작을 위해서는 프로그램을 코딩하고 코딩된 내용을 컴파일 및 아두이노 보드로 업로도 하여야 한다.  

 

 

프로그램 메뉴 이외에 별도의 컴파일 과 컴파일&업로드 버튼이 있으니 간편하게 실행시킬 수 있다. 

 

↓ 아래 처럼 코딩하고 나서 저장 및 업로드 버튼을 눌러 저장해주고 

컴파일 버튼과 업로드 버튼을 눌러 주면 된다. 

(업로드 버튼은 컴파일 과정을 포함한다)

 

 (단축키) 

스케치 메뉴의 컴파일(Ctrl+R) & 업로드(Ctrl+U)  

 

 

 

▶ 실행 결과(영상) :

 

  

 

 

13 포트 바로 아래에 칩 형태의 내장된 LED가 있는데, 13번 포트에 연결된 LED와 같은 동작을 한다고 보면 된다. ↓

 

반응형