| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- lattice planner
- turtlebot4
- create3
- global path
- 프로그래머스
- local path
- ROS
- Gazebo
- python
- planning
- MORAI
- 인턴
- Raspberry Pi
- GPS
- TOF
- robot_localization
- 데브코스
- 자율주행 #opencv #perception #control #제어 #인지
- 자율주행
- 자율주행대회
- 소방
- control
- Linux
- ROS2
- 센서퓨전
- 국토부대회
- imu
- turtlebot
- Slam
- ubuntu
개발자개밟자
열화상 센서(Adafruit Amg8833) 준비 본문
화재를 감지하려면 우선 열화상 센서가 있어야한다. 디바이스마트에서 Adafruit Amg8833을 구매하였다.
Adafruit AMG8833 IR Thermal Camera Breakout [ada-3538] / MCU보드/전자키트 > 카메라/비디오 > 얼굴인식/열화상센서 / 디바이스마트
광고아님ㅋㅋ
근데 센서의 핀이 납땜이 안된 상태로 왔다. 살면서 한번밖에 안해본 납땜을 또 해볼일이 생겼다.. (군대에서 한번 해본게 처음이자 마지막)
VIN(전원), GND(그라운드), SDA, SCL 통신선 이 네개에 핀을 꼽고 납땜을 해줬다.

얼추 됐다. 그 후 아두이노(Uno R3)의 pinout을 찾아본 결과, 아두이노의 아날로그 GPIO에 SDA는 A4, SCL은 A5에 꽂으면 된다고 나와있어서 그대로 꽂아줬다. (암수핀도 없어서 샀다. 500원짜리 사는데 3000원이 들었다. 배송비..)
그 후 컴퓨터와 아두이노를 연결을 해줬다.

터미널을 열고, sudo dmesg | grep tty 명령을 사용해 아두이노 시리얼 포트를 찾는다. 다음과 같이 결과가 뜨는걸 알 수 있다.

/dev/ttyACM0 인걸 알았으니 sudo chmod 666 /dev/ttyACM0 명령으로 파일 접근 권한을 준다.
이제 아두이노에 들어가서 상단의 Tools → Manage Libraries → Adafruit AMG88xx 를 검색해 열화상 센서 라이브러리를 다운받아줬다.

그리고 다음 코드를 작성해 센서값을 serial로 출력해줬다.
#include <Wire.h>
#include <Adafruit_AMG88xx.h>
Adafruit_AMG88xx amg;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!amg.begin()) {
Serial.println("AMG8833 not found");
while (1);
}
delay(100);
}
void loop() {
float pixels[64];
amg.readPixels(pixels);
for (int i = 0; i < 64; i++) {
Serial.print(pixels[i], 1);
if (i < 63) Serial.print(",");
}
Serial.println();
delay(100); // 10Hz (100ms)
}
그 후 상단의 Select Board를 눌러 Arduino Uno를 선택하고, Verify -> Upload를 눌러준다.
업로드가 된 후에 VSCode를 열어서 파이썬으로 8*8 열화상 감지 코드를 다음과 같이 작성한다.
# test.py
import serial
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
ser = serial.Serial('/dev/ttyACM0', 115200) # 포트에 맞게 변경하면됨
fig, ax = plt.subplots()
im = ax.imshow(np.zeros((8, 8)), vmin=0, vmax=80, cmap='inferno') # AMG833은 0~80까지 감지 가능하므로 온도 설정
plt.colorbar(im)
def update(frame):
try:
line = ser.readline().decode().strip()
parts = line.split(',')
if len(parts) != 64:
return im,
data = np.array([float(p) for p in parts])
data = data.reshape((8, 8))
im.set_array(data)
except Exception as e:
print("Error:", e)
return im,
ani = animation.FuncAnimation(fig, update, interval=100)
plt.title("AMG8833 Heatmap")
plt.show()
전 포스트에서 Ubuntu 20.04 + ROS1을 사용한다 하였는데, 내 노트북엔 이미 Ubuntu 24.04가 깔려있으므로 pip를 가상환경 없이 돌릴수가 없다. numpy와 matplotlib을 설치할 수 없다는뜻. 따라서 sudo apt install python3-pip python3-venv -y 명령으로 가상환경을 설치해준 뒤, 다음 명령으로 가상환경을 실행하고, 필요한 라이브러리를 설치해준다.
python3 -m venv .venv
source .venv/bin/activate
pip install numpy matplotlib pyserial
그 후, 위에서 작성하였던 test.py를 실행시킨다. (python3 -m test.py)
다음과 같이 8*8로 시각화가 잘 됨을 알 수 있다.
'졸업프로젝트' 카테고리의 다른 글
| 화재 초기 진압을 위한 자율주행 차량 (0) | 2025.05.11 |
|---|