반응형

【 Leonardo #3 Visualize Temperature& Brightness Data on your PC with Leonardo

 Using the Arduino Leonardo board, you can store data from a temperature sensor and a light sensor (CDS) in real time on a PC. This data can be visualized through the Processing IDE.
Let's have fun!   

 

▶ Pre-learning :
      1. 【 Leonardo #1】 Let's collect Temperature & Brightness data to PC! ☜ (Click)

 

▶ The Goal  

1. Screen size (width x height pixels): 500 x 500)You can connect and operate the temperature sensor (Tmp36) and the light sensor (cds) circuit on the Leonardo board.

2. Background color and lines: background (180), stroke (0), strokeWeight (5), fill (255, 20)You can send data from the temperature sensor and the light sensor to the notepad.

3. Circle drawing uses ellipse (x, y, diam, diam) functionTransmitted data can be visualized with processing IDE coding.

 

▶ 실습 목표 :  
 1. [ 레오나르도 보드에 온도센서(Tmp36)와 광센서(cds) 회로를 연결하고 동작시킬 수 있다.
 2. [ 온도센서와 광센서로 부터의 데이터 값을 PC메모장을 통해 전송 시킬 수 있다.]
 3. [ 전송된 데이터를 엑셀 등을 이용해서 활용해 볼 수 있다 ]
 

 4. [ 전송된 데이터를 프로세싱 IDE 코딩을 통해 보기 좋게 비주얼화 시킬 수 있다. ] 

 

▶ Connection diagram :
  ( Click image to enlarge )

▶ 실행 결과 이미지 :

온도 밝기 센싱값 출력화면

 【Arduino Coding】  : 
/* Leonardo board Transfer temperature & brightness data to PC with Leonardo board */

#include <Keyboard.h>   
const int TEMP = 0;    // A0 port
const int CDS = 1;    // A1 port  
const int LED = 12; 
const int BUTTON = 11; 
boolean lastBtn = LOW; 
boolean currentBtn = LOW; 
boolean running = false; 
int counter = 1;

void setup ( ) {  
  pinMode(LED, OUTPUT);
  Keyboard.begin();
  Serial.begin();
}

void loop ( )  {
  currentBtn = debounce (lastBtn); 
  if (lastBtn == LOW && currentBtn == HIGH) //Click the button
  { 
     running = !running;   // Change state values backwards 
   } 
  lastBtn = currentBtn; // Update button state values
  if (running) // Writing data 
  { 
     digitalWrite(LED, HIGH); 
     // The millis () function returns the data in ms.
     // So this function is used when the delay () function is not available
   if (millis()%1000 == 0) // Execute if statement every second
   { 
      int temperature = analogRead(TEMP); 
      int  brightness = analogRead(CDS);
      float mVoltage = temperature*5000.0/1024.0; //Converted to Celsius temperature 
      float TempDotC = (mVoltage - 500) / 10.0;   //Converted to Celsius temperature
      Keyboard.print(counter);  // Data numbering before each line 
      Keyboard.print(",");
      Keyboard.print(TempDotC);  // Temperature data
      Keyboard.print(",");
      Keyboard.print(brightness);   // Brightness data
      Keyboard.print("\n");
      counter++;
    }     
  } 
  else 
  { 
    digitalWrite(LED, LOW); 
  } 
}

// Generate subfunctions to prevent button bouncing
boolean debounce (boolean last) 
{ 
  boolean current = digitalRead (BUTTON); 
  if(last != current) 
  { 
    delay(5); 
    current = digitalRead(BUTTON); 
  } 
  return current;     
}

▶ Arduino Code download : 
( The code is zip compressed.)

Eng_TMP36CDStoPC_Arduino-code.zip
0.00MB

---------------------------------------------------------------------------------

 

 【Processing Coding】  : 
/* Visualizing Temperature & Brightness Data on a PC */

PImage imgCDS;
PImage imgTemp;
PFont font;
import processing.serial.*;
Serial port;
String temp ="";
String br ="";
String data="";
int index=0;

void setup () {
  size(800, 600);
  background(255);
  port =new Serial(this, "COM21", 9600);
  port.bufferUntil('.');
  font=loadFont("Arial-Black-50.vlw"); 
  textFont(font, 200);  
}
void draw() {
  background(255,255,255);
  imgTemp = loadImage("Temp1.png");
  imgCDS = loadImage("cds1.png");
  image(imgTemp, 0, 0);
  image(imgCDS, 450, 10, 250,250);    

  fill(150, 150, 10);
//  textSize(80);
  text(temp, 70, 500);
  fill(50, 0, 200);
  text(br, 450, 500);
}
void serialEvent(Serial port) {
  data=port.readStringUntil('.');
  data=data.substring(0, data.length()-1);
  index=data.indexOf(",");
  temp=data.substring(0, index);
  br=data.substring(index+1,data.length());
}

 

▶ Download Processing code :
( The code is zip compressed.)

imageTempCDS (Ras).zip
4.87MB

 

▶ Making Processing Font
(In order to use the window font on the processing output screen, it is necessary to convert the bitmap font into a usable bitmap font in the following process)

[Tools menu  》 "Create font"  》 Select font (size)  》 "Click OK"  》 Copy file name  》 "Paste into processing code]

 

▶ Video lecture :  
(Look in full screen view)

(youTube)

https://youtu.be/1E1DgOqXY2o

 

 

Troubleshooting :  
 If you get the following error when running a sketch in the Arduino IDE: 

 

If the above error appears, you need to confirm that you have selected the board as a Leonardo board from the board menu under Tools menu in the Arduino sketch. If the board selection is not selected by Leonardo, it will not be able to run even if it is compiled, and this will cause a 'Keyboard' error.

 

 

반응형
반응형

【 Leonardo #1 Let's collect Temperature & Brightness value to PC!

Welcome to RasINO~!   
In this chapter, we will learn how to use Arduino Leonardo board.    Let's go~!

▶ The Goal : 
 1. You can see how to use the Leonardo board.
 2. You can transfer the data from the temperature sensor & optical sensor (CDS) to the PC.
 3. You can make your data into Excel charts or use them in a variety of ways.

▶ Connection diagram :
  ( Click image to enlarge )

 

▶ Coding and annotation : 
/* Leonardo board Transfer temperature & brightness data to PC with Leonardo board */

#include <Keyboard.h>   
const int TEMP = 0;    // A0 port 
const int CDS = 1;    // A1 port  
const int LED = 12; 
const int BUTTON = 11; 
boolean lastBtn = LOW; 
boolean currentBtn = LOW; 
boolean running = false; 
int counter = 1;

void setup ( ) {  
  pinMode(LED, OUTPUT);
  Keyboard.begin();
}

void loop ( )  {
  currentBtn = debounce (lastBtn); 
  if (lastBtn == LOW && currentBtn == HIGH) // Click the button
  { 
     running = !running;   // Change state values backwards
   } 
  lastBtn = currentBtn; // Update button state values 
  if (running) // Writing data
  { 
     digitalWrite(LED, HIGH); 
     // The 'millis()' function returns the data in ms. 
     // So this function is used when the 'delay()' function is not available 
   if (millis()%1000 == 0) // Execute if statement every second
   { 
      int temperature = analogRead(TEMP); 
      int  brightness = analogRead(CDS);
      float mVoltage = temperature*5000.0/1024.0; // Converted to Celsius temperature 
      float TempDotC = (mVoltage - 500) / 10.0;   // Converted to Celsius temperature 
      Keyboard.print(counter);  // Data numbering before each line 
      Keyboard.print(",");
      Keyboard.print(TempDotC);  // Temperature data
      Keyboard.print(",");
      Keyboard.print(brightness);   // Brightness data
      Keyboard.print("\n");
      counter++;
    }     
  } 
  else 
  { 
    digitalWrite(LED, LOW); 
  } 
}

// Generate subfunctions to prevent button bouncing 
boolean debounce (boolean last) 
{ 
  boolean current = digitalRead (BUTTON); 
  if(last != current) 
  { 
    delay(5); 
    current = digitalRead(BUTTON); 
  } 
  return current;     
}

▶ Code download : 
( The code is zip compressed.)

Eng_TMP36_CDS_to_PC.zip
0.00MB

 

▶ Video lecture :  
(Look in full screen view)

 

(You can watch it on YouTube.)
https://youtu.be/K-Dc5MqBYaI

 

반응형
반응형

【 아두이노Proj#3아두이노 스마트 화분 만들기 Ver1

 

 아두이노를 이용해 스마트 화분을 만들어 보자~!

우선 핵심기능으로 토양습도센서로 흙의 습도 값을 측정하여 일정 수치이하로 떨어지면(수분이 마르면) 워터펌프를 작동하여 물을 공급해주는 기능을 구현해 보려 한다. 

 아울러 !

 [ FND를 부착하여 수분정도를 알려주는 스마트화분 버전(Ver. 2)여기를 참고  ]

 [ FND와 LCD를 함께 부착하여 수분정도를 알려주는 스마트화분 버전(Ver. 3)여기를 참고  ]

 

▶ 선수 학습 :

   1. [아두이노 센서#34]  토양 센서( YL-38) Sensor 다루기  ☜ (클릭)

 

토양습도센서 (YL-38 , YL-69) 세부 스팩

< 센서모듈과 수분탐침을 연결한 모습 >

 

 

 

 

 

 시중에 YL-38, YL-69 두 종류가 있다, 기능상의 차이는 없으며 핀배열이 조금 상이할 뿐이다. 여기서는 YL-38을 가지고 제작 하려고 한다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 워터 펌프 스팩

 

 

 

 

 

 

 

 

 

 

 

 

< 워터펌프용 튜브 : 지름 6mm (외경:6mm, 내경:4mm) >

※ 위에 사용된 호수는 외경이 6 mm 이고 내경이 4mm 입니다. 그리고 펌프 출수구에 호수를 끼울때 호수를 출수구 바같으로 감싸듯 끼우게 되는데요, 펌프출수구의 외경이 7.4mm 됩니다. 이렇게 어느정도 역으로 크기 차이가 나야 호수가 수압에 의해 쉽게 빠지지 않습니다. 다만, 지금 정도의 차이에서, 끼워보니 상당히 빡빡했어요. 이럴때는 호수 내부에 물기를 살짝 묻혀서 끼워보면 조금 쉽게 끼워집니다.  ^^

 

▶ 실습 목표 :  

  1. [ 토양습도 센서에 대해 이해 할 수 있다. 

 2. [ 워터펌프에 대해 이해 할 수 있다. ]

 3. [ 토양 센서 값에 따라 펌프를 작동시켜 물공급 조절을 할 수 있다.]

 

▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

< 스마트 화분 연결 구성도 >

※ 위 회로에 대해 모터 작동이 원활 하지 않을 수 있고, 장시간 사용시 아두이노 보드에 무리가 갈 수 있어 아래 처럼 NPN타입의 TR과 저항을 추가하여 보강하였다.  가급적이면 아래 회로를 참조하여 구성해주면 좋을 것이다.

(TR은 NPN 타입의 ' 2SC 9013 '을 사용하였으나,   TR 타입이 NPN타입 이면 어떤 것이든 동일하게 사용 가능하다. ) 

- C9011과 C9012, C9013은 모두 핀 배열이 동일함( E B C)

- C1815는 핀배열이 E C B 임

[ 위 회로에서 주의 하셔야 할 것은  아두이노 회로에서 주로 사용되는 TR의 경우(2SA, 2SC타입)  NPN형 타입은 PNP형 타입과 마찬가지로 핀의 순서가 있으니 주의 하셔야 합니다. 

우선, 도면에 사용된 NPN형 TR은 2SC9011 이며, 라벨이 적인 면의 왼쪽을 기준으로 핀 이름이 
1.   2SC9011 :  - E B C -  순서로 되어 있고, 

2.   2SC1815 :  - E C B - 순서로 되어 있으니 반드시 확인 후 연결하세요. 

또한, 이외의 TR을 사용할 경우 미니 테스터기 혹은 인터넷 검색으로 핀 순서를 확인하여 도면대로 연결하시면 문제 없이 동작 할 거예요. ]

 

[ 추가로 위 회로의 모터 연결 방식은 장시간 사용하기에는 좀 무리가 따르며, 전원을 별도로 넣어 줄 수 있는 릴레이 모듈이나, L298 모터 드라이버 모듈을 연결해서 사용하시는 걸 권장합니다. 조만간 보강된 회로의 업로드 버전도 올려 볼게요. ^^; ]   

 

▶ 실습 절차  : 

1.   부품을 준비하여 위와 같은 회로를 구성한다. 

2.   물펌프는 물통 속에 담겨진다. 따라서 물펌프의 전선이 빠져나오는 부분은 필요한 경우 글루건 등으로 보강처리 할 필요가 있다. 

3.  우선 본 실험처럼 작은 물통을 준비하고, 간이 화분을 준비해서 실험을 해 본 후 실제 화분에 설치해보면 좋을 것이다. 또한 필요한 경우 센서를 두 개 이상 설치할 수도 있고, 두개의 화분을 하나의 보드로 연결하여 관리 해 볼 수 있을 것이다.

4.  다음 버전에서는 수분 값 등을 FND 혹은 LED, LCD 등을 부착하여 표시해보려고 한다. 

 

 

▶ 프로그램 코드 및 설명 : 

 

/* 스마트 화분 만들기 [코딩]  */

#define A0Pin 0

int sensorVal = 0;

int pump = 13;

void setup ( ) {
 Serial.begin(9600);

 pinMode(pump, OUTPUT);

 }

void loop ( ) { 

  sensorVal = analogRead(A0Pin);    //토양센서 센서 값 읽어 저장

  delay(1000);

  Serial.print("Asensor = ");

  Serial.println(sensorVal);  // 0(습함) ~ 1023(건조)값 출력

  // 습도 값에 따라 출력 처리 다르게 해줌

  if ( sensorVal <= 900) {   

    Serial.println(" Very Wet ! ");       

    digitalWrite(pump, LOW);   

  }

 else if ( sensorVal > 900){

    Serial.println(" Very Dry ! ");   

    digitalWrite(pump, HIGH);

    Serial.println(" Pump On for 1 Second!");   

    delay(1000);

  }   

  delay(3000);   // 정보수집 시간(간격) 설정

}

▶ 실행영상 :  

(전체화면 보기로 보세요)

 

(아래는 유튜브로 시청하기)

https://youtu.be/GlYIry2jga8

▶ 아두이노 파일다운 :

(다운받아서 압축을 풀어 사용하세요)

AutoWaterPot.zip
0.00MB

 

반응형
반응형

【 아두이노 기초 】 #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




반응형