시스템소프트웨어 김 영욱 양 오석
목적 라즈베리파이에서 GPIO 를 이용하여 초음파 센서를 연결하고 거리를 측정해 일 정한 거리안에 사람이 들어오면 파이 카메라를 이용하여 사진을 찍고 데이터 베 이스에 올려 웹에서 사진을 보고 검색을 할 수 있게 했습니다.
프로젝트 재료 라즈베리파이 카메라모듈 초음파 센서
Flow chart 화면에 출력 사진을 찍고 저장한뒤 파일 이름을 db 에 저장한다 시작 앞에 물체 있는지 판단 Db 에 파일이 있는지 판단 없으면 있으면 없으면 있으면
회로도
프로젝트 과정 라즈베리파이에 Python 과 mysql 을 연동시켜주는 파일을 설치하고 초음파 센서 와 카메라 모듈을 연결하여 python 을 이용하여 일정거리 안에 들어오면 사진을 찍고 mysql 에 접속하여 파일명을 DB 에 저장하였습니다. Apache2,mysql,php 를 설치하여 웹서버를 구축하고 php 를 이용하여 mysql 에 접 속하고 DB 에서 파일명들을 불러와 태그를 이용하여 DB 에 저장되어있는 이미지들을 불러오고 검색할 수 있게 하였습니다.
Python 소스 #-*- coding: utf-8 -*- import RPi.GPIO as GPIO import time import picamera import MySQLdb mysqlid='root' mysqlpasswd='1234' database='image' GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # 20 번 GPIO 를 출력 방향, 21 번 GPIO 를 입력 방향으로 설정 한다. TRIG = 20 ECHO = 21
Python 소스 GPIO.setup(TRIG, GPIO.OUT) GPIO.setup(ECHO, GPIO.IN) GPIO.output(TRIG, False) time.sleep(2) # Wait for sensor settle while True: GPIO.output(TRIG,True) time.sleep( ) #why? GPIO.output(TRIG, False) # 음파를 방출 while GPIO.input(ECHO)==0: s_time= time.time()
Python 소스 # 반파를 송신 while GPIO.input(ECHO)==1: e_time= time.time() # 비행시간측정 duration = e_time-s_time # 거리 = 시간 * 속도 /2 distance = duration *17150 # 소수 둘째자리까지 반올림 distance = round(distance, 2) print "distance :", distance, " cm"
Python 소스 if(distance<50): db=MySQLdb.connect('localhost',mysqlid,mysqlpasswd,database); with picamera.PiCamera() as camera: camera.start_preview() now=time.localtime() s="%04d_%02d_%02d_%02d_%02d_%02d.jpg"%(now.tm_year,now.tm_mon,now.tm_md ay,now.tm_hour,now.tm_min,now.tm_sec) print s file="/var/www/image/"+s camera.capture(file) camera.stop_preview()
Python 소스 cur=db.cursor() cur.execute("insert into img(name) values(\'"+s+"\')") db.commit() cur.close() db.close() time.sleep(10) GPIO.cleanup()
Python 설명 ECHO 를 21 번에 TRIG 을 20 번에 연결하고 gnd 를 끌어다 echo 에 저항 3K 를 연결 하였습니다. Rpi.GPIO 모듈을 이용하여 초음파센서를 설정하고 초음파가 갔다 오는 시간을 duration 변수에 넣고 거리를 시간 * 속도 /2 를 하여 계산을 하였습니다. MySQLdb 모듈과 picamera 모듈을 이용하여 거리가 50 미만이면 사진을 찍고 DB 에 저장을 하게 하였습니다.
웹 소스 (Index.php) Double-Y Index Img
웹 소스 (Index.php) Image Date
웹 소스 (Index.php) HTML 소스를 이용하여 웹에 대한 기본틀을 짜고 PHP 소스를 이용하여 다른 php 파일을 include 하였습니다. 태그를 이용하여 표를 만들고 표안에 이미지를 넣게 하였습니다.
웹 소스 (mysql.php) <?php $hostname=" "; $username="root"; $password="1234"; $dbname="image"; $connect=mysql_connect($hostname,$username,$password) or die("MySQL Fail"); $dbconn=mysql_select_db($dbname,$connect); $result=mysql_query("select name from img"); echo " "; while($row=mysql_fetch_assoc($result)){ $n=$row['name'];
웹 소스 (mysql.php) $date = substr($n,0,4)."/".substr($n,5,2)."/".substr($n,8,2)." ".substr($n,11,2).":".substr($n,14,2).":".substr($n,17,2); echo " "; echo $date; echo " "; } echo " "; mysql_close();
웹 소스 (mysql.php) Hostname 과 username, password, dbname 을 변수로 선언하여 저장해놓고 mysql_connect 를 이용하여 mysql 에 접속하여 connect 변수에 상태를 넣었습니 다. Mysql_select_database 를 이용하여 데이터베이스를 설정하고 dbconn 변수에 넣 었습니다. Img 테이블에 있는 모든 name 컬럼을 가져오는 Sql 문인 ‘select name from img’ 을 Mysql_query 를 이용하여 result 변수에 저장하였습니다. mysql_fetch_assoc 를 이용하여 result 변수에 있는 것들을 배열로써 불러와 컬 럼명을 이용하여 접근할수 있게 하였습니다. Substr 을 이용하여 문자열을 잘라 찍은 시간을 볼 수 있게 하였습니다. 태그를 이용하여 이미지를 불러오고 width 와 height 를 이용하여 크기를 조정하였습니다.
웹 소스 (search.php) Double-Y Index Img
웹 소스 (search.php) ~
웹 소스 (search.php) Html 로 기본적인 웹 틀을 작성하고 태그를 이용하여 검색버튼을 누르면 검색을 하는 파일이 있는 경로로 가 그 파일을 불러올 수 있게 했고, 태 그를 이용하여 text 를 넣는 창과 검색버튼을 넣을수 있게 하였습니다.
웹 소스 (s_m.php) Index Img
웹 소스 (s_m.php) <?php $Date1 = $_POST["date1"]; $Date2 = $_POST["date2"]; $hostname=" "; $username="root"; $password="1234"; $dbname="image"; $connect=mysql_connect($hostname,$username,$password) or die("MySQL Fail"); $dbconn=mysql_select_db($dbname,$connect);
웹 소스 (s_m.php) $result=mysql_query("select name from img where name between '".$Date1.".jpg' and '".$Date2.".jpg'"); echo " "; echo " Img Date "; echo " "; while($row=mysql_fetch_assoc($result)){ $n=$row['name']; echo " "; $date = substr($n,0,4)."/".substr($n,5,2)."/".substr($n,8,2)." ".substr($n,11,2).":".substr($n,14,2).":".substr($n,17,2); echo " ";
웹 소스 (s_m.php) echo " "; echo $date; echo " "; } echo " "; mysql_close(); ?>
웹 소스 (s_m.php) _POST 를 이용하여 search.php 에서 입력한 text 를 불러왔습니다. 데이터베이스에 접속하고 ‘select name from img where between $Date1 and $Date2’ 를 이용하여 전에 입력한 text 사이의 기간에 찍었던 사진들을 불러오게 하였습니다.
실행 화면 (index.php)
실행화면 (search.php)
실행화면 (s_m.php)( 검색결과 )