라즈베리파이 타임랩스 Timelabs 카메라 만들기
조금은 긴 포스트가 될 수도 있는데 이전에 만든 연관 글을 참고하면서 짧게 올리기로 한다. 이전에 만들어본 타임랩스 카메라(일정 주기로 영상을 찍는 기능)를 확장하여 다양한 기능을 갖도록 만드는 것이 이번 프로젝트의 목적이다. 결과가 좋으면 크라우드 펀딩이나 여러 가지 프로젝트로 확장할 계획도 가지고 있다. 타임랩스가 무엇인지 모르거나 영상을 본 적이 없다면 아래 링크를 참고하는 데 처음 링크만 대출 참고하면 나머지는 DSLR 카메라를 사용하는 방법이라 꼭 볼 필요는 없다.
타임랩스 카메라 만들기 포스팅
라즈베리파이 타임랩스 Timelabs 카메라 만들기 1
라즈베리파이 타임랩스 Timelabs 카메라 만들기 2
라즈베리파이 타임랩스 Timelabs 카메라 만들기 3
라즈베리파이 타임랩스 Timelabs 카메라 만들기 4
타임랩스에 대한 설명 글
라즈베리파이 환경설정에서 카메라를 enable 모드로 설정하고, 카메라가 잘 찍히는지 테스트하기 위해 아래 명령어를 입력한다.
$raspistill -o image.jpg
$raspistill -o image.jpg라고 입력하고 엔터를 누르면 화면에 사진이 뜨고 5초 후에 사진 한 장이 루트 위치(home/pi)에 image.jpg로 생성된다. GUI 화면에서 이미지 파일을 확인한다.
우선 잘 돌아가는 파이선 코드를 보자. 아래 코드를 복사하여 picstill.py라는 파일을 만들고 저장한다. 사용 명령어를 아래에 작성하였다.
$nano picstill.py
위 명령어는 라즈베리파이의 커맨트 입력 화면에서 나노 에디터를 이용하여
picstill.py 를 생성한다.
나노 에디터 환경에서 파일을 작성했다면 ctrl-x 를 누르고 y 를 눌러 빠져 나온다.
picstill.py 코드를 아래에 실었다. 일단 기능만 돌아가게 만들었다. 카메라 폴더가 없으면 camera 폴더를 만들어 주고 정해진 시간 반복해서 사진을 찍어 저장한다. 최하 1초로 설정을 해도 약 2~3초마다 한 장씩 저장한다. 들어가 있어야 하는 데 없는 기능이 많다. 앞으로 전부 집어넣어야 하니 없는 기능을 적어보자
- 시작 정지 기능
- LED 표시 기능
- OLED로 상태 표시하기
- SD 카드 영량이 가득 차서 사진 저장을 못할 경우 대응 방안(표시, 강제 지우기 등)
#!/usr/bin/env python
import os
import time as t
from datetime import datetime
import subprocess
FRAMES = 3600 #number of frame
TIMEBETWEEN = 6 #second
#time = datetime.now()
filepath = "/home/pi/camera"
fileNamePrefix = "image"
if not os.path.isdir(filepath):
os.mkdir(filepath)
framecount = 0
#while true: #if infinitely
while framecount < FRAMES:
time = datetime.now()
filename = filepath + "/" + fileNamePrefix + "-%04d%02d%02d-%02d%02d%02d.jpg" % (time.year, time.month,
time.day, time.hour, time.minute, time.second)
command = "raspistill -t 1 -o %s" % (filename)
subprocess.call(command, shell = True)
print "Captured %s" % filename
t.sleep(3) #every 3second
파일을 잘 만들었다면 아래 명령을 일단 실행을 한다. 실행 명령어는 $python picstill.py
아래와 같이 에러 없이 잘 실행되면 ctrl-c 키를 눌러 종료한다.
pi@raspberrypi:~ $ python picstill.py
Captured /home/pi/camera/image-20210805-184157.jpg
Captured /home/pi/camera/image-20210805-184201.jpg
Captured /home/pi/camera/image-20210805-184205.jpg
Captured /home/pi/camera/image-20210805-184209.jpg
^CTraceback (most recent call last):
File "picstill.py", line 31, in <module>
t.sleep(3) #every 3second
KeyboardInterrupt
pi@raspberrypi:~ $
축하한다. 이것으로 끝이다. 나머지는 해도 그만 안 해도 그만인 것들이다. 해도 그만 안 해도 그만인 것은 하는 게 좋다. 했을 때 생기는 최악의 결과라고 해봐야 그걸 하지 말았어야 하는 이유를 깨닫게 되니까 말이다. 끝까지 하는 게 좋다는 말을 참 길게도 쓴다. ^^
일단 picstill.py를 자동 실행하게 만드는 것이 일 단계다. $ sudo nano /etc/rc.local 명령을 실행하면 아래와 같은 코드가 나타난다. 맨 윗줄을 #!/bin/bash -e로 바꾸고 예) 위치에 실행파일을 경로까지 정확하게 적고 저장한다.
#!/bin/bash -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will “exit 0” on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ “$_IP” ]; then
printf “My IP address is %sn” “$_IP”
fi
여기에 부팅하면서 실행할 파일을 정해주면 된다. 마지막엔 반드시 & 붙인다.
예)sudo /home/py/myexecutionfile &
예)sudo python /home/py/picstill.py &
exit 0
바로 저 위에 예) 자리에 한글을 다 지우고 sudo python /home/pi/picstill.py & 를 추가한다. 실제 코드를 아래에 나타낸다. 귀여운 것!
#!/bin/bash -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
sudo python /home/pi/picstill.py &
exit 0
만약에 리부팅을 하고 나서 /home/pi/camera 폴더에 사진이 늘어나지 않으면 rc.local 파일이 실행되지 않는 이야기니까 rc.local 파일 활성화 하는 방법 글을 살펴보기 바란다.
위에 적었던 없는 기능을 하나하나 구현하기로 한다. 내용이 길어지니 다음 글로 이어쓰기로 갑니다.


'메이커 Maker' 카테고리의 다른 글
| 색다른 타임랩스(Timelapse)와 후반 작업 (0) | 2021.08.11 |
|---|---|
| 타임랩스(Timelapse)란 무엇인가? (0) | 2021.08.10 |
| 라즈베리파이 타임랩스 Timelabs 카메라 만들기 2 (0) | 2021.08.10 |
| DSLR을 이용한 타임랩스(Timelapse) 촬영 (0) | 2021.08.09 |
| Refillstation 원격 Test 앱과 사용법 (0) | 2021.07.27 |
| 기상 위성 사진 디스플레이 코드 수정 방법 (0) | 2021.07.18 |
| 스마트 IoT(사물인터넷) 강의: 스마트 팜(Smart Farm App) 안드로이드 실행 파일 (2) | 2021.06.28 |
| 모터 극성 변환, 회전 방향 반대로 구동하기 (0) | 2021.06.22 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩