Dans ce tutoriel, nous allons développer un circuit utilisant un capteur FLEX, Arduino Uno et un servomoteur. Ce projet est un système de servocommande où la position de l'arbre servo est déterminée par la flexion, la courbure ou la déviation du capteur FLEX.
Parlons d'abord un peu des servomoteurs. Les servomoteurs sont utilisés là où un mouvement ou une position d'arbre précis est nécessaire. Ceux-ci ne sont pas proposés pour les applications à grande vitesse. Ceux-ci sont proposés pour une application à faible vitesse, couple moyen et position précise. Ces moteurs sont utilisés dans les machines à bras robotiques, les commandes de vol et les systèmes de contrôle. Les servomoteurs sont utilisés dans les systèmes embarqués tels que les distributeurs automatiques, etc.
Les servomoteurs sont disponibles dans différentes formes et tailles. Un servomoteur aura principalement des fils, un pour la tension positive, un autre pour la terre et le dernier pour le réglage de la position. Le fil ROUGE est connecté à l'alimentation, le fil noir est connecté à la terre et le fil JAUNE est connecté au signal.
Un servomoteur est une combinaison de moteur à courant continu, de système de contrôle de position et d'engrenages. La position de l'arbre du moteur à courant continu est ajustée par l'électronique de commande dans le servo, en fonction du rapport cyclique du signal PWM sur la broche SIGNAL.
En termes simples, l'électronique de commande ajuste la position de l'arbre en contrôlant le moteur à courant continu. Ces données concernant la position de l'arbre sont envoyées via la broche SIGNAL. Les données de position à la commande doivent être envoyées sous forme de signal PWM via la broche Signal du servomoteur.
La fréquence du signal PWM (Pulse Width Modulated) peut varier en fonction du type de servomoteur. L'important ici est le DUTY RATIO du signal PWM. Sur la base de ce RATION DE SERVICE, l'électronique de commande règle l'arbre. Pour que l'arbre soit déplacé à 9o, le RATION DE MISE EN MARCHE doit être de 1 / 18.ie. 1 milli seconde de «temps ON» et 17 milli seconde de «temps OFF» dans un signal de 18 ms.
Pour que l'arbre soit déplacé à l'horloge 12o, le temps de marche du signal doit être de 1,5 ms et le temps d'arrêt doit être de 16,5 ms. Ce rapport est décodé par le système de contrôle en servo et il ajuste la position en fonction de celui-ci.
Ce PWM ici est généré en utilisant ARDUINO UNO. Donc, pour l'instant, nous savons que nous pouvons contrôler l'arbre du servomoteur en faisant varier le rapport cyclique du signal PWM généré par Arduino Uno. L'UNO a une fonction spéciale qui nous permet de fournir la position de SERVO sans perturber le signal PWM. Cependant, il est important de connaître le rapport de service PWM - relation position servo. Nous en parlerons plus en détail dans la description.
Parlons maintenant de FLEX SENSOR. Pour interfacer un capteur FLEX à ARDUINO UNO, nous allons utiliser la fonction ADC (conversion analogique-numérique) 8 bits pour faire le travail. Un capteur FLEX est un transducteur qui change sa résistance lorsque sa forme est modifiée. Un capteur FLEX mesure 2,2 pouces de long ou de doigt. Il est montré dans la figure.
Le capteur Flex est un transducteur qui change sa résistance lorsque la surface linéaire est pliée. D'où le nom de flex sensor. En termes simples, la résistance des bornes du capteur augmente lorsqu'elle est pliée. Ceci est illustré dans la figure ci-dessous.
Ce changement de résistance ne peut faire de bien que si nous pouvons les lire. Le contrôleur à portée de main ne peut lire que les chances de tension et rien de moins, pour cela, nous allons utiliser un circuit diviseur de tension, avec lequel nous pouvons dériver le changement de résistance en tant que changement de tension.
Le diviseur de tension est un circuit résistif et est illustré sur la figure. Dans ce réseau résistif, nous avons une résistance constante et une autre résistance variable. Comme le montre la figure, R1 est ici une résistance constante et R2 est un capteur FLEX qui agit comme une résistance.
Le point médian de la branche est pris à la mesure. Avec le changement R2, nous avons du changement chez Vout. Donc, avec cela, nous avons une tension qui change avec le poids.
Maintenant, la chose importante à noter ici est que l'entrée prise par le contrôleur pour la conversion ADC est aussi faible que 50µAmp. Cet effet de charge du diviseur de tension basé sur la résistance est important car le courant tiré de Vout du diviseur de tension augmente le pourcentage d'erreur augmente, pour l'instant nous n'avons pas à nous soucier de l'effet de chargement.
FLEX SENSOR lorsqu'il est plié, sa résistance change. Avec ce transducteur connecté à un circuit diviseur de tension, nous aurons une tension changeante avec FLEX sur le transducteur. Cette tension variable est FED à l'un des canaux ADC, nous aurons une valeur numérique relative à FLEX.
Nous allons faire correspondre cette valeur numérique à la position du servo, avec cela, nous aurons une servocommande par flex.
Composants
Matériel: Arduino Uno , alimentation (5v), condensateur 1000 uF, condensateur 100nF (3 pièces), résistance 100KΩ, SERVO MOTOR (SG 90), résistance 220Ω, capteur FLEX.
Logiciel: Atmel studio 6.2 ou Aurdino tous les soirs.
Schéma de circuit et explication
Le schéma de circuit pour la commande de servomoteur par capteur FLEX est illustré dans la figure ci-dessous.
La tension aux bornes du capteur n'est pas complètement linéaire; ce sera bruyant. Pour filtrer le bruit, des condensateurs sont placés à travers chaque résistance dans le circuit diviseur comme indiqué sur la figure.
Ici, nous allons prendre la tension fournie par le diviseur (tension qui représente le poids linéairement) et l'introduire dans l'un des canaux ADC d'Arduino UNO. Nous allons utiliser A0 pour cela. Après l'initialisation ADC, nous aurons une valeur numérique représentant le capteur plié. Nous prendrons cette valeur et la comparerons à la position du servo.
Pour que cela se produise, nous devons établir quelques instructions dans le programme et nous en parlerons en détail ci-dessous.
ARDUINO dispose de six canaux ADC, comme le montre la figure. Dans ceux-ci, l'un d'entre eux ou tous peuvent être utilisés comme entrées pour la tension analogique. L'UNO ADC a une résolution de 10 bits (donc les valeurs entières de (0- (2 ^ 10) 1023)). Cela signifie qu'il mappera les tensions d'entrée entre 0 et 5 volts en valeurs entières entre 0 et 1023. Donc, pour chaque (5/1024 = 4,9 mV) par unité.
Ici, nous allons utiliser A0 de UNO.
Nous devons savoir quelques choses.
|
Tout d'abord, les canaux UNO ADC ont une valeur de référence par défaut de 5V. Cela signifie que nous pouvons donner une tension d'entrée maximale de 5 V pour la conversion ADC sur n'importe quel canal d'entrée. Étant donné que certains capteurs fournissent des tensions de 0 à 2,5 V, avec une référence de 5 V, nous obtenons une précision moindre, nous avons donc une instruction qui nous permet de modifier cette valeur de référence. Donc, pour changer la valeur de référence, nous avons (“analogReference ();”) Pour l'instant, nous la laissons comme.
Par défaut, nous obtenons la résolution ADC maximale de la carte qui est de 10 bits, cette résolution peut être modifiée en utilisant l'instruction («analogReadResolution (bits);»). Ce changement de résolution peut être utile dans certains cas. Pour l'instant, nous laissons cela comme.
Maintenant, si les conditions ci-dessus sont définies par défaut, nous pouvons lire la valeur du CAN du canal '0' en appelant directement la fonction "analogRead (pin);", ici "pin" représente la broche où nous avons connecté le signal analogique, dans ce cas, il serait «A0».
La valeur de ADC peut être prise dans un entier comme «int SENSORVALUE = analogRead (A0); ”, Par cette instruction, la valeur après ADC est stockée dans l'entier“ SENSORVALUE ”.
Parlons maintenant du SERVO, l'UNO a une fonction qui nous permet de contrôler la position du servo en donnant simplement la valeur du degré. Disons que si nous voulons que le servo soit à 30, nous pouvons directement représenter la valeur dans le programme. Le fichier d'en-tête SERVO prend en charge tous les calculs de rapport cyclique en interne.
#comprendre
Servo servo; servo.attach (3); servo.write (degrés); |
La première instruction représente le fichier d'en-tête pour contrôler le SERVO MOTOR.
La deuxième déclaration nomme le servo; nous le laissons comme servo lui-même.
La troisième déclaration indique où la broche de signal d'asservissement est connectée; ce doit être une broche PWM. Ici, nous utilisons PIN3.
La quatrième instruction donne des commandes pour le positionnement du servomoteur et est en degrés. S'il est donné 30, le servomoteur tourne à 30 degrés.
Maintenant, le sg90 peut passer de 0 à 180 degrés, nous avons un résultat ADC de 0 à 1024
Donc ADC est environ six fois la POSITION SERVO. Donc, en divisant le résultat ADC par 6, nous obtiendrons la position approximative de la main SERVO.
Avec cela, nous aurons une valeur de position servo alimentée au servomoteur, qui est proportionnelle à la flexion ou au pliage. Lorsque ce capteur flex est monté sur un gant, on peut contrôler la position du servo par mouvement de la main.