Archivo de la etiqueta: coche

2014-15. INICIACIÓN A ARDUINO. SERVOMOTOR

Cabecera entradas blog

SERVOMOTOR ARDUINO


Conexión de un servo a la placa de Arduino

En este tutorial vamos a ver el funcionamiento de un servomotor y como podemos usarlo con Arduino. En este caso usaremos un microServo. El servomotor tiene 3 cables, Alimentación , Masa y la señal.

Los colores son los siguientes:

  • Rojo – Alimentación(Normalmente 5 V aunque pueden ser mas)
  • Negro o Marrón -Masa
  • Blanco o Naranja – Señal de control (pulso enviado al servomotor)

1

Básicamente un servomotor es un motor de corriente continua con un potenciometro que le permite saber la posición en la que se encuentra y así poder controlarla.
Para controlar el servomotor se le envía pulsos cada 20 ms es decir 50Hz. La anchura del pulso es lo que codifica el angulo de giro , es decir lo que se conoce como PWM, codificación por ancho de pulso. Esta anchura varia según el servomotor pero normalmente va entre 0.5 y 2.5 ms aunque pueden variar.
Dependiendo del tamaño del servo y su consumo es posible que no puedas alimentarlo desde tu placa arduino, en ese caso es necesario una fuente de 5V independiente para poder moverlo,en mi caso uso un microservo por lo que consume poca corriente y se puede alimentar directamente por el Arduino . Sobre el peso que pueden levantar se puede deducir con el par del servo. Normalmente los servos indican el par o torque que pueden realizar para un servo estándar suele ser 5kg/cm es decir puede mover 5kg a 1 cm de distancia. En caso de querer moverlo a 5 cm el servo solo podrá mover 1kg.
A continuación vamos a ver como controlar en Arduino un servomotor. Para ello iniciamos la aplicación de Arduino y pulsamos en sketch->importar libreria ->Servo
2
Con esto incorporamos la libreria, aunque tambien podemos escribir el texto directamente. Una vez echo esto ya podemos usar la libreria Servo.
Ahora vamos a definir nuestro objeto Servo, esto es como definir una variable de tipo int o float, pero un poco mas completa con funciones y campos que le pertenecen. Para ponemos Servo miServo.
3
Con el objeto servo definido vamos a pasar a inicializarlo, para ello usaremos la función attach(pin,min,max) los parámetros de esta función son el pin, casi cualquier pin del Arduino puede controlar un Servomotor y no es necesario que sea uno de los PWM. En las placas que no son la Mega la utilización de la librería Servo inhabilita el PWM en los pines 9 y 10 se usen estos pines o no como servo. Los dos siguientes parámetros son opcionales y indican cual es el ancho de pulso en microsegundos para 0º y para 180º por defecto 544 y 2400.
En este ejemplo usaremos el pin 9.
4
El siguiente paso consiste en enviarle el ancho de pulso al servo con el angulo que queremos. En esta primera parte le enviaremos un angulo constante por ejemplo 90º. Y lo visualizaremos el ancho de pulso en el osciloscopio. Donde en la parte inferior se puede ver el ancho de pulso y como el periodo es de 20 ms aproximadamente.
5
Tener en cuenta que no hemos puesto ningún delay por lo que el objeto servo enviara el pulso cada 20 ms independientemente de nuestro programa.
Para poder interactuar con el servo vamos a incorporar unas funciones que nos permitan moverlo desde el PC. Para ello usaremos el puerto Serie conectado al usb y le mandaremos la letra ‘a’ cuando querramos aumentar 10º o la letra ‘z’ cuando querramos decrementar 10º. Ademas con la función constrain nos aseguramos de que el valor no supere los 180 ni baje de los 0.
6
Para las conexiones simplemente la masa conectada con la del Arduino, la señal del servo(Naranja o blanco) al pin 9 y la alimentación si tenéis un servo pequeño al pin +5v del Arduino , sino tenéis que alimentarlo con alguna fuente externa.
NOSOTROS INCORPORAREMOS UN CÓDIGO MÁS SENCILLO PARA NUESTRA PRÁCTICA:
#include <Servo.h>
Servo Servo_coche;
int potpin = 0;
int val;
void setup()
{
Servo_coche.attach(9);
}
void loop()
{
for(int i=0;i<=180;i=i+1)
{
Servo_coche.write(i);
delay(100);
}
for(int i=180;i>=0;i=i-1)
{
Servo_base.write(i);
delay(100);}
}
Anuncios

2014-15. INICIACIÓN A ARDUINO. SENSOR ULTRASONIDOS Y LCD

Cabecera entradas blog

SENSOR DE ULTRASONIDOS Y PANTALLA DE CRISTAL LÍQUIDO LCD


Midiendo distancias con un sensor de ultrasonidos

Un complemento imprescindible para muchos de robots o vehículos controlados a distancia es un sensor que nos permita saber la distancia libre de obstáculos para movernos. Dependerá de las distancias con las que pretendamos interactuar:

  • Si las distancias van a ser pequeñas podemos emplear sensores de infrarrojos,
  • si queremos movernos en áreas grandes y poder medir distancias en un rango de varios metros el complemento perfecto es unsensor de ultrasonidos.

PRINCIPIO DE FUNCIONAMIENTO

Funciona exactamente igual que un radar, de hecho es un pequeño radar. Emite un pulso de sonido a una frecuencia tan alta que es imperceptible para el oído humano y cronometra el tiempo que el sonido tarda en llegar a un obstáculo, rebotar y volver al sensor. Como la velocidad de propagación del sonido en el aire es un dato bien conocido (343.2 m/s) echamos mano de una conocidísima formula (e = v * t) y calculamos la distancia recorrida por el sonido. Parece fácil ¿verdad?… por que lo es.

EL SENSOR QUE EMPLEAREMOS

Utilizaremos un sensor de ultrasonidos SKU: SEN136B5B cuyo rango de medida va desde los 3 cm a los 4 m, suficiente para cualquier proyecto de robótica y que tiene la gran ventaja de necesitar un único pin de nuestro Arduino para hacerlo funcionar:

Captura1

A pesar de ser habitual encontrar sensores con cuatro pines (ECHO, TRIGGER, GND, PIN), nosotros trabajaremos en clase con el modelo de 3 pines, concretamente con el de la derecha.

Este componente dispone de 3 pines  (gnd, 5v, sig) Conectaremos los 2 pines de alimentación tal y como indican las leyendas que contienen y el tercero será el que utilicemos para comunicarnos con el sensor. El pin de señal se utilizara tanto como entrada o salida digital. Para solicitar que nos mande la información se le envía un pulso al aparato y este nos regresara una señal y en base a la longitud de la señal averiguaremos  la distancia a la que se encuentra el obstáculo en caso de existir o estar a rango.

¿Como puede funcionar con un solo pin? ¿acaso no necesitamos uno para mandarle una señal y otro para recibir la respuesta?. Pues no, se puede hacer todo por el mismo y de una forma nada complicada lo que también nos servirá, de paso, para disipar una de las dudas más comunes entre los principiantes: la inamovilidad de la declaración de pines como entrada o salidas.

En todos los ejemplos de código que nos encontraremos en la web oficial de Arduino y en las demás se utiliza el bloque setup() del Sketch para hacer declaraciones pinMode() y establecer los pines que vayamos a utilizar como entradas o como salidas. En todos estos ejemplos se busca la sencillez y estas declaraciones no se cambian a lo largo del código y esto da lugar a que muchos usuarios tengan la errónea creencia de que sólo se pueden declarar pines como entradas o salidas en el setup() y que una vez establecido un pin como entrada o salida ya no se puede cambiar…. FALSO.

  1. /* Tecnología 4º ESO y Electrónica 1ºBCHT */
  2. /* Sketch medidor ultrasonico */
  3. /* Utilizaremos un sensor de ultrasonidos SKU: SEN136B5B */
  4. unsigned long pulso; // necesitamos una variable para medir el pulso
  5. float distancia; // otra para calcular la distancia
  6. int pin = 8;  // y otra para el pin
  7. void setup() {
  8. Serial.begin(9600);  // inicializamos el puerto serie
  9. }
  10. void loop()
  11. {
  12.   pinMode(pin, OUTPUT);     // ponemos el pin como salida
  13.   digitalWrite(pin, HIGH);  // lo activamos
  14.   delayMicroseconds(10);    // esperamos 10 microsegundos
  15.   digitalWrite(pin, LOW);   // lo desactivamos
  16.   pinMode(pin, INPUT);      // cambiamos el pin como entrada
  17.   pulso = pulseIn(pin, HIGH);  // medimos el pulso de salida del sensor
  18.   Serial.print(“tiempo = “);   // lo pasamos a milisegundos y lo sacamos por el puerto serie
  19.   Serial.print(float(pulso/1000.0));
  20.   Serial.print(“ms, distancia = “);  // ahora calculamos la distancia en cm  y al puerto serie
  21.   distancia = ((float(pulso/1000.0))*34.32)/2;
  22.   Serial.print(distancia);
  23.   Serial.println(“cm”);
  24.   delay(1000);  // esperamos un segundo antes de hacer una nueva medida
  25. }

Captura2

REFLEXIONES SOBRE ALGUNAS VARIABLES

Dentro del código hay que prestar atención a los distintos tipos de datos ya que trabajamos con un unsigned long y con un float y además tenemos que hacer operaciones entre ellos, lo cual puede ser delicado.

El unsigned long es una variable tipo de dato para enteros sin signo (32 bits), números sin punto decimal. Los enteros largos puede ser tan grandes como 4294967295 y tan pequeños como 0. Son almacenados como 32 bits ( 4 bytes ) de información.

La diferencia entre el unsigned long y el int es que éste último es una variable tipo de datos para enteros, números sin punto decimal. Los enteros pueden ser tan grandes como 32.767 y tan pequeños como -32,768. Estos son almacenados como 16 bits de información.

Float es una variable de datos para números de punto flotante, un número que tiene un punto decimal. Los números de punto flotante son usados frecuentemente para aproximar valores análogos y continuos porque tienen más resolución que los enteros. Los números de tipo float pueden ser tan grandes como 3.4028235E+38 y tan pequeños como -3.4028235E+38. Estos son almacenados como 32 bits (4 bytes) de información.

ESQUEMA DE MONTAJE

Captura3

Conexión pantalla LCD a ARDUINO

Podemos conectar una pantalla de cristal líquido a nuestro Arduino.

Captura4

Esta pantalla funciona gracias al famoso y superconocido chip HD44780 que se utiliza en infinidad de proyectos.
Bien, veamos los pines:

  • VSS que es el pin de negativo o masa o 0 volts o GND.
  • VDD es la alimentación principal de la pantalla y el chip, lleva 5 volts.
  • VO es el contraste de la pantalla, debe conectarse con un potenciometro de unos 10k ohms o una resistencia fija una vez que encontremos el valor deseado de contraste. Tengan en cuenta que si no conectan esto, no verán nada.
  • RS es el selector de registro (Register select).
  • RW es el pin que comanda la lectura/escritura. En nuestro caso siempre estará en 0 (conectado a GND) para que escriba en todo momento.
  • E es enable, habilita la pantalla para recibir información.
  • D0~D3 no los vamos a utilizar. Como pueden ver la pantalla tiene un bus de datos de 8 bits, de D0 a D7. Nosotros solamente utilizaremos 4 bits, de D4 a D7.
  • A y K son los pines del led del backlight de la pantalla. A se conectará a 4 o 5 volts y K a gnd.

En nuestro caso utilizaremos el siguiente conexionado:

  • VSS: a GND.
  • VDD: a 5 volts.
  • VO: Al pin medio de un potenciometro de 10K con sus terminales entre 5v y GND.
  • RS: Pin 11.
  • RW: a GND.
  • E: Pin 12.
  • D0~D3: Sin conectar.
  • D4~D7: pines 7 a 10. (bits de datos).
  • A: A 5 volts pasando por una resistencia de 5K para bajar un poco la luminosidad.
  • K: a GND.

Para comandar la HD44780 utilizamos la librería ya conocida LiquidCrystal.

Captura5

 

 

VIDEO TRABAJO COCHE ELÉCTRICO VERSION 2013

Cabecera entradas blog

VIDEO-PRESENTACIÓN TRABAJO DE COCHE ELÉCTRICO VERSIÓN 2013

Adjunto os dejo el video  que resume el esfuerzo de este grupo de alumnos por conseguir el objetivo planteado, un objetivo más que ambicioso para alumnos que, en muchos de los casos, están iniciando su andadura en la Tecnología en este año.

El trabajo consistía en la construcción de un coche eléctrico, movido a través de corriente contínua y una trasmisión mediante una reductora de poleas. Del mismo modo, debía tener un segundo circuito de alumbrado, para faros delanteros y traseros. Debían responder a la necesidad que el motor impulsada hacia adelante y hacia atrás al conjunto.

El vehículo, igualmente, tendría que contar con un sistema que dotara al conjunto de la capacidad de girar el eje delantero. Por tanto, implementamos un giro mediante sistema hidráulico.

Todo ello, realizado con materiales convencionales y al alcance de todos ellos. Mi más sincera enhorabuena.