티스토리 뷰
어제 간단하게 적외선 센서를 이용해서 장애물이 있는지를 감지하는 예제를 진행해봤다.
2013/05/20 - [About Arduino] - [Arduino] 적외선 센서를 활용한 전방 감지
그런데 생각해보니까 이런 감지에 대한 Output은 LCD를 통해서만 주어진다. 사람이 항상 이 작은 lcd만을 바라볼 수는 없으므로 다른 방식의 피드백도 주어져야 할 것이다. 그래서 부품통을 찾아보니 사진과 같은 부저(buzzer)가 있길래 삽입해봤다.
우리가 흔히 부저라고 알고 있는 것의 정식 명칭은 Piezo buzzer 이며, 말 그대로 자성에 따른 운동에너지를 활용해서 소리를 내는 원리(다른 말로 압전효과!)를 가진다. 이 조그마한 게 소리를 얼마나 낼 수 있을까 무시할 수도 있겠지만, 생각보다 많은 소리를 낸다. 앞에서 언급한 것처럼 운동에너지를 활용해서 소리를 내기 때문에 이 운동에너지의 량만 적절히 조절한다면 다양한 소리를 낼 수 있다. 보통 이를 구현하는 방식은 PWM을 사용하는게 기본이지만 아두이노 IDE에 내장되어 있는 pitches 라는 라이브러리를 활용하면 음계와 박자를 삽입해서 적절한 음악을 낼 수 있다.
예제에서 제공하는 toneMelody 예제와 이전 포스트 예제를 적절히 조합해보았다.
#include <LiquidCrystal.h> #include "pitches.h" const int sensorPin = 7; const int buzzerPin = 8; const int threshold = 80; LiquidCrystal lcd(12,11,5,4,3,2); int melody[] = { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 }; void setup(){ lcd.begin(16,2); pinMode(sensorPin,INPUT); } void loop(){ lcd.clear(); int value = digitalRead(sensorPin); lcd.setCursor(0,0); lcd.print("Detected: "); if(value == 0){ lcd.print("O"); beep(); } else{ lcd.print("X"); //digitalWrite(buzzerPin,LOW); } delay(100); } void beep(){ for (int thisNote = 0; thisNote < 8; thisNote++) { // to calculate the note duration, take one second // divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000/noteDurations[thisNote]; tone(buzzerPin, melody[thisNote],noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(buzzerPin); } }
동작 영상은 다음과 같다. 무슨 노래인지는 모르겠지만...
아무튼 이런식으로 buzzer와 적외선 센서를 활용하면 멋진 전방 감지기를 만들어낼 수 있다.
PS : 감지가 안될 때에도 노래가 나오게끔 변경
'Arduino' 카테고리의 다른 글
[Arduino] Galileo도 깜빡깜빡! (0) | 2014.02.12 |
---|---|
[Arduino] Wiznet WiFi Shield (4) | 2013.07.11 |
[Arduino Concept] 심박동측정기를 결합한 시스템 (6) | 2013.06.22 |
[Arduino] 적외선 센서를 활용한 전방 감지 (7) | 2013.05.20 |
[Arduino] ArduCAM (2) | 2012.12.31 |
[Arduino] 4x4x4 LED Cube with Rainbowduino (2) | 2012.12.25 |
[Arduino] Getting started with TFT LCD & Arduino (2) (0) | 2012.10.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Gan
- Off-policy
- Pipeline
- SketchFlow
- Offline RL
- Distribution
- Policy Gradient
- Windows Phone 7
- Kinect
- bias
- Kinect SDK
- 한빛미디어
- 딥러닝
- TensorFlow Lite
- arduino
- ColorStream
- dynamic programming
- RL
- Kinect for windows
- DepthStream
- End-To-End
- Expression Blend 4
- ai
- 파이썬
- 강화학습
- windows 8
- PowerPoint
- processing
- reward
- Variance
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함