Operácie

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

Médiá:MISA_project_sedivy_uzik_rosival.zip

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