Inteligentný infračervený skener: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
(54 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených) | |||
Riadok 1: | Riadok 1: | ||
__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== | |||
<p>Zadaním projektu bolo zapojiť infračervený skener teploty. </p> | |||
<p>Popri danom zariadení bolo nutné zapojiť Parallax mouse senzor, vďaka ktorému sme schopní určiť polohu meranej teploty. </p> | |||
<p>Ďalej sme použili trojfarebnú LED, ktorá znázorňuje nameranú teplotu. </p> | |||
<p>Posledné zariadenie sme pridali 7 segmentový display na výpis teploty.</p> | |||
==Použité zariadenia== | |||
===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=== | |||
<p> | |||
[[Súbor:Xsedivyj_led.JPG]] | |||
</p><p> | |||
Info: [http://thingm.com/products/blinkm/ Stránka výrobcu] | |||
</p> | |||
===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=== | |||
<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