Mostrando entradas con la etiqueta Arduino. Mostrar todas las entradas
Mostrando entradas con la etiqueta Arduino. Mostrar todas las entradas

8 ene 2013

El coche con control remoto usando Arduino ya está aquí

Ya he hablado de diferentes elementos y cómo utilizarlos con nuestro Arduino. Experimentos con un sensor de distancias, con un receptor de infrarrojos para la comunicación, arranque, parada e inversión de giro en motores... Todo ello destinado a utilizarlos en el coche que hoy os muestro. Ha sido una larga espera hasta tener a disposición todos los elementos necesarios (ya que la gran mayoría proceden de China), sin embargo, el montaje y programación han resultado sencillos. Ahora que tengo un mejor conocimiento de Arduino, puedo decir que me ha impresionado su sencillez, gracias en buena parte al gran trabajo de la gran comunidad que tiene detrás y que proporciona librerías, documenta proyectos... Y hubiese sido más sencillo y rápido la construcción de éste coche de haberme percatado antes de los problemas que provocaban un funcionamiento incorrecto, ésto es, el ruido generado por los motores y la utilización de una sola fuente de alimentación para el circuito.
El aspecto final del coche se muestra a continuación

Aspecto final del coche con control remoto

En la siguiente imagen podéis apreciar también el mando que utilizo para controlarlo
Conjunto de mando a distancia y coche

Por último mostraros una vista más detallada del frontal del vehículo, en el que se puede apreciar el servo sobre el cuál reside el sensor de distancia
Parte frontal del coche en la que se encuentra el servo y el sensor de distancias

Y una última que muestra las conexiones de la placa de prototipos
Placa de prototipos con las conexiones realizadas
El funcionamiento es el siguiente:
Con el mando a distancia podemos enviar diferentes señales en función del botón pulsado. Estas señales son leídas utilizando el receptor de infrarrojos e interpretadas por Arduino, para realizar la acción oportuna. Las diferentes acciones son (por ahora), avance recto, avance recto lento, giro a derechas y giro a izquierdas. Esto se consigue controlando individualmente la velocidad de cada uno de los motores (mediante PWM). Al mismo tiempo, cuando el vehículo se encuentra en movimiento, el sensor de distancia chequea si hay algún objeto cercano, en cuyo caso, para evitar la colisión, se procede a tomar la decisión de modificar el sentido de avance del coche. Como el sensor de distancias "ve" a los objetos que tiene justamente enfrente (tiene un ángulo de visión pequeño), se ha optado por colocarlo encima de un servo que permita girarlo, haciendo un barrido en función del sentido del movimiento del coche. Todas estas acciones se pueden ver en el vídeo a continuación
El código utilizado para lograr todo esto es:

/*Proyecto ArduinoCar utiliza un mando a distancia convencional para 
controlar remotamente un coche a escala con Arduino. Para el movimiento
del coche se utilizan motores independientes en la rueda izquierda (control
de la rueda conectado al pin 5) y la rueda derecha (control conectado al 6)
*/
//Libreria para comunicacion por infrarrojos
#include <NECIRrcv.h>
//Libreria para el sensor de distancias
#include <Ultrasonic.h>
//Libreria para el servo
#include <Servo.h>
//Pin al que se conecta el receptor infrarrojos
#define IRPIN 7
//Codigos del mando a distancia
#define OFF 3877142272
#define ON 4278222592
#define UNO 3893853952
#define DOS 3910565632
#define TRES 3927277312
//Inicializacion del sensor de ultrasonidos (trigger, echo)
Ultrasonic ultrasonic (8,9);
//Inicializacion del receptor infrarrojos
NECIRrcv ir(IRPIN);
//Inicializacion del servo
Servo servo;
//Variables globales a utilizar
unsigned long ircode;
unsigned long codigo;
//Setup inicial
void setup() {
  ir.begin() ;
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  //Control del servo conectado al pin 13
  servo.attach(13);
  servo.write(90);
}
//Bucle que se ejecutara continuamente
void loop() {
  //Si hay datos recibidos desde el control remoto, los capturamos
  while (ir.available()) {
    ircode = ir.read();
    //Dependiendo del boton pulsado realizamos una determinada accion
    switch (ircode){
    case OFF:
    //Paramos el coche
    codigo=OFF;
    digitalWrite(5,LOW);
    digitalWrite(6,LOW);
    //El servo apunta al frente
    servo.write(90);
    break;
    case ON:
    codigo=ON;
    //El coche avanza recto
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
    servo.write(90);
    break;
    case UNO:
    //El coche tuerce a la izquierda
    codigo=UNO;
    analogWrite(5,160);
    digitalWrite(6,HIGH);
    //El servo apunta a la izquierda
    servo.write(150);
    break;
    case DOS:
    //El coche avanza recto a menor velocidad
    codigo=DOS;
    analogWrite(5,200);
    analogWrite(6,200);
    servo.write(90);
    break;
    case TRES:
    //El coche tuerce hacia la derecha
    codigo=TRES;
    analogWrite(6,160);
    digitalWrite(5,HIGH);
    //El servo apunta a la derecha
    servo.write(30);
    break;
    }
  }
  //Si detecta algun obstaculo a menos de 20 centimetros
  if (((ultrasonic.Ranging(CM))<=20) && (codigo!=OFF)){
    if (codigo==UNO){
      //Si el coche estaba torciendo hacia la izquierda, comienza a girar a la derecha
      digitalWrite(5,HIGH);
      digitalWrite(6,LOW);
      delay(200);
      //Devuelve el estado que tuviese
      analogWrite(5,160);
      digitalWrite(6,HIGH);
    }else if (codigo==TRES){
      //Si el coche estaba torciendo hacia la derecha, comienza a girar a la izquierda
      digitalWrite(5,LOW);
      digitalWrite(6,HIGH);
      delay(200);
      analogWrite(6,160);
      digitalWrite(5,HIGH);
    }else if (ircode==ON || ircode==DOS){
      //Si el coche avanzaba recto, realiza un giro mayor
      digitalWrite(5,LOW);
      digitalWrite(6,HIGH);
      delay(400);
      if (ircode==ON){
        digitalWrite(5,HIGH);
        digitalWrite(6,HIGH);
      }else {
        analogWrite(5,200);
        analogWrite(6,200);
      }
    }
  }
}

Por último comentar que tengo previsto introducir varias mejoras, alguna de ellas creo que bastante interesantes. La primera de ellas pasa por incluir la posibilidad de inversión de giro (aún no disponible debido a falta de componentes), la segunda consiste en añadir otro tipo de comunicación remota, bien por bluetooth o bien por radiofrecuencia, ya que la comunicación infrarroja tiene bastantes limitaciones y un último proyecto en el que Arduino utiliza sistema GPS para realizar un trazado de forma autónoma. Os mantendré informados...

5 ene 2013

Interfaces de comunicación SPI, I2C, UART...

Para alguien que comienza a utilizar Arduino puede resultar algo complejo entender las diferencias entre los diferentes tipos de interfaces de comunicación (y protocolos asociados). Existe mucha información relativa a cada protocolo, pero entender la relación que existe entre ellos quizá no sea trivial. Es por esto que me parece adecuado resaltar unos comentarios que he leído en un foro. El enlace podéis encontrarlo aquí. Esta vez me voy a tomar la molestia de traducirlo (algo resumido), ya que se encuentra en inglés.
capcom pregunta: Como aficionado novel a la electrónica, he oído los términos USART, UART, RS232, USB, SPI, I2C, TTL, etc. Entiendo que están basados en comunicación entre dispositivos, ordenadores, periféricos, etc. Tengo conocimientos básicos sobre cómo trabajan, pero tengo dificultad entendiendo cómo están relacionados. Por ejemplo, ¿es UART un subconjunto de USART? ¿Cuál es la diferencia entre RS232 y Serial?
Pregunta a la cuál, un tal stevenh, que en mi opinión parece bastante entendido en la materia, responde:
Serial es la palabra clave de todo lo que es "multiplexación de la división temporal". Indica que el dato es enviado en función del tiempo, un bit detrás de otro. Todos los protocolos que has nombrado son protocolos serie. 
UART (recepción-transmisión asíncrona universal) es uno de los protocolos serie más utilizados. La mayoría de los controladores disponen de hardware UART. Usa una línea de datos simple para transmitir y otra para recibir datos. Comúnmente, 8 bits de datos son transmitidos de la siguiente forma: un bit de inicio, a nivel bajo, 8 bits de datos y un bit de parada a nivel alto. El bit de inicio a nivel bajo y el de parada a nivel alto indican que siempre hay una transmisión de alto a bajo para iniciar la transmisión. Eso es lo que describe a UART. Puedes utilizarlo a 3.3V ó 5V, dependiendo de lo que tu microcontrolador use. Note que los microcontroladores que quieren comunicarse via UART tienen que fijar la velocidad de transmisión, la tasa de bits, ya que sólo disponen del bit de flanco de bajada para sincronizar. Esto es llamado comunicación asíncrona.
Para largas distancias de comunicación, utilizar 5V en UART no es fiable, por lo que es convertido a un voltaje más alto de +12V para un 0 lógico y -12V para un 1. El formato de datos se conserva. Es entonces cuando tienes RS-232.
La dependencia de la coordinación es uno de los puntos negros de UART, y la solución es USART (recepción-transmisión síncrona/asíncrona universal). Puede actuar igual que UART, pero también como un protocolo síncrono. Sincronización de datos, pero también del reloj. En cada pulso de reloj se indica al receptor que capte el bit. Los protocolos sincronizados, por contra, necesitan un mayor ancho de banda, como en el caso de Manchester encoding, o de una conexión extra para el reloj, como es el caso de SPI o I2C.
SPI es otro protocolo serie muy simple. Un maestro envia la señal de reloj, y tras cada pulso de reloj envía un bit al esclavo y recibe un bit de éste. Los nombres de las señales son por tanto SCK para el reloj, MOSI para el Maestro Out Esclavo In, y MISO para Maestro In Esclavo Out. Para controlar más de un esclavo es preciso utilizar SS (selección de esclavo).
I2C es un protocolo síncrono, y es el primero que vemos con algo "inteligente". I2C usa solo 2 cables, uno para el reloj (SCL) y otro para el dato (SDA). Esto significa que el maestro y el esclavo envían datos por el mismo cable, el cuál es controlado por el maestro, que crea la señal de reloj. I2C no utiliza selección de esclavo, sino direccionamiento. El primer byte enviado por el maestro se forma de 7 bits para la dirección (así que permite comunicarse con hasta 127 dispositivos) y un bit de lectura/escritura, indicando si el proximo byte vendrá desde el maestro o el esclavo. Tras cada byte recibido se envía una confirmación con el noveno pulso de reloj. Si el maestro quiere recibir datos solo genera pulsos de reloj. El esclavo tiene que cuidar que el próximo bit esté listo cuando la señal de reloj es dada.
Dos o más señales a través del mismo cable pueden causar conflicto, y ocurrirían problemas si un dispositivo envía un 1 lógico al mismo tiempo que otro envía un 0. Por tanto el bus es "cableado" con dos resistencia para poner el bus a nivel alto, y los dispositivos envían niveles bajos. Si quieren enviar un nivel alto simplemente lo comunican al bus.
TTL no es un protocolo. Es una vieja terminología para lógica digital, pero el nombre es a menudo utilizado para referirse a 5V de alimentación.
Reseñar que el protocolo TWI es I2C. El nombre TWI  es utilizado a veces (en la web de Arduino, por ejemplo), pero significan lo mismo.
Ejemplos de dispositivos que utilizan este protocolo son unos módulos que, conectándolos a un display lcd, permiten controlarlos por comunicación serie, ahorrando considerablemente el número de salida de Arduino necesarias. 

2 ene 2013

Reducción del ruido eléctrico generado por los motores

Una de las principales razones por la que adquirí Arduino fue la de poder realizar proyectos electrónicos físicamente (y sin mucho gasto). Y ciertamente creo que estoy aprendiendo mucho, ya que un proyecto real te permite contrastar los conocimientos teóricos y comprobar que, muchas veces, existen imprevistos que no han sido tenidos en cuenta. Éste ha sido mi caso cuando he comenzado a montar y programar el coche con control remoto. 
Resulta que probando cada uno de los componentes por separado (motor, recepción infrarroja, servomotor y sensor de distancias) todo funcionaba a las mil maravillas, así que era de esperar que a la hora de juntarlo todo también fuese a funcionar. Nada más lejos de la realidad. En cuanto ponía los motores en funcionamiento, era incapaz de llevar a cabo control remoto e incluso la propia tarjeta arduino parecía tener un comportamiento extraño. Mi primera explicación pasaba por un fallo en la programación, pero todo parecía correcto, posteriormente pensé que quizá no tuviese suficiente alimentación, lo cuál también descarté y así anduve buscando posibles errores hasta que me percaté de la posibilidad de que fuesen los propios motores los que introdujesen en el propio circuito un ruido eléctrico. Encontrado el error llegó la hora de buscar soluciones. Para ello hay varias, desde muy sencillas hasta algo más complejas. El artículo que más me ha interesado con posibles soluciones lo podéis encontrar aquí (también me parece interesante éste otro). En el podemos ver cómo colocar condensadores en los terminales del motor, existiendo diferentes configuraciones, cada una de las cuales proporciona un nivel de filtrado diferente. También hay que tener muy presente el tratar de utilizar cables de mucha sección y poca longitud, así como utilizar alimentaciones diferentes para señales y potencia (utilizar alimentación diferente para Arduino y motores).

16 dic 2012

Arranque, parada e inversión de giro en motores con Arduino

Continúo mi andadura con Arduino y más concretamente con el proyecto relacionado con el coche. Una de las piezas claves de este son los motores que lo mueven, por lo que resulta vital poder controlarlos. A simple vista, se plantea un problema, y es que, según indican en la propia web de Arduino la corriente máxima que pueden suministrar la salidas de nuestra arduino uno es de 40 mA, que resultará insuficiente para mover un motor. Tal es así que puede resultar incluso perjudicial para nuestra tarjeta arduino el intentar conectarlo directamente, pudiendo dañar partes de ésta. Es por ello que necesitamos incluir algún otro elemento. Aquí es donde entra en juego el transistor, que actúa como interruptor. En el mercado de la electrónica existen multitud de ellos, por lo que es conveniente saber elegir cuál puede valer. Los factores más importantes a tener en cuenta son el voltaje máximo que admiten y la corriente máxima. Transistores bipolares como el 2N2222A (admite hasta 800 mA) o TIP 120 (que admite hasta 5A) son suficientes para los motores pequeños que usaré. Información relativa a cómo controlarlo hay mucha. Mis referencias son ésta y ésta otra. Además, al disponer en nuestro arduino de salidas PWM, podemos controlar la velocidad del motor.
Ahora bien, ¿qué ocurre si queremos realizar inversión de giro?. Las referencias indicadas anteriormente explican cómo controlar el motor para que gire en un sólo sentido. Si queremos además inversión de giro podemos utilizar un puente en H, denominado HBridge. Uno de los puentes más populares para pequeños proyectos es el L293D, del cuál podéis encontrar un tutorial sobre cómo usarlo con arduino aquí. Como yo no disponía de ningún HBridge a mano, he decido crearlo por mi cuenta. El montaje en la breadboard lo podéis encontrar en la imagen a continuación
Esquema de conexionado para crear un HBridge

Básicamente consiste en cuatro transistores de los cuales dos de ellos estarán activos para que el motor gire en un sentido y los otros dos para que lo haga en el contrario. En la imagen también se pueden apreciar 4 diodos que son muy importantes para proteger el circuito. Tratan de evitar el efecto flyback, que básicamente consiste en unos voltajes de pico muy elevados que se producen cuando se intenta un cambio de giro en un motor. Si queréis saber más al respecto podéis consultar en la wikipedia.
A continuación os dejo un vídeo de mis montajes en funcionamiento, el primero de ellos controlando el motor remotamente y el segundo realizando inversiones de giro (perdonad por la escasa calidad)

Y por último comentar que he realizado mi primer proyecto en Fritzing. Incluyo aquí el enlace.

Aumentando el número de salidas digitales en Arduino

En la reciente entrada "primeros experimentos con Arduino" hice un montaje que utilizaba un display 7 segmentos de 4 dígitos para mostrar datos numéricos. En ese momento tuve que utilizar una salida digital para cada uno de los siete segmentos del display y dos salidas más para controlar el dígito en el que se iba a mostrar el dato numérico. Evidentemente necesitar 9 salidas digitales para mostrar datos por un display 7 segmentos no es nada eficiente, teniendo en cuenta que nuestro arduino cuenta con sólo 14. Es por esto que necesitaba de algún método para poder utilizar el display con menos salidas digitales. Y es aquí donde entró en juego el registro de desplazamiento, que permite conversión de datos serie a paralelo y viceversa. En mi caso disponía de un registro de desplazamiento de serie a paralelo 74HC164D que obtuve (al igual que el display) del despiece de un TDT estropeado. Había olvidado un poco qué misión tenían los registros de desplazamiento, así que entre la múltiple información existente en internet utilicé ésta y éste tutorial de arduino con 7 segmentos para refrescarme la memoria. Con el circuito integrado a mano y con los conocimientos de su funcionamiento sólo restaba por realizar la programación en Arduino.  Y tengo que decir que más fácil es imposible, ya que existe una función en Arduino denominada ShiftOut en la cuál indicas cuál salida vas a utilizar como pin de datos, cuál como reloj, el orden (si usando el bit más significativo o el menos) y el byte que que quieres pasar. De esta forma, en lugar de 7 salidas digitales hemos utilizado 2. Un ejemplo de código pasa a ser algo tan reducido como

int clockPin=8;
int dataPin=9;
int digito1=11;//Indica la posición en el display del número a mostrar
int digito2=12;
byte cero=255-252;/*Para pintar un 0 en un 7 segmentos hay que enviar un valor binario de 1111110. Como el registro de desplazamiento tiene 8 bits, añadimos un bit más a esa cadena (da igual el valor) y tendremos entonces 11111100, que en decimal se corresponde con el 252. Este sería en principio el valor a enviar por el registro de desplazamiento, pero para el display que estoy utilizando necesito enviar los bits invertidos (un 0 enciende el led y un uno lo apaga), así que el valor a enviar, en binario, es 00000011, que en decimal es el 3 (255-252). Esto mismo hay que hacer para el resto de valores. */
byte uno=255-96;
byte dos=255-109;
byte tres=255-121;
byte cuatro=255-102;
byte cinco=255-182;
byte seis=255-190;
byte siete=255-224;
byte ocho=255-0;
byte nueve=255-230;

void setup(){
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(digito1, OUTPUT);
  pinMode(digito2, OUTPUT);
}
void loop(){
  shiftOut(dataPin,clockPin,LSBFIRST,siete);//Pintamos el valor 7 en el primer dígito
  delay(1000);
  digitalWrite(digito1,LOW);
  digitalWrite(digito2,HIGH);
  shiftOut(dataPin,clockPin,LSBFIRST,uno);//Pintamos el valor 1 en el primer digito
  delay(1000);
  digitalWrite(digito1,HIGH);
  digitalWrite(digito2,LOW);
  shiftOut(dataPin,clockPin,LSBFIRST,cinco);//PIntamos el valor 5 en el segundo dígito
  delay(1000);
  digitalWrite(digito1,HIGH);
  digitalWrite(digito2,LOW);
  shiftOut(dataPin,clockPin,LSBFIRST,cuatro);//Pintamos el valor 4 en el segundo dígito
  delay(1000);
  digitalWrite(digito1,LOW);
  digitalWrite(digito2,HIGH);
}

11 dic 2012

Comunicación infrarroja con Arduino

Del despiece del aparato TDT estropeado obtuve un sensor de infrarrojos, que era una de las piezas vitales que tenía pensado comprar (y de hecho compré) para poder llevar a cabo el proyecto del coche con control remoto con Arduino. Como aún no he recibido el receptor infrarrojos comprado, me he puesto directamente a trastear con el obtenido del TDT. En un principió me chocó no ver el tipo de receptor concreto que era para poder buscar una hoja de características (datasheet). Así que la solución por la que opté fue buscar imágenes de receptores infrarrojos en Internet hasta ver cuál podía corresponder y pronto la búsqueda resultó efectiva. Tenía ante mí a un PL-IRM0101-3. Si bien la documentación que encuentro relacionada con la recepción de infrarrojos usando Arduino no utiliza dicho sensor, sino más bien TSOP 1238 o algo por el estilo, el proceso es bastante similar. En las hojas de características se encuentra un esquemático sobre cómo montar el circuito para recibir señales. Podéis ver la imagen a continuación.
Esquema de montaje del receptor infrarrojos

Con todo listo, comencé a montar el circuito y la primera prueba fue un fracaso. Era incapaz de leer señal alguna, así que revisé el circuito, busqué diferentes librerías para recepción de infrarrojos en Arduino y seguía sin obtener absolutamente nada. Cuando llegué a pensar que el receptor estaba estropeado, pensé en alguna forma de probarlo directamente y fue entonces cuando me topé con un excelente artículo que explica los conceptos de receptores infrarrojos, cómo testearlos, cómo son las señales emitidas por el mando a distancia, cómo son interpretadas por el receptor y evidentemente cómo usarlo. El enlace al magnífico artículo lo podéis encontrar aquí. Como se encuentra en inglés, me parece interesante también destacar uno en castellano, menos detallado quizá pero muy sencillo de entender y que explica qué es el protocolo NEC aquí. Tras testear el receptor infrarrojos comprobé que funcionaba correctamente, así que decidí montar más cuidadosamente el circuito inicial (debía haber algo mal) y esta vez funcionó a la primera. 
Una vez resuelto, me decidí a realizar mi propio programa, que básicamente consiste en recibir las señales del mando a distancia, interpretarlas y mostrar por el display LCD cuál ha sido la tecla pulsada. Podéis ver el vídeo a continuación.

Por cierto, comentar que si compráis un receptor infrarrojos TSOP1838 procedente de DealExtreme (como es mi caso) debéis tener en cuenta que hay un cambio en las patillas del circuito. Más detallado aquí.
Y, aunque me parezca poco usable, cuelgo el código del programa que muestra la tecla pulsada en el display aquí.

9 dic 2012

Primeros experimentos con Arduino

Con el pedido de DealExtreme recibido he podido empezar a realizar experimentos con Arduino. Para empezar, una serie de ejemplos sencillos e incluidos en la propia aplicación de Arduino IDE. Encender un led, hacer que se encienda y apague progresivamente, y algún otro más por el estilo. Posteriormente le ha tocado el turno al display LCD con el controlador HD44780 y las librerías LiquidCrystal, que realmente hacen que programar el display sea cosa de niños. Todas las opciones de mover el cursor, desplazar el display... están incluidas en la librería. Podéis encontrar un esquema de montaje e información al respecto aquí
Arduino controlando un display LCD

Como también recibí un sensor de distancias por ultrasonidos HC-SR04, he decidido combinar ambos elementos basándome en un experimento que podéis encontrar aquí. El proceso de montaje es bastante sencillo y todo ha funcionado a la perfección a la primera. Podéis ver mi montaje en funcionamiento en la siguiente imagen.
Medida de distancia con Arduino, sensor y display LCD

Como todo esto lo he podido hacer sin programar (aunque he tratado de entender todos los programas que he utilizado), he decidido hacer una modificación, consistente en cambiar el display LCD por uno de 7 segmentos que obtuve de un aparato TDT estropeado. Para ello he tenido, en primer lugar, que buscar la hoja de características de dicho display, que resulta ser un 3942AX/BX-XX. Este display tiene 16 pines, si bien para este experimento solo he conectado los correspondientes a dos dígitos (la medida máxima del sensor de ultrasonido es inferior a 100 centímetros). Podéis ver un vídeo del montaje en funcionamiento a continuación

La programación es básica. Leemos la distancia que nos proporciona el sensor de ultrasonidos en centímetros y comprobamos si es menor que 10, en cuyo caso se puede enviar la medida directamente al primer dígito. Si es mayor que nueve, entonces debemos configurar los dos dígitos. Para ello, con el valor obtenido, el valor a mandar al dígito más significativo es el cociente de división de enteros por 10, mientras que al dígito menos significativo se manda el resto de dicha división. Dependiendo del número a enviar se encienden un determinado conjunto de leds. Podéis descargar el código completo aquí. Si queréis más información de displays 7 segmentos clicad aquí.
Comentar también otro experimento que me ha gustado, muy simple, que consiste en una especie de sensor de aparcamiento. Lo podéis encontrar aquí.

22 nov 2012

Fritzing, mucho más que software de diseño de PCB

Últimamente venía pensando que sería interesante para mí adentrarme más en el mundo del diseño de circuitos impresos. Si bien en la carrera estudiamos al respecto, no lo hicímos con gran profundización. Así que me puse manos a la obra y por el camino apareció Fritzing. En el sitio web lo definen, no solo como una herramienta software para el diseño de layouts, sino también como una iniciativa open-source hardware y una comunidad virtual que permite a los usuarios documentar, enseñar y compartir sus proyectos electrónicos. Y bien que lo han conseguido, a tenor de lo que se puede ver en el apartado de proyectos de su sitio web. Cientos y cientos de proyectos electrónicos y muchos de ellos utilizando Arduino, lo cuál me viene en este momento como anillo al dedo.
La herramienta software se encuentra en este momento en fase beta, aunque la he estado probando y no he encontrado problema alguno. Destacar que es realmente sencillo y visual el montar tu circuito virtual y obtener el layout en caso de que queramos crear u ordenar nuestra tarjeta de circuito impreso PCB. Podéis encontrar un videotutorial básico aquí, aunque hay realmente mucha documentación en Internet al respecto. Como punto negativo (a mi modo de ver bastante negativo) decir que no permite la simulación de circuitos. Según indican en su web, la idea es montar el circuito real y, una vez comprobado que funciona, documentarlo mediante Fritzing y obteniendo la PCB si así lo deseamos.
Aspecto visual de la aplicación

15 nov 2012

¿Un coche con control remoto con Arduino? ¡Vamos a intentarlo!

Desde bien pequeño he tenido una gran afición por los coches teledirigidos. Recuerdo perfectamente todos y cada uno de los que he tenido, he incluso siendo ya mayor decidí comprarme uno. Siempre me había interesado por saber cómo están hechos, cómo es posible controlarlo remotamente.
Un buen día, indagando por la web de la Escuela de Ingenierías Industriales de la Unex, descubrí que unos excompañeros míos habían creado un coche con control remoto (podéis encontrar un vídeo aquí)... y me encantó. Quedó en mi recámara la idea de hacer alguno. Y con la reciente adquisición de la tarjeta arduino y unas pequeñas adquisiciones más creo que ese día se acerca. Si observáis el vídeo podréis comprobar que montaron todo desde cero. Yo no llegaré a esos extremos, mi idea está más centrada en la programación de la tarjeta, aunque es evidente que habrá que hacer algo de manualidades. Iré comentando la evolución, espero tenerlo funcionando en un par de meses...
Coche con Arduino

8 nov 2012

Mi Arduino ya está aquí... y qué es Dealextreme

Como comenté hace poco, estaba pensando en adquirir una tarjeta arduino para realizar algunos experimentos. El primero de ellos consistía en utilizar un LCD Hitachi. Pues después de una buena búsqueda de información sobre qué tipo de tarjeta de Arduino me convenía, me decanté por la Arduino Uno, que es básicamente la que más recomiendan para principiantes por su compatibilidad con complementos Arduino, y por la cantidad de información existente sobre ella. Aunque aún necesito algunas cosillas más (están en camino) ya tengo las piezas más importantes, como muestro en la siguiente imagen
Placa Arduino Uno, display Hitachi HD44780 y potenciómetro

Mencionar que los precios de estas tarjetas y sus accesorios (sensores y placas) pueden variar ostensiblemente dependiendo del proveedor. Aunque no es mi objetivo publicitar nada en este blog, ni obtengo ningún beneficio por ello, me siento en la tesitura de hablaros sobre Dealextreme, que es una web de ventas de gadgets a precios realmente interesantes. Proceden de china y al respecto tengo que comentar un punto a favor y otro en contra. Como punto a favor citar que los gastos de envío son totalmente gratuitos. Por contra el tiempo que tarda en llegar el producto puede estar comprendido entre 2 y 4 semanas (esto lo digo por experiencia propia). Como ejemplo de referencia de precios citar que la Arduino Uno la puedes encontrar en tiendas web habituales (incluyendo IVA y portes) por no menos de 30 €, mientras que una copia idéntica la tienes en Dealextreme por 15.20 $ (la puedes encontrar aquí). También disponen de multitud de sensores y complementos que seguro tendré en cuenta en próximas compras.
Aunque podría intentar realizar alguna prueba, estoy esperando una regleta de conexión, así que mientras tanto me centraré en la programación software. 

5 nov 2012

Pensando en adquirir una tarjeta de Arduino

Arduino es una plataforma libre de hardware y software. Las placas hardware pueden ser hechas a mano o compradas directamente y el software para programarlas está disponible para Linux, Windows y Mac. Está muy extendida, y dispone de una gran cantidad de complementos que podemos adquirir para darle vida.
Placa Arduino MEGA

Como ya dispongo de un display LCD basado en el controlador Hitachi HD44780 que usé en mi etapa de estudios, he pensado que quizá podría trastear un poco y programar la placa para controlar el LCD (en su día lo hice, pero utilizando el puerto paralelo de un PC). 
Display LCD HD44780 de Hitachi

Para realizar todo esto tengo que elegir entre las diferentes placas de Arduino existentes, aunque para el control del LCD una placa básica puede ser suficiente. Con precios que varían desde los 16 € hasta los 90 € aproximadamente, ofrecen una buena variedad. 
Una búsqueda por internet ha servido para cerciorarme de que esta idea que acabo de tener ya ha sido llevada a cabo. Se puede realizar utilizando un PIC o utilizando Arduino. También podemos ver el funcionamiento en un vídeo aquí, así como un tutorial desde la propia web de Arduino 
Como manual para la programación del controlador del LCD voy a utilizar el tutorial que mi exprofesor Jose Ignacio Suárez Marcelo preparó para los alumnos.
Esquema de conexión entre la placa y el LCD
Os mantendré informados en cuanto tenga novedades.