En aquest tutorial desenvoluparem un circuit amb sensor de força, Arduino Uno i un servomotor. Serà un sistema de servo control on la posició de l’eix del servo estarà determinada pel pes present al sensor de força. Abans d’anar més enllà parlem del servo i d’altres components.
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 també s’utilitzen en algunes impressores i màquines de fax.
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.
Com es mostra a la figura següent, per tal que l’eix es pugui moure a rellotge de 9o, la RACIÓ ENCENDIDA ha de ser 1 / 18.ie. 1 mil·lisegons de "temps ON" i 17 mil·lis 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 SERVO MOTOR variant la relació de treball del senyal PWM generat per UNO.
Ara parlem del sensor de força o del sensor de pes.
Per connectar un sensor FORCE amb ARDUINO UNO, utilitzarem la funció ADC de 8 bits (conversió analògica a digital) a arduno uno.
Un sensor FORCE és un transductor que canvia la seva resistència quan s'aplica pressió sobre la superfície. El sensor FORCE està disponible en diferents mides i formes.
Utilitzarem una de les versions més econòmiques perquè aquí no necessitem molta precisió. FSR400 és un dels sensors de força més barats del mercat. La imatge del FSR400 es mostra a la figura següent.
Ara és important tenir en compte que el FSR 400 és sensible al llarg de la longitud, la força o el pes s’haurien de concentrar al laberint al centre de l’ull del sensor, tal com es mostra a la figura.
Si s'aplica la força en moments equivocats, el dispositiu podria danyar-se permanentment.
Una altra cosa important que cal saber que el sensor pot conduir corrents d’alt rang. Per tant, tingueu en compte els corrents de conducció durant la instal·lació. A més, el sensor té un límit de força de 10 Newton. Per tant, podem aplicar només 1 kg de pes. Si s’apliquen pesos superiors a 1 kg, el sensor pot mostrar algunes desviacions. Si augmenta més de 3 kg. el sensor pot danyar-se permanentment.

Com s’ha dit anteriorment, aquest sensor s’utilitza per detectar els canvis de pressió. Així, quan s’aplica el pes a sobre del sensor FORCE, la resistència canvia dràsticament. La resistència del FS400 sobre el pes es mostra al gràfic següent:

Com es mostra a la figura anterior, la resistència entre els dos contactes del sensor disminueix amb el pes o augmenta la conductància entre els dos contactes del sensor.
La resistència d’un conductor pur ve donada per:

On, p- Resistivitat del conductor
l = Longitud del conductor
A = Àrea del conductor.
Ara considerem un conductor amb resistència "R", si s'aplica una mica de pressió sobre el conductor, l'àrea del conductor disminueix i la longitud del conductor augmenta com a resultat de la pressió. Així, per fórmula, la resistència del conductor hauria d’augmentar, ja que la resistència R és inversament proporcional a l’àrea i també directament proporcional a la longitud l.
Així, amb això, per a un conductor sota pressió o pes, la resistència del conductor augmenta. Però aquest canvi és petit en comparació amb la resistència general. Per a un canvi considerable, molts conductors s’apilen.
Això és el que passa dins dels sensors de força que es mostren a la figura superior. En mirar de prop es poden veure moltes línies dins del sensor. Cadascuna d’aquestes línies representa un conductor. La sensibilitat del sensor està en números de conductors.
Però en aquest cas la resistència anirà disminuint amb la pressió perquè el material utilitzat aquí no és un conductor pur. Els FSR aquí són dispositius robusts de pel·lícula gruixuda de polímer (PTF). Per tant, no es tracta de dispositius de material conductor pur. Es componen d'un material que presenta una disminució de la resistència amb un augment de la força aplicada a la superfície del sensor.
Aquest material mostra les característiques tal com es mostra al gràfic de FSR.
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 FORCE 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.
Ara, quan s’aplica la força al SENSOR DE FORÇA, el voltatge a l’extrem del divisor canvia aquest pin quan es connecta al canal ADC de UNO, obtindrem un valor digital diferent de l’ADC de UNO, sempre que canviï la força del sensor.
Aquest valor digital ADC s’adapta a la relació de treball del senyal PWM, de manera que tenim el control de posició SERVO en relació amb la força aplicada al sensor.
Components
Maquinari: UNO, font d'alimentació (5v), condensador 1000uF, condensador 100nF (3 peces), resistència 100KΩ, SERVO MOTOR (SG 90), resistència 220Ω, sensor de força FSR400.
Programari: Atmel studio 6.2 o aurdino cada nit.
Diagrama de circuits i explicació de treball
El diagrama de circuits per al control del servomotor mitjançant el sensor de força es mostra a la figura següent.

El voltatge del sensor no és completament lineal; serà sorollós. Per filtrar el soroll, es col·loquen condensadors a cada resistència del circuit divisor tal com es mostra a la figura.
Aquí agafarem la tensió subministrada pel divisor (tensió que representa el pes linealment) i l’alimentarem en un dels canals ADC d’Arduino Uno. Després de la conversió, prendrem aquest valor digital (que representa el pes) i el relacionarem amb el valor PWM i proporcionarem aquest senyal PWM al motor SERVO.
Per tant, amb el pes tenim un valor PWM que canvia la seva relació de treball en funció del valor digital. Com més gran sigui el valor digital, més alta serà la relació de treball de PWM. Així doncs, amb un senyal PWM de relació de treball més elevat, l’eix servo hauria d’arribar a l’extrem dret o a l’esquerra segons la figura que es proporciona a la introducció.
Si el pes és inferior, tindrem una relació de treball PWM més baixa i, segons la figura de la introducció, el servo hauria d’arribar a l’extrema dreta.
Amb això tenim un control de posició SERVO per PES o FORÇA.
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 ADC Arduino Uno 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 ”.
El PWM de UNO es pot aconseguir en qualsevol dels pins simbolitzats com a "~" a la placa PCB. Hi ha sis canals PWM a l’ONU. Utilitzarem el PIN3 per al nostre propòsit.
|
analogWrite (3, VALOR); |
Des de la condició anterior podem obtenir directament el senyal PWM al pin corresponent. El primer paràmetre entre claudàtors és per triar el número de pin del senyal PWM. El segon paràmetre és per a la relació d'escriptura.
El valor PWM d'Arduino Uno es pot canviar de 0 a 255. Amb "0" com a mínim a "255" com a màxim. Amb 255 com a ràtio de treball, obtindrem 5V al PIN3. Si la relació d’impostos és de 125, obtindrem 2,5 V a PIN3.
Ara parlem del control del servomotor, l’Arduino 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. Podeu obtenir més informació sobre el control del servomotor amb arduino aquí.
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. Per tant, tenim un senyal PWM la relació de treball canvia linealment amb PES o FORÇA. En ser donat al servomotor, podem controlar el servomotor mitjançant un sensor de força.
