6.5 Conversion A/N

Sous Flowcode, pour réaliser une Conversion Analogique/Numérique à l'aide d'un microcontrôleur, il faut ajouter au "Panneau tableau de bord" un composant de type "Potentiometer" qui se trouve dans la "Boîte Outils Composants"   pictogramme "Inputs"




Dés lors, dans la partie "Macros" des Propriétés du composant, apparaissent les nouvelles fonctions disponibles pour gérer une Conversion Analogique/Numérique.


Avec entre autres:

GetInt, retourne un nombre, résultat de la conversion (sur 10bits) 


GetVoltage, retourne un nombre en virgule flottante, directement représentatif de la Tension (en Volt)


GetByte, retourne un nombre (octet), résultat de la conversion (sur 8bits donc)




Exemple: Réalisation d'un Voltmètre à affichage Numérique 

Flowcode_328P_ADC.fcfx


Simulation sous Proteus 8  

Téléchargement du schéma structurel sous Proteus 8: Flowcode_328P_ADC.pdsprj


Sous Arduino



La fonction en langage C permettant de lire le résultat d'une conversion Analogique/Numérique du microcontrôleur est :  analogRead()


Description

Lit la valeur de la broche analogique spécifiée. Les cartes Arduino contiennent un convertisseur analogique/numérique 10 bits (210 = 1024) multicanal. Cela signifie qu'il mappera les tensions d'entrée entre 0 et la tension de fonctionnement (5 V ou 3,3 V) en valeurs entières entre 0 et 1023. Sur un Arduino UNO, par exemple, cela donne une résolution entre les lectures de : 5 volts / 1024 unités ou , 0,0049 volt (4,9 mV) par unité. 

Voir le tableau ci-dessous pour les broches utilisables, la tension de fonctionnement et la résolution maximale pour certaines cartes Arduino.


Cartes

Tension de service

Broches analogiques

Résolution

Uno

5 V

A0 to A5

10 bits 

Mini, Nano

5 V

A0 to A7

10 bits 

Mega, Mega2560

5 V

A0 to A14

10 bits 

Micro

5 V

A0 to A11

10 bits 

Leonardo

5 V

A0 to A11

10 bits 

Zero

3,3 V

A0 to A5

10 / 12 bits 

Due

3,3 V

A0 to A11

10 / 12 bits 

MKR Family boards

3,3 V

A0 to A6

10 / 12 bits 


La plage d'entrée peut être modifiée à l'aide de analogReference(), tandis que la résolution peut être modifiée (uniquement pour les cartes Zero, Due et MKR) à l'aide de analogReadResolution().


Syntaxe

analogRead(pin)


Paramètres

pin: le nom de la broche d'entrée analogique à lire (A0 à A5 sur la plupart des cartes, A0 à A6 sur les cartes MKR, A0 à A7 sur les Mini et Nano, A0 à A15 sur les Mega).


Retour

La lecture analogique sur la broche. Bien qu'il soit limité à la résolution du convertisseur analogique-numérique (0-1023 pour 10 bits ou 0-4095 pour 12 bits). Type de données : int.


Exemple de code

/*
  LED bar graph

  Turns on a series of LEDs based on the value of an analog sensor.
  This is a simple way to make a bar graph display. Though this graph uses 10
  LEDs, you can use any number by changing the LED count and the pins in the
  array.
  This method can be used to control any series of digital outputs that depends
  on an analog input.
  The circuit:
  - LEDs from pins 2 through 11 to ground
  This example code is in the public domain.
  https://docs.arduino.cc/built-in-examples/display/BarGraph
  by Tom Igoe
*/

// these constants won't change:
const int analogPin = A0;  // the pin that the potentiometer is attached to
const int ledCount = 10;        // the number of LEDs in the bar graph

int ledPins[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };  // an array of pin numbers to which LEDs are attached

void setup() {
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {        // loop over the pin array and set them all to output:
    pinMode(ledPins[thisLed], OUTPUT);
  }
}

void loop() {
  int sensorReading = analogRead(analogPin);  // read the potentiometer:
  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);  // map the result to a range from 0 to the number of LEDs:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {        // loop over the LED array:
      if (thisLed < ledLevel) {                                // if the array element's index is less than ledLevel,
      digitalWrite(ledPins[thisLed], HIGH);                 // turn the pin for this element on:
    }
     else {
      digitalWrite(ledPins[thisLed], LOW);                         // turn off all pins higher than the ledLevel:
    }
  }
}


Simulation sous Proteus

Téléchargement du schéma structurel sous Proteus 8: Arduino 328_barGraph.pdsprj

Créé avec HelpNDoc Personal Edition: Faites de la documentation d'aide un jeu d'enfant avec un outil de création d'aide