Outils pour utilisateurs

Outils du site


wiki:flossmanuals:un-capteur-une-application:accueil

Un Capteur - Une application : Dialogue simple entre Arduino et Processing

  • Porteur(s) du projet : Damien MUTI (Prof. de Numérique)
  • Date : 05/2021
  • Contexte : Cours
  • Fichiers :
  • Liens :
  • Capteurs/Actionneurs :
    • Capteur de distance ultrason Grove
    • Potentiomètre
    • Processing

Intentions : explication du projet et objectifs

L'objectif de cet article est de montrer sur un exemple simple comment dialoguer entre la carte Arduino et Processing. L'objectif est de mesurer la valeur lue sur UN capteur et de l'envoyer vers le programme Processing comme un paramètre pouvant faire varier la forme ou la couleur d'un graphisme.

Les programmes proposés sont des formes simplifiés des exemples SerialCallResponse de Processing et Arduino.

Le schéma suivant résume la situation :

Nous proposons ici de mesurer une distance à l'aide d'un capteur de distance ultrason et de faire varier la couleur d'une forme sous Processing.

Programme Arduino - Potentiomètre

On utilise un potentiomètre de 10kΩ. Le schéma de câblage est le suivant :

Le programme Arduino est le suivant : un_potentiometre_une_application_arduino.zip

int firstSensor = 0;    // first analog sensor
int inByte = 0;         // incoming serial byte

void setup() {
  // start serial port at 9600 bps:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  establishContact();  // send a byte to establish contact until receiver responds
}

void loop() {
  // if we get a valid byte, read analog ins:
  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();

    // lecture de la valeur du potentiometre branché sur A0 
    //et conversion de la valeur en un octet
    firstSensor = analogRead(A0)/4;
    
    // send sensor values:
    Serial.write(firstSensor);
   
  }
}

void establishContact() {
  while (Serial.available() <= 0) {
    Serial.print('A');   // send a capital A
    delay(300);
  }
}


Programme Arduino - Ultrasonic

On utilise un capteur de distance Ultrason Ultrasonic en Grove. Le schéma de câblage est le suivant :

Le capteur Ultrason est branché sur le “slot” D7.

Le programme Arduino est le suivant : un_capteur_une_application_arduino.zip

#include "Ultrasonic.h"
Ultrasonic ultrasonic(7);
long distance=0; // variable qui stoke la valeur de la distance
int firstSensor = 0;    // first analog sensor
int inByte = 0;         // incoming serial byte

void setup() {
  // start serial port at 9600 bps:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  establishContact();  // send a byte to establish contact until receiver responds
}

void loop() {
  // if we get a valid byte, read analog ins:
  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();

    // lecture de la distance
    distance = ultrasonic.MeasureInCentimeters();
    // conversion de la valeur en un octet
    firstSensor = map(distance,0,400,0,255);
    
    // send sensor values:
    Serial.write(firstSensor);
   
  }
}

void establishContact() {
  while (Serial.available() <= 0) {
    Serial.print('A');   // send a capital A
    delay(300);
  }
}

Programme Processing

Quel que soit le capteur utilisé, le programme Processing est le suivant : un_capteur_une_application_processing.zip. On modifie la couleur d'un cercle positionné au centre de la fenêtre d'affichage.

import processing.serial.*;

int bgcolor;			     // Background color
int fgcolor;			     // Fill color
Serial myPort;                       // The serial port
int serialInArray;    // Where we'll put what we receive
int serialCount = 0;                 // A count of how many bytes we receive
int xpos, ypos;		             // Starting position of the ball
boolean firstContact = false;        // Whether we've heard from the microcontroller

void setup() {
  size(256, 256);  // Stage size
  noStroke();      // No border on the next thing drawn

  // Set the starting position of the ball (middle of the stage)
  xpos = width/2;
  ypos = height/2;

  // Print a list of the serial ports, for debugging purposes:
  printArray(Serial.list());

  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  
  // espace HSB des couleurs
  colorMode(HSB);
}

void draw() {
  background(bgcolor);
  fill(fgcolor,255,255);
  // Draw the shape
  circle(xpos, ypos, 50);
}

void serialEvent(Serial myPort) {
  // read a byte from the serial port:
  int inByte = myPort.read();
  // if this is the first byte received, and it's an A,
  // clear the serial buffer and note that you've
  // had first contact from the microcontroller. 
  // Otherwise, add the incoming byte to the array:
  if (firstContact == false) {
    if (inByte == 'A') { 
      myPort.clear();          // clear the serial port buffer
      firstContact = true;     // you've had first contact from the microcontroller
      myPort.write('A');       // ask for more
    }
  } else {
    // Add the latest byte from the serial port to array:
    fgcolor = inByte; // remplir la donnée "utile"
    // print the values (for debugging purposes only):
    println("valeur lue sur le port Série = " +  fgcolor);

    // Send a capital A to request new sensor readings:
    myPort.write('A');
    // Reset serialCount:
  }
}
wiki/flossmanuals/un-capteur-une-application/accueil.txt · Dernière modification: 2021/05/04 05:29 de damien.muti