로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2010/03/14
Link#1 (Down:271)
ㆍ추천: 0  ㆍ조회: 4035   
  아듀이노 초음파 거리측정 및 응용
제목 : Arduino interfacing SRF05 rage finder with LCD screen
참조 : http://www.arvydas.co.uk/2010/01/arduino-interfacing-srf05-rage-finder-with-lcd-screen/

사람의 귀에는 들리지 않는 음성진동 비임을 공기중에 발사하고, 물체에서 반사되어 돌아 오는 반사파를 검출하는 방법으로,
발사한 시간과 되돌아온 시간차를 2로 나누고, 초음파의 진행속도를 곱하여 거리를 검출하는데 사용하고 있다.
 
장거리 측정용인 레이더는 전자기파 비임을 사용하므로 GHz대의 마이크로파를 사용해야만 거리측정이 가능하지만,
단거리 측정용인 초음파는 음성진동 비임을 사용하므로 엄청나게 낮은 주파수인 KHz 대의 주파수를 사용할 수 있다.
 


초음파 거리측정 모듈 SRF05
  

예제는 아듀이노 메가, LCD 화면과 SRF05 초음파 거리 측정기를 사용한다.
거리 측정은 SRF05 로 부터 LCD 화면에 cm로 표시된다.
 

다음은 거리측정방법으로 2종류의 좋은 비교를 보여준다.
http://www.robot-electronics.co.uk/htm/srf05tech.htm

초음파 거리측정 모듈 SRF05 연결방법
1. SRF05 VCC ----- ARDUINO VCC
2. SRF05 ECHO ---- ARDUINO D6
3. SRF05  TRIGGER ----- ARDUINO D7
4. SRF05 MODE
5. SRF05 GND  ----- ARDUINO GND

16자x2줄 문자표시 LCD 연결방법
1. LCD GND --- ADRUINO GND
2. LCD +5V ---- ADRUINO VCC
3. LCD VO ---- 0~1K ohm 저항 --- ARDUINO GND
 
4. LCD RS ---- ADRUINO D12
5. LCD RW --- ADRUINO GND
6. LCD E ---- ADRUINO D11
11. LCD D4 --- ADRUINO D5
12. LCD D5 --- ADRUINO D4
13. LCD D6 --- ADRUINO D3
14. LCD D7 --- ADRUINO D2
 
LCD BLU 연결방법
(LCD 뒷면의 BLU 점퍼를 납떔으로 연결해야 BLU가 켜지는 제품도 있음)
15. LCD BL- --- ADRUINO GND
16. LCD BL+ --- ADRUINO VCC
  
소스는 아듀이노에서 작동한다
#include // include the library code:
#define echoPin 6 // the SRF05's echo pin
#define initPin 7 // the SRF05's init pin
 
unsigned long pulseTime = 0; // variable for reading the pulse
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialize the library with the numbers of the interface pins
 
void setup()
{
  lcd.begin(16, 2); // set up the LCD's number of rows and columns:
  pinMode(initPin, OUTPUT); // make the init pin an output:
  pinMode(echoPin, INPUT); // make the echo pin an input:
}
 
void loop()
{
  digitalWrite(initPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(initPin, LOW);
 
  pulseTime = pulseIn(echoPin, HIGH);
  lcd.setCursor(0,0);
  lcd.print(pulseTime / 58, DEC);
  lcd.print("cm");
  delay(100);
  lcd.clear();

 
초음파 거리측정기 SRF05를 위한 다른 응용으로 LuckyLarry 씨의 basic theremin이 있다. 
http://luckylarry.co.uk/2009/11/arduino-a-basic-theremin/

 
 
초음파 거리측정 모듈 SRF05 연결방법
1. SRF05 VCC ----- ARDUINO VCC
2. SRF05 ECHO ---- ARDUINO D2
3. SRF05  TRIGGER ----- ARDUINO D3
4. SRF05 MODE
5. SRF05 GND  ----- ARDUINO GND

SPEAKER+  ---- ARDUINO D6
SPEAKER-  ---- ARDUINO GND
 
The Sketch
To save the annoyance of those around you I’ve added in a small statement that basically says if your hand is not within 30 cm of the sensor then don’t play a sound.
But otherwise basically we measure distance constantly and when an object is detected we convert the distance in to a value for which to use in the oscillation of the speaker to generate different pitchs and frequencies.
 
// written at: luckylarry.co.uk
// very easy Theremin
// setup pins and variables for SRF05 sonar device
int echoPin = 2;             // SRF05 echo pin (digital 2)
int initPin = 3;             // SRF05 trigger pin (digital 3)
int speakerPin = 6;                             // Speaker pin
unsigned long pulseTime = 0;  // stores the pulse in Micro Seconds
unsigned long distance = 0;  // variable for storing the distance (cm) we'll use distance as a switch for the speaker
unsigned long soundDelay = 0;  // variable for storing the deay needed for the pitch
 
//setup
void setup() {
 
  pinMode(speakerPin, OUTPUT);   // sets pin 6 as output
  pinMode(initPin, OUTPUT); // set init pin 3 as output
  pinMode(echoPin, INPUT); // set echo pin 2 as input
 
}
 
// execute
void loop() {
  digitalWrite(initPin, HIGH);   // send 10 microsecond pulse
  delayMicroseconds(10);   // wait 10 microseconds before turning off
  digitalWrite(initPin, LOW); // stop sending the pulse
  pulseTime = pulseIn(echoPin, HIGH); // Look for a return pulse, it should be high as the pulse goes low-high-low
  distance = pulseTime/58;   // convert the pulse into distance (cm)
  soundDelay = pulseTime/3;   // alter this variable to alter the pitch of the sound emitted
 
  // make the sound.
  // check the distance, if over 30cm make no sound
  if (distance < 30) {
  digitalWrite(speakerPin, HIGH);
  delayMicroseconds(soundDelay);
  digitalWrite(speakerPin, LOW);
  delayMicroseconds(soundDelay);
  }
}
The Result
Pretty cool for no parts – but of course the sound quality isn’t great.
I guess you could add a switch in the circuit so you could manually start and stop it to produce clearer notes.
http://www.flickr.com/photos/peplop/4083266594/

You can see it in action here: A Basic theremin, Piano theremin
http://luckylarry.co.uk/2009/11/arduino-basic-theremin-meets-processing/

 

초음파 거리측정 모듈 SRF05 연결방법
SRF05 GND  ----- ARDUINO GND
SRF05 ECHO ---- ARDUINO D2
SRF05  INIT ----- ARDUINO D3
SRF05 VCC ----- ARDUINO VCC

The scketch
// written at: luckylarry.co.uk
// very easy Theremin combined with processing
// sketch prints out distance to the serial port
// processing picks up value and plays notes accordingly
// no annoying speaker drone! :)
 
// setup pins and variables for SRF05 sonar device
int echoPin = 2;             // SRF05 echo pin (digital 2)
int initPin = 3;             // SRF05 trigger pin (digital 3)
unsigned long pulseTime = 0;  // stores the pulse in Micro Seconds
unsigned long distance = 0;  // variable for storing the distance (cm) we'll use distance as a switch for the speaker
 
//setup
void setup() {
 
  pinMode(initPin, OUTPUT); // set init pin 3 as output
  pinMode(echoPin, INPUT); // set echo pin 2 as input
  Serial.begin(9600);                           // start the serial port
 
}
 
// execute
void loop() {  
  digitalWrite(initPin, HIGH);   // send 10 microsecond pulse  
  delayMicroseconds(10);   // wait 10 microseconds before turning off  
  digitalWrite(initPin, LOW); // stop sending the pulse  
  pulseTime = pulseIn(echoPin, HIGH); // Look for a return pulse, it should be high as the pulse goes low-high-low  
  distance = pulseTime/58;   // convert the pulse into distance (cm)
 
  // make the sound.
  // check the distance, if over 50cm make no sound - send no signal
  if (distance < 50) {
    Serial.println(distance);                   // print the distance value to the serial port
    delay(50);                                  // delay for 50 milliseconds before starting again...
  }
}
 
The Processing Sketch
With your code now running on the Arduino board we now need processing to pick up these values.
Previously I had something of an issue getting these values and reading them.
But in hindsight I was being a bit dim when I realised I could just look
in the serial port for when a new line ( ) was printed which would tell me that a new value was about to be sent.

Of course thats providing your Arduino sketch is using Serial.println() (print line) instead of Serial.print()
which just chucks every value into one long string – and if you look at my previous attempts
with processing you can laugh at how I started splitting this huge string up etc…
Oh hindsight is a wonderful thing, anyway, I digress, below is the processing sketch:
 
// written at: luckylarry.co.uk
// very easy Theremin combined with processing sketch prints out distance to the serial port
// processing picks up value and plays notes accordingly no annoying speaker drone! :)
// replace the sounds and delays with your own...
 
import processing.serial.*;                // import serial library so we can read the serial port
import ddf.minim.*;                        // import minim library
 
// define the serial port
Serial myPort;         
 
// define minim variables:
// here we say that variable A is an audiosample etc...
Minim minim;
AudioSample GSharp;
AudioSample A;
AudioSample Bb;
AudioSample B;
AudioSample C;
AudioSample CSharp;
AudioSample D;
AudioSample Eb;
AudioSample E;
AudioSample F;
AudioSample FSharp;
AudioSample G;
 
// setup
void setup () {
 
  // set up the variables, loading in the sound files from your project folder
  // which should be the same place as where you save this sketch
  // details on using minim and audioSample are here:
 // http://code.compartmental.net/tools/minim/manual-audiosample/
  minim = new Minim(this);
  GSharp = minim.loadSample("GSharp.wav", 2048);
  A = minim.loadSample("A.wav", 2048);
  Bb = minim.loadSample("Bb.wav", 2048);
  B = minim.loadSample("B.wav", 2048);
  C = minim.loadSample("C.wav", 2048);
  CSharp = minim.loadSample("CSharp.wav", 2048);
  D = minim.loadSample("D.wav", 2048);
  Eb = minim.loadSample("Eb.wav", 2048);
  E = minim.loadSample("E.wav", 2048);
  F = minim.loadSample("F.wav", 2048);
  FSharp = minim.loadSample("FSharp.wav", 2048);
  G = minim.loadSample("G.wav", 2048);
 
  // List serial ports, saves us trying to figure out which COM we're using.
  println(Serial.list());
  // Open the active port - providing you've only got one sending serial data (which you should)
  myPort = new Serial(this, Serial.list()[1], 9600);
  // don’t read the serial buffer until we see a new line - this is genius and simple compared with my last efforts
  myPort.bufferUntil(' ');
}
 
void draw() {
  // we need to declare the draw function even though we're not using it!!
}
 
void serialEvent (Serial myPort) {
  // get the string from the serial buffer - gets all chars until the next line break...
  String bufferString = myPort.readStringUntil(' ');
 
  if (bufferString != null) {
    // get rid of any whitespace - sometimes the serial buffer can have blanks etc.. in the string
    bufferString = trim(bufferString);
    // convert the value to an int - we're only sending numbers over the serial port so parsing it to an int shouldn't ever be an issue.
    float inByte = float(bufferString);
    int pulse = int(bufferString);         // declare a variable to hold our value.
    println(pulse);                        // for debug print the value so we can check it.
 
    // remember that our pulse is in CM so if its less than 5cm then do this etc... else do this... else do this.. for as many sound samples
    if ( pulse < 5 ) {
      GSharp.trigger();
      delay(25);
    }
    else if ( pulse < 8 ) {
      A.trigger();
      delay(25);
    }
    else if ( pulse < 11 ) {
      Bb.trigger();
      delay(25);
    }
    else if ( pulse < 14 ) {
      B.trigger();
      delay(25);
    }
    else if ( pulse < 17 ) {
      C.trigger();
      delay(25);
    }
    else if ( pulse < 20 ) {
      CSharp.trigger();
      delay(25);
    }
    else if ( pulse < 23 )  {
      D.trigger();
      delay(25);
    }
    else if ( pulse < 26 ) {
      Eb.trigger();
      delay(25);
    }
    else if ( pulse < 29 ) {
      E.trigger();
      delay(25);
    }
    else if ( pulse < 32 ) {
      F.trigger();
      delay(25);
    }
    else if ( pulse < 35 ) {
      FSharp.trigger();
      delay(25);
    }
    else if ( pulse < 38 ) {
      G.trigger();
      delay(25);
    }
    else if ( pulse > 50 ) {
      // if the distance is greater than 50cm then play nothing
    }
 
  } // end if there's a value in the serial bufferstring
 
}   // end void serialevent()
 
결과:  http://www.flickr.com/photos/peplop/4083675920/

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
AVRTOOLS™
 
 
   
윗글 Arduino IDE에서 AVRISP-mkII 사용방법
아래글 M328-USB의 비밀 온도센서
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 565 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17616 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2724 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 2828 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 5626 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 4702 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3242 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 2886 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3267 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 2869 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3129 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 7748 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 4035 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3463 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 5112 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 4017 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3544 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3227 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6434 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 3897 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5431 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 7026 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 8058 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4417 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 4733 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5332 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9430 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 16793 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6584 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5419 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4689 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 4009 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 5908 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4524 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4544 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 4752 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5274 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 4004 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13527 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9264 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 5736 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6595 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 4028 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3343 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3149 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 5056 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 4988 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5667 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4084 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3387 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4621 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9657 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3462 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 4901 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6286 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 4773 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 4744 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 5077 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4590 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7344 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6420 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0