Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Puertos de Arduino

Arduino UNO es una placa impresa con un microcontrolador ATmega3281.

Los pines digitales 0-13 son de entrada y salida (digitalRead(HIGH/LOW); digitalWrite(pin, HIGH/LOW)).
Los puertos PWM (Pulse-Width Modulation) permiten simular una salida analógica (analogWrite(pin, valor)) escribiendo valores entre [0-255].
El puerto 13 incluye una resistencia de 220 Ω y está conectado al único actuador programable de la placa, el LED ‘L’.
Los puertos 0 y 1 se usan para comunicaciones RX (recepción) y TX (transmisión) -actividad indicada por los correspondientes LEDs- por lo que no se recomienda su uso para nada más. Cuando se usan los puertos 0 y 1 para comunicaciones se recomienda desconectar el USB -que se usa para lo mismo- para evitar problemas.

Los puertos con particularidades son: 0 y 1 (Rx,Tx); 2 y 3 (interrupciones); 3, 5, 6, 9, 10 y 11 (PWM); 10, 11, 12 y 13** (SPI); A4 y A5 / SDA* y SCL* (TWI); AREF (Voltaje de referencia); Reset; IOREF (V. referencia IC); No conectado*.
(*) Puertos aparecidos en UNO R3, y que no están etiquetados en la placa.
(**) Incluye una resistencia de 220 Ω.

Los pines analógicos 0-5 son de entrada (analogRead()) y leen valores entre [0-1023].
El voltaje de entrada es de 5V (USB) o 7V-12V (pin Vin y conector jack). El GND de arriba es digital (DGND). Generalmente se usan un GND analógico (AGND) para la BreadBoard.

Comenzando con Arduino

Tras mucho tiempo queriendo hacerlo, por fin me he iniciado en el mundo de Arduino.

Arduino es una placa de Hardware libre que te permite iniciarte en el mundo de los microcontroladores para hacer todo tipo de proyectos, entre ellos (mi primer “gran” objetivo) un robot. La placa se programa en una versión reducida de C, con un IDE propio (libre).
El IDE viene con un montón de ejemplos que permiten aprender a programar la placa.

Recomiendo el Arduino Starter Kit.
Hay quien opina que no es una buena opción básicamente porque puedes obtener lo mismo en e-bay a mitad de precio.
Sin embargo esto solo es cierto si:
1. Sabes lo que tienes que comprar (tienes experiencia en electrónica)
2. Tienes tiempo suficiente para pasar en e-bay buscando cada componente y esperando a que llegue
El paquete tiene una presentación estupenda, un montón de componentes variados y un magnífico libro.
Obviamente el libro se puede bajar de la red, pero me parece que vale la pena tenerlo en formato árboles muertos ya que es una gran guía para dar los primeros pasos y me resulta cómodo tenerlo encima de la mesa y poder ver los diagramas con mis hijos.
En todo caso es un libro muy recomendable para los que como yo no tengáis una gran experiencia con la electrónica.

Cuando se va aprendiendo a manejar el arduino entonces ya uno sabe qué es lo que quiere exactamente comprar y entonces e-bay es una gran opción.

Por otra parte, recomiendo el uso de Fritzing para diseñar “el mundo real”. Los dibujos que incluyo están realizados con esta herramienta.

Para instalar en GNU/Linux hacemos:

aptitude install arduino
aptitude install fritzing libqt4-sql-sqlite1

Hay muchísima documentación al respecto así que me limitaré a poner los ejemplos más básicos que he ido realizando.
El equivalente al “Hola Mundo” se llama “Blink” y es un programa que hace parpadear un LED (procedente de los ejemplos del IDE):

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13; // Cambiar a 12 para utilizar el led del BB

// the setup routine runs once when you press reset:
void setup() {   
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

Y el diseño para el mundo real sería este (realizado con Fritzing):

Otra versión: