Operácie

Inteligentný infračervený skener: Rozdiel medzi revíziami

Zo stránky SensorWiki

DVPS (diskusia | príspevky)
Bez shrnutí editace
Balogh (diskusia | príspevky)
Bez shrnutí editace
 
(45 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených)
Riadok 1: Riadok 1:
= MISA Project Užík, Rosival, Šedivý =
__NOTOC__
 
'''Balogh:'''
* chýba popis senzorov, na akom princípe pracujú, čo merajú a čo je výstupná hodnota, čo posielate...
* schémy zapojenia sú z iných projektov, to je neprofesionálne
* výstup by mohol byť aj presnejší, predovšetkým chýba informácia o prevode px-cm a teplota mohla byť zobrazená napr. farebne...
* celkovo: je z tejto dokumentácie niekto schopný pochopiť oba senzory a použiť ich vo svojom projekte?
 
{|
|Autori:      || '''Bc. Richard Užík, Bc. Michal Rosival a Bc. Ján Šedivý'''
|-
|Študijný odbor:  || Aplikovaná mechatronika a elektromobilita || 1. Ing.  ('''2018''')
|}


==Zadanie==
==Zadanie==
Riadok 11: Riadok 23:


===IR thermometer Sensor -MLX90614===
===IR thermometer Sensor -MLX90614===
<p>
[[Súbor:Xsedivyj_ir_sensor.JPG]]
</p><p>
Info: [https://www.dfrobot.com/wiki/index.php/IR_Thermometer_Sensor_MLX90614_SKU:_SEN0206 Stránka výrobcu]
</p>


===Trojfarebna led===
===Trojfarebna led===
<p>
[[Súbor:Xsedivyj_led.JPG]]
</p><p>
Info: [http://thingm.com/products/blinkm/ Stránka výrobcu]
</p>


===Mouse Sensor Kit (#28560) ===
===Mouse Sensor Kit (#28560) ===
<p>
[[Súbor:Xsedivyj_mouse_sensor.JPG]]
</p><p>
Info: [https://www.parallax.com/sites/default/files/downloads/28560-Mouse-Sensor-Kit-Product-Documentation.pdf Stránka výrobcu]
</p>


===7 segmentový display===
===7 segmentový display===
<p>
[[Súbor:Xsedivyj_display.jpg]]
</p><p>
info: [https://learn.sparkfun.com/tutorials/using-the-serial-7-segment-display#example-1-serial-uart Info Stránka]
</p>
===Arduino===
<p>
[[Súbor:Xsedivyj_arduino.jpg]]
</p>
==Analýza==
<p>Rozdelenie úloh</p>
* Naštudovanie problematiky zbernice I2C, reps. ekvivalent danej zbernice na Arduine
* Naštudovanie Parallax - MLX90614 IR senzora.
  Zapojenie podľa obrázka
  [[Súbor:Xsedivyj zapoj ir sensor.PNG]]
* Naštudovanie BlinkM trojfarebnej LED Diódy
  Zapojenie podľa obrázka
  [[Súbor:Xsedivyj zapoj led.JPG]]
* Naštudovanie Mouse Sensor Kit Parallax #28560
  Zapojenie podľa obrázka
  [[Súbor:Xsedivyj zapoj mouse.JPG]]
* Naštudovanie 7 segment display
  Zapojenie podľa obrázka
  [[Súbor:Xsedivyj zapoj display.JPG]]
==Popis Riešenia==
===Zapojenie===
* Schema Zapojenia
  [[Súbor:Xsedivyj schema zapojenia1.jpg]]
  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
  [[Súbor:Xsedivyj schema fotto1.jpg]]
===Algoritmus a program===
====Jazyk a prostredie====
Pri danej problematike sme využili jazyk C++ za pomoci Arduino IDE
====Opis programu====
<p>
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
</p>
<p>
Ď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.
</p>
<p>
Program taktiež vypisuje real-time teplotu na 7 segmentový display pripevnený k Arduinu
</p>
<p>
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
</p>
====Zdrojový kód====
<p>Pripojený zdrojový kód súboru projekt.ino</p>
<source lang="c">
//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);
}
</source>
====Stiahnutelné súbory====
<p>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</p>
<p>[[Médiá:MISA_project_sedivy_uzik_rosival.zip]]</p>
==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'''
  [[Súbor:Xsedivyj_vyhodnotenie.jpg]]
<!-- Balogh: Toto tu musí ostať, nedávajte to preč, prosím! -->
[[Category:MEMS2018]] [[Category:AVR]]

Aktuálna revízia z 08:27, 29. máj 2018


Balogh: 
* chýba popis senzorov, na akom princípe pracujú, čo merajú a čo je výstupná hodnota, čo posielate...
* schémy zapojenia sú z iných projektov, to je neprofesionálne 
* výstup by mohol byť aj presnejší, predovšetkým chýba informácia o prevode px-cm a teplota mohla byť zobrazená napr. farebne...
* celkovo: je z tejto dokumentácie niekto schopný pochopiť oba senzory a použiť ich vo svojom projekte?
Autori: Bc. Richard Užík, Bc. Michal Rosival a Bc. Ján Šedivý
Študijný odbor: Aplikovaná mechatronika a elektromobilita 1. Ing. (2018)

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