행위감지를 위한 Ultrasonic Sensor

monto8790 edited this page Jul 17, 2017 · 1 revision

Ultrasonic sensor와 Tas 연동

GPIO 핀 활용하여 Ultrasonic sensor 연결하기

GPIO 핀 테이블


Ultrasonic sensor (초음파 센서)

  • 우선 Triger 핀에 10us 정도의 High 신호를 주면 초음파센서는 40khz 펄스를 자동으로 8번을 발생시킴

  • 펄스를 발생시킨 직후에 Echo 핀은 High 되고 반사된 초음파가 감지되었을 때 Echo 핀이 Low 가 됨

  • Echo 핀이 High 였다가 Low 가 되는데 걸리는 시간을 측정하여서 그 시간을 초음파의 속도/2(즉 58)로 나누면 거리가 나옴

  • 초음파 센서는 초음파를 보내서 반사되어 오는 시간을 측정하여 거리를 계산함

  • 초음파 센서는 4개의 핀(VCC, Triger, Echo, GND)이 있음

  • 위에 첨부한 GPIO 핀사진에 NAME(BCM)에 표시된 핀의 이름을 참고하면 됨

  • VCC는 5v핀에 연결하고, GND는 GND 핀에 연결함

  • Triger 핀과 Echo 핀은 GPIO 핀 (BCM : Triger-24, Echo-23)에 연결함

Ultrasonic sensor 소스코드

  • TAS 디렉토리에서 sudo nano ./ultra.py를 통해 ultrasonic sensor 동작시키기 위한 코드 작성함

  • python ./ultra.py을 입력하여 동작을 확인함

      import RPi.GPIO as gpio
      import time
      gpio.setmode(gpio.BCM)
      trig=24
      echo=23
      chk0=0
      chk1=1
      gpio.setup(trig,gpio.OUT)
      gpio.setup(echo,gpio.IN)
      try:
      		gpio.output(trig,False)
      		time.sleep(0.5)
      
      		gpio.output(trig,True)
      		time.sleep(0.00001)
      		gpio.output(trig,False)
      		while gpio.input(echo)==0:
      			pulse_start=time.time()
      		while gpio.input(echo)==1:
      			pulse_end=time.time()
      		pulse_duration=pulse_end-pulse_start
      		distance=pulse_duration*17000
      		distance=round(distance,2)
      		if distance<400:
      		    if distance <20:	
      			print chk1
             			    else:
       	 	        print chk0
                      else:
      		    print chk0
      except:
      	gpio.cleanup()
    

TAS 설치 및 수정

  • &Cube(thyme) v1.6.5번에 해당하는 TAS소스코드 사용

TAS 설치

  • TAS는 설치할 때 linux의 root 권한을 통해 설치해야 함
  • TAS설치파일이 있는 디렉토리에 접근 후 sudo su 명령어를 입력함
  • 디렉토리 내에서 npm install을 입력함
  • 설치가 완료되면 exit 명령어를 통해 root 계정에서 pi계정으로 다시 바꿈

TAS Code 수정

  • 기존에 만들어진 TAS Code는 serial 통신을 통해 sensor Data를 수신함

  • TAS 디렉토리에서 TAS 메인 소스코드인 app.js 파일을 열어서 수정이 필요함

  • sudo nano ./app.js

  • Ultrasonic sensor는 GPIO를 활용하여 Data를 수신하기 때문에 serial 통신에 해당되는 부분은 주석처리를 함

      var exec = require("child_process").exec;
      //nodejs에서 파일을 실행시키거나 동작시킬때 쓰는 모듈
    
      // python 을 통해 ultrasonic sensor 동작 파일을 실행하고  값을 읽어서 &cube에 전달하는 code
      setInterval(function(){
      	exec('sudo python ultra.py', function(error, stdout, stderr) { 
          if(tas_state=='upload') {
              for(var i = 0; i < upload_arr.length; i++) {
                  if(upload_arr[i].id != "timer") {
                      var cin = {ctname: upload_arr[i].ctname, con: stdout};
      		console.log("SAND : " + JSON.stringify(cin) + ' ---->')
                      upload_client.write(JSON.stringify(cin)+'<EOF>');
                      break;
                  }
              }
          }
      });
      }, 1000);
    
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.