Http

download Http

of 37

Transcript of Http

http://electronica.mercadolibre.com.mx/placa-arduino-severino

Qu se hace con estas placas? Lo genial de arduino es que las placas en cuestin vienen con una memoria flash a la que tu le cargas un programa. El programa se lo cargas por USB y puede ser cualquier cosa. Por ejemplo puedes programar tu placa para encender una luz, activar un ventilador o incluso ir tan lejos como para crear tu propio robot. Con un poco de creatividad y conocimientos verdaderamente mnimos de arduino puedes crear prcticamente cualquier cosa.Si buscas por Youtibe Arduino encontrars decenas de videos de proyectos hechos utilizando una de estas placas. Puedes ponerle uno o varios motores a las placas, adherirle un sensor infrarrojo para controlarlo con el mando a distancia, crear un brazo animatrnico etc.Se trata de una comunidad abierta de desarrolladores con su propio entorno de desarrollo que gira en torno a estas placas. Es una forma divertida y fcil de adentrarse tanto al mundo de la electrnica como al mundo de la programacin a la vez que estimulamos el aprendizaje de nuevas herramientas.http://www.ethek.com/arduino-que-es-y-para-que-sirve/

proyectos utilizando arduino (no manches en pocas palabras electrnica + programacin = crea lo que desees)http://www.hojaderouter.com/tecnologia/hardware/diez-cosas-increibles-que-podras-hacer-por-ti-mismo-con-arduino/6665

No manxes checa esta paginahttp://www.electronicaestudio.com/arduino_productos.htm

http://platea.pntic.mec.es/~mhidalgo/edubasica/01arduino/arduino01.html

Aplicaciones con Arduino.Introduccin a la plataforma Arduino.Hoy es: Mie 28.05.2014 CRTL+D, para volver a visitarnos.Creado por: V. Garca.Principio del formularioTema:Final del formulario

IdiomaPROLOGO.Arduino es una plataforma de cdigo abierto, basada en una sencilla placa conentradas y salidasanalgicas y digitales, posee adems de una memoria No-voltil cuya capacidad depende de la versin de microcontrolador utilizado, los primeros disponan de 8Mbytes, sin embargo se puede intercambiar por otros de gama mayor 16Mbytes o ms. El entorno de desarrollo est basado en el lenguaje Processing/Wiring.Mediante los pines de entrada/salida, puede recibir seales degran variedadde sensores, de modo que puede interactuar en su entorno, controlando luces, motores o actuadores, trabajando de manera autnoma o a travs de un programa corriendo en un computador (por ejemplo,Macromedia Flash, Processing, etc.). Est compuesto por un micro controlador Atmel AVR que viene pre-programado con unasecuencia de arranque(Boot Loader), con el que se puede actuar sobre el contenido de la memoria, por lo que no necesita un programador externo.Elprotocolo de comunicacinque utiliza Arduino es el RS232 serie. Los protocolos de comunicacin, se han desarrollado para que las mquinas puedenenviar y recibirdatos a/de otras mquinas. Cada protocolo se compone de un conjunto de normas que definen cmo se representan los datos. El protocolo RS232 serie, es un viejo protocolo bien establecido en la dcada de 1960. Que ha sido ampliamente reemplazado por protocolos ms rpidos y ms avanzado como el USB.Sin embargo, sigue siendo ampliamente utilizado a travs de emulacin de software - en gran parte debido asu fcilaplicacin. Configurar unaconexin en serie, consiste en especificar un puerto (COM en Windos, / dev / Linux, OS X) y una velocidad de comunicacin para cada dispositivo o mquina. Arduino, tambin dispone y utiliza el protocolo va USB para comunicarse, con un computador externo.La presentacin, es un tema que ya est muy desarrollado por los propios creadores y unalarga listade entusiastas que venimos utilizando esta plataforma, por dicho motivo no me extender ms.APLICACIONES.Entre las aplicaciones, debido a las posibilidades que presentan sus entradas, nos permite utilizar una gran variedad de sensores, como se ha dicho. Para no repetirme con proyectos de los primeros pasos en esta plataforma, aqu daremos un pequeo salto y voy a describir cmo controlar un rel, luego veremos como podemos leer la posicin de un potencimetro (ms cortopot), ms tarde, veremos como controlar el giro de un servomotor. Esto es slo el arranque de una aventura con la compaa de nuestro Arduino.Control de un rel.Un conmutador.Leer la posicin de un potencimetro.Control de un servo.Ejemplo 1.Ejemplo 2.Motor DC.MATERIALES NECESARIOS.Es conveniente disponer de un mnimo de componentes para llevar a cabo las presentes prcticas, a continuacin, sigue una lista de loscomponentes msrelevantes:Placa ArduinoRel de 2 circuitosPot lineal de 10K.Mini pulsador.IC LM293bDiodo LED

Servomotor estndarMotor DCTransistor

ResistenciasAdaptador redCablecillo rgido.

CONTROL DE UN REL.Paraempezar, unaaplicacin sencilla, sta consiste en activar un rel mediante un sensor. El sensor puede ser cualquiera que se adapte a las necesidades del proyecto. En ente caso, vamos a utilizar un simple mini pulsador de los que podemos encontrar en el comercio o si lo preferimos en multitud de equipos que ya no nos sirven y de los cuales podemos recuperar dichos pulsadores entre otros componentes. Un rel cuya tensin de trabajo puede ser de 12V, undiodo de proteccinque puede ser un 1N4148 o en su defecto un 1N4001.

Este es el circuito que necesitara para activar un rel de 12V controlado por unasalida digitaldel Arduino, en l se puede ver los componentes que se utilizan habitualmente, el diodo D1, evita la destruccin del transistor por la contra corriente producida por la induccin del rel. Se ha utilizado un rel de dos circuitos, para producir el efecto memoria, es decir, cuando se ceba el rel, el contacto secundario, al cual se ha intercalado el pulsador 'reset', el circuito de activacin permanece activo hasta que se pulsa ste pulsador que corta el circuito de retencin o memoria.EL ESQUEMA.El esquema es muy simple, se puede apreciar en laimagen deabajo, generada con la ayuda del programa gratuito fritzing.

Ahora, lo primero que hemos de hacer es abrir eleditor de textohabitual (o Notepad), vamos a escribir nuestro programa para que al presionar el pulsador el rel se active. Si lo desea, puedecopiar y pegarel contenido del archivo del programa que encontraraqu, gurdelo con el nombre "pulsador.pde", crguelo en el IDE de Arduino y verifique su sintaxis y lo puede cargar en su Arduino.Pulsador.CDIGO:SELECCIONAR TODO/** Pulsador.pde** Autor: V. Garca* Cambia estado de un rel, conectado al pin digital 13, con un transistor* si es necesario, cuando presionas un pulsador conectado al pin 7.* Se desconecta al liberar el pulsador.*/

int switchPin = 2; // elige el pin 2 de entrada (para un botn)int relePin = 8; // elige el pin 13 para el relint val = 0; // variable para leer el estado de pin2

void setup () {pinMode (relePin, OUTPUT); // declara relePin como salidadigitalWrite(switchPin, HIGH); // activa la rpa al pin 2pinMode (switchPin, INPUT); // declara el botn como entrada}

void loop () {val = digitalRead (switchPin); // lee valor de la entradaif (val == HIGH) { // comprueba si la entrada es ALTA (botn libre)digitalWrite (relePin, LOW); // si, cambia y desactiva el rel.} else {digitalWrite (relePin, HIGH); // no, cambia y activa el rel.}}QU HEMOS HECHO?El primer apartado corresponde al nombre del archivo, la descripcin, fecha y autor; todo esto se pone entre lneas comentadas, es decir, cada lnea est precedida por dos barras "// comentario" o en su caso "/* comentarios */". Esta sera una seccin que servira: /* * Pulsador * * Autor: V. Garcia * Cambia estado de un rel, conectado al pin digital 13, con un transistor * si es necesrario, cuando presionas un pulsador conectado al pin 7. * Se desconecta al liberar el pulsador. */ El principiante, debe utilizar una cabecera similar para sus proyectos. A continuacin, se deben declarar los archivos a incluir as como,las variablesque se utilizaran en el programa.Es bastante normal el uso de libreras que incorpora la plataforma Arduino, como: servos.h, timer.h, rtc.h u otras, dependiendo de las necesidades del programa. En esta actividad,no seutilizan libreras extras, debido a lo sencillo del proyecto. La forma de utilizar las libreras es como se ve en el siguiente ejemplo:#include // esto indica que utiliza la librera servo.h En la siguientes lneas se declaran las distintas variables. Vemos que se declara como entero (int) el valor del pin digital 2, donde se leer el estado del pulsador. Tambin se declara, como entero (int) el pin digital 11, donde aplicaremos el rel o mejor dicho, el transistor que manejar el rel. Utilizaremos el transistor por dos razones, por si la corriente que necesita el rel es mayor que la que proporciona la salida del Arduino y por que nos sirve de separador de las corrientes inducidas, por la bibina del rel.int switchPin = 2; // pin digital de entrada para switchint relePin = 8; // pin digital de salida para relLa siguiente seccin, se encarga de configurar los pines involucrados en el proyecto e inicia el puerto serie, si intervienen las comunicaciones serie.void setup() { // esta seccin, slo se lee una vez, cuando empieza el programa. pinMode(switchPin, INPUT); // declara el botn como entrada digitalWrite(switchPin, HIGH); // activa la rpa al pin 2 pinMode(relePin, OUTPUT); // declara relePin como salida // Serial.begin(9600); // inicia la comunicacin Serial. Si fuera necesario.} Configurar, con elpinMode(switchPin, INPUT);, le indicamos al programa que el pin digital 2 estar en modo entrada. CondigitalWrite(switchPin, HIGH);se activa la RPA (resistencia polarizacin interna a alto), esto fuerza al pin2 a ver un H, si no es presionado el pulsador. ConpinMode(relePin, OUTPUT);se declara el pin digital 8 como salida. Y si interviene la comunicacin, conSerial.begin(9600);le indicamos que, inicie la comunicacin con la consola a 9600 baudios/s, en este caso. Lase la gua de Arduino, para ms detalle. Esta rutina delseup(), se lee una sola vez, al iniciar el programa o despus de un rest.Ahora, se aadiran las distintas rutinas que intervinieran en el proyecto, no es el caso en este proyecto. Las rutinas, si las hay, se leen una vez, al iniciar el programa o despus de un rest y posteriormente cuantas veces sea necesario, al ser llamadas por el flujo del programa.Por ltimo, se abre el bucle oloop()(lazo) en donde se repetir indefinidamente el flujo del programa, hasta que lo abortemos con un reset o corte de tensin.void loop() { val = digitalRead (switchPin); // lee valor de la entrada if (val == HIGH) { // comprueba si la entrada es ALTA (botn liberado) digitalWrite (relePin, LOW); // si, cambia y desactiva el rel. } else { digitalWrite (relePin, HIGH); // no, cambia y activa el rel. }}Se observa que el rel se activa mientras est presionado el pulsador y se desactiva al ser liberado ste. Esto confirma que el programa hace lo que preveamos, sin embargo, ahora, vemos que, esto realmente no es lo que queramos (el programa no adivina lo que queremos), lo que nos ira mejor es que se activara el rel con una pulsacin y con una segunda pulsacin se desactivara.Por lo tanto, tenemos que modificar en parte el programa ya que este, realmente responde a la accin del pulsador mientras este es presionado y lo que queremos es un conmutador.

UN CONMUTADOR.Como todos sabemos, un conmutador tiene dos estados estables, los cuales se cambian con una accin mecnica externa. Esto mismo lo llevaremos a nuestro entorno Arduino. Las primeras lneas como siempre, describen lo que hace el programa, en segundo lugar, estn las variables, usaremos nombres intuitivos, fciles de comprender comoswitchPinpara el pulsador,outPinpara la salida y otros que se comentan en el propio programa. Haremos uso de una funcin de tiempo como esmillis(), para controlar el siempre presente problema de los rebotes lo que se conoce en ingls comobouncing.En la configuracin (setup), aprovecharemos las posibilidades que nos presentan los pines digitales, esto no slo lo haremos para evitarnos una resistencia, como son las RPA (resistencias de polarizacin a alto), si no, para verificar la importancia que tiene este detalle, pero eso lo veremos ms tarde.RECOMENDACIONESEs importante recordar las recomendaciones al respecto de los pines configurados como salida (OUTPUT) conpinMode()se dice que estn, en estado de baja impedancia. Esto significa que puede proporcionar una cantidad sustancial de corriente a otros circuitos. Los pines del Atmega pueden proporcionar corriente positiva o proporcionar corriente negativa dehasta 40 mA(miliamperios) a otros dispositivos o circuitos. Esta es suficiente corriente para la brillante luz de un LED (no se olvide de la resistencia en serie) o para utilizar muchos sensores por ejemplo; sin embargo, no es conveniente utilizar las salidas directamente en los dispositivos con inductancias, como rels, solenoides o motores.Los cortocircuitos en los pines de Arduino o intentos de extraer mucha corriente de ellos, pueden daar o destruir los transistores de salida en el pin, pudiendo daar completamente el chip Atmega. A menudo, esto se traducir en un pin del microcontrolador "muerto", pero el resto del chip seguir funcionando adecuadamente. Por esta razn es buena ideaconectar los pines de salidaa otros dispositivoscon resistencias de 470 o 1k, limitando la corriente mxima que desde los pines es requerida para una aplicacin particular. Veamos el cdigo.Ads by OnlineBrowserAdvertisingAd OptionsConmutador.CDIGO:SELECCIONAR TODO/* conmutador.pde** Cada vez el pin de entrada va de BAJO a ALTO (p.ej. debido a apretar un botn),* el pin de salida bascular de BAJO a ALTO o de ALTO a BAJO. Hay un retraso* mnimo entre basculados, para evitar los rebotes del circuito.* (as no haremos caso del ruido).** Modificado por V. Garca 30062009 23:10H** Funciona correctamente, emplea 2.514 bytes.**/

// variables.int switchPin = 2; // input pin2 (switch o pulsador)int outPin = 8; // pin8 output del pin2int estado = 0; // estado actual del pin de salidaint previo = 0; // lectura anterior del pinX de entradaint reading; // lectura actual del pin de entrada

// las siguientes variables son para el tiempo, medido en miliseconds.long time = 0; // la ultima vez que el pin de salida fue basculadolong debounce = 500; // el tiempo de rebote, aumenta si la salida parpadea

void setup() // Configuramos los pines{pinMode(switchPin, INPUT); // pone como entrada el pin2digitalWrite(switchPin, HIGH); // activa la rpa del pin 2pinMode(outPin, OUTPUT); // pone el pin 8 como salidaSerial.begin(9600); // activa comunicaciones serie}

void loop(){reading = digitalRead(inPin);

// solo si la entrada va de BAJO a ALTO y hemos esperado tiempo suficiente// para que ningn rrebote afecte al circuito, el pin de salida bascular y// recordar desde cuando.if (reading == HIGH && previo == LOW && millis()+100 - time > debounce) {if (estado == HIGH) {estado = LOW;time = millis();}else {estado = HIGH;time = millis();}}digitalWrite(outPin, estado);previo = reading;}Por seguridad ponga una resistencia limitadora de 270 y un LED conectados entre el pin digital 8 y masa. Se puede apreciar que, cuando presiona el pulsador se enciende el LED y si vuelve a pulsar, se apaga el LED, ahora permanece en cada estado hasta que se produce una nueva pulsacin, justo lo que queramos. De nuevo, si lo desea, puede copiar y pegar el contenido del archivo de este programa que encontraraqu, gurdelo con el nombre "conmutador.pde" para poder recordarlo con facilidad.Ahora, como ya coment antes, vamos a ver la importancia de las RPA's. Para lo cual, haremos un pequeo cambio en el programa, se trata de comentar las dos lnea que siguen: digitalWrite(inPin, HIGH); // activa la rpa del pin 2 pinMode(outPin, OUTPUT); // pone el pin 8 como salidadebe quedar as:// digitalWrite(inPin, HIGH); // activa la rpa del pin 2// pinMode(outPin, OUTPUT); // pone el pin 8 como salida Lo debe compilar de nuevo y ejecutarlo. Qu ha notado? Cuando acerca la mano al pulsador, se cambia el estado del LED y adems el LED no se enciende con la misma potencia.En primer lugar, es tan sensible que, influye la capacidad de la mano con el conductor del pin 2 al pulsador, esto hace que haya una incertidumbre de estabilidad, parece descontrolado. Sin duda, la RPA tiene su importancia.En cuanto a la indefinicin del estado de salida del pin digital 8, hace que la tensin de salida sea inferior a la de alimentacin y ste es el efecto que produce, parece de poca importancia, pero no debe descuidar este detalle, puede llevarle a innecesarios quebraderos de cabeza.Ya puede sustituir el diodo LED, por un transistor BC549 o similar y conecte el rel en el colector, como muestra el circuito de arriba. Los negativos de las tensiones utilizadas, siempre debenunirse. Con esto, terminamos la presente prctica, como siempre, si desea alguna aclaracin, puede hacerme llegar su consulta en,este enlace.

EL POTENCIMETRO.Como ya dije al principio, este es el momento de leer la posicin de un pot. Seguramente esta pensando, para que sirve leer la posicin de un pot. Para que mediante un programa (soft), lograr mover el eje de un motor, una cantidad de grados, es una respuesta posible o igualmente controlar la velocidad del motor. Cmo? Ya tiene ms respuestas, como estos ejemplos!. Eso esta bien. Aclarado esto, podemos seguir. Observe la figura que sigue. Que le sugiere.

Hay infinidad de programas en la red que, muestran como hacer esto, por lo tanto, no hay necesidad de "inventar" nada nuevo. Ya que no voy a mejorar nada, con permiso del autor (no consultado), voy a exponer uno de esos ejemplos, para que sirva a mi propsito que es avanzar en este documento. Sin ms prembulos:Los extremos del potencimetro se conectan al +5V y a masa 0V. El punto central, se conecta a una entrada analgica pin2 (pin0 - pin3), con la ayuda de un voltmetro se puede leer la tensin de salida, los valores as obtenidos, los procesaremos y esperemos a ver los resultados obtenidos. Realmente, hemos hecho un divisor de tensin, el programa leer los valores de tensin de la entrada por el pin analgico 2 conectado al terminal central del pot. El valor ledo as, vara de 0 a 5.000mV y es proporcional a la posicin de mando del potencimetro, por ese motivo debe utilizarse un pot lineal. El valor obtenido se puede analizar a travs de la conexin serie que se controlar visualmente mediante la pantalla del monitor.Aclaremos esto de los pines analgicos, estas entradas analgicas en Arduino son manejadas por un convertidor analgico/digital de 10 bits, por lo que entregan a su salida, valores entre 0 y 1023 (2^10 - 1=1023). As que, la tensin que entrega el pot a la entrada analgica, en la funcinanalogRead, variar entre 0 (cuando est a 0V) y 1023 (cuando est a 5V).Veamos un cdigo que nos sirva de partida para nuestro propsito.EL CDIGO.El programa se basa en un simple cdigo, con el cual, una entrada analgica recibe las variaciones de niveles de tensin que posteriormente convierte a nmeros que podemos interpretar. Este ejemplo, muestra cmo se desvanece un LED conectado al pin 9, no olvide utilizar la funcinanalogWrite(). Este cdigo que sigue, es de dominio pblico.Dimer 1CDIGO:SELECCIONAR TODO// Enciende un LED con PWM segn pos. potencimetro

int potPin = 2; // seleccionar el pin de entrada analgico 2 para el potint ledPin = 9; // seleccionar el pin de salida digital 9 para el LED (PWM)int val = 0; // variable para almacenar el valor capturado desde el sensor

void setup() {Serial.begin(9600); // sets the serial port to 9600pinMode(ledPin, OUTPUT); // declara el ledPin en modo salida}

void loop() {val = analogRead(potPin); // lee el valor del sensoranalogWrite(ledPin, val); // enciende LEDSerial.print(val);Serial.println(" ");delay(20); // detiene el programa por un tiempo determinado.}Copie, pegue y guarde este cdigo con el nombreleepot.pde. Ahora, compile, cargue el programa al Arduino y compruebe el resultado. Cuando mueve el eje del pot el brillo del LED vara, sin embargo no parece estar dentro de lo esperado, debera ir ms fino, no le parece.Porque ocurre que, cuando debera estar el LED apagado del todo, est parpadeando. Esto se debe a que el valor que se lee del pot. se convierte en fracciones de 0-1023, esto entra en conflicto, puesto que el valor mximo de un byte es 255. Este es el motivo por el que, encontramos como cuatro puntos de apagado o encendido al girar de un extremo a otro el eje del pot. Esto lo podemos comprobar simplemente realizando la prueba que sigue:analogWrite(ledPin, val/4); // enciende LED. Dividimos 1024 por 4, para obtener de 0 a 255Y volvemos a compilar, cargar y por fin comprobamos que ahora s, obtenemos el resultado que esperbamos. Hay un detalle que no debe pasar desapercibido, me refiero al funcin utilizadaanalogWrite()por la anteriordigitalWrite(), esto es as, para que podamos aprovechar la Modulacin por Ancho de PulsoPWM(en ingls Pulse Width Modulation) que llevan algunos de los pines de salida del Arduino. Para obtener ms informacin, consulte la pgina de labiblioteca Arduino.As que, el cdigo final es el siguiente:Dimer 2CDIGO:SELECCIONAR TODO/** PotDimer* ---------** Uso de un potenciometro para adjustar el brillo del LED PWM's** Como el mximo valor de salida del convertidor es 255, el* valor leido del pot, tenemos que vividirlo por 4* de esta forma podremos mostrar sus valores.**/

int potPin = 2; // selec. el pin entrada del potencimetroint ledPin = 9; // selec el pin para el LEDint val = 0; // variable para guardar el valor ledo por el sensor

void setup() {pinMode(ledPin, OUTPUT); // declara el ledPin como OUTPUTSerial.begin(9600);}

void loop() {val = analogRead(potPin); // lee el valor del sensoranalogWrite(ledPin, val/4); // pone el ledPin encendidoSerial.print(val); // imprime valor del pot y vuelve al panel de depuracinSerial.println(" ");delay(20); // espera 20 seg}Ahora s, copie, pegue y guarde o descargue el cdigode aqu, dele el nombre por ejemplopotdimer.pde, compile, cargue y compruebe que, ahora s, obtenemos el resultado que esperbamos. El LED realmente se desvanece (fading), en la medida que variamos el eje del pot. o al contrario, se enciende. Esto, nos servir en el caso de los servos?.

SERVOMOTOR.Una simple descripcin de un servomotorpuede seresta: es un pequeo motor elctrico que, puede ser controlado para que gire a una posicin angular especfica y mantenerse estable en dicha posicin. Algo ms concreto, el servo, consta de un motor de corriente continua, con una caja reductora y un circuito de control, para su posicionamiento. Los servomotores tienen tres hilos: alimentacin, tierra o masa, y seal de control. El cable de alimentacin suele ser rojo y debe ser conectado al pin de 5V, el cable negro se conecta a masa (0V) y el cable de control puede ser de color amarillo, naranja o blanco, por el que se aplican los pulsos para su control.Existen un gran nmero de aplicaciones que vienen utilizando este tipo de servomotores, por ejemplo controles de juguetes, mquinas herramienta, robots, etc. entre otras. Actualmente, con la proliferacin de los micro controladores como Arduino o PIC entre otros, se viene desarrollando una gran cantidad de aplicaciones, cuyo lmite es la imaginacin.

Vista de la caja reductora y engranajes.Cuando haya que utilizar un servomotor, se deben tener en cuenta, un mnimo de factores bsicos a considerar como: Recorrido de giro o sea, intervalo angular, 0 - 180 grados o 360 grados (giro completo). Velocidad de giro. Par (torque o fuerza) que el servo puede generar. Tamao, peso, coste, etc.Como hemos visto, los servo-motores tienen engranajes reductores integrados y un eje que se puede controlar con precisin. Los servos estndar, permiten que el eje se controle con precisin en ngulos de pocos grados, por lo general entre 0 y 180 grados. Los servos de rotacin continua permiten la rotacin del eje a distintas velocidades. El control de parada, se puede realizar de forma automatizada (soft) o mediante la accin de un pot que permite modificar el ngulo de giro con cierta precisin. Para una descripcin ms detallada debe visitar estesitio. Tambin puede visitar el artculo sobre, cmo trucar un servo conservando la electrnica, en esteblog.otrucar_servo_futaba_s3003.pdf, aqu

Nota:En todos los ejemplos que se presentan en este artculo, recomiendo utilizar la librera#include de la versin 0018 o posterior.No se presenta el enlace en este sitio, para no inducir a error.De esta forma ya tendremos acceso a una serie de comandos del servo como:myservo,myservo.attach(#);myservo.write(pos);etc. Veamos un par de ejemplos que ilustren estos comandos entre otros, dondeposes un valor entre 0 y 180 aproximadamente.Como se aprecia en la imagen anterior, para las prximas prcticas y puesto que la placa Arduino puede manejar directamente hasta seis servos, necesitamos estos componentes; un Arduino, un potencimetro y un servo-motor estndar (he utilizado el S3000 de Futaba, por tener algunos en el cajn), con un margen de giro de 0-180. Esto bastar, espero, para comprender cmo controlar un servo.Porque me he decidido por el control del servomotor antes que del motor DC, es una cuestin de practica, ya que Arduino tiene capacidad para manejar un servo (realmente hasta seis) en cada una de las salidas dotadas de PWM, lo cual permite la conexin directa del servo al pin elegido, no es por otra cuestin. Dicho esto, voy a seguir con lo propuesto.En el IDE de Arduino disponemos de la librera Servo.h, resultar hasta cierto punto sencillo el control de un servo como vamos a comprobar. Empezaremos por algo sencillo, en el propio IDE Arduino viene un ejemplo que vamos a utilizar.

EJEMPLO 1.Ejercicio-1.Veamos un ejemplo de control de un servo, cdigo que, he tomado de la web de Barragan, he reducido un poco el cdigo, para mi propsito. En este cdigo, se aplica la seal PWM que dirigimos al pin digital 9. Como se puede comprobar no tenemos ningn modo de influir externamente en lo que hace el programa. En l, el servo, gira en un sentido y al llegar al final predeterminado (180), inicia un retroceso hasta volver al punto predeterminado (0), as de simple, no hay ms. El que sigue es el cdigo.Ads by OnlineBrowserAdvertisingAd OptionsSweep (Barrido)CDIGO:SELECCIONAR TODO// Sweep (Barrido)// ejemplo 1// by BARRAGAN

#include

Servo myservo; // create servo object to control a servo// a maximum of eight servo objects can be created

int pos = 0; // variable to store the servo position

void setup() {myservo.attach(9); // attaches the servo on pin 9 to the servo object}

void loop() {

for(pos = 0; pos < 75; pos += 1) // goes from 0degreesto 180 degrees{ // in steps of 1 degreemyservo.write(pos); // tell servo to go to position in variable 'pos'delay(15); // waits 15ms for the servo to reach the position}for(pos = 75; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees{myservo.write(pos); // tell servo to go to position in variable 'pos'delay(15); // waits 15ms for the servo to reach the position}}En el cdigo de barrido, porque se trata de un barrido, como el limpia parabrisas de un coche. Un recorrido en un sentido y acto seguido cambia el sentido y hace otro barrido o recorrido. Con la seal PWM se controla el punto de ajuste de posicin, no la velocidad.En el cdigo, el punto de ajuste de posicin (pos) cambia en un grado cada 15 milisegundos. No tiene mucho sentido un cambio mayor de 15 milisegundos, porque el perodo PWM, base de los servos es de unos 20 milisegundos.Para controlar la velocidad del barrido, se necesita controlar la rapidez con que cambia el punto de ajuste. Por ejemplo un incremento de 3 grados (pos += 3), har un barrido tres veces ms rpido (naturalmente, sujeto a la velocidad mxima del servo en uso).Por lo tanto, este ejemplo tiene una aplicacin muy concreta y para mi propsito no es exactamente lo que esperaba. Voy a realizar algunos cambios a continuacin.Ejercicio-2.Pretendo aplicar al servo, una salida de Modulacin de Ancho de Pulso y mediante la variacin de una seal analgica (potencimetro), modificar el ancho del pulso, con lo cual variar el ngulo de giro del servo motor.Cdigo.Vamos a controlar el giro de un servomotor conectado a un pin analgico. Mediante la seal analgica del potencimetro, leda por el pin analgico 2 (analogPin), regularemos el ngulo de giro del servo segn el giro del eje del potencimetro. En este ejemplo, para reducir el cdigo, se utiliza la libreraServo.h.Servo con pot.CDIGO:SELECCIONAR TODO/** potservo.pde** by V. Garcia * Controlar un servo con Arduino, se utiliza un pot en el pin analogico 2* el servo se conecta al pin 9 (PWM).* Utilizando Arduino v0018, funciona bien. Si utiliza la ver. 0013, debe* cambiar la librera Servo en Harware/libreries/Servo, para que funcione.*/

#include //include the servo libary

Servo myservo; // crea el objeto servo para control del servo// a maximum of eight servo objects can be createdint analogPin = 2;int = 2; // Valor devuelto por el sensor analogico (pot.)int pos = 0; // variable para guardar posicin del servo

void setup() {myservo.attach(9); // attaches the servo on pin 9 to the servo object}

void loop() {analogValue = analogRead(analogPin);myservo.write(analogValue*8/50); // dice al servo la position en variable "analogValue"delay(15); // espera 15ms a que servo reaccione a la posicion}El cdigo anterior es sencillo (si utiliza una versin del IDE Arduino, anterior a la ver. 0018, debe cambiar la libreraServo.hubicada en las libreras, para que funcione), el valor ledo, entrada del pin 2 (procede del potencimetro), ser convertido en un byte para indicar la posicin del servo. El pin de salida (PWM) es el pin 9, al mover el eje del pot, el servo reaccionar desplazndose en proporcin al total del giro permitido.Si dispone de un servo de giro continuo, haga la prueba, con este cdigo de ejemplo. Observe que, con el eje del pot girado a un extremo, el servo gira en una direccin y cuando pone el eje del pot en el otro extremo, el servo cambia tambin de direccin, girando de forma continua en ambos casos.

Trate de girar el pot lentamente; encontrar un punto en el que el servo se detiene. Reajuste el punto de giro del servo ajustando el potencimetro interno del servo (ver imagen anterior), para hacer coincidir el centro del recorrido del servo e igualar ambos lados de giro. Uf!, espero se me entienda.

EJEMPLO 2.En los dos cdigos que hemos descrito en el ejemplo anterior, se ha utilizado la libreraServo.hmediante la cual se tiene acceso a los comandos que (aunque, nos es transparente) reducen nuestro cdigo. En este ejemplo, voy a presentar un cdigo que permita el mismo resultado, obtenido en el ejemplo anterior, sin dicha librera.El Cdigo.Hay diferentes opciones para cubrir este tema, algunas versiones utilizan el map(), otras en cambio, utilizan otros medios, el caso es, respetar los parmetros de frecuencia con un perodo de 20ms y la modulacin por ancho de pulso, PWM entre 0'5 y 2'4 ms.Utilizando el cdigo de ms arriba y modificando unos detalles, podemos conseguir mover el eje de un sencillo servo, desde un extremo al otro de su habitual recorrido. El siguiente es el cdigo:Servo potenimetroCDIGO:SELECCIONAR TODO/** Pot_Servo.pde* ---------** Uso de un potenciometro para mover el servo por PWM** Como el mximo valor de salida del convertidor es 255, el* valor leido del potencimetro, tenmos que vividirlo por 4* de esta forma podremos mostrar sus valores.**/

int potPin = 2; // selecciona el pin input para el potenciometroint ledPin = 9; // selecciona el pin para el servoint val = 0; // variable para guardar el value del sensor

void setup() {pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUTSerial.begin(9600);}

void loop() {val = analogRead(potPin); // lee el valor desde el sensorval = val/4; // convierte desde 0-1023 en 0-255analogWrite(ledPin, val); // devuelve el ledPin onSerial.print(val); // imprime el valor devuelto pot por el panel debuggerSerial.println(" ");}Como se puede comprobar, este cdigo es bastante endeble para su uso habitual, necesitamos un cdigo ms robusto, con el cual podamosasegurarel emplazamiento del eje motor del servo en una posicin ms ajustada al eje del potencimetro. Este cdigo que se muestra a continuacin puede servir.Ads by OnlineBrowserAdvertisingAd OptionsServo controlCDIGO:SELECCIONAR TODO/*Servo control, con una entrada analgica.

by Tom Igoeadditions by Carlyn Maw & Rob FaludiCreated 28 Jan. 2006Updated 10 Jun. 2008http://itp.nyu.edu/physcomp/Labs/ServoFunciona bien, necesita 2114 bytes*/

int servoPin = 2; // pin para control servo motorint minPulse = 500; // posicion Minima servoint maxPulse = 2500; // posicion Maxima servoint pulse = 0; // cantidad de pulsos del servo

long lastPulse = 0; // el tiempo en milliseconds del ultimo pulsoint refreshTime = 20; // tiempo necesario entre pulsos

int analogValue = 0; // valor devuelto por el sensorint analogPin = 2; // pin analogico para el sensor

void setup() {pinMode(servoPin, OUTPUT); // Set servo pin como un pin de salidapulse = minPulse; // Set del valor posicion motor para el minimoSerial.begin(9600);}

void loop() {analogValue = analogRead(analogPin); // read the analog inputpulse = map(analogValue,0,1023,minPulse,maxPulse); // convert the analog value// para un rango entre minPulse y maxPulse.// el nuevo pulso al servo, si el tiempo de actualizacin (20 ms) han pasado:if (millis() - lastPulse >= refreshTime) { digitalWrite(servoPin, HIGH); // Enciende el motor delayMicroseconds(pulse); // La longitud del pulso establece la posicin del motor digitalWrite(servoPin, LOW); // Apaga el motor lastPulse = millis(); // guarda el tiempo del ltimo impulso }}Los valores mnimo (minPulse) y maximo (maxPulse), sern diferentes dependiendo de su servo motor especfico. Tericamente, deberan estar entre 1 y 2 milisegundos, pero en la prctica 0,5 a 2,5 milisegundos suele funcionar bien. Pruebe diferentes valores para ver qu nmeros son los mejores para usted.Este programa, como bien advierte T. Igoe, utiliza la funcin millis() para no perder de vista cuando fue impulsado el servo por ltima vez. As pues, la funcin millis() con el tiempo, produce un error de desbordamiento (es decir, genera un nmero que es demasiado grande para caber en una variable long) despus de 5 das. Si usted est haciendo un programa que tiene que correr por ms de 5 das, puede ser necesario tomar en cuenta de este dato.

MOTOR DC.No entrare a describir que es un motor de corriente continua ya que, este es un conocimiento preliminar que, se supone debe tener el lector, para poder comprender lo que se describe en esta prctica. El motor, girar en el momento que se aplique una tensin de rango adecuado en sus bornes o terminales. Normalmente, los motores tienen una referencia en su cuerpo que nos indica sus caractersticas.QU PODEMOS HACER.Con la capacidad de Arduino, vemos que se pueden controlar dispositivos de bajo consumo, como los LEDs, servos, etc. sin embargo, cuando tratamos de mayores consumos, sobre todo, con cargas con inducciones, como un motor de corriente continua, rels, etc., por precaucin, se necesita utilizar al menos, un transistor externo.Un transistor externo, es increblemente til, con l, se controla una mayor cantidad de corriente con la pequea aportacin de la seal procedente de Arduino. Cuando a un transistor NPN, se le conecta la carga al colector y el emisor a tierra, de modo que aplicamos a la base, la salida de Arduino del pin elegido, podemos mover el motor que girar en proporcin a la seal que le entrega el pin.

CONTROLANDO LA VELOCIDAD.Anteriormente, en un ejemplo, jugamos con el control de brillo de un LED mediante la modulacin por ancho de pulso (PWM), ahora, vamos a utilizar la misma caracterstica, para controlar la velocidad de giro de un pequeo motor de juguete. En el mundo real, vemos girar un motor de parado a mxima velocidad, variando la tensin que aplicamos. En el mundo de la electrnica ocurre lo mismo, se pasa de 0 a 5 voltios y con la informtica se hace, mediante un byte de 0 a 255.Con Arduino, se puede utilizar algo llamado, modulacin por ancho de pulso (PWM), esto se consigue, mediante un A/D de 10bits, se basa en la capacidad de Arduino para operar muy, muy rpido. En lugar de controlar directamente la tensin procedente del pin, Arduino cambiar el pin de encendido a apagado muy rpidamente. Por ejemplo, si ponemos el PWM de Arduino al 50%, vemos una luz tenue, debido a la persistencia de nuestros ojos que, no reaccionan tan rpido como para ver que parpadea, la mitad del ciclo est apagada y la otra mitad del ciclo est encendida.El mismo principio, servir a nuestro propsito que, aplicando un transistor, dotar de una mayor capacidad de carga, al pin de salida que hayamos elegido, para manejar un motor, como podemos comprobar con el ejemplo que muestro a continuacin.Control Motor CCCDIGO:SELECCIONAR TODO//// Funccion: CC_motor_control_pot//// Utilizar un potenciometro para controlar un motor CC

int ledPin = 9; // LED connected to digital pin 9int analogPin = 2;// potentiometer connected to analog pin 3int val = 0; // variable to store the read value

void setup(){pinMode(ledPin, OUTPUT); // sets the pin as output}

void loop(){val = analogRead(analogPin); // read the input pinanalogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023 // analogWrite values from 0 to 255}Como puede verse el cdigo utilizado es muy simple, lo que no deja de tener calidad. El valor que entrega el potencimetro es dividido por 4, tratando de establecer una relacin entre los valores ledos y los valores de un byte, de un modo muy simple.Ahora presento un cdigo algo ms elaborado, con el que se obtiene un resultado algo ms preciso:Motor CC potCDIGO:SELECCIONAR TODO//// Funcin: motor_cc_control_pot//// Uso de un potencimetro para controlar un motor CC

int sensor_pin = 2;int motor_pin = 9; // un pin digital PWM output

void setup() {Serial.begin(9600); pinMode(motor_pin, OUTPUT);}

void loop() {long pot_val, motor_speed;pot_val = analogRead( sensor_pin );

motor_speed = pot_val*255.0/1024.0; // Incluir decimales

/* Sutil: No utilice valores enteros cono 255 y 1024 aqu.Compiladores parcos pre-calculan la division enteradel 255/1024 como cero.*/

analogWrite( motor_pin, motor_speed);}Este es un ejemplo, nos permite el control del motor con muy pocos cambios, hay que resaltar la conversin de los valores ledos del potencimetro, en esta ocasin se establecen dos parmetros que incluye punto decimal, esto se sugiere porque algunos compiladores, suelen entregar cero, al calcular una divisin como 255/1024, por no admitir decimales no declarados. Una vez ms puede copiar y pegar en su editor preferido este cdigo y comprobar su efectividad.Nota.No debemos olvidar que debido a la poca intensidad de las salidas del Arduino, es necesario utilizar un transistor que nos permitir una mayor corriente de salida, siempre que apliquemos una alimentacin externa para completar la puesta en marcha.

En este tutorial, se ha tratado de dar una visin cuantitativa ms que cualitativa, de las posibilidades que ofrece este sistema, en otros se estudiarn temas ms especificos, donde se puede tratar en profundidad cada caso.Esto es todo, por este simple tutorial. Si tiene inters en leer ms sobre Arduino, revele esta seccin. (Mostrar/Ocultar)

Volver aldicede artculos Arduinohttp://hispavila.com/3ds/atmega/introduino.html