Arduino Grove starter kit 2.0 – premiers test

Après de nombreuses recherches Luzinarev a enfin pu se procurer du matériel de prototypage Arduino et quelques éléments Grove de chez SeeedStudio

Autant le dire de suite, je ne suis ni électricien ni électronicien ni codeur informatique.

La platine de base Arduino est une Uno r3, le shield Grove est la version 1.2, il s’emboite tout simplement sur la platine Arduino.

Pour maitriser quelques bases j’ai décidé de faire un montage avec le shield Grove, un afficheur LCD RGB Grove, un capteur de température Grove, un led socket Grove sur lequel j’ai mis une led verte.

Je veux que l’écran LCD affiche donc la température, je veux aussi que la led s’allume lorsque cette température dépasse les 25°C, et que la couleur de l’écran change aussi.

Alors la prise en main est assez ludique, on ressent de suite le coté Lego de la chose…

Par contre pour mon simple petit montage de test j’ai rencontré quelques moments difficiles pour avoir des sources de code fiables… Il existe un petit livret d’exemples pratiques de code pour la version précédente du shield grove mais pas encore pour cette version ci, donc je me suis débrouillé avec plusieurs morceaux de code que j’ai assemblé en bricolant un peu, et en essayant de comprendre ce que je faisais en même temps :).

Les allocations pour brancher les éléments : l’écran lcd se branche n’importe où sur le shield, il semble être identifié où qu’il soit, le capteur de température doit être sur la broche A0 de la rangée des broches notées de A0 à A3, j’ai attaché la led à la broche D4, mais dans le script ci-dessous il faut l’identifier simplement 4, c’est très rigolo ce led socket, la led s’emboite toute seule on peut en changer etc. :

const int ledPin = 4;       // pin that the LED is attached to

etc.

Ensuite il suffit de tout envoyer sur la platine via l’IDE Arduino, qui est très bien faite, et de tester.

Le soft, l’IDE, Arduino permet de gérer les fichiers d’exemples, les librairies, et l’archivage de vos propres scripts, il permet aussi d’ouvrir la console lorsque vous récupérez les datas ailleurs que sur un écran lcd, ou pour voir les relevés d’un test etc… les possibilités sont innombrables…et avec cette IDE nous envoyons les scripts vers la platine via le câble USB (ou autre, je ne sais pas si c’est faisable via wifi ou Bluetooth..)

Pour l’instant je vous laisse ce code qui n’est pas définitif ni très propres…

// Demo of Grove - Starter Kit V2.0

// Reads the value of the Grove - Temperature Sensor, converts it to a Celsius temperature,
// and prints it to the lcd rgb.
// Connect the Grove - Temperature Sensor to the socket marked A0
// Open the Serial Monitor in the Arduino IDE after uploading
#include <Wire.h>
#include "rgb_lcd.h"

rgb_lcd lcd;
char dtaUart[15];
char dtaLen = 0;
// Define the pin to which the temperature sensor is connected.
const int pinTemp = A0;
const int ledPin = 4;       // pin that the LED is attached to
const int threshold = 27;   // an arbitrary threshold level that's in the range of the analog input

// Define the B-value of the thermistor.
// This value is a property of the thermistor used in the Grove - Temperature Sensor,
// and used to convert from the analog value it measures and a temperature value.
const int B = 3975;

void setup()
{
    // Configure the serial communication line at 9600 baud (bits per second.)
    lcd.begin(16, 2);
      // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop()
{
    // Get the (raw) value of the temperature sensor.
    int val = analogRead(pinTemp);

    // Determine the current resistance of the thermistor based on the sensor value.
    float resistance = (float)(1023-val)*10000/val;

    // Calculate the temperature based on the resistance value.
    float temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15;


  // if the analog value is high enough, turn on the LED:
  if (temperature > threshold) {
    digitalWrite(ledPin, HIGH);
    int r = (dtaUart[0]-'1')*100 + (dtaUart[1] - '0')*10 + (dtaUart[2] - '0'); 
int g = (dtaUart[4]-'0')*100 + (dtaUart[5] - '0')*10 + (dtaUart[6] - '0');
int b = (dtaUart[8]-'0')*100 + (dtaUart[9] - '0')*10 + (dtaUart[10] - '0');

        dtaLen = 0;
        
        lcd.setRGB(r, g, b);
  } 
  else {
    digitalWrite(ledPin,LOW); 
        int r = (dtaUart[0]-'0')*100 + (dtaUart[1] - '0')*10 + (dtaUart[2] - '0'); 
int g = (dtaUart[4]-'1')*100 + (dtaUart[5] - '0')*10 + (dtaUart[6] - '0');
int b = (dtaUart[8]-'0')*100 + (dtaUart[9] - '0')*10 + (dtaUart[10] - '0');

        dtaLen = 0;
        
        lcd.setRGB(r, g, b);
  }
  
    // Print the temperature to the serial console.

    
    lcd.print("HELL:");
    lcd.println(temperature,2);

    // Wait one second between measurements.
    delay(10000);
    
    
   
    lcd.clear();
}