Capteur de gaz

Bonjour à tous,

Je suis étudiant en deuxième année de dut mesures physiques. Dans le cadre de notre projet tutoré nous devons réaliser un capteur de différents gaz (polluants). Ces capteurs fonctionnent avec Arduino mais nous sommes tous trois de vrais novices. Si quelqu’un qui possède des connaissances dans la programmation pour des capteurs de gaz peut me contacter je lui en serais vraiment reconnaissant.

Vous souhaitant une bonne journée/bonne soirée.

À très vite je l’espère.

vins2311:
...

Je suis étudiant en deuxième année de dut mesures physiques. Dans le cadre de notre projet tutoré nous devons réaliser un capteur de différents gaz

Bonsoir
premières questions dont tu à évidemment déjà la réponse :grin:

  • Quels gaz ?
    -- Quelles concentrations

As tu la référence de ce capteur ? Tu peux chercher sur internet la référence et arduino.

Salut merci de m’avoir répondu !!
Oui j’ai la réf : Digital Gas Sensor Module for Sulfur Dioxide: DGS-SO2 - Spec Sensors

Il s’agit d’un capteur de dioxyde de souffre. Nous en avons également deux autres pour l’ozone et le dioxyde d’azote. Celui-ci est un capteur numérique. Nous avons 3 numériques et 3 analogiques. Apparemment le numérique serait le plus simple à utiliser ^^.

Bonsoir

Si quelqu'un qui possède des connaissances dans la programmation pour des capteurs de gaz.....

OUI : le fabricant !!! qui fournit une abondante documentation (onglet DOCUMENTATION) ainsi que des librairies Arduino pour les capteurs numériques et analogiques. Ces librairies sont fournies avec des exemples

Dans la colonne de gauche télécharger à partir des deux derniers liens pour les deux types d librairies.

Attention : le capteur SO2 numérique fonctionne sous 3,3V (signaux et alimentation), pas 5V comme la majorité des cartes Arduino. (à 75 $ HT le capteur mieux vaut limiter la casse !!)

!!! RX, TX Must be on 3.3 volt communication, or using level shifters to get to 3.3V UART!!!

Ces capteurs fonctionnent avec Arduino mais nous sommes tous trois de vrais novices

-Prendre connaissance des tutoriels conseillés dans les messages épinglés en tête de forum pour acquérir les bases.
-Etudier et tester les exemples DSDK-SETUP.ino et DSDK_UART.ino

/*
DSDK_UART - Example use of library for reading KWJ Engineering with SPEC Sensors on Digital SDK.
Created by David E. Peaslee, March 29, 2018.
Created for SPEC/KWJ Digital Gas Sensor (DGS, or also known as DULPSM)
Not yet released into the public domain.

!!! RX, TX Must be on 3.3 volt communication, or using level shifters to get to 3.3V UART!!!

Wiring:
Connect the TX of Digital Sensor to the RX of 3.3 V Arduino
Connect the RX of Digital Sensor to the TX of 3.3 V Arduino
Connect the power of Digital Sensor to the 3.3V power of the Arduino
Connect the ground of Digital Sensor to the ground of the Arduino

This code is optimized for the Arduino Due, but can be modified to work with any other Arduino.
The DGS is a 3.3V device, which means you must use level shifters if using with a 5V Arduino.
SoftwareSerial is needed for any Arduino compatible device that does not have a native alternative serial port (Serial1)
DGS runs at 9600 baud rate.
*/

/* This program is intended to allow serial communication with the DGS. Using the Arduino Serial terminal you can send and recieve information to the DGS:

//#include "SoftwareSerial.h" //Include the next lines if using Arduino without Serial1 support, and replace refernces to Serial1 with mySerial
//
//SoftwareSerial mySerial(10, 11); // !!! RX, TX Must be on 3.3 volt communication, or using level shifters to get to 3.3V UART!!!

int timing = 300; //set the moving average

void setup() //Setup intended for SDK which is spanned and zeroed, or has the barcode information previously entered. Must initialize both serial ports:
{
Serial1.begin(9600);
Serial.begin(9600);
delay(5000);

Serial.flush();
Serial1.flush();

delay(1000);
Serial1.write('A');
delay(1000);
Serial1.print(timing);
delay(500);
Serial1.write('\r');
delay(2000);

while (Serial1.available()) // read from SDK port, send to Serial port to interupt send 'c' without line ending
{
int inByte = Serial1.read();
Serial.write(inByte);
}
Serial.println();

Serial.println("Finished Setup");
Serial.println("Sensor #, Conc.(PPB), Temp.(C), Rh (%),Conc. (Counts), Temp. (Counts), Rh (%Counts), Days, Hours, Minutes, Seconds");
Serial1.write('c');

}

void loop()
{

while (Serial1.available()) // read from SDK port, send to Serial port to interupt continuous output send 'c' without line ending, may have to send more than once.
{
int inByte = Serial1.read();
Serial.write(inByte);
}
while (Serial.available()) // read from Serial port, send to port SDK port
{
int inByte = Serial.read();
Serial1.write(inByte);
delay(100);
}
}

Bonjour je vous ai envoyé le programme qui est sur le site du constructeur Spec sensor.

Ce programme est développé pour une carte arduino due. Nous avons donc testé directement avec une arduino due mais cela ne fonctionne pas.
Le programme nous affiche cela : Serial.println("Sensor #, Conc.(PPB), Temp.(C), Rh (%),Conc. (Counts), Temp. (Counts), Rh (%Counts), Days, Hours, Minutes, Seconds");

et puis plus rien du tout. Aucune valeur de concentration ou de température....

Avez-vous des idées ou des commentaires à nous fournir pour débloquer la situation.

Merci beaucoup

La ligne que tu indiquée est la dernière du setup. Tout de suite après, le programme exécute la loop. Celle ci écoute la liaison série Serial1 qui doit correspondre à ton capteur et affiche sur la console ce qu'elle reçoit. Si rien ne s'affiche c'est que l'arduino ne reçoit rien.

À cela plusieurs causes possibles. Problème de connexion ? D'initialisation du capteur ? Vérifie si tu as branché le capteur comme il faut. Lis le mode d'emploi du constructeur, peut être qu'il faut envoyer une commande au capteur pour qu'il envoie ses données ?

Ton code marche dans les deux sens. Si tu tapes quelque chose dans la console, il envoie ça au capteur.

Bonjour, d’accord je vais voir ça mais si niveau des branchements nous sommes sur de nous. Il y a seulement le ground/ le 3,3V et RX / TX

Page 7 de la data sheet ils disent qu’il faut envoyer le caractère ASCII correspondant.

Que représente

Lower case c
Lower case Z...

Merci pour vos réponses.

vins2311:
https://www.spec-sensors.com/wp-content/uploads/2017/01/DGS-SO2-968-038.pdf

Page 7 de la data sheet ils disent qu’il faut envoyer le caractère ASCII correspondant.

Que représente

Lower case c
Lower case Z...

Merci pour vos réponses.

bonjour
c minuscule
Z majuscule

Serial.write(99); // c minuscule
Serial.write(90); // Z majuscule

Si tu tapes
c
Il faut ensuite entrer une durée en secondes (5, 10,30 ou 60) et le capteur va te renvoyer ses valeurs mesurées selon un certain format pendant cette durée. Tu peux le stopper en tapant
R
ou
r

Le format de la réponse est

The format of the output is: SN [XXXXXXXXXXXX], PPB [0 : 999999], TEMP [-99 : 99], RH [0 :99], RawSensor[ADCCount], TempDigital, RHDigital, Day[0 : 99], Hour [0 : 23], Minute [0 : 59],Second [0 : 59

ce qui explique la ligne que tu vois dans la console

Il faut que j’écrive Serial.write(99) dans mon programme du coup?

Non tu lances le programme, il affiche la ligne et attend que tu tapes une commande dans la console. Tu tapes ton c suivi de la touche enter et il devrait t'envoyer ses mesures.
Vérifie bien qu'en bas de la console tu as les bonnes options (fin de ligne et retour chariot, cr + nl)

Rien ne se passe hormis ça
Sensor #, Conc.(PPB), Temp.(C), Rh (%),Conc. (Counts), Temp. (Counts), Rh (%Counts), Days, Hours, Minutes, Seconds");

Qui marque la fin du setup...
Je comprends pas...

Au temps pour moi. Il y a bien une ligne

Serial1.write('c');

à la fin du setup. Mais d'après la datasheet le capteur attend une valeur numérique, une durée (voir mon message précédent).
Tu peux essayer d'ajouter après cette ligne

Serial1.write(60);

Je mets ça après le Serial1.write('c') ?

Maintenant il m’envoie des sortes de carré

Je vais essayer de rajouter ça

Vérifie que la console est réglée sur 9600 baud

Ça ne fonctionne toujours pas

Est-ce que dans mon code copier précédemment
Inbyte doit bien être un int?

lesept:
Au temps pour moi. Il y a bien une ligne

Serial1.write('c');

à la fin du setup. Mais d'après la datasheet le capteur attend une valeur numérique, une durée (voir mon message précédent).
Tu peux essayer d'ajouter après cette ligne

Serial1.write(60);

J'ai l'impresion qu'il faut aprés avoir envoyé un 'c'
envoyer une durée
The user is prompted to enter a measurement period (5, 10, 30, or 60 seconds)
à tester apres avoir envoyé le 'c'
Serial1.print("10") ;
ou Serial1.println("10") ;