December 22, 2024

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[30호]감시자동차

Cap 2015-11-30 16-24-59-922

감시자동차

글 | 광운대학교 유혜준, 김태현

심사평

싱크웍스 어디선가 많이 보아왔던 작품인 것 같다. 따라서 창의성에는 높은 점수를 줄수 없지만 첨부된 동영상으로 볼때 완성도가 있어 보인다. 작품을 만들면서 좋은 공부가 되었을 것 같다.

JK전자 감시카메라 기능과 센서들을 활용해서 로봇이 위치한 공간의 여러가지 데이터 수집과 함께 로봇 근처의 움직임을 파악하여 침입 탐지까지 가능하도록 발전시키면 괜찮을 것 같음. 아두이노를 활용한 모터제어, 리눅스를 활용한 스트리밍 전송, PC와 안드로이드 APP까지 다양한 분야의 기술들이 접목되어 있는 작품이다.

뉴티씨 좀 더 튼튼하게 제작하면, 사람이 쉽게 접근할 수 없는 곳에 이 차량을 투입하여 접근시켜서 근접 촬영을 하여, 보다 내부 상황을 정확하게 판단하거나 할 수 있을 것 같다. 매우 재미있는 기술로 보이며, 라즈베리파이나 아두이노의 좋은 응용으로 보인다. 좀 더 생각하여, 무엇을 할 수 있겠는지 등도 판단해 보면 보다 좋은 작품으로 문서화 되었을 것 같다. 또한, 기술 구현 쪽도 좀 더 자세히 남겼었다면 하는 아쉬움도 남는다.

개요

■ 개요
개인 사생활 보호에서부터 공공기관의 보안에서 감시카메라는 널리 이용된다. 최근 급증하고 있는 범죄에서도 감시카메라의 역할이 중요하게 대두된다. 이런 감시카메라는 범죄예방, 출입자 확인 등과 같은 기본적인 분야에서 사용되며 분실물 탐색이나 미아확인, 대테러방지 등 그 응용분야가 점차 확대되고 있다. 기존의 감시카메라는 한 장소에 고정되어있으며 감시할 수 있는 영역이 제한적이다. 하지만 감시카메라를 움직일 수 있는 로봇위에서 동작시킬 수 있으며 원거리에서도 조작 및 감시가 가능하다면 좋을 것이라 생각하여 이 프로젝트를 진행하게 되었다.

30 감시자동차 (6)
집 밖에서도 집안의 상황을 파악할 수 있는 로봇을 평소 제작해보고 싶었다. 이 로봇의 이름은 감시자동차로써 스마트폰 혹은 컴퓨터로 원거리에서 로봇이 있는 장소를 실시간으로 볼 수 있으며, 조종이 가능하다.
감시자동차는 단순한 영상스트리밍 기능을 이용한 감시뿐만 아니라 사용자가 모터를 조작하여 동적으로 감시자동차가 있는 환경을 파악할 수 있다.

■ 기대방안
추후 온습도센서를 부착하여 집안의 환경데이터를 수집할 수 있으며, 카메라를 활용하여 특정 상황을 인식 후 사용자에게 알림을 할 수 있다. 또한 스피커를 부착하여 집안의 사람들에게 음성출력도 추후 해보고 싶다. 감시자동차는 드라이브 레코더(교통사고 발생 전후의 차량주행정보와 운전자 운전상태 화상 및 차량 데이터를 기록하여 사고의 발생원인을 정확하게 분석 할 수 있는 시스템)라는 시스템에도 활용될 수 있다.

작품설명

■ 주요 동작 및 특징
1. 스마트폰 외의 기기에서 감시자동차를 조종한다.
스마트폰의 WIFI 네트워크가 연결이 되었을 경우 감시자동차 조종이 가능하다. 노트북에서 명령코드를 라즈베리파이에게 보내고 라즈베리파이가 아두이노에게 명령코드를 보내 모터를 동작시킨다. 라즈베리파이 안에 TCP 서버와 Serial 통신모듈을 병렬로 동작하도록 구현하였다. 조종을 하기위해서 스마트폰과 컴퓨터에 TCP/IP 클라이언트를 구현을 하였다.

30 감시자동차 (2)
스마트폰 어플리케이션의 실행 모습

 

위의 십자가 모양의 버튼을 누를 경우 DC모터를 동작시키며, 양 쪽의 버튼은 카메라의 서보모터를 제어하게 된다.

2. VLC를 활용한 영상 스트리밍
VLC라는 스트리밍 상용 소프트웨어를 사용했다. 컴퓨터에서 스트리밍영상을 보기 위하여 VLC 외부라이브러리를 활용하여 플레이어 프로그램을 제작하였으며 , 안드로이드 스마트폰의 경우 내부 스트리밍 라이브러리를 활용하여 제작하였다. 초당 프레임은 25프레임으로 끊기지 않고 자연스러운 동영상을 볼 수 있다.

3. 어디서든지 인터넷만 되면 조종 및 영상보기 가능
라즈베리파이에 WIFI 동글이를 붙여서 공유기의 WIFI를 잡을 수 있게 하였고 공유기의 DMZ 설정으로 라즈베리파이에 누구나 조종 및 영상을 볼 수 있도록 하였다.

4. 아두이노 내부소스 수정
아두이노의 Serial 통신은 Main Loop의 딜레이가 있을 경우 즉각적으로 반응하지 못한다. 즉 움직이는 명령을 보냈는데 바로 동작하지 않는다는 것이다. 즉각적인 반응을 하기 위해서 내부 Core 소스를 분석 및 수정하였다. 아두이노 내부 USART RX INTERRUPT를 수정하였다. 인터럽트 내부에 사용자 함수를 넣어서 내가 원하는 동작이 즉각적으로 반응할 수 있도록 수정하였다.

30 감시자동차 (3) 30 감시자동차 (2)

5. DC모터, Servo모터 제어
DC모터의 경우 제어하기 위해 L298을 이용하여 모터드라이버를 제작하였으며 정, 역방향, PWM을 활용하여 속도 조절도 가능하도록 구현 하였다.

30 감시자동차 (1)

Servo모터의 경우 아두이노 라이브러리를 활용하였으며 내부적으로는 특정 PWM에 따라 각도 값을 조절이 가능하다.

아두이노 내부소스 수정 03

■ 전체 시스템 구성
전체 시스템 구조도는 다음과 같다.

30 감시자동차 (7)
스마트폰과 컴퓨터로부터 특정 명령 패킷이 공유기를 통하여 라즈베리파이로 전송된다. 이와 같이 구성한 이유는 라즈베리파이에 랜선을 꽂으면 휴대성 및 이동성에 문제가 생기므로 공유기를 활용하였으며 공유기의 DMZ기능을 활용하여 라즈베리파이를 서버로 활용하였다. 사용자로부터 명령패킷을 받은 라즈베리파이는 아두이노로 명령 패킷을 보내며 아두이노는 받은 명령패킷을 파악하여 모터를 제어하게 된다. 위의 시스템을 구성하기 위하여 라즈베리파이 내부의 TCP/IP 서버, Serial 통신을 병렬로 동작하도록 구현하였다.

■ 개발 환경
사용 언어 : JAVA ,C, C++
플랫폼 : Linux(Raspbian), Window, Android, Arduino

■ 발전 계획
첨부된 동영상을 보면 영상 스트리밍의 경우 실제 상황보다 5초에서 10초 정도 지연된 영상이다. 이는 VLC라는 상용소프트웨어와 공개된 라이브러리를 사용했음에도 나타나는 문제점으로 추후 직접 영상 스트리밍을 구현하도록 한다. 스트리밍 외의 감시자동차를 조종의 경우에는 어디에서든지 지연없이 조종이 가능하다.
카톡에서 메시지가 올 경우 Notification으로 사용자가 확인할 수 있다. 이를 Push 기능이라 한다. 추후 Google Cloud Message 기능을 이용하여 카톡과 같은 Push 기능을 구현하겠다. 이 기능은 로봇이 특정 이상 상황을 파악했을 경우 스마트폰에 PUSH 알람을 발생 시킬 수 있다.

기타

■ 소스코드

■ 감시자동차 모터제어 소스 ■
USART RX INTERRUPT 내부에 사용자 함수를 등록 시켜 특정 값을 받았을 때 특정 변수를 바꿔주었다. 실질적인 제어는 Loop함수에서 실행된다.
void setup()
{
Serial.begin(9600);
Serial1.begin(115200);
attachUsart(1,uartInt);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void uartInt()
{
//Serial.println(“int”);
Serial.print(“Receive :”);
Serial.println(C_Rx);
switch(C_Rx)
{
case ‘D’://LEFT
dir=1;
break;
case ‘E’://UP
dir=2;
break;
case ‘F’://DOWB
dir=3;
break;
case ‘G’://RIGHT
dir=4;
break;
case ‘H’:
if(pos>10)
pos–;
if(pos==10)
pos=10;
myservo.write(pos);
break;
case ‘I’:
if(pos<170)
pos++;
if(pos==170)
pos=170;
myservo.write(pos);
break;
}
C_Rx=0;
}

■ 감시자동차 모터제어 소스 ■
실질적인 제어를 하는 Loop 함수 dir변수에 따라서 DC모터 or Survo 모터를 제어하게 된다.

void loop()
{
switch(dir)
{
case 0:
break;
case 1:
Serial.println(“this is 1”);
digitalWrite(34,LOW);
digitalWrite(35,HIGH);
digitalWrite(36,HIGH);
digitalWrite(37,LOW);
analogWrite(2,150);
analogWrite(3,150);
break;

case 2:
Serial.println(“this is 2”);
digitalWrite(34,HIGH);
digitalWrite(35,LOW);
digitalWrite(36,HIGH);
digitalWrite(37,LOW);
analogWrite(2,150);
analogWrite(3,150);
break;

case 3:
Serial.println(“this is 3”);
digitalWrite(34,LOW);
digitalWrite(35,HIGH);
digitalWrite(36,LOW);
digitalWrite(37,HIGH);
analogWrite(2,150);
analogWrite(3,150);
break;
case 4:
Serial.println(“this is 4”);
digitalWrite(34,HIGH);
digitalWrite(35,LOW);
digitalWrite(36,LOW);
digitalWrite(37,HIGH);
analogWrite(2,150);
analogWrite(3,150);
break;

}
dir=0;
delay(100);
analogWrite(2,0);
analogWrite(3,0);

}
■ 라즈베리파이 TCP 서버 및 Serial 통신 구현 ■
클라이언트로부터 받은 명령패킷을 Serial로 보낸다. 그 중에서 TCP/IP 설정 및 에러가 났을 경우(연결이 끊겼을 경우) 다시 클라이언트를 받을 수 있는 상태로 만든다.

state=pthread_create(&t_id,NULL,thread_function,NULL);
TCP/IP 서버 설정
serv_sock=socket(PF_INET, SOCK_STREAM, 0);
if(serv_sock == -1)
error_handling(“socket() error”);
optlen=sizeof(option);
option=1;
setsockopt(serv_sock,SOL_SOCKET,SO_REUSEADDR,&option,sizeof(option));
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(atoi(argv[1]));
//TCP/IP 서버 내부 에러 처리 소스
while(1)
{
printf(“heyoo\n”);
clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if(clnt_sock==-1)
error_handling(“accept() error”);
else
printf(“accept success\n”);
while(1)
{
//sleep(3);
printf(“breakout\n”);
str_len=read(clnt_sock, message, BUFSIZE);
printf(“ERROR0 : %d, %s,%d\n”,errno , strerror(errno),str_len);
if(errno==0)
{
errno00++;
if(str_len==0)
{
close(clnt_sock);
printf(“close sock\n”);
break;
errno00=0;
}
}
if(errno==104)
{
close(clnt_sock);
printf(“close sock\n”);
break;
}
………..

■ 회로도

회로도

■ 작품사진

30 감시자동차 (4)
[그림 1] 라즈베리파이와 카메라
30 감시자동차 (5) 30 감시자동차 (6)
[그림 2] ROVER5와 제어부 실험
 30 감시자동차 (7)  30 감시자동차 (5)
[그림 3] 로버5의 하드웨어 구성
 30 감시자동차 (2)  30 감시자동차 (3)
[그림 4]영상 스트리밍 화면
 ict 30 동영상캡쳐 감시카메라  ict 30 동영상캡쳐 감시카메라 (1)
 ict 30 동영상캡쳐 감시카메라 (2)  ict 30 동영상캡쳐 감시카메라 (4)
[그림 5]작동 화면
Leave A Comment

*