En aquest tutorial desenvoluparem un circuit amb sensor FLEX, Arduino Uno i un servomotor. Aquest projecte és un sistema de control de servo on la posició de l’eix del servo està determinada per la flexió o flexió o desviació del sensor FLEX.
Parlem primer una mica de servomotors. Els servomotors s’utilitzen quan es necessita un moviment o una posició precisos de l’eix. No es proposen per a aplicacions d'alta velocitat. Es proposen per a aplicacions de velocitat, parell mitjà i precisió de posició. Aquests motors s’utilitzen en màquines de braços robòtics, controls de vol i sistemes de control. Els servomotors s’utilitzen en sistemes incrustats com ara màquines expenedores, etc.
Els servomotors estan disponibles en diferents formes i mides. Un servomotor tindrà principalment cables, un per a tensió positiva, un per a terra i l’últim per a la posició. El cable VERMELL està connectat a l’alimentació, el cable negre a terra i el cable GROC al senyal.
Un servomotor és una combinació de motor de corrent continu, sistema de control de posició, engranatges. La posició de l’eix del motor de CC està ajustada per l’electrònica de control del servo, en funció de la relació de treball del senyal PWM del pin SIGNAL.
Simplement, l’electrònica de control ajusta la posició de l’eix controlant el motor de corrent continu. Aquestes dades sobre la posició de l’eix s’envien a través del pin SIGNAL. Les dades de posició al control s’han d’enviar en forma de senyal PWM a través del pin de senyal del servomotor.
La freqüència del senyal PWM (Pulse Width Modulated) pot variar en funció del tipus de servomotor. L’important aquí és la RELACIÓ DE DEURE del senyal PWM. Basat en aquesta RACIÓ DE DEURE, l'electrònica de control ajusta l'eix. Perquè l’eix es pugui moure a rellotge de 9o, la RACIÓ ENCENDIDA ha de ser 1 / 18.ie. 1 mili segon de "temps ON" i 17 mili segons de "temps OFF" en un senyal de 18 ms.

Perquè l'eix es pugui moure a un rellotge de 12o, el temps d'encesa del senyal ha de ser de 1,5 ms i el temps d'APAGAT de 16,5 ms. Aquesta relació és descodificada pel sistema de control del servo i ajusta la posició en funció d’ella.
Aquest PWM aquí es genera mitjançant ARDUINO UNO. Per tant, ara ho sabem, podem controlar l’eix del servomotor variant la relació de treball del senyal PWM generat per Arduino Uno. L'ONU té una funció especial que ens permet proporcionar la posició de SERVO sense molestar el senyal PWM. Tot i això, és important conèixer la relació ració de servei PWM - posició servo. En parlarem més a la descripció.
Ara parlem de FLEX SENSOR. Per connectar un sensor FLEX a ARDUINO UNO, utilitzarem la funció ADC (conversió analògica a digital) de 8 bits per fer la feina. Un sensor FLEX és un transductor que canvia la seva resistència quan es canvia la seva forma. Un sensor FLEX té una longitud de 2,2 polzades o una longitud de dit. Es mostra a la figura.

El sensor Flex és un transductor que canvia la seva resistència quan la superfície lineal està doblegada. D’aquí el nom del sensor de flexió. Simplement, la resistència del terminal del sensor augmenta quan es dobla. Això es mostra a la figura següent.

Aquest canvi de resistència no pot servir de res si no podem llegir-los. El controlador que ens ocupa només pot llegir les possibilitats de tensió i res menys, per a això utilitzarem un circuit divisor de tensió, amb el qual podrem obtenir el canvi de resistència a mesura que canviï de tensió.
El divisor de tensió és un circuit resistiu que es mostra a la figura. En aquesta xarxa resistiva tenim una resistència constant i una altra resistència variable. Com es mostra a la figura, R1 és una resistència constant i R2 és un sensor FLEX que actua com a resistència.
Es mesura el punt mitjà de la branca. Amb el canvi R2, tenim canvis a Vout. Per tant, amb això tenim una tensió que canvia amb el pes.

Ara el més important que cal tenir en compte aquí és que l'entrada del controlador per a la conversió ADC és tan baixa com 50µAmp. Aquest efecte de càrrega del divisor de tensió basat en la resistència és important ja que el corrent extret de Vout del divisor de tensió augmenta el percentatge d'errors que augmenta, de moment no ens hem de preocupar per l'efecte de càrrega.
SENSOR FLEX quan es dobla la seva resistència canvia. Amb aquest transductor connectat a un circuit divisor de tensió, tindrem un voltatge variable amb FLEX al transductor. Aquest voltatge variable és FED a un dels canals ADC, tindrem un valor digital relatiu a FLEX.
Farem coincidir aquest valor digital amb la posició del servo, amb això tindrem servo control per flex.
Components
Maquinari: Arduino Uno , font d'alimentació (5v), condensador 1000 uF, condensador 100nF (3 peces), resistència 100KΩ, SERVO MOTOR (SG 90), resistència 220Ω, sensor FLEX.
Programari: Atmel studio 6.2 o Aurdino cada nit.
Diagrama del circuit i explicació
El diagrama de circuits per al control del servomotor mitjançant sensor FLEX es mostra a la figura següent.

El voltatge del sensor no és completament lineal; serà sorollós. Per filtrar el soroll, els condensadors es col·loquen a cada resistència del circuit divisor tal com es mostra a la figura.
Aquí agafarem la tensió proporcionada pel divisor (tensió que representa el pes linealment) i l’alimentarem en un dels canals ADC d’Arduino UNO. Utilitzarem A0 per a això. Després de la inicialització de l'ADC, tindrem un valor digital que representa el sensor inclinat. Agafarem aquest valor i el farem coincidir amb la posició del servo.
Perquè això passi, hem d’establir poques instruccions al programa i en parlarem detalladament a continuació.
ARDUINO té sis canals ADC, com es mostra a la figura. En aquelles, qualsevol o totes es poden utilitzar com a entrades de tensió analògica. El UNO ADC té una resolució de 10 bits (per tant, els valors enters de (0- (2 ^ 10) 1023)). Això vol dir que maparà les tensions d'entrada entre 0 i 5 volts en valors enters entre 0 i 1023. Així doncs, per a cada (5/1024 = 4,9 mV) per unitat.
Aquí utilitzarem A0 de l’ONU.
Hem de saber algunes coses.
|
En primer lloc, els canals UNO ADC tenen un valor de referència per defecte de 5V. Això significa que podem donar un voltatge màxim d'entrada de 5V per a la conversió ADC en qualsevol canal d'entrada. Com que alguns sensors proporcionen tensions de 0-2,5 V, amb una referència de 5 V obtenim una precisió menor, de manera que tenim una instrucció que ens permet canviar aquest valor de referència. Per tant, per canviar el valor de referència que tenim ("analogReference ();"), ara per ara ho deixem com.
Per defecte obtenim la resolució ADC màxima de la placa que és de 10 bits, aquesta resolució es pot canviar mitjançant la instrucció ("analogReadResolution (bits);"). Aquest canvi de resolució pot ser útil en alguns casos. De moment ho deixem així.
Ara bé, si les condicions anteriors s’estableixen per defecte, podem llegir el valor de l’ADC del canal '0' trucant directament a la funció “analogRead (pin);”, aquí “pin” representa el pin on hem connectat el senyal analògic, en aquest cas seria "A0".
El valor de ADC es pot prendre en un enter com a "int SENSORVALUE = analogRead (A0); ”, Mitjançant aquesta instrucció, el valor després de l’ADC s’emmagatzema a l’enter“ SENSORVALUE ”.
Ara parlem del SERVO, l’UNO té una característica que ens permet controlar la posició del servo només donant el valor del grau. Digueu que si volem que el servo sigui a 30, podem representar directament el valor del programa. El fitxer de capçalera de SERVO s’encarrega internament de tots els càlculs de la taxa d’impostos.
|
#incloure
Servo servo; servo.attach (3); servo.write (graus); |
La primera sentència representa el fitxer de capçalera per controlar el SERVO MOTOR.
La segona afirmació és anomenar el servo; ho deixem com a servo mateix.
La tercera afirmació indica on està connectat el pin de senyal del servo; ha de ser un pin PWM. Aquí estem fent servir PIN3.
La quarta afirmació dóna ordres per situar el servomotor i està en graus. Si se li dóna 30, el servomotor gira 30 graus.
Ara el sg90 pot passar de 0 a 180 graus, tenim el resultat ADC 0-1024
Per tant, ADC és aproximadament sis vegades la POSICIÓ DE SERVO. Així, dividint el resultat ADC per 6, obtindrem la posició aproximada de la mà de SERVO.
Amb això tindrem el valor de posició del servo alimentat al servomotor, que és proporcional a la flexió o al doblegat. Quan aquest sensor de flexió es munta sobre un guant, podem controlar la posició del servo mitjançant el moviment de la mà.
