Operácie

Metánový senzor: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Bez shrnutí editace
 
(7 medziľahlých úprav od jedného ďalšieho používateľa nie je zobrazených)
Riadok 1: Riadok 1:
Balogh: opis senzora samotného a princípu co vlastne meria úplne absentuje
        program samotný je OK, ale chýbajú komentáre v mnohých castiach programu
{|
{|
|Autori:      || '''Bc. Martin Kudri, Bc. Róbert Moravčík'''  
|Autori:      || '''Bc. Martin Kudri, Bc. Róbert Moravčík'''  
Riadok 23: Riadok 27:
== Analýza ==
== Analýza ==


Metánový senzor je zapojený sériovo do arduina displej je zapojený do arduina cez I2C zbernicu ak hodnota prekročí určitý limit z rozsahu 0-1023 displej vypíše správu o zaregistrovaní metánu:
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 37:
== Popis riešenia ==
== Popis riešenia ==


Senzor je pripojili na sériový port arduina z 10 bitového prevodníka dostávame hodnotu 0-1023  
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 50:
=== 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.
Vyberte podstatné časti zdrojového kódu, použite na to prostredie ''source'':


<source lang="c">
<source lang="c">
Riadok 183: Riadok 186:
}
}
</source>
</source>
Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!


Zdrojový kód: [[Médiá:PRD.c|program.c]]
Zdrojový kód: [[Médiá:PRD.c|program.c]]
Riadok 191: Riadok 192:


Návod:
Návod:
Na použitie senzora ho stačí zapojiť podla obrázka a nahrať priložený program hodnoty sa dajú zobraziť na sériovom porte.
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ť ak použijete priložený program spolu so senzorom
 
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.


[[Súbor:graf01.jpg|center|500px] [[Súbor:graf02.jpg|center|500px] [[Súbor:fartOn.jpg|center|500px] [[Súbor:fartOff.jpg|center|500px]
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. Na osi Y je hodnota zo senzora a na osi X je poradie nameraného údaju.
 
Prahovú hodnotu hodnoty z 10-bitového prevodníka, ktorá značí koncentráciu metánu, sme stanovili na 300, pretože ju dokážeme dosiahnuť dýchaním teplého vzduchu priamo na senzor a túto hodnotu v rámci nášho pozorovania v relatívne ustálených podmienkach samovoľne údaj zo senzora neprekročil.
 
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é (môžu byť napr. výsledkom vydýchnutia vzduchu smerom blízko ku senzoru. Vidíme, že nameraná hodnota pozvoľne stúpa, pred koncom merania však pomerne prudko klesla, keď v miestnosti niekto otvoril okno.
 
[[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]]
Vypisovanie textu, keď prahová hodnota koncentrácie metánu nie je prekročená.
[[Súbor:fartOff.jpg|center|500px]]
Vyhodnotenie prekročenia prahovej hodnoty na displeji.
[[Súbor:fartOn.jpg|center|500px]]


[[MEMS_projekty#Projekty_2019|Späť na zoznam projektov...]]
[[MEMS_projekty#Projekty_2019|Späť na zoznam projektov...]]


[[Category:MEMS2019]] [[Category:AVR]]
[[Category:MEMS2019]] [[Category:AVR]]

Aktuálna revízia z 08:24, 16. máj 2019

Balogh: opis senzora samotného a princípu co vlastne meria úplne absentuje
        program samotný je OK, ale chýbajú komentáre v mnohých castiach programu


Autori: Bc. Martin Kudri, Bc. Róbert Moravčík
Študijný odbor: Aplikovaná mechatronika a elektromobilita 1. Ing. (2019)

Zadanie

  1. Zapojte metánový "Fart" senzor a načítavajte hodnoty z neho.
  2. Vyhodnoťte načítanú hodnotu a vypíšte na displej.


Literatúra:

  • datasheet dispeja [1]
  • datasheet senzora [2]

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:

  • informácie a zapojenie displeja [3]
  • informácie o senzore [4]

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. Na osi Y je hodnota zo senzora a na osi X je poradie nameraného údaju.

Prahovú hodnotu hodnoty z 10-bitového prevodníka, ktorá značí koncentráciu metánu, sme stanovili na 300, pretože ju dokážeme dosiahnuť dýchaním teplého vzduchu priamo na senzor a túto hodnotu v rámci nášho pozorovania v relatívne ustálených podmienkach samovoľne údaj zo senzora neprekročil.

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é (môžu byť napr. výsledkom vydýchnutia vzduchu smerom blízko ku senzoru. Vidíme, že nameraná hodnota pozvoľne stúpa, pred koncom merania však pomerne prudko klesla, keď v miestnosti niekto otvoril okno.

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.

Vypisovanie textu, keď prahová hodnota koncentrácie metánu nie je prekročená.

Vyhodnotenie prekročenia prahovej hodnoty na displeji.

Späť na zoznam projektov...