La placa Baby Orangutan de Pololu está desarrollada con base en el microcontrolador ATMega328P lo que quiere decir que posee el mismo microcontrolador que las placas Arduino Uno y Arduino Nano. Un procesador de 8 bits que puede funcionar hasta un máximo de 20 MHz y del cual se encuentra disponible una basta cantidad de documentos, tutoriales y aplicaciones.baby_orangutan

En este documento se presentará paso a paso una guía para que pueda programar su placa Baby Orangutan a través del IDE Arduino y además aspectos esenciales para su programación.


Configuración del Entorno

En esta sección configuramos el entorno de desarrollo de Arduino para que permita desarrollar desarrollar proyectos para el Baby Orangutan o el 3PI Robot de Pololu. En primer lugar debe dirigirse a la página oficial de Arduino (ver referencia [1]), descargar e instalar la última versión disponible del software, cabe destacar que al momento de escribir este documento, la versión de Arduino IDE que vamos a utilizar es la 1.8.6.

Una vez instalado el IDE Arduino, debe descargar el archivo comprimido cuyo link se deja en la referencia [2], el cual contiene los ficheros necesarios para que nuestro IDE pueda trabajar con Baby Orangutan. Una vez descargado el archivo, debe descomprimir su contenido (la carpeta de nombre libpololu-arduino) en el directorio Mis Documentos/Arduino/hardware, en caso de que las carpetas Arduino o ** hardware** no existan, debe crearlas.

Nota que la carpeta descomprimida debe quedar exactamente en la ruta que se muestra en la siguiente figura.

biblioteca_pololu

Ahora puedes ejecutar tu Arduino IDE (o reiniciarlo en caso de que lo estés ejecutando), luego, en el menú Herramientas puedes dirigirte hasta el apartado Placas y confirmar si ahora aparecen allá las diferentes placas de Pololu tal cual como se muestra en la figura a continuación.

placa_orangutan

Teniendo en cuenta lo realizado hasta ahora, deberías poder ver lo siguiente en tu entorno de Arduino:

  • Puedes encontrar las tarjetas Baby Orangutan en el menú Placa (Boards).
  • Encontrarás en la lista de programadores, el programador oficial de Pololu: Pololu USB AVR Programmer, para que lo tengas en cuenta a la hora de programar (a continuación veremos una forma alternativa a este programador).
  • Si seleccionas una placa Baby Orangutan deberías poder encontrar ejemplos referentes a dichas placas (ver imagen inferior).

Finalmente se muestra la siguiente imagen con la ruta de acceso a los ejemplos disponibles para las placas Baby Orangutan, es importante que te tomes tu tiempo para analizar los diferentes ejemplos si no estás familiarizado con la programación de dichas tarjetas.

ejemplos_oranguta


Usar Arduino Uno como Programador del Baby Orangutan

A continuación describiremos brevemente como utilizar un Arduino UNO como un programador ISP.

En el IDE Arduino disponemos de un programa que emula el comportamiento de un programador ISP, dicho programa puede encontrarse en la pestaña que se muestra en la siguiente figura.

arduino_isp

Con el programa compilado y cargado en la placa Arduino Uno podemos proceder a realizar el cableado, es muy importante tener en cuenta varias cosas:

La programación a través de ISP se basa en la comunicación serial que funciona de forma idéntica a la interfaz SPI, es decir, una comunicación tipo Maestro-Esclavo, cuando se dispone de un conector de 6 pines para programación ISP, el estandar indica una distribución de pines como se muestra en la siguiente figura:

isp_pinout

La conexión entre el Arduino cuando funciona como programador ISP y el microcontrolador que deseamos programar se muestra en la siguiente tabla.

Pin Arduino Pin ISP del Microcontrolador Objetivo
D10 RST (Reset)
D11 MOSI
D12 MISO
D13 SCK

Una vez está conectado el programador Arduino as ISP y la placa Baby Orangutan, simplemente creamos un nuevo archivo, indicamos en el IDE que escribiremos un programa para la placa deseada y finalmente vamos al menú Herramientas y como programador seleccionamos la opción “Arduino as ISP” como se muestra en la siguiente figura.

arduino_as_isp

Luego solo habrá que compilar y enviar el programa como cualquier otro sketch a una placa Arduino.


Entrada y Salida Digital

Teniendo en cuenta que lo que buscamos es utilizar el entorno de Arduino como editor, nos vamos a dar cuenta que muchos de los métodos disponibles para las placas oficiales de Arduino, entre ellas las de uso más frecuentes son las de escritura y lectura digital:

Función Descripción
digitalWrite( pin, nivel ) El parámetro pin es un número indicando el pin que deseamos utilizar y nivel es el nivel de tensión que queremos “sacar” por el pin, puede ser HIGH (5 volts) o LOW (0 volts).
digitalRead( pin ) Esta función se utiliza para leer el nivel de tensión presente en el pin indicado por el parámetro pin, los valores devueltos pueden ser HIGH (1) o LOW (0).

 

Ejemplo
Un corto programa de entrada y salida digital se presenta a continuación, el cual pone un tensión alta en el pin digital 7 de la placa por 200 milisegundos y posteriormente lo apaga, en el pin 7 se conecta una resistencia en configuración pull-down y un botón conectado a Vcc.

#define LED 1
#define BUTTON 7

void setup()
{
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
}

void loop()
{
if(digitalRead(BUTTON))
{
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(200);
}
}

 

Pines del Baby Orangutan
Ahora es importante comenzar a tener en cuenta la disposición de pines de los que podemos hacer uso en la placa Baby Orangutan. Hay que tener en cuenta que disponemos de pocos pines, pero también de varias ventajas al usar esta tarjeta, por ejemplo el puente H integrado (una gran cualidad para programar nuestro robots), un potenciometro integrado a un pin analógico.

En la siguiente imagen se presenta un esquema de los pines de la placa.

bb_orangutan_pinout

En la siguiente tabla se presentan los pines de los cuales podemos hacer uso y funciones adicionales (un pin puede tener más de una sola función).

Nomenclatura de Pin en el IDE Arduino Función
M1A y M2A Salidas para el motor A
M1B y M2B Salidas para el motor B
0 Pin digital, pin RX para comunicación UART
1 Pin digital, pin TX para comunicación UART
2 Pin digital, pin para interrupción por hardware (INT0)
4 Pin digital
7 Pin digital
8 Pin digital
9 Pin digital
10 Pin digital
12 Pin digital
13 Pin digital
A0, A1, A2, A3, A6 Pines para entrada analógica
A4 Entrada analógica, pin SDA para el protocolo I2C
A5 Entrada analógica, pin SCL para el protocolo I2C
A7 Pin de entrada analógica conectado a un potenciómetro integrado integrado en la tarjeta Baby Orangutan

Puedes buscar directamente información más amplia sobre todas las funciones de los pines del ATmega328P en su hoja de datos e internet. La información de la tabla corresponde a las configuraciones utilizadas más frecuentemente.

Nota: Los pines analógicos del A0 al A5 pueden ser pines de entrada analógica como se mencionó anteriormente o también como pines de entrada/salida digitales (ver referencia [3]).


Comunicación Serial

También es muy adecuado (y afortunado) que al igual que las funciones de escritura y lectura digital (digitalWrite y digitalRead) también podamos usar la comunicación serial tal como lo hacemos con otras placas Arduino.

Disponemos del módulo serial que dispone de una buena cantidad de métodos y opciones (cuyo obejtivo no es profundizar aquí), toda la información de utilidad sobre la comunicación serial de las plcas Arduino se puede encontrar en la referencia [4].

Ejemplo
Como ejemplo vamos a presentar una modificación del código mostrado en la lectura y escritura digital, sin embargo en esta ocasión se enviará el texto Presionaste el Botón en lugar de prender un LED.

#define BUTTON 7

void setup()
{
pinMode(BUTTON, INPUT);
Serial.begin(9600);
}

void loop()
{
if(digitalRead(BUTTON))
{
Serial.println("Botón Presionado");
delay(100);
}
}

Debe tener presente que para la comunicación serial con la placa Baby Orangutan se utilizan los pines digitales 0 (RX) y 1 (TX).


Entrada Analógica

Al igual que con las funciones y objetos anteriores, podemos aprovechar también la compatibilidad de la placa Baby Orangutan en cuanto a la lectura de valores analógicos con la función analogRead( pin ) que retorna un valor entero entre 0 y 1023 que guarda correspondecia con el valor de tensión presente en el pin denotado por el parámetro pin que puede ser cualquiera entre A0 y A7, teniendo en cuenta que puede ocurrir el caso en el que los pines A0 y A1 estén siendo usados para comunicación serial en cuyo caso no se deberá hacer uso de su capacidad de conversión analógica a digital.

Nota: También debe tener en cuenta siempre que en el pin A7 hay un potenciómetro conectado en la propia placa.

A continuación se presenta un sencillo ejemplo de un programa que envía a través del puerto serial (como se vio en la sección anterior) el valor digital del voltaje presente en la entrada analógica A7 (donde está conectado el potenciómetro) cada 2 segundos.

void setup()
{
Serial.begin(9600);
}

void loop()
{
int data = 0;
data = analogRead(A7);
Serial.print("Vout = ");
Serial.println(data);

delay(1000);
}

Si hacemos uso del monitor serial del IDE Arduino y variamos la posición del potenciómetro podremos ver un comportamiento como el que se muestra en la siguiente figura.

salida_serial


Manejo de Motores

La placa Baby Orangutan cuanta con una gran ventaja y es el hecho de tener integrado su propio puente H para el manejo de motores (específicamente, dos motores pueden ser conectados). El uso de los motores con Baby O. es muy sencillo, considerando que solo necesitamos usar 3 métodos si utilizamos la biblioteca OrangutanMotors.h que está disponible cuando hemos configurado el entorno Arduino con el soporte para dispositivos de Pololu.

Para controlar el/los motor(es) es necesario instaciar un objeto de tipo OrangutanMotors, los métodos utilizados son estáticos (en seguida veremos con utilizarlos). Las funciones reciben un parámetro que indica la velocidad y dirección del motor en cuestión, el valor numérico estará entre -255 y 255, donde el signo indica la dirección y la magnitud indica la velocidad. Cuando el valor está por debajo de -255 (i.e. -512) el motor asumirá la máxima velocidad que en esa dirección es 255 y lo mismo ocurre para el límite superior.

Métodos

  • .setM1Speed(int speed): Configura la velocidad (maginitud del parámetro speed) y su dirección (signo del parámetro speed) del motor A.
  • .setM2Speed(int speed): Configura la velocidad (maginitud del parámetro speed) y su dirección (signo del parámetro speed) del motor B.
  • .setSpeeds(int m1Speed, int m2Speed): Configura la velocidad y dirección de los motores conectados al Baby Orangutan

Para ejemplificar el uso de motores, se prosenta a continuación el código de un programa que hace uso del potenciómetro que está conectado al pin analófico 7 y con el cual manejaremos la dirección y velocidad de los dos motores que tendremos conectados a la placa Baby Orangutan y que en este caso les daremos direcciones opuestas (por el signo – que ponemos a una de las velocidades).

#include <OrangutanMotors.h>

 

OrangutanMotors motors;

void setup()
{
}

void loop()
{
int pot = analogRead(A7);
int velocidad = (512-pot)/2;
motors.setSpeeds(velocidad, -velocidad);
delay(50);
}

Referencias

[1] Descargar IDE Arduino
[2] Descargar Bibliotecas de Pololu
[3] Guía de Usuario Baby Orangutan Pololu
[4] Comunicación serial con placas Arduino


Esto ha sido todo por ahora, espero que esta información te resulte útil y en caso de ser así, ayúdanos a compartirla para que la información llegue a más personas.

Author: Julio César Echeverri Marulanda
Author: Isabel Cristina Cardona S.

Anuncios