ماژول AMG8833 یک هدر برد سنسور AMG8833 می باشد . این سنسور یک آرایه 8 در 8 از گیرنده های ماونه قرمز است که می توانید از آن در دوربین های حرارتی استفاده کنید . به طور کلی مواد مقدار کمی نور مادون قرمز ساطع می کنند که شدت این نور با حرارت آن ها رابطه مستقیم دارد . در واقع هر جسمی که دمای بالاتری داشته باشد مادون قرمز بیشتری از خود منتشر می کند . برخلاف دوربین های معمولی که طیف مرئی نور را دریافت می کنند ، دوربین های حرارتی تنها نور مادون قرمز را سنس می کنند . این دوربین ها کاربرد فراوانی دارند . یکی از کاربرد های مهم دوربین های حرارتی امکان تشخیص افراد و …در تاریکی می باشد . AMG8833 در مجموع 64 پیکسل دارد که می توانید تصویر خروجی را به صورت 8 در 8 پیکسلی نمایش دهید . همچنین با استفاده از الگوریتم ها و توابع ساده ای می توانید تعداد پیکسل های نمایش داده شده را افزایش دهید به طور مثال یک تصوی 16 در 16 پیکسلی بسازید به طوریکه هر مقدار هر پیکسل زوج را میانگین پیکسل های اطراف آن قرار دهید . در این آموزش با استفاده از یک برد رزبری پای ماژول AMG8833 راه اندازی خواهیم کرد .

 

 

راه اندازی AMG8833 با رزبری پای :

ما در این آموزش از یک برد Pi 4 B استفاده می کنیم . همچنین از رزبین استفاده شده است . قبل از هر چیزی ماژول AMG8833 را مانند تصویر زیر به رزبری متصل کنید :

در مرحله بعد لازم است تا ابزار های کار با I2C در پایتون را نصب کنید . برای این کار کامند های زیر را در محیط ترمینال رزبرین اجرا کنید و تا پایان نصب صبرکیند :

sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools

پس از اتمام نصب ابزار های فوق ، Raspberry Pi Configuration را باز کنید :

 

سپس در قسمت Interfaces گزینه I2C را فعال و OK را بزنید و یکبار رزبری را ریست کنید :

بعد از روشن شدن دوباره رزبری وار محیط ترمینال شده و دستور زیر را وارد کنرد تا از صحت ارتباط با AMG8833 مطما شوید :

sudo i2cdetect -y 1

پس از مراحل فوق باید سرعت ارتباط را به 400KHz تغییر دهید . برای این کار باید فایل config.txt تغییر دهید . این فایل در فولدر Boot قرار دارد . برای باز کردن این فایل دستور زیر را وارد کنید :

sudo nano /boot/config.txt

بعد از باشدن فایل config.txt در ادیتور Nano ، متن زیر را به ان اضافه و سپس ذخیره کنید :

 

حال یک پروژه پایتون جدید را باز کرده و کد های زیر را در آن کپی و سپس برنامه را اجرا کنید :

import time,sys
sys.path.append('../')
# load AMG8833 module
import amg8833_i2c
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
#
#####################################
# Initialization of Sensor
#####################################
#
t0 = time.time()
sensor = []
while (time.time()-t0)<1: # wait 1sec for sensor to start
    try:
        # AD0 = GND, addr = 0x68 | AD0 = 5V, addr = 0x69
        sensor = amg8833_i2c.AMG8833(addr=0x69) # start AMG8833
    except:
        sensor = amg8833_i2c.AMG8833(addr=0x68)
    finally:
        pass
time.sleep(0.1) # wait for sensor to settle

# If no device is found, exit the script
if sensor==[]:
    print("No AMG8833 Found - Check Your Wiring")
    sys.exit(); # exit the app if AMG88xx is not found 
#
#####################################
# Interpolation Properties 
#####################################
#
# original resolution
pix_res = (8,8) # pixel resolution
xx,yy = (np.linspace(0,pix_res[0],pix_res[0]),
                    np.linspace(0,pix_res[1],pix_res[1]))
zz = np.zeros(pix_res) # set array with zeros first
# new resolution
pix_mult = 6 # multiplier for interpolation 
interp_res = (int(pix_mult*pix_res[0]),int(pix_mult*pix_res[1]))
grid_x,grid_y = (np.linspace(0,pix_res[0],interp_res[0]),
                            np.linspace(0,pix_res[1],interp_res[1]))
# interp function
def interp(z_var):
    # cubic interpolation on the image
    # at a resolution of (pix_mult*8 x pix_mult*8)
    f = interpolate.interp2d(xx,yy,z_var,kind='cubic')
    return f(grid_x,grid_y)
grid_z = interp(zz) # interpolated image
#
#####################################
# Start and Format Figure 
#####################################
#
plt.rcParams.update({'font.size':16})
fig_dims = (10,9) # figure size
fig,ax = plt.subplots(figsize=fig_dims) # start figure
fig.canvas.set_window_title('AMG8833 Image Interpolation')
im1 = ax.imshow(grid_z,vmin=18,vmax=37,cmap=plt.cm.RdBu_r) # plot image, with temperature bounds
cbar = fig.colorbar(im1,fraction=0.0475,pad=0.03) # colorbar
cbar.set_label('Temperature [C]',labelpad=10) # temp. label
fig.canvas.draw() # draw figure

ax_bgnd = fig.canvas.copy_from_bbox(ax.bbox) # background for speeding up runs
fig.show() # show figure
#
#####################################
# Plot AMG8833 temps in real-time
#####################################
#
pix_to_read = 64 # read all 64 pixels
while True:
    status,pixels = sensor.read_temp(pix_to_read) # read pixels with status
    if status: # if error in pixel, re-enter loop and try again
        continue
    
    T_thermistor = sensor.read_thermistor() # read thermistor temp
    fig.canvas.restore_region(ax_bgnd) # restore background (speeds up run)
    new_z = interp(np.reshape(pixels,pix_res)) # interpolated image
    im1.set_data(new_z) # update plot with new interpolated temps
    ax.draw_artist(im1) # draw image again
    fig.canvas.blit(ax.bbox) # blitting - for speeding up run
    fig.canvas.flush_events() # for real-time plot

 

در این برنامه از کتابخانه AMG8833_IR_cam استفاه شده است که می توانید آن را از این لینک دانلود کیند .

خروجی برنامه فوقبه صورت زیر می باشد :

Tags:
About Author: USER_4