ماژول 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 استفاه شده است که می توانید آن را از این لینک دانلود کیند .
خروجی برنامه فوقبه صورت زیر می باشد :