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

[46호]기상관측용 드론 & 라즈베리파이 기상대 서버

Cap 2017-10-18 13-15-49-260

2017 ICT 융합 프로젝트 공모전 참가상

기상관측용 드론 & 라즈베리파이 기상대 서버

글 | 단국대학교 김승권

1. 심사평
칩센 기상관측이라는 시점으로 측정항목을 구성하였고, 그것을 외부 시스템과 연계하려는 부분의 시도 및 여러가지 프로그램 언어를 사용하여 구성을 한 측면은 높이 평가합니다. 이번 작품 측정 시스템의 CORE라고 할 수 있는 드론을 이용하여 어떠한 제품을 만들게 될 경우한 가장 RISK한 부분에 대해 정확히 이해를 하고 있는 것으로 보입니다. 배터리를 늘리면 늘어난 무게로 인해 더 강한 모터 출력이 필요하고, 더 강한 모터 출력을 얻기 위해서는 다시 배터리가 늘어나서 무게가 늘어나는 조건의 충돌이 늘상 반복되게 되어 있습니다. 현재의 측정 시스템의 개선을 보는 것도 중요하겠지만, 드론 자체의 효율적 운용 방안을 고민하여 위에서 말한 드론 사용의 한계를 극복할수 있는 방법에 대한 접근을 하면 또 다른 좋은 결과물이 나올 수 있지 않을까요?

뉴티씨 기상 관측용 장비는 최대한 오랫동안 공중에 떠있어야 하기 때문에 배터리의 소모가 심한 드론으로는 부적합할 것 같습니다. 장비를 유선 전원 공급으로 바꾸거나 배터리 소모 문제를 해결할 방법을 찾으면 실용성이 좋아질 것이라 생각됩니다. 실제 유선 장비의 경우 24시간 활용이 가능한 점 등의 잇점으로 활용이 되고 있음을 감안하여 사용하면 좋겠습니다.

위드로봇 드론 기체가 센서 측정에 미치는 영향을 좀 더 검토해 봤으면 합니다.

2. 작품 개요
2.1. 설계 주제
기상관측용 드론을 설계하고 라즈베리파이 기상대 서버를 설계하여 날씨 측정 데이터를 데이터베이스화 하고 웹 페이지에 날씨 정보를 제공한다.

2.2. 주제 선정 배경
우리나라는 산악형 지형국가이며 국토가 좁기 때문에 날씨의 돌발변수가 많고, 예측하기 힘든 기후이다. 최근 기상청에서는 550억을 투자하여 슈퍼컴퓨터를 구입했으나 여전히 잦은 오보로 신뢰도를 잃고 있다. 기존의 기상 관측 장비는 대부분 지상에 고정되어 관측되기 때문에 인간 활동에 영향을 미치는 대기 경계층 내의 기상현상 관측자료가 부족하다. 미세먼지 측정장비 또한 인간활동이 주로 일어나는 지역이 아닌 건물 옥상 등에 고정되에 측정을 하기 때문에 인간이 실제로 느끼는 미세먼지 농도와는 전혀 다른 수준의 데이터를 측정하고 있다. 이러한 이유로 인하여 기상현상이 실제로 일어나는 위치, 인간이 활동하는 위치에서 기상정보 및 미세먼지 농도를 측정할 수 있도록 기상관측용 드론을 설계하기로 했다.

2.3. 기상 관측방법
·  라즈베리파이를 이용하여 미세먼지 센서, 온습도 센서를 장착하여 기상정보를 측정한다.
·  기상측정 시작 버튼을 눌러 센서로부터 기상정보를 수집하고 데이터베이스에 저장한다.
·  드론을 측정하고자 하는 위치에 호버링을 시킨다. (호버링 : 헬리콥터가 제자리에서 정지비행을 할 때를 말한다.)
·  기상측정이 끝나면 안전하게 착륙시키고, 기상측정 정지버튼을 눌러 기상측정을 중단시킨다.
·  측정한 기상정보는 데이터베이스에 누적되고, Apache 웹서버를 통해 웹페이지를 구성하여 시각적으로 기상 데이터를 확인할 수 있다.

3.부품리스트

46 feature ict 01 기상관측대 (1)

4. 설계과정
4.1. 드론 기구부

46 feature ict 01 기상관측대 (1)

이번 설계에 사용된 드론은 Tarot사의 Robocat270이라는 모델이다. 라즈베리파이와 각종 센서를 장착하고 일정시간 비행을 하려면 고성능의 드론이 필요하다. 시중에서 판매하는 드론은 완충 상태로 비행 시간이5~6분에 불과하기 때문에 기상 관측용으로 사용하기에는 적합하지 않다. 또한 라즈베리파이와 센서들이 추가되면 무게가 증가하기때문에 추력이 부족한 드론일 경우 비행을 하지 못하거나 비행시간은 더욱 짧아질 것이다. Robocat270모델을 선택한 가장 중요한 이유는 커스터 마이징이 가능하다는 점이다. DJI사의 매빅프로, 팬텀4, 인스파이어, Xyma사의 X5C, X5W, X8C 등 입문용, 전문가용 드론을 판매하고 있지만 이러한 드론은 프레임을 자유자재로 바꿀 수 없다. 반면 Robocat270은 Racing Drone으로 만들어졌기 때문에 배터리도 LiPo 용량별로 바꿔서 장착할 수 있으며, 프레임에 센서, 안테나, 카메라 등 다양한 장비를 쉽게 부착할 수 있다는 장점이있다.

4.1.1. 드론 기구부 설계 (Fusion 360 CAD)

46 feature ict 01 기상관측대 (2)
설계에 있어서 정확성을 요구하는 것은 필수적이다. 드론은 특히 무게 중심이 안맞으면 추락사고로 이어질 수 있기 때문에 추가적인 기구부를 설계할 때는 3D 모델링 프로그램을 사용하여 제작하는 것이 중요하다고생각했다. 드론 하단에 프로펠러의 바람으로 인하여 와류가 발생하면 기체의 중심이 흔들릴 수 있기 때문에 정밀하게 설계를 진행했다
먼저 드론의 전체적인 설계도를 그린 뒤 드론의 비행에 영향을 안미치는 범위에서 하판을 추가하고, 송, 수신기의 위치, 드론 컨트롤러의 위치를 고려한 결과 드론 프레임 내부에는 온습도 센서와 전압 레귤레이터만장착할 수 있었다. 하판에는 미세먼지 센서와 라즈베리파이를 배치해 본 뒤 적절한 위치를 선정했다.
마지막으로 실제 색상을 입힌 뒤 문제를 발생시킬 요소를 찾고, 수정을 거쳐 최종 디자인을 결정했다. Fusion360 프로그램에는 3D모델링뿐만아니라 캐드 도면도 추출할 수 있었기 때문에 인쇄를 한 뒤 포맥스를 재단하여 하판을 추가했다.

4.1.2.최종 모델링

46 feature ict 01 기상관측대 (3)

46 feature ict 01 기상관측대 (4)

4.2. 라즈베리파이 설계

4.2.1. 프로그래밍 언어 선택

46 feature ict 01 기상관측대 (5)
라즈베리파이에서 사용할 수 있는 언어는 매우 다양하다. Java, Python, WiringPi 등 활용할 수 있는 언어는 많지만, 설계를 할 때 확장성을 중요시했기 때문에 파이썬을 선택했다. WiringPi는 아두이노와 함수가 비슷하기때문에 사용하기 편리하다는 장점이 있지만 MySQL이나 웹 서버에 연동하기 힘들다. 파이썬은 라이브러리만 몇 개 추가하면 MySQL 데이터 베이스 접근이나 PHP, HTML통신이 간단하기 때문에 파이썬을 선택했다.

4.2.2. 미세먼지 센서

46 feature ict 01 기상관측대 (2)
이번 설계에 사용된 미세먼지 센서는 PM1001 모델이다. 이 센서는 1um의 초미세먼지까지 측정할 수 있다는 장점이 있다. 보통 MCU를 사용하여 센서 데이터를 수신받으려면 ADC가 내장된 MCU를 사용하거나, ADC를 따로 사용하여 시리얼 입력을 받을 수 있다. 이 센서는 내부에 회로가 구성되어 있어 UART 통신으로 센서 데이터를 주고받을 수 있다.

BaudRate=9600bps
Startbit=1bit
Databit=8bit
Stopbit=1bit
Checkbit=null

위의 프로토콜을 지켜준 뒤 패킷을 송신하면 센서에서는 응답을 보내주는 방식이다.
데이터시트에 따르면 센서 측정을 하기 위해서는 다음과 같은 패킷을 전송해야한다.

SEND : 0×11, 0×01, 0×01, 0xED
Respone : 0×16, 0x0D, 0×01, 4Byte PMValue, 4Byte PMValue, [CS]

먼지 데이터는 4바이트로 나누어 수신하게 되며, 배열로 저장하여 index마다 2^24, 2^16, 2^8, 2^0을 곱하여 모두 더한 값이 PCS 값이다. 미세먼지 농도는 다음과 같은 공식으로 정리된다.

미세먼지농도 = ((PCS값) * 3,528)/100,000

라즈베리파이3는 모델 3B 부터 BLE, Wifi가 모듈이 추가되면서 RX, TX핀을 사용하는것이 어렵기 때문에 USB to Serial Convert모듈을 사용했다.
미세먼지센서를 사용하기 위해선 Python Serial 라이브러리를 추가해야한다.

Raspberry Pi Console
sudoapt-getinstallpython-serial, python-dev
Python Test # Source Code
importserial #Serial Class추가
importtime #Delay함수를 사용하기 위한 time class 추가
importos
fd=serial.Serial(“/dev/ttyUSB0″,9600) #/dev/ tty USB0- USB to UART Convert 모듈
Data=”\x11\x01\x01\xED” #송신 패킷
dust=0 #미세먼지 농도 저장 변수
convert=”" #수신받은 데이터(문자열)를 16진수로 변환
respone=”" #응답데이터를 수신받을 변수
integer=[0foriinxrange(16)] #정수형 변수
c=[0foriinxrange(16)] defSend_CMD(): #패킷 전송 및 수신 함수 지정

fd.write(Data) #패킷 송신
respone=fd.readline(16) #패킷 수신
convert=respone.encode(“hex”) #16진수로 변환 및 저장
foriinxrange(16): #16개로 나누어 16진수를 문자형 변수에 저장
c[i]=respone[i].encode(“hex”)
integer[i]=int(c[i],16) #정수형으로 변환한 뒤 저장
printinteger #수신 패킷 출력
whileTrue: #Loop
Send_CMD() #패킷 전송 함수 호출
pcs=(integer[3]*256*256*256) + (integer[4]*256*256) + (integer[5]*256) + integer[6] #수신받은 데이터를 PCS 값으로 변환
dust=(float(pcs)*3528)/100000 #PCS값을 미세먼지 농도로 변환
printdust #미세먼지 농도 출력
time.sleep(1) #1초간 대기

4.2.3. 미세먼지 농도 측정 결과
파이썬으로 시리얼 통신을 할 때 16진수로 패킷을 전송하고 수신하는 과정에서 자료형을 변환하는데 문제가 상당히 많았다. 패킷에서 3, 4, 5, 6번 인덱스에 해당하는 데이터는 미세먼지 농도를 계산할 때 사용되는 값이기 때문에 문자열을 16진수로 변환한 뒤, 다시 정수형으로 변환하는 방법으로 데이터를 추출했다. 실내에서 미세먼지농도를 측정했기 때문에 미세먼지 농도가 높게 측정되지 않았다.

46 feature ict 01 기상관측대 (6)

4.3. 온습도센서
온습도센서는 DHT11 모듈을 사용했다. 이 온도센서는 저전력으로 안정적으로 보정된 디지털 신호를 출력한다. 특히 보정용 8비트 마이크로 컨트롤러가 센서 내에 통합되어 온도를 측정하기 때문에 정교한 온도를 측정할 수 있다는 장점이 있다. 이 센서를 사용하기 위해서는 Adafruit DHT11 라이브러리를 추가해야 사용할 수 있다.

Raspberry Pi Console
git clone https://github.com/adafruit/Adafruit_Python_DHT
cd Adafruit_Python_DHT
sudo python setup.pyinstall

Python Test Source Code
importAdafruit_DHTasdht
importtime

whileTrue:
H,T=dht.read_retry(dht.DHT11,4)
print(“Humidity=%f,Temperature=%f%(H,T))

4.3.1. 온습도 센서 측정 결과
미세먼지 센서 측정은 라즈베리파이 GPIO.BCM 기준 4번 핀을 사용하여 측정하며 비교적 코드가 짧아 설계하는데는 큰 어려움이 없다.

4.4. MySQL 데이터베이스 구축
마이크로 컨트롤러나 라즈베리파이와 같은 싱글보드 컴퓨터를 사용할때 가장 큰 문제로 꼽을 수 있는 부분은 센서 데이터 프로그램 실행시에만 확인할 수 있다는 점이다. 이번 설계를 진행함에 있어서 기상정보를 측정하고 센서 데이터를 데이터베이스화하여 저장하는 것이 중요하다고 생각했다. 기상정보를 장기간 누적하는 것은 머신러닝을 통하여 미래의 기상을 예측할 수 있다는 장점이 있다. 데이터베이스 구축은 MySQL, Oracle DB가 대표적인데, 라즈베리파이에서 사용하는 데이터베이스는 MySQL이 편리하며, 정보가 많다. 먼저 데이터베이스를 사용하기전에 라즈베리파이에 MySQL 데이터 베이스를 설치해야 한다. 또한 파이썬 프로그래밍을 통하여 데이터베이스를 사용하기 때문에 파이썬-MySQL데이터 베이스 라이브러리를 추가적으로 설치했다.

Raspberry Pi Console
sudo apt-get install mysql-server, mysql-client, php5-mysql, python-mysqldb
root pass word setting : xxxxxxxx
………………..MySQL DB 접속방법………………..
mysql-uroot-p
Enter pass word : xxxxxxxx
………………..MySQL DB설정………………..
create data base embedded; //embedded 데이터베이스 생성
use embedded //embedded 데이터베이스를 사용하도록 설정
create table sense (date varchar(9) NOT NULL, time varchar(7) NOT NULL, humi float NOT NULL, temp float NOT NULL, dust float NOT NULL); //
테이블 이름을 sense로 설정하고 필드를 생성
describe sense; //sense 테이블 요약 정보 확인

Python Test Source Code
import time
import date time
import Adafruit_DHT as dht
import MySQL db

import RPi.GPIO as GPIO.
import serial.

db = MySQLdb.connect(host=”localhost”, user=”root”, passwd=“********”, db=“embedded”).

#데이터베이스연결

cur = db.cursor(). #커서 객체 생성
fd = serial. Serial(“/dev/ttyUSB0″,9600)
Data = “\x11\x01\x01\xED”.
dust = 0.
convert = “”.
respone = “”.
integer = [0foriinxrange(16)].
c = [0foriinxrange(16)].
defupload_db(Humi,Temp,Dust):. #데이터베이스 업로드 함수.
Date=str(time.strftime(“%Y%m%d”)). #현재 날짜 저장
Time=str(time.strftime(“%H%M%S”)). #현재 시간 저장

try:.
query = “INSERTINTO sense (date, time, temp, humi, dust)”. // #데이터베이스 업로드 쿼리
“VALUES(%s,%s,%s,%s,%s)”.
args=(Date, Time, Humi, Temp, Dust)
print (“Date : %s, Time : %s, Humidity : %f, Temperature : %f, Dust : %f” %(Date, Time, Humi, Temp, Dust)) // # 입력 데이터 출력
print “Writing to data base…..”
cur.execute(query,args). // #커서 최종 확인
db.commit() // #데이터베이스 업로드 실행
print ” Write Complete!”

except:. // #업로드 오류시
db.rollback(). // #해당 작업을 원상 복구
print “Failed to write data base”

def Send_CMD():.
fd.write(Data).
respone = fd.readline(16).
convert = respone.encode(“hex”).
for i in xrange(16):.
c[i] = respone[i].encode(“hex”).
integer[i] =i nt(c[i],16).

while True:.
Send_CMD().
pcs = (integer[3]*256*256*256) + (integer[4]*256*256) + (integer[5]*256) + integer[6].
dust=(float(pcs)*3528)/100000.
H,T=dht.read_retry(dht.DHT11,4).
upload_db(H,T,dust). // #데이터베이스 업로드 함수 호출
time.sleep(1).

4.5. Apache 웹서버 설치 & 데이터 시각화

46 feature ict 01 기상관측대 (8)
아파치 웹서버는 현재 세계에서 가장 많이 사용되는 웹서버로 ,BSD, 리눅스, 유닉스계열, 윈도우, MAC OS X 등 크로스 플랫폼으로 제작되어 사용이 어렵지 않다. 이번 설계에서는 HTML, PHP 5 둘 다 사용하기 때문에 APM (Apache2, PHP5, MySQL)을 한꺼번에 설치하여 설계를 진행했다.

Raspberry Pi Console
sudoapt-get install apache2 libapache2-mod-php5, php5
cd/var/www/html
cp/home/pi/Documents/index.html/var/www/html
sudo chmod755index.html
cd/home/pi/Documents
mkdir fusionchart
git clone https://github.com/fusioncharts/fusioncharts-dist
wget https://github.com/fusioncharts/php-wrapper/tree/master/src/fusioncharts.php
sudocp-R*/var/www/html
cd/var/www/html
sudo chmod755*

4.5.1. 웹서버 접속 결과
라즈베리파이에 아파치 웹서버를 설치한 뒤 fusionchart 툴을 활용하여 데이터베이스를 그래프로 표현하였다. 데이터베이스를 시각화하는 방법으로 fusionchart, plotly 등이 있지만 fusionchart가 그래프를 다양하게 표현할 수 있으며, 데이터베이스뿐만 아니라 데이터를 따로 php 파일에 입력하여 출력할 수 있다.

46 feature ict 01 기상관측대 (9) 46 feature ict 01 기상관측대 (10)

4.6. 라즈베리파이 GPIO 사용 (Tact Button, LED)

46 feature ict 01 기상관측대 (11)

라즈베리파이는 총40개의 GPIO핀을 사용하여 PWM, I2C, SPI등 다양한 기능을 사용할 수 있다. 라즈베리파이를 사용하기 위해서는 Micro 5Pin 단자에 충전기를 연결해야 한다. 하지만 드론에 장착하여 사용하려면 USB 충전기를 사용할 수 없기 때문에 DC to DC Converter를 사용하여5V 출력을 GPIO 단자에 연결하여 전원을 공급했다. 처음에 드론 ECS(전자변속기)에 내장된 BEC를 사용하여 전원 공급을 시도했지만 전류가 부족하여 전원이 꺼지는 문제가 있어 LM2576 DC to DC Converter를 사용하여 이 문제를 해결했다.
GPIO핀은 센서를 연결하여 사용하기도 했지만 드론에 장착하여 사용할 경우 SSH를 사용하여 터미널에 접속하거나 HDMI 포트로 모니터 출력을 확인할 수 없기 때문에 LED와 Tact Button을 사용하여 센서 측정 및 데이터베이스 업로드 시작, 중지, 전원 종료버튼을 만들어 간편하게 시작,종료, 전원 Off기능을 구현했다.

4.6.1. Pull Up Button

46 feature ict 01 기상관측대 (12)

GPIO를 사용하여 버튼 상태 입력을 받으려면 PULL UP 또는 PULL DOWN 저항을 회로 구성하여 I/O핀에 연결해야 한다. PULL UP, PULL DOWN 회로를 구성하지 않고 단순히 버튼한 쪽에 VCC 또는 GND를 연결할 경우 버튼이 눌리지 않았을때 Floating 상태가 되기 때문에 I/O 입력상태를 알 수가 없다.

4.6.2. Raspberry Pi GPIO 회로도

46 feature ict 01 기상관측대 (13)

Python Test Source Code
import time
import RPi.GPIOasGPIO
off=17
on=27
LED_R=23
LED_G=22
sd=24
GPIO.setmode(GPIO.BCM) #핀 번호를 BCM 모드로 설정
GPIO.setup(on,GPIO.IN,pull_up_down=GPIO.PUD_UP) # 풀업 입력으로 설정
GPIO.setup(off,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(sd,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(LED_R,GPIO.OUT) # LED 출력설정
GPIO.setup(LED_G,GPIO.OUT)
GPIO.output(LED_R,0) # LED Off
GPIO.output(LED_G,0)
def Switch_input(): # 스위치 입력 함수 선언
if(GPIO.input(sd)==0): # 24번 핀입력이 0일 경우
return2 #2를 반환
if(GPIO.input(on)==0):
return1
if(GPIO.input(off)==0):
return0
whileTrue:
fg=Switch_input() #fd 변수에 반환값 저장

iffg==1: #on 버튼 입력시
GPIO.output(LED_G,1) #초록색 LED를 켬
GPIO.output(LED_R,0)

whileTrue: #센서 측정 및 Database 업로드
if(GPIO.input(off)==0): #off 버튼 입력시
break #센서 측정을 멈춘다.
eliffg==2: #sd 버튼 입력시
os.system(“sudoshutdown-hnow”) #라즈베리파이를 종료한다.
break
else: #off 버튼 입력시
GPIO.output(LED_G,0)
GPIO.output(LED_R,1) #빨간색 LED를 켬

4.6.2.1. Raspberry Pi GPIO 테스트 결과

46 feature ict 01 기상관측대 (14)

4.6.3. 설계 결과
4.6.3.1. 드론 기구부 결합사진

46 feature ict 01 기상관측대 (15)

4.6.3.2. 라즈베리파이 기판 결합사진

46 feature ict 01 기상관측대 (4)

4.6.3.3. 비행 테스트

46 feature ict 01 기상관측대 (5)

5. 고찰
설계를 진행하면서 주제를 선정하는데 오랜 시간이 걸리지 않았다. 회사 프로젝트, 메이커톤 등 많은 대회를 참가하면서 그 동안 쌓아온 지식을 기반으로 코딩을 했으며, 전자전기공학부 학술동아리 연구방에서 배운 노하우를 기반으로 납땜을 깔끔하게 했다. 설계 목표로 GPIO핀을 사용할 때 인터럽트를 사용하면 추가점수를 반영한다고 했다. Wiring Pi로 테스트 했을 땐 C언어 기반으로 되어 있기 때문에 인터럽트가 정상적으로 동작하는 것을 확인할 수 있었다. 하지만 파이썬으로 프로그래밍 했을 때 인터럽트 기능이 동작하긴 하지만 계속 반복적으로 발생하는 오류로 인하여 인터럽트를 사용할 수 없었다. Wiring Pi 라이브러리를 추가하여 사용해봤지만 똑같은 오류로 동작이 제대로 이뤄지지 않았다. 인터럽트 call back 함수를 호출할 때 전역변수를 사용해도 오류가 생기고, 파라미터를 지정하여 사용해도 오류가 발생하여 더 이상 인터럽트 기능을 사용할 수가 없이 polling 방식으로 구현했다. polling 방식을 사용하면서도 동작에는 큰 이상이 없었으며 정상적으로 설계를 마무리 할 수 있었다. 설계를 진행하면서 단계적으로 설계를 했다. 먼저 주제를 선정하고, 기구부 설계, 프로그래밍, 사전 동작 테스트, 실제 테스트 순서로 진행했으며, 드론의 기구부를 제작할 때 3D 모델링 프로그램을 사용하여 렌더링을 한 뒤 이상이 없는 지 확인한 뒤 도면을 출력하여 포맥스를 재단하였다. 하판으로 포맥스를 사용한 이유는 우드락이나 스티로폼을 사용할 경우 강도가 떨어지기 때문에 라즈베리파이를 보호할 수 없으며, 아크릴이나 합판을 사용할 경우 무게로 인하여 드론이 비행을 하지 못한다는 점을 고려했다.
최종 설계 결과 몇 가지 보완할 부분을 정리하자면 다음과 같다.

1) 온습도 센서 교체
사용한 온습도 센서는 DHT11로 온도 측정 범위가 영하를 넘어갈 경우 측정을 못한다는 단점이 있었다. DHT22나 DHT44, SHT11 같은 고성능 온도센서를 사용해야 오차범위를 줄이고 더 정확한 센싱을 할 수 있을 것이다.

2) 호버링
Robocat 270은 장기간 안정화를 거친 뒤 내부 프로그래밍을 하고, 컨트롤 보드를 9축 자이로 센서와 GPS 모듈이 내장된 Naze32 10DOF정도 되는 모델을 사용해야 더 정밀한 제어가 가능하다는 것을 알 수 있었다 . 국내에서는 가격이 비싸기 때문에 알리익스프레스와 같은 해외 직구사이트에서 구매해야 하지만 설계 기간이 제한된 관계로 현재 사용하는 컨트롤 보드를 장착했다. 만약 Naze 32 10DOF로 교체한다면 더 정밀하게 정확한 위치에서 호버링을 할 수 있을 것이다. 또한 측정하는 기상상태에 따라 비행여부를 파악해야 하는데, 실제 테스트를 진행했을 때 당시 바람이 상당히 불었기 때문에 기체가 안정적으로 호버링을 할 수 없었다. 270급 드론보다는 550급 이상 드론을 사용한다면 더 오래, 안정적으로 비행할 수 있을것이다.

3) 배터리
드론에 장착된 배터리는 LiPo 3cell 11.1V 2200mAh, 방전률 25C로 상당히 고출력 배터리이다. 모터 하나당 최대 12A를 소비하기 때문에 실제 테스트 결과 15 ~ 18분정도 연속적으로 비행할 수 있었다. 이번 설계에는 급선회나 고속비행을 하지 않기 때문에 더 오래 날 수 있을 것으로 예상되나, 장시간 비행을 위해서는 배터리 용량을 늘려야 한다. 배터리 용량을 두 배로 늘릴 경우 무게도 같이 증가하기 때문에 현재 사용하는 드론의 추력으로는 부족하다. 결론적으로 550급 이상 드론을 사용하고, 추력이 드론의 배터리를 추가하 고도 남을 정도의 고성능인 모터와 변속기를 사용해야 할 것이다. 설계를 마무리하면서 프로그래밍 스킬을 더욱 익힐 수 있어 유익한 시간이었다고 생각한다. 특히 아두이노 소스코드 (C언어)를 파이썬 코드로 변환하면서 파이썬 프로그래밍에 더욱 자신감이 붙었다. 이 외에도 파이썬 – MySQL DB 연동, PHP – HTML 연동, 웹서버 구축, 데이터베이스 구축 등 라즈베리파이를 활용할 수 있는 대부분의 기능과 프로그램을 활용하여 더욱 높은 수준의 설계를 할 수 있었다.

 

 

 

 

Leave A Comment

*