دوربین های مادون قرمز گجت هایی هستند که توانای نمایش بصری گرمای محیط را دارند . از این دوربین ها جهت دیدن در تاریکی ، تشخیص و ردیابی حرکت موجودات زنده و بسیاری دیگر از کاربرد ها استفاده می شود . ساختار این دوربین ها تفاوت زیادی با دوربین های معمولی لنز CMOS ندارد و تنها اختلافی که دارند این است در دوربین های معمولی لنز آن ها حساس به نور های مرئی است و در دوربین های حرارتی لنز آن ها حساس به نور مادون قرمز می باشد .

اجسام به طور کلی نور مادون قرمز از خود ساطع می کنند که هرچه دمای یک جسم بیشتر باشد شدتمادون قرمز آن نیز بیشتر می شود .

در این پروژه ما قصد داریم از ماژول AMG8833 جهت ساخت دوربین حرارتی استفاده کنیم . همچنین جهت مانیتورینگ دیتا از برنامه متلب استفاده خواهیم کرد .

AMG8833 یک سنسور حرارتی غیر تماسی است که دارای یک آرایه از دیود های حساس به IR می باشد . لنز این سنسور به صورت آرایه ای 8 در 8 است که در مجموع دارای 64 پیکسل می باشد . این سنسور توانایی اندازه گیری دما های بین 0 تا 80 درجه را دارد . ما در آموزش از ماژول CJMCU-8833 که هدر برد AMG8833 است استفاده خواهیم کرد .

استفاده از ماژول در ساخت نمونه های اولیه و تست مدارات در مرحله اولیه بسیار مقرون به صرفه خواهد بود . ماژول ها می توانند هزینه زیاد نمونه اولیه را بیسار کاهش دهند . همپنین در ماژول AMG8833 مداراتی جهت تامین تغذیه و کاهش نویز در نظر گرفته شده است و نیز تمامی پین های سنسور به صورت پین هدر هایی در دسترس هستند که نصب آن را بر روی برد بورد امکان پذیر می کند .

 

شرح عملکرد پروژه :

در این مثال برد آردوینو از طریق رابط I2C با AMG8833 ارتباط برقرای کرده و مقدار اندازه گیر شده توسط هر پیکسل را می خواند . سپی آردوینو دیتا را از طریق پورت سریال به کامپیوتر می فرستد . در نرم افزار متلب دیتای دریافتی نمایش داnه خواهند شد .

کد های آردوینو :

#include <Wire.h>
#include <SparkFun_GridEYE_Arduino_Library.h>

GridEYE amg8833;

void setup() {
  Wire.begin(); // for connecting with AMG8833
  amg8833.begin(); // begin AMG8833 comm
  Serial.begin(115200); // larger baud rate for sending all 64 pixel values
}

void loop() {
  // Print the temperature of each pixel
  for(unsigned char i = 0; i < 64; i++){
    Serial.print(amg8833.getPixelTemperature(i));
    Serial.print(",");
  } 
  // end print with return
  Serial.println();
  // short delay between sends
  delay(50);
}

ابتدا ماژول را همانند شکل زیر به آردوینو متصل کرده و سپس کد های فوق را بر روی برد خود آپلود کنید . در نظر داشته باشد کهکتابخانه های Amg8833 را ابتدا دانلود و آن را نصب کنید .

برای تست عملکرد کد های بالا پس از پروگرام کردن برد وارد قسمت Serial ploter آردوینو IDE شوید . در آن جا باید مقدار 64 پیکسل ماژول نمودار شود .

 

کد های متلب :

کد ای زیر را در یک اسکریپت کپی کرده و پس از ذخیره آن را اجرا کنید ( پورت وارد شده را بر روی پورتی که آردوینو به آن متصل است تغییر دهید ) :

instrreset % reset all serial ports
clear all
close all
clc

s = serial('COM6'); % change this to desired Arduino board port
set(s,'BaudRate',115200); % baud rate for communication
fopen(s); % open the comm between Arduino and MATLAB

% figure and axes parameters
f1 = figure();
screen = get(0,'screensize');
fig_span = 0.75; % figure size 90% of screen
set(gcf,'Position',[((1.0-fig_span)/2.0)*screen(3),((1.0-fig_span)/2.0)*screen(4),...
    (fig_span*screen(3))-((1.0-fig_span)/2.0)*screen(3),(fig_span*screen(4))-((1.0-fig_span)/2.0)*screen(3)],...
    'color',[252.0,252.0,252.0]/256.0)
loop_break = true; % dummy variable to exit loop when BREAK is pressed
dialogBox = uicontrol('Style', 'PushButton', 'String', 'Break Loop','Callback', 'loop_break = false;');
% plot zeros so we can just update it later
[x_locs,y_locs] = meshgrid(1:8);
[x_interp,y_interp] = meshgrid(1:0.07:8-.07); % interpolate 8x8 to 100x100

% Sensor noise measurement
% for this: place a large object with uniform temperature in
% front of sensor (book, wall, table) - this is a psuedo calibration
out = fscanf(s); % read data
data_parse = split(out,','); % split by comma
data_array = zeros(64,1); 
for ii = 1:64
    data_array(ii) = str2double(data_parse(ii)); % convert to double
end
noise = reshape(data_array,[8,8]);
mean_noise = mean(mean(noise)); % calculate mean noise
noise = noise-mean_noise; % subtract mean noise from each pixel's noise
    
plot_bounds = [mean_noise-2 26]; % plot bounds - If colder or hotter are expected  - this may be changed
while loop_break 
    out = fscanf(s);
    data_parse = split(out,',');
    data_array = zeros(64,1);
    for ii = 1:64
        data_array(ii) = str2double(data_parse(ii));
    end
    data_array = reshape(data_array,[8,8])-noise;
    cla()
    % interpolate and plot onto image
    data_interp = interp2(x_locs,y_locs,data_array,x_interp,y_interp,'cubic');
    imagesc(data_interp,plot_bounds)
    c1 = colorbar; % colorbar for temperature reading
    ylabel(c1,'Temperature [C]','FontSize',16)
    pause(0.05) % briefly pause to allow graphics to catch-up
end

پس از اجرای اسکریپت فوق باید تصویری همانند شکل زیر نشان داده شود : 

Tags:
About Author: USER_4