Etape 11 : Entrées et sorties analogiques.
Certains des broches d’e/s de l’Arduino également utilisable comme entrées et sorties, pour mesurer des tensions (entrée) ou protected LED (sortie) par exemple.
Entrées analogiques
La plupart des Arduinos ont entre 6 et 12 broches d’entrée analogiques. Ils peuvent mesurer des tensions allant de 0 v à la tension d’entrée (5v ou 3v3)
Un Conseil, ces broches sont étiquetés A0-A5, et dans le cas de Leonardo, certains des broches sur le côté numérique peuvent également servir comme entrées analogiques. Ils sont marqués par un point, et le nom (A6-A11) est écrit sur le dos.
Notez que la lecture d’une entrée analogique est (relativement) lente, par rapport aux broches numériques de lecture. C’est parce que l’Arduino mesures des tensions à l’aide d’un générateur de tension de référence interne DAC (convertisseur numérique-analogique) et puis en comparant la tension d’entrée à la tension de référence, puis modifier la tension de référence, en comparant à nouveau, modifier la tension de référence, comparant... jusqu'à ce que les deux tensions sont égales. http://apcmag.com/Arduino-Analog-to-Digital-conver...
La résolution de la DAC interne est de 10 bits. Cela signifie que le nombre maximal, il peut lire les 10 bits de long ou 210 = 1024, donc un nombre compris entre 0 (B0000000000) à 1023 (B1111111111). 1023 signifie l’entrée est de 5 v (ou 3v3) et 0 signifie 0v.
Potentiomètres
Un potentiomètre, la résistance variable ou le pot pour faire court, est juste un bouton avec un essuie-glace qui glisse sur une ronde bande de matériau résistif. De cette façon, elle varie la résistance entre le curseur et les points de terminaison.
Nous allons brancher nos potentiomètres et faders comme diviseurs de tension simples. Vous pouvez lire plus sur cette page de Wikipedia si vous n’êtes pas familier avec ce principe.
Si vous regardez le schéma, vous pouvez voir 2 résistances. R1 est la résistance entre la borne droite du potentiomètre et l’essuie-glace (goupille de centrage) et R2 la résistance entre la broche de gauche et l’essuie-glace. Jetez un oeil à la formule ainsi. Puisque notre potentiomètre a un fixe valeur (50kΩ, par exemple), R1 + R2 sera toujours 50kΩ, tandis que R2 peut varier entre 0Ω et 50kΩ. (Si R2 = 50k alors R1 = 0 et vice versa) Par conséquent, la fraction entraînera toujours un nombre compris entre 0 et 1. Multiplier ce taux par 5V (Vsubin/sup), et vous obtiendrez une tension de 0V et 5V sur votre rendement. Cette tension peut être lu par ADC de l’Arduino (convertisseur numérique analogique) et représente la position du potentiomètre (ou fondu). Donc, fondamentalement, vous branchez la broche gauche au sol, la tige droite pour le 5V épingle sur l’Arduino et la goupille de centrage pour une entrée analogique. (image 3)
Raccordez un potentiomètre à broche A0 et ouvrez l’exemple de AnalogReadSerial (fichier > exemples > 01.Basics).
La seule nouvelle fonction est analogRead(pin). Il est tout à fait explicite, qu'il vous donne juste la valeur de 10 bits, représentant la tension sur la broche donnée.
Le programme sera juste imprimez-les au fil de la série, alors ouvrez le moniteur série (CTRL + MAJ + M) ou la planche à dessin série (CTRL + MAJ + L) et tourner le potentiomètre. Vous devriez voir des valeurs comprises entre 0 et 1023.
Réglage du retard à 10 ou plus, au lieu de 1 ms peut vous donner meilleurs résultats du traceur de série.
Vous pouvez mapper les valeurs de la 0-1023 vont à une autre plage, par exemple de 0 à 100. Cela peut être fait à l’aide de la fonction de la carte. Jetez un oeil à l’exemple AnalogReadSerialMap. La syntaxe de la fonction map est : valeur de la carte (valeur, lowerLimitInput, upperLimitInput, lowerLimitOutput, upperLimitOutput) est juste la valeur de la carte, dans ce cas, notre lecture du capteur. La gamme de cette entrée est 0 à 1023, donc ce sont nos limites d’entrée. Nous voulons que la sortie de la gamme de 0 à 100, donc ce sont nos limites de sortie. Cela signifie que si le capteur mesure 1023, la valeur de sortie sera de 100.
Nous serions parvenus au même résultat en utilisant sensorValue * 100 / 1023.
Pour convertir un ratio, il faut utiliser un type de données autre qu’int : flotteur (virgule flottante). Si nous divisons notre valeur capteur de 1023, on obtient un ratio entre zéro et un.
Nous pouvons changer le type de données de la variable sensorValue à flotteur, ou convertir la valeur d’un int en un flotteur. La première méthode est utilisée dans AnalogReadSerialRatio-celui-ci a, le AnalogReadSerialRatio-b.
Si nous ne convertissez pas notre valeur à un flotteur tout d’abord, le résultat est considéré comme un int aussi bien. Les valeurs après la virgule sera juste être ignorées, par exemple, 1/2 = 0, mais 1.0/2 = 0,5. Nombres normaux comme « 1 » est considérée comme ints, sauf si vous ajoutez un point décimal (1.0), puis il sera traité comme un flotteur. Si l’un des facteurs dans un calcul est un flotteur, le résultat sera aussi un flotteur.
Pour convertir un int en un flotteur, vous pouvez utiliser la fonction float(number) , ou vous pouvez utiliser la notation c ++ pour transtypage (conversion d’un type de données à un autre) nombre (flotteur) .
Pour convertir un float en int, vous pouvez le faire de la même manière : int(number) ou nombre (entier), mais note que cela tronquera juste le nombre à la virgule, il ignorera simplement les valeurs qui suivent la marque décimale. Par exemple, int(1.1) = 1, mais int(1.9) = 1 aussi bien, voire int(1.99999) donnera 1. Pour arrondir le nombre, utilisez la fonction round(number) , par exemple, round(1.1) = 1, round(1.5) = 2, tour(1.99) = 2.
https://www.Arduino.cc/en/Reference/cast
https://www.Arduino.cc/en/Reference/FloatCast
Mesurer les tensions
Puisqu’une valeur analogique de 1023 correspond à 5 v (ou 3,3 v pour 3.3V microcontrôleurs), vous pouvez facilement convertir ceci à une tension à l’aide de analogRead(A0) * 5.0 / 1023. Il est utilisé dans l’exemple AnalogReadSerialVoltage.
Pour lire les tensions supérieures à 5v (3.3V), vous aurez besoin de 2 résistances, pour créer un diviseur de tension. Nous pouvons transformer la formule ci-dessus pour obtenir Vsubin/sup si nous savons Vsubout/sup. (Voir l’image)
Connecter une résistance (R2) du sol à l’entrée analogique, puis connecter la masse de la tension à mesurer à la masse de l’Arduino et puis connectez une autre résistance (R1) la tension à mesurer sur la broche analogique. (Voir l’image) La formule ci-dessus permet de calculer les valeurs de résistance appropriée. Toutes les valeurs entre 10k et 100 k devraient fonctionner correctement. Si la résistance est trop faible, il va exiger trop de courant et d’influencer la lecture beaucoup.
Trop mesurer 12v par exemple, j’utilise R1 = 47k et R2 = 22k. Cela me donne une tension maximale de 15.87v, si j’irais supérieure à cette tension, j’ai casser mon Arduino.
Remarque : si R2 est - pour une raison quelconque - déconnecté ou interrompu, les haute tension sera reliée à l’Arduino directement (par la R1) et sera probablement endommagent ou détruisent il. Donc ne changez pas les résistances si une tension élevée est appliquée.
Ouvrez l’exemple de AnalogReadSerialHighVoltage.
En haut du fichier, il y a certaines déclarations de constante . Comme une variable, constantes peuvent stocker les valeurs de toutes sortes, mais contrairement aux variables, les constantes ne peuvent pas être modifiés alors que le programme est en cours d’exécution. Cela signifie qu’ils sont stockés dans l’espace de stockage de programme, au lieu de la dynamique de la mémoire (RAM), laissant plus d’espace pour les variables et les tableaux etc..
Modifiez les valeurs de ces constantes en fonction de votre configuration. Le ratio est calculé automatiquement, donc vous n’avez pas à le changer. Vous pouvez utiliser les codes de couleur de votre résistance pour obtenir une valeur théorique, mais vous aurez une bien meilleure approximation si vous mesurez les résistances à l’aide d’un multimètre. Il en va de même pour la tension de service.
Sorties analogiques
Tensions analogiques de sortie ne peut pas l’Arduino, il peut seulement sortie 5v ou 0v. À la sortie des tensions entre les deux, il utilise une technique appelée PWM (Modulation de largeur d’impulsion).
L’Arduino crée une onde carrée et puis varie les sur - et hors-temps de la vague. Par exemple, 2ms sur, 2ms ou 1 ms sur 3ms off. Ceci est dénommé le facteur de marche de l’onde carrée. 2ms sur, 2ms off est un facteur de marche de 50 % ; 1 ms sur 3ms off est un facteur de marche 25 %. (Voir l’image)
Vous pouvez maintenant calculer la tension moyenne, qui est l’aire sous la courbe divisée par la quantité de cycles. Nous allons jeter un oeil à l’exemple de 50 % duty cycle : du domaine (évalué au cours d’un cycle) est juste un rectangle de 5 par 0,5, si la superficie est de 2,5. Divisé par la quantité de cycles toujours donne 2.5, donc la tension moyenne est de 2.5V.
En d’autres termes, la tension moyenne peut être écrite comme le facteur d’utilisation multipliée par la tension d’alimentation. Par exemple, un facteur de marche 25 % serait 5v · 0.25 = 1.25V.
Ces tensions moyennes sont indiquées en rouge dans les images.
Vos yeux sont beaucoup trop lents à voir l’onde carrée sous-jacente, alors cette méthode est parfaitement bien pour LEDs de gradation.
Ouvrez l’exemple analogPotDimmer.
Brancher une LED (+ résistance) à la broche numérique 5 et un potentiomètre à broche analogique A0. En tournant le potentiomètre réduit la luminosité de la LED.
La seule nouvelle fonction est analogWrite (pin, rapport cyclique). Il définit simplement le rapport cyclique de la pwm sur une broche. Notez que le rapport cyclique est une valeur comprise entre 0 et 255, ce qui correspond à 0 % - 100 %
Un autre exemple est analogWriteDimmer. Raccorder un bouton poussoir de la broche 2 et une LED à la broche 5. Lorsque vous maintenez le bouton enfoncé, la LED est plus lumineuse, quand vous relâcherez, puis appuyez sur et maintenez à nouveau, sa luminosité diminue.