Inteligentný infračervený skener
Zo stránky SensorWiki
Authors: Užík, Rosival, Šedivý
Zadanie
Zadaním projektu bolo zapojiť infračervený skener teploty.
Popri danom zariadení bolo nutné zapojiť Parallax mouse senzor, vďaka ktorému sme schopní určiť polohu meranej teploty.
Ďalej sme použili trojfarebnú LED, ktorá znázorňuje nameranú teplotu.
Posledné zariadenie sme pridali 7 segmentový display na výpis teploty.
Použité zariadenia
IR thermometer Sensor -MLX90614
Info: Stránka výrobcu
Trojfarebna led
Info: Stránka výrobcu
Mouse Sensor Kit (#28560)
Info: Stránka výrobcu
7 segmentový display
info: Info Stránka
Arduino
Analýza
Rozdelenie úloh
- Naštudovanie problematiky zbernice I2C, reps. ekvivalent danej zbernice na Arduine
- Naštudovanie Parallax - MLX90614 IR senzora.
Zapojenie podľa obrázka
- Naštudovanie BlinkM trojfarebnej LED Diódy
Zapojenie podľa obrázka
- Naštudovanie Mouse Sensor Kit Parallax #28560
Zapojenie podľa obrázka
- Naštudovanie 7 segment display
Zapojenie podľa obrázka
Popis Riešenia
Zapojenie
- Schema Zapojenia
Komponenty sme zapojili na základe obrázka schémy.
Led dióda a IR teplomer budeme ovládať pomocou I2C zbernice, LCD display je zapojený na digitálny pin 8 nášho Arduina a MouseSensor je zapojený
na digitálnych pinoch 5 a 6.
Pomocou danej schémy sme schopný ďalej pokračovať v programovaní zadania.
- Fotografia Zapojenia
Obrázok ukazuje reálne zapojenie nášho projektu
Algoritmus a program
Jazyk a prostredie
Pri danej problematike sme využili jazyk C++ za pomoci Arduino IDE
Opis programu
Program nášho projektu sníma teploty meraného telesa, ku ktorým vypíše taktiež súradnice z Mouse senzora, čiže ak sa posúvame po rovnej ploche vieme zistiť zmenu teplôt na základe zmeny súradníc senzora
Ďalej program dáva najavo nameranú teplotu pomocou trojfarebnej LED diódy, kde pri zmene teploty sa mení taktiež farba diódy. Hraničný bod, pri ktorom sa mení farba z modrej na červenú je 28 stupňov.
Program taktiež vypisuje real-time teplotu na 7 segmentový display pripevnený k Arduinu
Ako posledný krok pripájame aj script v jazyku Matlab, pomocou ktorého je možné vykresliť grafy, kde môžeme vidieť zmenu súradníc a taktiež teploty v daných bodoch
Zdrojový kód
Pripojený zdrojový kód súboru projekt.ino
//termo - blink
#include <Wire.h>
#include "BlinkM.h"
#include <IR_Thermometer_Sensor_MLX90614.h>
//mouse sensor
#include "PAN3101.h"
//display
#include <SoftwareSerial.h>
//setup for termo and led
IR_Thermometer_Sensor_MLX90614 MLX90614 = IR_Thermometer_Sensor_MLX90614();
int ledPin = 13; // select the pin for the LED
int blinkm_addr = 0; // 0 = talk to all blinkms on the i2c bus
byte hue=0;
BlinkM blinkm = BlinkM( blinkm_addr );
//setup for mouse sensor
#define SCLK 5 // Serial clock pin on the Arduino
#define SDIO 6 // Serial data (I/O) pin on the Arduino
PAN3101 Optical1 = PAN3101(SCLK, SDIO); // Create an instance of the PAN3101 object
signed long x = 0; // Variables for our 'cursor'
signed long y = 0; //
int c = 0; // Counter variable for coordinate reporting
//setup for display
const int softwareTx = 8;
const int softwareRx = 7;
SoftwareSerial s7s(softwareRx, softwareTx);
unsigned int counter = 0; // This variable will count up to 65k
char tempString[10]; // Will be used with sprintf to create strings
void setup() {
//termo - blink
pinMode(ledPin, OUTPUT);
blinkm.powerUp(); // use analog pins A3,A2 as power pins (works for Uno)
blinkm.begin();
blinkm.off(); // stop script and go to black
Serial.begin(9600);
MLX90614.begin();
//Serial.begin(38400);
Optical1.begin(); // Resync (not really necessary?)
//display
s7s.begin(9600);
clearDisplay(); // Clears display, resets cursor
s7s.print("-HI-"); // Displays -HI- on all digits
setDecimals(0b111111); // Turn on all decimals, colon, apos
setBrightness(255); // High brightness
clearDisplay();
delay(1000);
}
void loop() {
//termo - blink
Serial.print("Object = "); Serial.print(MLX90614.GetObjectTemp_Celsius()); Serial.println(" *C");
if(MLX90614.GetObjectTemp_Celsius() > 28){
blinkm.setRGB(255,0,0);
delay(500);
}
else{
blinkm.setRGB(0,0,255);
}
Serial.println();
//mouse sensor
x += Optical1.dx(); // Read the dX register and in/decrease X with that value
y += Optical1.dy(); // Same thing for dY register.....
// Report the coordinates once in a while...
Serial.print("x=");
Serial.print(x, DEC);
Serial.print(" y=");
Serial.print(y, DEC);
Serial.println();
//display
sprintf(tempString, "%4d", (int)MLX90614.GetObjectTemp_Celsius()*100);
s7s.print(tempString);
setDecimals(0b00000010); // Sets digit 3 decimal on
delay(1000); // This will make the display update at 10Hz.
}
void clearDisplay()
{
s7s.write(0x76); // Clear display command
}
void setBrightness(byte value)
{
s7s.write(0x7A); // Set brightness command byte
s7s.write(value); // brightness data byte
}
void setDecimals(byte decimals)
{
s7s.write(0x77);
s7s.write(decimals);
}
Stiahnutelné súbory
Keďže projekt obsahuje veľa rôznych knižníc, aby bolo možné pripojiť všetky zariadenia, pripájame celý projekt v ZIP formáte
Overenie - Užívatelský návod
- Rozbalenie ZIP projektu
- Spustenie súboru projekt.ino
- Zaznamenať dáta z konzole
- Otvoriť script.m a aktualizovať maticu data na aktuálne namerané hodnoty
- Po spustení script.m kód vygeneruje už spomenutý graf
Výsledok script.m