Metánový senzor: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
Riadok 23: | Riadok 23: | ||
== Analýza == | == Analýza == | ||
Metánový senzor je zapojený sériovo do | Metánový senzor je zapojený sériovo do Arduina, displej je zapojený do Arduina cez I2C zbernicu, ak hodnota koncentrácie metánu prekročí určitý limit z rozsahu 0-1023 (výstup z 10-bitového A-D prevodníka v Arduine), displej vypíše správu o zaregistrovaní metánu: | ||
* informácie a zapojenie displeja [http://goblack.de/arduino/programme/eat123A-LCD.html?fbclid=IwAR1X5pRi-wOIgnhmt2xRVhqW5suoHZUmcmVavR1WTerP4SeTpm5D6LchUoM] | * informácie a zapojenie displeja [http://goblack.de/arduino/programme/eat123A-LCD.html?fbclid=IwAR1X5pRi-wOIgnhmt2xRVhqW5suoHZUmcmVavR1WTerP4SeTpm5D6LchUoM] | ||
Riadok 33: | Riadok 33: | ||
== Popis riešenia == | == Popis riešenia == | ||
Senzor je pripojili na sériový port | Senzor je pripojili na sériový port Arduina, z 10 bitového prevodníka dostávame hodnotu 0-1023 | ||
zodpovedajúcu nameranému obsahu metánu. | zodpovedajúcu nameranému obsahu metánu. | ||
Riadok 46: | Riadok 46: | ||
=== Algoritmus a program === | === Algoritmus a program === | ||
Algoritmus načíta hodnotu z metánového senzoru ktorú vyhodnotí a cez zbernicu | Algoritmus načíta hodnotu z metánového senzoru, ktorú vyhodnotí a cez zbernicu | ||
I2C pošle korešpondujúcu správu na displej | I2C pošle korešpondujúcu správu na displej. | ||
<source lang="c"> | <source lang="c"> | ||
Riadok 183: | Riadok 182: | ||
} | } | ||
</source> | </source> | ||
Zdrojový kód: [[Médiá:PRD.c|program.c]] | Zdrojový kód: [[Médiá:PRD.c|program.c]] | ||
Riadok 191: | Riadok 188: | ||
Návod: | Návod: | ||
Na použitie senzora ho stačí zapojiť podla obrázka a nahrať priložený program hodnoty sa dajú zobraziť | Na použitie senzora ho stačí zapojiť podla obrázka a nahrať priložený program- hodnoty sa dajú zobraziť vypisovaním do sériového portu. | ||
Na použitie displeja ho treba zapojiť podla obrázka potenciometer a kondenzátor môžte vynechať | Na použitie displeja ho treba zapojiť podla obrázka, ale potenciometer a kondenzátor môžte vynechať. Ak použijete priložený program spolu so senzorom, | ||
budete na displeji vidieť vyhodnotenie. | budete na displeji vidieť vyhodnotenie. | ||
Na sledovanie koncentrácie metánu v okolí senzora môžeme použiť sériový zapisovať programu Arduino IDE. Pomocou neho sú vizualizované dáta prichádzajúce na sériový port do počítača pripojeného k Arduinu. | |||
V prvom grafe vidíme výstup zo senzora bez aktívnej interakcie s ním (bol iba položený na stole počas cvičenia). Skokové zmeny nameranej hodnoty sú náhodné. | |||
[[Súbor:graf01.jpg|center|500px]] | |||
V druhom grafe vidíme výsledok aktívnej interakcie so senzorom (vydýchnutie teplého vzduchu na senzor), v grafe sú v týchto momentoch zreteľné skokové zmeny v nameranej hodnote. | |||
[[Súbor:graf02.jpg|center|500px]] | [[Súbor:graf02.jpg|center|500px]] | ||
Hodnoty zo sériového portu. | Hodnoty zo sériového portu. |
Verzia z 15:46, 8. máj 2019
Autori: | Bc. Martin Kudri, Bc. Róbert Moravčík | |
Študijný odbor: | Aplikovaná mechatronika a elektromobilita | 1. Ing. (2019) |
Zadanie
- Zapojte metánový "Fart" senzor a načítavajte hodnoty z neho.
- Vyhodnoťte načítanú hodnotu a vypíšte na displej.
Literatúra:
Analýza
Metánový senzor je zapojený sériovo do Arduina, displej je zapojený do Arduina cez I2C zbernicu, ak hodnota koncentrácie metánu prekročí určitý limit z rozsahu 0-1023 (výstup z 10-bitového A-D prevodníka v Arduine), displej vypíše správu o zaregistrovaní metánu:
Priebeh signálu I2C
Popis riešenia
Senzor je pripojili na sériový port Arduina, z 10 bitového prevodníka dostávame hodnotu 0-1023 zodpovedajúcu nameranému obsahu metánu.
Schéma zapojenia snímača
Schéma zapojenia displeja
zapojenie zbernice I2C
Algoritmus a program
Algoritmus načíta hodnotu z metánového senzoru, ktorú vyhodnotí a cez zbernicu I2C pošle korešpondujúcu správu na displej.
#include <Wire.h>
#define I2CadrLCD 0x3A
//riadkove vypisy
String TXTstrg1 = "Iniciali-";
String TXTstrg2 = "zujem";
String TXTstrg3 = "displej";
String TXT_nic = "Necitim nic";
String TXT_prd1 = "FUJ!";
String TXT_prd2 = "Ty si si";
String TXT_prd3 = "prdol!";
int ArduSensorValue; //analogova hodnota zo senzora
int fuj = 1; //aktivacna premenna zmeny vypisu
void display_init () { //donastavenie disleja, pockanie kym uplne nabehne
cursor_on(0);
delay(2000);
}
void setup () {
Wire.begin ();
Wire.setClock (100000L);
init_LCD ();
clear_display ();
Serial.begin(9600);
display_init ();
}
void init_LCD () { //inicializacia displeja - zaciatok komunikacie a priprava na zobrazovanie dat
Wire.beginTransmission (I2CadrLCD);
Wire.write (0x00);
Wire.write (0x2E);
Wire.write (0x0F);
Wire.write (0x06);
Wire.write (0x01);
Wire.endTransmission ();
delay (20);
}
void clear_display () { //zmazanie vypisaneho textu z displeja
Wire.beginTransmission (I2CadrLCD);
Wire.write (0x00);
Wire.write (0x02);
Wire.endTransmission ();
}
void print_TXT (byte z, byte s, String TXTstrg) { //funkcia na vypisanie stringu na displej do riadku z na poziciu s
set_DDram (z,s);
byte tl = 12-s+1;
if (TXTstrg.length() < tl) tl=TXTstrg.length();
Wire.beginTransmission (I2CadrLCD);
Wire.write (0x40);
for (int b=0; b < tl; b++) {
Wire.write (0x80 + TXTstrg[b]);
}
Wire.endTransmission ();
}
void set_DDram (byte z,byte s) { //obsluzna funkcia pre vypis na displej
byte pos; z=z-1; s=s-1;
if (z>2 || s>11) return;
Wire.beginTransmission (I2CadrLCD);
Wire.write (0x00);
if (z == 0) pos= 0x00+s;
if (z == 1) pos= 0x20+s;
if (z == 2) pos= 0x40+s;
Wire.write (0x80+pos);
Wire.endTransmission ();
}
void clr_line (byte z) { //vymazanie vypisanych dat z displeja z riadku z
byte pos; z=z-1;
if (z>2) return;
Wire.beginTransmission (I2CadrLCD);
Wire.write (0x00);
if (z == 0) pos= 0x00;
if (z == 1) pos= 0x20;
if (z == 2) pos= 0x40;
Wire.write (0x80+pos);
Wire.endTransmission ();
Wire.beginTransmission (I2CadrLCD);
Wire.write (0x40);
for (int b=0; b < 12; b++){
Wire.write (B10100000);
}
Wire.endTransmission ();
}
void cursor_on (byte on) { //aktivacia/deaktivacia kurzora na displeji
if (on == 0) on = 0x0E;
else on = 0x0F;
Wire.beginTransmission (I2CadrLCD);
Wire.write (0x00);
Wire.write (on);
Wire.endTransmission ();
}
void loop() {
ArduSensorValue=analogRead(0); //citanie analogovej hodnoty zo senzora
Serial.println(ArduSensorValue, DEC); //vypisovanie hodnoty do serioveho portu (plotovanie) - mozne zakomentovat
delay(1500); //perioda kontroly udaju zo senzora
if ((ArduSensorValue > 300) && (fuj == 0)) { //ak senzor zaznamena zvysenie koncentracie metanu - zmena vypisovanych udajov na upozornenie "o prde"
fuj = 1;
clr_line(1);
clr_line(2);
clr_line(3);
print_TXT(1,5,TXT_prd1);
delay(400);
print_TXT(2,3,TXT_prd2);
delay(400);
print_TXT(3,4,TXT_prd3);
delay(2000);
}
if ((ArduSensorValue <= 300) && (fuj == 1)) { //ak v predoslom kroku bola zvysena koncentracia metanu, ale uz je v norme - vypnutie upozornenia
fuj = 0;
clr_line(1);
clr_line(2);
clr_line(3);
print_TXT(2,1,TXT_nic);
}
}
Zdrojový kód: program.c
Overenie
Návod: Na použitie senzora ho stačí zapojiť podla obrázka a nahrať priložený program- hodnoty sa dajú zobraziť vypisovaním do sériového portu. Na použitie displeja ho treba zapojiť podla obrázka, ale potenciometer a kondenzátor môžte vynechať. Ak použijete priložený program spolu so senzorom, budete na displeji vidieť vyhodnotenie. Na sledovanie koncentrácie metánu v okolí senzora môžeme použiť sériový zapisovať programu Arduino IDE. Pomocou neho sú vizualizované dáta prichádzajúce na sériový port do počítača pripojeného k Arduinu.
V prvom grafe vidíme výstup zo senzora bez aktívnej interakcie s ním (bol iba položený na stole počas cvičenia). Skokové zmeny nameranej hodnoty sú náhodné.
V druhom grafe vidíme výsledok aktívnej interakcie so senzorom (vydýchnutie teplého vzduchu na senzor), v grafe sú v týchto momentoch zreteľné skokové zmeny v nameranej hodnote.
Hodnoty zo sériového portu.
Vyhodnotenie na displeji.