Dans ce tutoriel, nous développerons un circuit utilisant un capteur de force, Arduino Uno et un servomoteur. Il s'agira d'un système de servocommande où la position de l'arbre servo est déterminée par le poids présent sur le capteur de force. Avant d'aller plus loin, parlons du servo et des autres composants.
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 également utilisés dans certaines imprimantes et télécopieurs.
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.
Comme le montre la figure ci-dessous, pour que l'arbre soit déplacé à 9o, la 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 SERVO MOTOR en faisant varier le rapport cyclique du signal PWM généré par UNO.
Parlons maintenant du capteur de force ou du capteur de poids.
Pour interfacer un capteur FORCE avec ARDUINO UNO, nous allons utiliser la fonction 8 bits ADC (Analog to Digital Conversion) dans arduno uno.
Un capteur FORCE est un transducteur qui change sa résistance lorsque la pression est appliquée sur la surface. Le capteur FORCE est disponible en différentes tailles et formes.
Nous allons utiliser l'une des versions les moins chères car nous n'avons pas besoin de beaucoup de précision ici. Le FSR400 est l'un des capteurs de force les moins chers du marché. L'image du FSR400 est illustrée ci-dessous.
Maintenant, il est important de noter que le FSR 400 est sensible sur la longueur, la force ou le poids doit être concentré sur le labyrinthe au milieu de l'œil du capteur, comme indiqué sur la figure.
Si la force est appliquée à de mauvais moments, l'appareil peut être endommagé de façon permanente.
Autre chose importante à savoir, le capteur peut entraîner des courants de gamme élevée. Gardez donc à l'esprit les courants de conduite lors de l'installation. De plus, le capteur a une limite de force qui est de 10 Newtons. On ne peut donc appliquer que 1Kg de poids. Si des poids supérieurs à 1 kg sont appliqués, le capteur peut présenter des écarts. S'il a augmenté de plus de 3 kg. le capteur pourrait être endommagé de façon permanente.
Comme indiqué précédemment, ce capteur est utilisé pour détecter les changements de pression. Ainsi, lorsque le poids est appliqué sur le capteur FORCE, la résistance est considérablement modifiée. La résistance du FS400 au poids est indiquée dans le graphique ci-dessous:
Comme le montre la figure ci-dessus, la résistance entre les deux contacts du capteur diminue avec le poids ou la conductance entre deux contacts du capteur augmente.
La résistance d'un conducteur pur est donnée par:
Où, p- Résistivité du conducteur
l = longueur du conducteur
A = Zone du conducteur.
Considérons maintenant un conducteur avec la résistance «R», si une certaine pression est appliquée sur le dessus du conducteur, la zone sur le conducteur diminue et la longueur du conducteur augmente en raison de la pression. Donc, par formule, la résistance du conducteur devrait augmenter, car la résistance R est inversement proportionnelle à la surface et également directement proportionnelle à la longueur l.
Donc, avec cela pour un conducteur sous pression ou poids, la résistance du conducteur augmente. Mais ce changement est faible par rapport à la résistance globale. Pour un changement considérable, de nombreux conducteurs sont empilés ensemble.
C'est ce qui se passe à l'intérieur des capteurs de force illustrés dans la figure ci-dessus. En regardant de près, on peut voir de nombreuses lignes à l'intérieur du capteur. Chacune de ces lignes représente un conducteur. La sensibilité du capteur est exprimée en nombre de conducteurs.
Mais dans ce cas, la résistance diminuera avec la pression car le matériau utilisé ici n'est pas un pur conducteur. Les FSR sont ici des dispositifs robustes à film épais en polymère (PTF). Ce ne sont donc pas des dispositifs en matériau purement conducteur. Ceux-ci sont constitués d'un matériau, qui présente une diminution de la résistance avec l'augmentation de la force appliquée à la surface du capteur.
Ce matériau présente les caractéristiques comme indiqué dans le graphique de FSR.
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 FORCE 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.
Maintenant, lorsque la force est appliquée sur le CAPTEUR DE FORCE, la tension à l'extrémité du diviseur change cette broche comme connectée au canal ADC de UNO, nous obtiendrons une valeur numérique différente de l'ADC de UNO, chaque fois que la force sur le capteur change.
Cette valeur numérique ADC est adaptée au rapport cyclique du signal PWM, nous avons donc le contrôle de position SERVO par rapport à la force appliquée sur le capteur.
Composants
Matériel: UNO, alimentation (5v), condensateur 1000uF, condensateur 100nF (3 pièces), résistance 100KΩ, SERVO MOTOR (SG 90), résistance 220Ω, capteur de force FSR400.
Logiciel: Atmel studio 6.2 ou aurdino tous les soirs.
Schéma de circuit et explication de fonctionnement
Le schéma de circuit pour la commande de servomoteur par capteur de force 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 du 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. Après la conversion, nous allons prendre cette valeur numérique (représentant le poids) et la relier à la valeur PWM et fournir ce signal PWM au moteur SERVO.
Donc, avec le poids, nous avons une valeur PWM qui change son rapport cyclique en fonction de la valeur numérique. Plus la valeur numérique est élevée, plus le rapport cyclique de PWM. Ainsi, avec un signal PWM à rapport de service plus élevé, l'arbre de servo doit atteindre l'extrême droite ou l'extrême gauche selon la figure fournie dans l'introduction.
Si le poids est inférieur, nous aurons un rapport de service PWM inférieur et, selon la figure en introduction, le servo devrait atteindre l'extrême droite.
Avec cela, nous avons un contrôle de position SERVO par POIDS ou FORCE.
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 Arduino 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 ”.
Le PWM de UNO peut être réalisé sur n'importe laquelle des broches symbolisées par «~» sur la carte PCB. Il existe six canaux PWM dans UNO. Nous allons utiliser PIN3 à nos fins.
analogWrite (3, VALUE); |
À partir de la condition ci-dessus, nous pouvons directement obtenir le signal PWM à la broche correspondante. Le premier paramètre entre parenthèses sert à choisir le numéro de broche du signal PWM. Le deuxième paramètre est pour l'écriture du rapport cyclique.
La valeur PWM d'Arduino Uno peut être modifiée de 0 à 255. Avec «0» comme plus bas à «255» comme plus haut. Avec 255 comme rapport de service, nous obtiendrons 5V à PIN3. Si le rapport cyclique est donné à 125, nous obtiendrons 2,5 V à PIN3.
Parlons maintenant du contrôle du servomoteur, l'Arduino 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. Vous pouvez en savoir plus sur le contrôle des servomoteurs avec arduino ici.
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. Par conséquent, nous avons un signal PWM dont le rapport cyclique change linéairement avec WEIGHT ou FORCE. Ceci étant donné au servomoteur, nous pouvons contrôler le servomoteur par capteur de force.