L'expérimentation assistée par ordinateur est utilisée depuis plus de 20 ans dans les établissements scolaires. Les enseignants initient les élèves à la captation de données biologiques puis à l'exploitation des données sur ordinateur.
Les cartes arduino, répandues dans l'éducation pour construire des robots, ont l'avantage d'être peu coûteuses et facilement programmables avec un logiciel libre.
Avec ces cartes, il est possible de construire avec les élèves son propre système de captation de données environnementales.
Un travail dans plusieurs disciplines peut être envisagé pour :
- manipuler, assembler des capteurs, fabriquer son propre dispositif EXAO
- comprendre le fonctionnement d'un dispositif d'expérimentation par ordinateur
- programmer sa carte d'acquisition
La carte Arduino
Mon choix s'est porté sur les cartes Seeeduino conçues pour fonctionner avec le systeme Grove.
Ce systeme Grove permet de brancher directement différentes interfaces, sans soudure et mise en place de schéma de montage (avec résistance et connectique complexe).
La Seeeduino lotus possède sur la carte des prises grove. http://www.seeedstudio.com/wiki/Main_Page
Les capteurs
De nombreux capteurs de type Grove existent, la plupart des capteurs fournissent une fiche technique très complète qui permettent d'évaluer leur limite. J'ai pour ma part opté pour :
- Un capteur de température étanche Grove est basé sur le circuit DS18B20 avec une plage de mesure de -55°C à +125°C.http://www.gotronic.fr/art-capteur-de-temperature-grove-101990019-23842.htm Circuit DS18B20 Capteur branché sur la prise numérique D2 de la carte d'acquisition.
- Un capteur UV branché dans mon cas sur une prise analogique A0 http://www.seeedstudio.com/wiki/Grove_-_UV_Sensor A brancher sur Port A0
- Un capteur de gaz branché sur la prise Analogique A2 http://www.seeedstudio.com/wiki/Grove_-_Gas_Sensor(MQ5) Temps de réponse rapide Haute sensibilité pour le LPG, le gaz naturel et le gaz de ville. Faible sensibilité pour l'alcool et la fumée.
J'ai également acheté un écran pour reporter les données sans ordinateur. http://www.seeedstudio.com/wiki/Grove_-_LCD_RGB_Backlight Écran qui se branche sur un port AIC.
Il a fallut ensuite une installation des librairies (équivalent des pilotes) avec le logiciels Arduino.
https://www.arduino.cc/en/Main/Software
Il faut aller dans le logiciel arduino et « inclure des bibliothèques »
- Librairie pour la sonde à température, UV et gaz Librairie Onewire http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
- Librairie Dallas température contrôle. https://github.com/milesburton/Arduino-Temperature-Control-Library
- Librairie pour l'écran LCD https://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight
Le programme
Nous passons ensuite à la conception du programme intégrant tous les capteurs et l'affichage. Cette partie nécessite quelques connaissances de programmation.
Le travail de programmation permet d'observer les effets de chaque modification de code sur les mesures réalisés par les capteurs.
Le programme téléversé, est stocké dans la mémoire de la carte. L'ordinateur servant à la programmation n'est alors pas indispensable si l'on souhaite faire des mesures sur le terrain en autonomie.
Il faudra dans ce cas disposer d'une alimentation extérieur et soit :
- d'un écran d'affichage
- d'un dispositif de stockage ou d’envoi de données (wifi) dans la carte Seeeduino.
Avec ce travail réalisable en classe de Technologie, S.V.T et Physiques-Chimie, nous pouvons fabriquer des consoles EXAO modulables peu coûteuses (70 euros pour mon cas), construite par l'élève pour faire des mesures de son environnement proche.
*/ #include#include "rgb_lcd.h" rgb_lcd lcd; #include //Indique quelle bibliotheque utilisé pour le programme #include // Data wire is plugged into port 2 on the Arduino #define ONE_WIRE_BUS 2 // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); void setup() { // Start up the library sensors.begin(); // set up the LCD's number of columns and rows: lcd.begin(16, 2); lcd.println("Temp et UV"); } void loop() { // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus sensors.requestTemperatures(); // Send the command to get temperatures // After we got the temperatures, we can print them here. // We use the function ByIndex, and as an example get the temperature from the first sensor only. lcd.print("T:"); lcd.println(sensors.getTempCByIndex(0)); //pour la sonde UV int sensorValue; long sum=0; for(int i=0;i<1024;i++)// accumulate readings for 1024 times { sensorValue=analogRead(A0); sum=sensorValue+sum; delay(2); } long meanVal = sum/1024; // get mean value lcd.print("UV:"); lcd.print((meanVal*1000/4.3-83)/21);// get a detailed calculating expression for UV index in schematic files. lcd.print("\n"); delay(20); sensors.requestTemperatures(); delay(500); //pour la sonde MQ5 qui détecte les gaz (H2, CH4, CO, Alcool, Air, LPG) de 200 à 10000 ppm { float sensor_volt; float sensorValue; sensorValue = analogRead(A2); sensor_volt = sensorValue/1024*5.0; lcd.setCursor(0,1); //Utilise la seconde ligne de l'écran lcd.print("Gaz = "); lcd.print(sensor_volt); lcd.println("V"); delay(1000); } // clear screen for the next loop: lcd.clear(); }
