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.

P6170047.JPG
P6170047.JPG, juin 2016

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 :

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 »

biblioarduino.JPG
biblioarduino.JPG, juin 2016
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.

televerserarduino.JPG
televerserarduino.JPG, juin 2016

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.

P6170051.JPG
P6170051.JPG, juin 2016
*/

#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();
}