- Sensore di gas MQ6
- Come misurare la PPM utilizzando i sensori di gas MQ?
- Componenti necessari
- Schematico
- Sensore MQ con programmazione PIC
I sensori di gas della serie MQ sono tipi molto comuni di sensori utilizzati nei rilevatori di gas per rilevare o misurare determinati tipi di gas. Questi sensori sono ampiamente utilizzati in tutti i dispositivi relativi al gas, dai semplici rilevatori di fumo ai monitor industriali della qualità dell'aria. Abbiamo già utilizzato questi sensori di gas MQ con Arduino per misurare alcuni gas nocivi come l'ammoniaca. In questo articolo, impareremo come utilizzare questi sensori di gas con microcontrollori PIC, per misurare il valore PPM del gas e visualizzarlo su un LCD 16x2.
Come accennato in precedenza, sul mercato sono disponibili diversi tipi di sensori della serie MQ e ogni sensore può misurare diversi tipi di gas, come mostrato nella tabella seguente. Per il bene di questo articolo, utilizzeremo il sensore di gas MQ6 con PIC che può essere utilizzato per rilevare la presenza e la concentrazione di gas GPL. Tuttavia, utilizzando lo stesso hardware e firmware, è possibile utilizzare anche altri sensori della serie MQ senza modifiche sostanziali nel codice e nella parte hardware.
Sensore | Rileva |
MQ-2 | Metano, Butano, GPL, fumo |
MQ-3 | Alcol, etanolo, fumo |
MQ-4 | Metano, Gas CNG |
MQ-5 | Gas naturale, GPL |
MQ-6 | GPL, gas butano |
MQ-7 | Monossido di carbonio |
MQ-8 | Idrogeno gassoso |
MQ-9 | Monossido di carbonio, gas infiammabili. |
MQ131 | Ozono |
MQ135 | Qualità dell'aria (benzene, alcol, fumo) |
MQ136 | Gas di idrogeno solforato |
MQ137 | Ammoniaca |
MQ138 | Benzene, toluene, alcool, acetone, propano, formaldeide, idrogeno |
MQ214 | Metano, gas naturale |
MQ216 | Gas naturale, gas di carbone |
MQ303A | Alcol, etanolo, fumo |
MQ306A | GPL, gas butano |
MQ307A | Monossido di carbonio |
MQ309A | Monossido di carbonio, gas infiammabili |
MG811 | Anidride carbonica (CO2) |
AQ-104 | Qualità dell'aria |
Sensore di gas MQ6
L'immagine sotto mostra il diagramma dei pin del sensore MQ6. Tuttavia, l'immagine a sinistra è un sensore MQ6 basato su modulo per l'interfacciamento con l'unità microcontrollore, anche il diagramma dei pin del modulo è mostrato in quell'immagine.
Il pin 1 è VCC, il pin 2 è GND, il pin 3 è l'uscita digitale (logica bassa quando viene rilevato il gas) e il pin 4 è l'uscita analogica. La pentola viene utilizzata per regolare la sensibilità. Non è RL. Il resistore RL è il resistore giusto del LED DOUT.
Ogni sensore della serie MQ ha un elemento riscaldante e una resistenza di rilevamento. A seconda della concentrazione del gas, la resistenza di rilevamento viene modificata e rilevando la resistenza variabile, è possibile misurare la concentrazione di gas. Per misurare la concentrazione di gas in PPM tutti i sensori MQ forniscono un grafico logaritmico che è molto importante. Il grafico fornisce una panoramica della concentrazione di gas con il rapporto tra RS e RO.
Come misurare la PPM utilizzando i sensori di gas MQ?
La RS è la resistenza di rilevamento in presenza di un gas particolare mentre la RO è la resistenza di rilevamento in aria pulita senza gas particolare. Il grafico logaritmico sottostante, tratto dal datasheet, fornisce una panoramica della concentrazione di gas con la resistenza di rilevamento del sensore MQ6. Il sensore MQ6 viene utilizzato per rilevare la concentrazione di gas GPL. Pertanto, il sensore MQ6 fornirà una particolare resistenza durante la condizione di aria pulita dove il gas GPL non è disponibile. Inoltre, la resistenza cambierà ogni volta che il gas GPL viene rilevato dal sensore MQ6.
Quindi, dobbiamo tracciare questo grafico nel nostro firmware in modo simile a quello che abbiamo fatto nel nostro progetto di rilevatore di gas Arduino. La formula è di avere 3 diversi punti dati. I primi due punti dati sono l'inizio della curva GPL, nelle coordinate X e Y. Il terzo dato è la pendenza.
Quindi, se selezioniamo la curva blu profondo che è la curva GPL, l'inizio della curva nelle coordinate X e Y è 200 e 2. Quindi, il primo punto dati dalla scala logaritmica è (log200, log2) 2.3, 0.30).
Facciamolo come, X1 e Y1 = (2.3, 0.30). La fine della curva è il secondo punto dati. Con lo stesso processo descritto sopra, X2 e Y2 sono (log 10000, log0.4). Pertanto, X2 e Y2 = (4, -0,40). Per ottenere la pendenza della curva, la formula è
= (Y2-Y1) / (X2-X1) = (- 0,40 - 0,30) / (4 - 2,3) = (-0,70) / (1,7) = -0,41
Il grafico di cui abbiamo bisogno può essere fornito come
LPG_Curve = {inizio X e inizio Y, pendenza} LPG_Curve = {2.3, 0.30, -0.41}
Per altri sensori MQ, ottenere i dati di cui sopra dal foglio dati e dal grafico del grafico logaritmico. Il valore sarà diverso in base al sensore e al gas misurato. Per questo particolare modulo, ha un pin digitale che fornisce solo informazioni sul gas presente o meno. Per questo progetto, viene utilizzato anche.
Componenti necessari
Di seguito sono riportati i componenti richiesti per l'interfacciamento del sensore MQ con il microcontrollore PIC:
- Alimentazione 5V
- Breadboard
- Resistenza da 4.7k
- LCD 16x2
- Resistenza da 1k
- Cristallo da 20 Mhz
- Condensatore 33pF - 2 pezzi
- Microcontrollore PIC16F877A
- Sensore serie MQ
- Berg e altri cavi di collegamento.
Schematico
Lo schema di questo sensore di gas con un progetto PIC è piuttosto semplice. Il pin analogico è collegato con RA0 e quello digitale con RD5 per misurare la tensione analogica fornita dal modulo sensore di gas. Se sei completamente nuovo in PIC, potresti voler esaminare il tutorial PIC ADC e il tutorial PIC LCD per comprendere meglio questo progetto.
Il circuito è costruito in una breadboard. Una volta completate le connessioni, la mia configurazione è simile a questa, mostrata di seguito.
Sensore MQ con programmazione PIC
La parte principale di questo codice è la funzione principale e altre funzioni periferiche associate. Il programma completo può essere trovato in fondo a questa pagina, gli importanti frammenti di codice sono spiegati come segue
La funzione seguente viene utilizzata per ottenere il valore di resistenza del sensore in aria libera. Poiché viene utilizzato il canale analogico 0, riceve i dati dal canale analogico 0. Serve per calibrare il sensore di gas MQ.
float SensorCalibration () { int count; // Questa funzione calibrerà il sensore in galleggiante in aria libera val = 0; for (count = 0; count <50; count ++) {// preleva più campioni e calcola il valore medio val + = calcola_resistenza (ADC_Read (0)); __delay_ms (500); } val = val / 50; val = val / RO_VALUE_CLEAN_AIR; // diviso per RO_CLEAN_AIR_FACTOR restituisce la Ro return val; }
La funzione sotto viene utilizzata per leggere i valori analogici del sensore MQ e media per calcolare il valore Rs
float read_MQ () { int count; float rs = 0; for (count = 0; count <5; count ++) {// effettua più letture e calcola la media. rs + = calcola_resistenza (ADC_Read (0)); // rs cambia in base alla concentrazione di gas. __delay_ms (50); } rs = rs / 5; return rs; }
La funzione seguente viene utilizzata per calcolare la resistenza dal resistore del partitore di tensione e la resistenza di carico.
float calcola_resistenza (int adc_channel) {// sensore e resistenza di carico formano un partitore di tensione. quindi utilizzando il valore analogico e il valore di caricamento return (((float) RL_VALUE * (1023-adc_channel) / adc_channel)); // troveremo la resistenza del sensore. }
RL_VALUE è definito all'inizio del codice come mostrato di seguito
#define RL_VALUE (10) // definisce la resistenza di carico sulla scheda, in kilo-ohm
Modificare questo valore dopo aver verificato la resistenza del carico a bordo. Può essere diverso in altre schede sensore MQ. Per tracciare i dati disponibili nella scala logaritmica, viene utilizzata la funzione seguente.
int gas_plot_log_scale (float rs_ro_ratio, float * curve) { return pow (10, (((log (rs_ro_ratio) -curve) / curve) + curve)); }
La curva è la curva GPL definita sopra del codice che è stata precedentemente calcolata nel nostro articolo sopra.
float MQ6_curve = {2.3,0.30, -0.41}; // Grafico grafico, cambia questo per un sensore particolare
Infine, di seguito è riportata la funzione principale all'interno della quale misuriamo il valore analogico, calcoliamo il PPM e lo visualizziamo sul display LCD
void main () { system_init (); schermo pulito(); lcd_com (FIRST_LINE); lcd_puts ("Calibrating…."); Ro = SensorCalibration (); //schermo pulito(); lcd_com (FIRST_LINE); lcd_puts ("Fatto!"); //schermo pulito(); lcd_com (FIRST_LINE); lcd_print_number (Ro); lcd_puts ("K Ohm"); __delay_ms (1500); gas_detect = 0; while (1) { if (gas_detect == 0) { lcd_com (FIRST_LINE); lcd_puts ("Il gas è presente"); lcd_com (SECOND_LINE); lcd_puts ("Gas ppm ="); float rs = read_MQ (); rapporto flottante = rs / Ro; lcd_print_number (gas_plot_log_scale (ratio, MQ6_curve)); __delay_ms (1500); schermo pulito(); } altro { lcd_com (FIRST_LINE); lcd_puts ("Gas non presente"); } } }
Innanzitutto, la RO del sensore viene misurata in aria pulita. Quindi viene letto il pin digitale per verificare se il gas è presente o meno. Se il gas è presente, il gas viene misurato dalla curva GPL fornita.
Ho usato un accendino per verificare se il valore PPM cambia quando viene rilevato il gas. Questi accendisigari hanno al loro interno gas GPL, che una volta rilasciato nell'aria verrà letto dal nostro sensore e il valore PPM sul display LCD cambia come mostrato di seguito.
La lavorazione completa si trova nel video riportato in fondo a questa pagina. In caso di domande, lasciarle nella sezione commenti o utilizzare i nostri forum per altre domande tecniche.