Sie sind auf Seite 1von 22

http://www.ardumania.

es/midiendo-distancias-con-un-sensor-de-ultrasonidos/

Midiendo distancias con un sensor de ultrasonidos


Un complemento imprescindible para muchos de robots o vehculos controlados a distancia es un sensor que nos permita saber la distancia libre de obstculos para movernos. Si las distancias van a ser pequeas podemos emplear sensores de infrarrojos pero si queremos movernos en reas !randes " poder medir distancias en un ran!o de varios metros el complemento perfecto es un sensor de ultrasonidos. #unciona e$actamente i!ual que un radar de hecho es un pequeo radar. %mite un pulso de sonido a una frecuencia tan alta que es imperceptible para el odo humano " cronometra el tiempo que el sonido tarda en lle!ar a un obstculo rebotar " volver al sensor. &omo la velocidad de propa!aci'n del sonido en el aire es un dato bien conocido ()*).+ m/s, echamos mano de una conocidsima formula (e - v . t, " calculamos la distancia recorrida por el sonido. /arece fcil 0verdad12 por que lo es. Utili3aremos un sensor de ultrasonidos 4S567/67 cu"o ran!o de medida va desde los )cm a los )m suficiente para cualquier pro"ecto de rob'tica " que tiene la !ran ventaja de necesitar un 8nico pin de nuestro 9rduino para hacerlo funcionar:

0&omo puede funcionar con un solo pin1 0acaso no necesitamos uno para mandarle una seal " otro para recibir la respuesta1. /ues no se puede hacer todo por el mismo " de una forma nada complicada lo que tambi:n nos servir de paso para disipar una de las dudas ms comunes entre los principiantes: la inamovilidad de la declaraci'n de pines como entrada o salidas. %n todos los ejemplos de c'di!o que nos encontraremos en la web oficial de 9rduino " en las dems se utili3a el bloque setup(, del S;etch para hacer declaraciones pin<ode(, " establecer los pines que va"amos a utili3ar como entradas o como salidas. %n todos

estos ejemplos se busca la sencille3 " estas declaraciones no se cambian a lo lar!o del c'di!o " esto da lu!ar a que muchos usuarios ten!an la err'nea creencia de que s'lo se pueden declarar pines como entradas o salidas en el setup(, " que una ve3 establecido un pin como entrada o salida "a no se puede cambiar2. #9=S% los podemos declarar en cualquier punto del c'di!o " cambiarlos tantas veces como queramos. /%>? no lo haremos a nos ser que sea estrictamente necesario "a que saltarnos a la torera las re!las de estilo al escribir c'di!o puede suponernos un fuerte dolor de cabe3a a la hora de depurar un S;etch " !enerara un c'di!o mu" !uarro que lue!o nadie quiera utili3ar por ser incomprensible (" recordemos que a veces somos nosotros mismos los que lo tenemos que interpretarlo unos meses ms tarde, as que cuanto mejor escrito " ms claro mejor. @olvamos al sensor de ultrasonidos: solo tiene tres pines uno de alimentaci'n uno de masa " uno de seal. 9limentaci'n a AB masa a CDE " seal a un pin di!ital (por ejemplo el F,.

9 trav:s de este pin enviaremos una seal de activaci'n al sensor " para ello lo pondremos como salida lo activaremos durante 76 microse!undos " lo desactivaremos lue!o cambiaremos el pin " lo dejaremos como entrada para escuchar la seal de respuesta del sensor2 " esto lo haremos cada ve3 que necesitemos tomar una media que en el c'di!o de ejemplo ser cada se!undo. =a seal de salida del sensor ser un pulso de la misma duraci'n que el tiempo cronometrado es decir si el sonido tard' 76 microse!undos en ir del sensor al objeto " volver al sensor nos devolver un pulso de una duraci'n de 76 microse!undos. 9s que ser fcilmente medible mediante el comando pulseGn(,. 4ambi:n ha" que tener en cuenta que ese tiempo es de ida " vuelta por lo que tenemos que dividirlo por la mitad a la hora de hacer el clculo. 9s que sin ms prembulos vamos a pro!ramar: 7 + ) * B 5 /. S;etch medidor ultrasonico ./ /. &reado por Hosemanu ./ /. para 9rdumania.es ./ unsi!ned lon! pulsoI // necesitamos una variable para medir el pulso float distanciaI // otra para calcular la distancia

J F K 7 6 7 7 7 + 7 ) 7 * 7 B 7 5 7 J 7 F 7 K + 6 + 7 + + + ) + * + B + 5 + J + F + K ) 6

int pin - FI // " otra para el pin void setup(, L Serial.be!in(K566,I // iniciali3amos el puerto serie M void loop(, L pin<ode(pin ?U4/U4,I // ponemos el pin como salida di!italNrite(pin OGCO,I // lo activamos dela"<icroseconds(76,I // esperamos 76 microse!undos di!italNrite(pin =?N,I // lo desactivamos pin<ode(pin GD/U4,I // cambiamos el pin como entrada pulso - pulseGn(pin OGCO,I // medimos el pulso de salida del sensor Serial.print(Ptiempo - P,I // lo pasamos a milise!undos " lo sacamos por // el puerto serie Serial.print(float(pulso/7666.6,,I Serial.print(Pms distancia - P,I // ahora calculamos la distancia en cm // " al puerto serie distancia - ((float(pulso/7666.6,,.)*.)+,/+I Serial.print(distancia,I Serial.println(PcmP,I dela"(7666,I // esperamos un se!undo antes de hacer una nueva medida M

grfico de 8448 pxeles


Uno de los =&Es !rficos ms populares por sus prestaciones " bajo precio tiene una resoluci'n de F*Q*F p$eles que dan para representar !rficos " hasta B filas de caracteres alfanum:ricos tiene iluminaci'n por leds " comunicaci'n por S/G. %s la misma pantalla que montaban modelos de Do;ia como el B776 " el ))76.

lcd !rfico &uando pensamos en una pantalla =&E para nuestro pro"ecto siempre nos fijamos primero en las pantallas =&E de 75 columnas " + lneas que se comanta con la librera =iquid&r"stal pero estas tienen el !ran inconveniente de necesitar de un mnimo de 5 pines para su control. ?tra opci'n son las pantallas =&E controladas por serie o G+& pero en estas el precio aumenta sensiblemente. =a opci'n intermedia es esta pantalla !rfica =&E que se controla con * pines " que resulta mu" econ'mica. %sta mini-board inclu"e un controlador /&EFB** que es el que se encar!a de toda la !esti'n de los F*Q*F p$eles de la pantalla. =a comunicaci'n con el controlador se hace por S/G as que los ms valientes pueden buscar el datasheet del /&EFB** " comunicarse con el directamente el resto de seres humanos recurriremos a las libreras que en su da desarrollaron en 9dafruit para controlar esta pantalla. =o primero que ha" que tener en cuenta para conectar la pantalla a nuestro Arduino es que esta pantalla trabaja ).)v " no a los Bv que funciona nuestro 9rduino por lo que ser necesario adaptar los voltajes de salida de 9rduino a los voltajes de entrada de la pantalla. %sto se puede hacer con convertidores de niveles (la forma ms correcta, pero como la comunicaci'n entre 9rduino " la pantalla va a ser unidireccional nos podemos apaar con resistencias2 que es lo que vamos a hacer en este tutorial.

&one$iones del =&E @amos con las cone$iones: %l pin VCC es el de alimentaci'n lo conectaremos al pin de ).)v de 9rduino. GND de la pantalla al GND de 9rduino. SCE ' CS (&hip Select, tambi:n conocido como SS (Slave Select, en comunicaci'n S ! debe activarse para indicarle al dispositivo que se le van a enviar datos. /ara reducir la corriente que le lle!a desde 9rduino lo conectamos a trav:s de una resistencia de +R?hms. "S# (reset, no es necesario podemos conectarlo al pin de reset de nuestro 9rduino " nos ahorramos un pin. D$C (Eata / &ommand select,. DN (M%S!, o D!N es la entrada de datos de la pantalla (<?SG <aster ?ut Slave GD,. SC&' pin por el que 9rduino manda la seal de reloj que ri!e la comunicaci'n. &ED el pin por el que podemos encender los =%Es de la iluminaci'n de la pantalla. Oa" que tener en cuenta que son * =%Es en paralelo " que consumen un total de F6m9 por lo que para controlarlos desde un pin di!ital lo tendremos que hacer a trav:s de un transistor (cada salida di!ital soporta un m$imo de B6m9,. /ara reducir el voltaje que lle!a a los pines "S#( D$C( DN ) SC&' he utili3ado resistencias de 76R?hms " para el pin SCE una resistencia de +R?hm. S el montaje queda as:

=&E conectado a 9rduino 9hora que "a lo tenemos todo conectado vamos a pasar al GE% de 9rduino. /rimero nos bajamos la librera /&EFB** de 9dafruit " la =ibrera C#T tambi:n de 9dafruit " las instalamos por el procedimiento habitual (esto es descomprimi:ndolas " !uardndolas en la carpeta =ibraries,. 9brimos el 9rduino GE% " en %jemplos "a nos aparece /&EFB**=&E " dentro el s;etch pcdtest. %n la lnea +J del S;etch aparecen las asi!naciones de pines de 9rduino a la comunicaci'n S/G con la pantalla tal cual estn no funcionar por que "o he utili3ado un orden diferente. %ntonces en la lnea que aparece: 79dafruitU/&EFB** displa" - 9dafruitU/&EFB**(J 5 B * ),I =a cambiaremos para que quede as (comentario / chuleta incluido,: 7 + // 9dafruitU/&EFB**(S&=R EGD E/& &S >S4,I 9dafruitU/&EFB** displa" - 9dafruitU/&EFB**() * B J 5,I

S "a podemos subir el c'di!o de ejemplo " ver como en nuestra pantalla se desplie!a toda una demostraci'n de sus capacidades !rficas " alfanum:ricas. %studiando el c'di!o de ejemplo a fondo encontramos todos los m:todos a emplear con la pantalla que son: *egin+, iniciali3a la pantalla. setContrast+int contraste, establece el contraste en el ejemplo est a B6. displa)+, muestra el lo!o por defecto. 4al como viene la librera muestra el lo!o de 9dafruit como se ve en las fotos a mi me sale el lo!o de 9rdumana (como lo he hecho ser un tema para otro tutorial,. clearDispla)+, borra la pantalla. set ixel+int x(int )( color, dibuja un 8nico pi$el.

dra-line+int x.( int ).( int x/( int )/( color, dibuja una lnea de las coordenadas ($7 "7, a las coordenadas ($+ "+,. dra-rect+int x( int )( int anc0o( int alto( color, dibuja un rectn!ulo partiendo desde el punto ($ ", con el ancho " alto que le especifiquemos. fillrect+int x( int )( int anc0o( int alto( int color, dibuja un rectn!ulo s'lido partiendo desde el punto ($ ", con el ancho " alto que le especifiquemos. dra-circle+int x( int )( int radio( color, dibuja una circunferencia con el centro en ($ ", " del radio especificado. fillcircle+int x( int )( int radio( color, dibuja una circunferencia solida con el centro en ($ ", " del radio especificado. =os 5 m:todos anteriores admiten el parmetro color el cual puede ser 12!#E o 3&AC'. setCursor+int x( int ), posiciona el cursor en la coordenada ($ ", para escribir te$to a continuaci'n. print+4Ardu5ania 4, escribe el te$to entre las comillas. %l m:todo print(, admite los mismos parmetros de entrada que estamos acostumbrados a utili3ar con el m:todo print(, de la clase Serial println+45ola6, i!ual que el print(, pero aadiendo un retorno de carro al final2 va"a i!ual que el println(, que conocemos de la clase Serial. dra-*it5ap+int x( int )( *it5ap( int anc0o( int alto( color, a partir de la coordenada ($ ", dibuja un mapa de bits !uardado en formato he$adecimal en el arra" bitmap del ancho " alto especificados. %n el c'di!o de ejemplo tras los defines ha" pod:is ver como es el arra" he$adecimal. =os ms observadores se habrn dado cuenta de que en las fotos de este tuto aparece el lo!o de 9rdumania (al!o mal hecho cosa de las prisas, en la pantalla " si ejecutis el c'di!o de ejemplo el lo!o que aparece es el de 9dafruit. %s que "o modifiqu: la librera " cambi: un lo!o por el otro mientras practicaba el enrevesado arte de convertir un !rfico a formato he$adecimal. Sa me ima!ino que todos querr:is saber como se hace pero es que este tutorial "a me est quedando lar!o como para meterme en el tema de los !rficos por eso lo dejo para un pr'$imo tutorial.

Dota: si he cometido al!8n error a!radecera que me lo dej:is en los comentarios.

#er575etro con &CD grfico ) &M89D

9 partir del tutorial en el que se mostraba el manejo bsico del =&E !rfico de F*Q*F p$eles el ami!o de 9rdumana 9ntonio <oles ha elaborado un term'metro di!ital que utili3a esta misma pantalla =&E " un sensor de temperatura =<)BE. /artimos del mismo montaje misma asi!naci'n de pines entre la pantalla " un 9rduino UD?. 9adimos un sensor de temperatura =<)BE conectado al pin anal'!ico 96 tal como se muestra en el si!uiente !rfico:

&one$i'n del =<)BE a 9rduino 9s que el montaje queda de la si!uiente forma:

=&E =<)BE " 9rduino S ahora vamos con el c'di!o bsicamente lo que hacemos es tomar la seal que el =<)BE nos da por el pin anal'!ico 96 lo convertimos en !rados mediante un sencillo clculo procedemos a redondearlo (pues el clculo nos devuelve unos decimales que aunque vlidos son poco atractivos, " por 8ltimo lo sacamos por la pantalla.
7 + ) * B 5 J /. -----------------------------------------------------------------S;etch de ejemplo de uso de la pantalla =&E !rafica de F*$*F pi$eles disponible en 9rdutienda. 9utor: 9ntonio <oles. @ersion: 6.+

F K 76 77 7+ 7) 7* 7B 75 7J 7F 7K +6 +7 ++ +) +* +B +5 +J +F +K )6 )7 )+ )) )* )B )5 )J )F )K *6 *7 *+ *) ** *B *5 *J *F *K B6 B7 B+ B) B* BB B5 BJ BF BK 56 57 5+ 5) 5* 5B 55 5J 5F 5K J6 J7 J+ J) J* JB J5 JJ JF JK F6 F7 F+ F)

#echa: ++ de ma"o de +67+ Eescripcion: termometro de ambiente con =<)BE " pantalla =&E !rafica de F*$*F pi$eles ------------------------------------------------------------------ ./ Vinclude W9dafruitUC#T.hX Vinclude W9dafruitU/&EFB**.hX // pin ) - Serial cloc; out (S&=R, // pin * - Serial data out (EGD, // pin B - Eata/&ommand select (E/&, // pin J - =&E chip select (&S, // pin 5 - =&E reset (>S4, 9dafruitU/&EFB** displa" - 9dafruitU/&EFB**() * B J 5,I //&ontrol temperatura int analo!/in - 6I // /in analo!ico 6 de 9rduino float temperature - 6.6I int !rados decimas !rad> deci>I int lm)Bread tmediaI int val cntI void setup(, L // Gniciamos comunicacion serie Serial.be!in(K566,I // Gniciamos comunicacion con la pantalla displa".be!in(,I // %stablecemos el contraste displa".set&ontrast(*B,I // <ostramos la pantalla de inicio durante + se!undos displa".displa"(,I dela"(+666,I // borramos la pantalla displa".clearEispla"(,I M void loop(, L // iniciali3amos el valor de tmedia tmedia-6I // medimos la temperatura 76 veces " la almacenamos en tmedia for ( cnt-6I cntW76I cntAA, L lm)Bread - analo!>ead(analo!/in,I tmedia-tmediaAlm)BreadI M // calculamos la media de las medidas tmedia-tmedia/cntI // convertimos tmedia en un valor en !rados pero // dadas las caracteristicas del sensor la precision es de // 6.B !rados " los decimales son .* o .K temperature - (B.6 . float(tmedia, . 766.6,/76+*.6I // mapeamos el valor tmedia para que nos de // la temperatura en decimas de !rado val - map(tmedia 6 76+) 6 *KK6,I // ahora los !rados los obtenemos dividiendo por 76 !rados-val/76I // " las decimas de !rado son el resto de la division // por 76 decimas-valY76I // >edondeamos los decimales a 6 o a B

F* FB F5 FJ FF FK K6 K7 K+ K) K* KB K5 KJ KF KK 766 767 76+ 76) 76* 76B 765 76J 76F 76K 776 777 77+ 77) 77* 77B 775 77J 77F 77K 7+6 7+7 7++ 7+) 7+* 7+B

if (decimasW ), L !rad>-!radosI deci>-6I M if ((decimas X +,Z(decimasWJ,, L !rad>-!radosI deci>-BI M else L !rad>-!radosA7I deci>-6I M // Sacamos los datos por el puerto serie Serial.print(P=ectura en bruto P,I Serial.print(lm)Bread,I Serial.print(P temperatura sin redondear P,I Serial.print(temperature,I Serial.print(P& P,I Serial.print(Ptemperatura redondeada P,I Serial.print(!rados,I Serial.print(P.P,I Serial.println(deci>,I // S por ultimo lo mandamos a la pantalla =&E displa".set4e$tSi3e(7,I displa".println(P 4emperaturaP,I displa".print(P P,I displa".set4e$tSi3e(+,I displa".print(!rad>,I displa".print(P P,I displa".print(deci>,I displa".print(P.&P,I displa".print(P P,I displa".displa"(,I dela"(B66,I displa".clearEispla"(,I M

4ambi:n se inclu"e un bloque de c'di!o que muestra informaci'n por el puerto serie para que os quede ms claro como se calculan los valores.

+*.B[& la temperatura del paraso

"egistrador de datos con Arduino &eonardo


Uno de los montajes ms populares con Arduino son los data:loggers o registradores de datos son montajes que nos permiten re!istrar datos provenientes de sensores a intervalos re!ulares de tiempo. %n placas como la 9rduino UD? " versiones anteriores era necesario contar con una tarjeta de memoria en la que escribir los datos o tener una aplicaci'n en un ordenador que fuera !uardando los datos que 9rduino suministrara por puerto Serie esto implicaba hacer un pro!rama que se ejecutara en el ordenador con al!8n len!uaje tipo /rocessin! & o /"thon. Eesde la salida de la 9rduino =eonardo este tipo de montajes se ha simplificado mucho pues !racias a su capacidad para comportarse como un teclado US\ podemos re!istrar los datos directamente en una hoja de clculo o en un procesador de te$tos de #ree ?ffice. %l montaje " c'di!o que os propon!o es la forma ms sencilla que se me ha ocurrido para hacer un re!istrador de datos con una 9rduino =eonardo. Utili3a un sensor de temperatura =<)BE " parte del c'di!o que se utili3' en el tutorial del term'metro con =&E !rfico " =<)BE.

&one$i'n del =<)BE a 9rduino /ara que la 9rduino =eonardo no est: continuamente lan3ando pulsaciones de teclado he puesto todo el c'di!o dentro de un bucle while(, que solo se activa si el pin J est conectado a CDE " para esto basta con un simple cable de cone$i'n. 4ambi:n he aadido un led puesto en el pin 7) que se ilumina mientras el re!istrador est trabajando.

9s queda el montaje S el c'di!o es el que si!ue:


7 + ) * B 5 J F K 76 77 7+ 7) 7* 7B 75 7J 7F 7K +6 +7 ++ +) +* +B +5 +J +F +K )6 )7 )+ )) )* )B )5 )J )F )K *6 *7 *+ *) ** *B *5 *J *F *K B6 /. ----------------------------------------------------------------->e!istrador o datalo!!er de temperaturas 9utor: Hosemanu (aprovechando codi!o de 9ntonio <oles, @ersion: 6.7 #echa: +5 de junio de +67+ Eescripcion: re!istrador de temperatura ambiente con =<)BE los datos son volcados en una hoja de calculo #ree?ffice ------------------------------------------------------------------ ./ // &ontrol temperatura int analo!/in - 6I // /in analo!ico 6 de 9rduino float temperature - 6.6I int !rados decimas !rad> deci>I int lm)Bread tmediaI int val cntI // @ariable para llevar la cuenta de las mediciones int contador - 6I // /ines que utili3aremos int indicador - 7)I // Un led en el pin 7) brillara mientras el re!istrador // este funcionando int interruptor - JI // 9l poner el pin J a Bv el re!istrador funcionara void setup(, L // ponemos indicador como salida por que ira un led pin<ode(indicador ?U4/U4,I // el pin interruptor lo ponemos como salida " activamos la resistencia // pullup interna asi para activarlo nos basta con un simple puente pin<ode(interruptor GD/U4U/U==U/,I // Gniciamos comunicacion serie Serial.be!in(K566,I // Gniciamos el teclado Re"board.be!in(,I M void loop(, L

B7 B+ B) B* BB B5 BJ BF BK 56 57 5+ 5) 5* 5B 55 5J 5F 5K J6 J7 J+ J) J* JB J5 JJ JF JK F6 F7 F+ F) F* FB F5 FJ FF FK K6 K7 K+ K) K* KB K5 KJ KF KK 766 767 76+ 76) 76* 76B 765 76J 76F 76K 776 777 77+ 77) 77* 77B 775 77J 77F 77K 7+6 7+7 7++ 7+) 7+* 7+B 7+5

// Solo funcionara el re!istrador si el pin interruptor // esta puesto a CDE while(]di!ital>ead(interruptor,, L // encendemos el led que indica que el re!istrador funciona di!italNrite(indicador OGCO,I // iniciali3amos el valor de tmedia tmedia-6I // medimos la temperatura 76 veces " la almacenamos en tmedia for (cnt-6I cntW76I cntAA, L lm)Bread - analo!>ead(analo!/in,I tmedia-tmediaAlm)BreadI M // calculamos la media de las medidas tmedia-tmedia/cntI // convertimos tmedia en un valor en !rados pero // dadas las caracteristicas del sensor la precision es de // 6.B !rados " los decimales son .* o .K temperature - (B.6 . float(tmedia, . 766.6,/76+*.6I // mapeamos el valor tmedia para que nos de // la temperatura en decimas de !rado val - map(tmedia 6 76+) 6 *KK6,I // ahora los !rados los obtenemos dividiendo por 76 !rados-val/76I // " las decimas de !rado son el resto de la division // por 76 decimas-valY76I // >edondeamos los decimales a 6 o a B if (decimasW ), L !rad>-!radosI deci>-6I M else if ((decimas X +,Z(decimasWJ,, L !rad>-!radosI deci>-BI M else if (decimas X- J, L !rad>-!radosA7I deci>-6I M // Gncrementamos el contador contadorAAI // Sacamos los datos por el puerto serie Serial.print(P<edida num P,I Serial.print(contador,I Serial.print(P temperatura P,I Serial.print(!rad>,I Serial.print(P.P,I Serial.println(deci>,I // @amos a por el teclado Re"board.print(contador,I // escribe el numero de medida Re"board.press(R%SU49\,I // pulsa el tabulador dela"(7B6,I // espera 7B6ms Re"board.release(R%SU49\,I// libera la tecla de tabulador Re"board.print(!rad>,I // escribe la temperatura dela"(766,I Re"board.print(P P,I dela"(766,I Re"board.print(deci>,I Re"board.press(R%SU>%4U>D,I // pulsa enter

7+J 7+F 7+K 7)6 7)7 7)+ 7)) 7)* 7)B 7)5 7)J

dela"(7B6,I // espera 7B6ms Re"board.release(R%SU>%4U>D,I// libera enter // espera B minutos dela"(7666=.56=.B=,I M // apa!a el led al salir del bucle while(, di!italNrite(indicador =?N,I M

&omo es un ejemplo sencillo el intervalo entre una medici'n " la si!uiente se ha implementado a lo bestia con un dela"(, lo cual "a sabemos que no es lo ms efectivo sera mejor haberlo hecho con un control de tiempos como el del ejemplo \lin;NithoutEela" lo dejo para una futura versi'n. =os datos salen tanto por el teclado como por el puerto serie. /ara utili3arlo solo tenemos que abrir una hoja de clculo de #ree ?ffice seleccionamos la celda en la que empe3ar a escribir los datos poner el sensor de temperatura en el lu!ar deseado (en mis pruebas una ventana, conectar la 9rduino =eonardo al ordenador por US\ " poner el puente entre el pin J " CDE. 9rduino =eonardo escribir el n8mero de medici'n en la celda seleccionada " en la si!uiente la temperatura as ir completando dos columnas de datos mientras est: conectado. Si tienes la picarda de apuntar la hora a la que comien3a el re!istro de datos lue!o se puede saber a que hora corresponde cada medida2 ahora que lo pienso se!uro que #ree ?ffice tiene al!una funci'n para apuntar la hora del sistema en la celda seleccionada "a lo mirar:. %sta es la !rfica que he hecho con los datos reco!idos durante la noche del +5 de junio de +67+ la primera medida se tom' a las 66:+6 horas.

Crfico de temperaturas

#rucar ser;o a rotaci7n continua

=os servos de modelismo son sumamente 8tiles a la hora de dotar de movimiento a nuestros pro"ectos son econ'micos " fciles de utili3ar. Se pueden encontrar en un amplio ran!o de tamaos desde los ms pequeos con un peso de 7! " un torque de unos !ramos a monstruos de 766R! de torque. Una de sus caractersticas ms interesantes es su !ran desmultiplicaci'n en su jue!o de en!ranajes motivo por el cual pueden con un motor mu" pequeo mover car!as mu" pesadas. &omercialmente estn disponibles en tres versiones: normales (con una rotaci'n de 7F6[, rotativos (limitados a unas pocas vueltas, " de rotaci'n continua. %stos 8ltimos son interesantes porque aaden a la caracterstica de poder mover car!as pesadas la de poder !irar de forma continua en un sentido u otro lo que los hace ideales para utili3arlos como elementos de tracci'n. Se pueden comprar evidentemente servos de rotaci'n continua " los podemos aadir a nuestro pro"ecto para que muevan unas ruedas " formar un sencillo vehculo aut'nomo o un robot. /ero la verdad es que cualquier servo puede trabajar como servo de rotaci'n continua con unas pocas modificaciones es ms "o recomiendo el uso de servos normales modificados por dos motivos: son ms baratos " trucndolos aprendemos. \sicamente se pueden modificar de dos formas mu" parecidas " aqu las vamos a ver las dos. %mpe3aremos por co!er un servo "o para las ilustraciones he utili3ados servos de K !ramos de los que ten!o disponibles en la 9rdutienda.

servo K !r /rocedemos a quitarle los tornillos que sujetan la tapa superior " la inferior los !uardamos con cuidado para que no se nos pierdan.

servo abierto ^ueda as con los en!ranajes al aire " la electr'nica tambi:n e$puesta. @amos a ver los en!ranajes con ms detalle:

detalle en!ranajes %stos pequeos en!ranajes tienen una relaci'n de reducci'n de apro$imadamente +66:7 lo que si!nifica que por cada +66 vueltas que da el motor el 8ltimo de todos los en!ranajes s'lo da una este es el secreto de su !ran par de !iro. S sin perder velocidad en la salida pues los motores E& consi!uen altas rpm cuanto ms pequeos son " aunque no lo he medido el motor que ha" dentro de este pequeo servo puede superar perfectamente las +6.666 rpm.

en!ranajes fuera %$traemos toda la pionera con cuidado " la !uardamos. Un truco: podemos disponer los piones en un orden similar al que les corresponde en el montaje de modo que cuando los ten!amos que devolver a su sitio recordemos con facilidad donde va cada uno " en que posici'n tambi:n puede ser mu" 8til dibujar un esquema.

tope mecnico 9qu se ve uno de los motivos por los que un servo normal no puede rotar mas de 7F6[ tiene un tope mecnico en el en!ranaje de salida. &on unos alicates de corte " una lima lo eliminamos para que este pi'n pueda !irar libremente. 9hora viene una parte que variar se!8n servos: en estos modelos pequeos el potenci'metro est unido al en!ranaje de salida mediante un rebaje en su eje. %n modelos ms !randes el potenci'metro puede tener su propio pi'n separado del resto.

eje del potenci'metro Dos interesa que el en!ranaje de salida pueda !irar libremente sobre el eje del potenci'metro as que dejaremos este como est " modificaremos el en!ranaje. %s fcil:

broca en el en!ranaje de salida %l en!ranaje se mantiene fijo sobre el eje simplemente por presi'n (es un poco ms estrecho que el eje, " por el rebaje del eje que en el interior del pi'n tiene su correspondiente forma para que encaje. /asamos una broca de 7_Bmm por el pi'n (el eje tiene un dimetro de 7_)mm, " todo solucionado el pi'n !irar libremente. 9hora es cuando nos tenemos que decidir por un m:todo u otro el del loctite o el de las resistencias.

M<todo del loctite


=o veremos primero por que es el ms sencillo2 en teora.

vista del potenci'metro &omo vemos en la foto del potenci'metro salen tres cables: uno ne!ro uno blanco en el centro " uno rojo. &o!eremos un multmetro " nos armaremos de paciencia mediremos la resistencia entre el cable ne!ro " el blanco " lue!o la compararemos con la resistencia entre el cable blando " el rojo es decir un e$tremo con el centro " el centro con el otro e$tremo del potenci'metro. %s un potenci'metro normal de BR ?hms por lo que el valor central tiene que ser de +B66 ?hms. &uando el valor de ambos e$tremos sea id:ntico repito GE`D4G&? podremos darle la vuelta al potenci'metro.

vista superior del potenci'metro S con mucho cuidado aadiremos loctite o cualquier otro pe!amento con base de cianoacrilato al mecanismo del potenci'metro para fijarlo e impedir que !ire. =o volvemos a montar " "a podemos probar:

M<todo de las resistencias


/artiendo de las mismas modificaciones mecnicas hechas al principio este otro m:todo pasa por anular el potenci'metro " sustituirlo por dos resistencias i!uales. &ortamos los cables del potenci'metro " soldamos dos resistencias del mismo valor en la placa de control del servo.

resistencias soldadas a la placa de control 9qu lo he hecho a lo bestia para que se vea bien. /osteriormente cort: las patas de las resistencias " lo volv a soldar todo para que se pudiese meter dentro de la carcasa del servo. %l 8nico punto importante de este m:todo es que las resistencias tienen que tener el mismo valor por que el circuito de control del servo compara la resistencia a uno " otro lado " hace que el motor !ire en un sentido u otro " a ms o menos velocidad se!8n la diferencia entre los dos valores ledos.So utilic: resistencias de +R ?hms con una tolerancia del 7Y " el resultado ha sido perfecto.

Conclusi7n=
%l m:todo del loctite es sencillo pero el calibrado del potenci'metro en su punto central es mu" delicado el ms mnimo error hace que el servo !ire despacio sin detenerse nunca. %l m:todo de las resistencias es un poquito ms laborioso ha" que hacer tres soldaduras pero el resultado es e$celente. &omo se puede apreciar en el vdeo parar el servo con el potenci'metro conectado a 9rduino " el ejemplo Rnob es difcil pero su comportamiento por software es impecable. ?tra posible modificaci'n sera cortar los cables del potenci'metro interno e instalar un potenci'metro e$terno para centrar el servo mecnicamente aunque personalmente lo veo poco prctico qui3 al!uien lo prefiera.

Aclaraci7n=
%n el vdeo se ve que el servo est conectado directamente a un Sensor Shield de 4in;er. %sto es posible por que "o he modificado el orden de los cables en el conector del servo para hacerlo compatible con el Sensor Shield de 4in;er. =a disposici'n normal de los cables de un servo es distinta al sistema 4in;er " no se puede conectar directamente un servo a una Sensor Shield. =a modificaci'n es sencilla:

conector servo modificado \asta con invertir los cables positivo " seal ( rojo " naranja en este caso rojo " blanco para otros cables, " tener cuidado de conectar el lado que se ve en la foto hacia la len!aeta del conector en el Sensor Shield esto 8ltimo es de vital importancia "a que si lo hacemos al rev:s invertiremos la alimentaci'n de la placa de control del servo " eso no es nada bueno para el servo.

Das könnte Ihnen auch gefallen