Arduino Nano - Leds y Pulsadores

Sitio: Facultad de Ingeniería U.Na.M.
Curso: Computación ET-344
Libro: Arduino Nano - Leds y Pulsadores
Imprimido por: Invitado
Día: miércoles, 3 de julio de 2024, 06:36

1. Objetivo

El objetivo de esta actividad es que los estudiantes logren un primer acercamiento al entorno de Arduino, relacionando de esta manera un programa con elementos físicos.  En este caso pulsadores e indicadores luminosos, que mediante el uso del IDE de Arduino permite vincular la computadora y un programa desarrollado en pseudo C++ con la placa de desarrollo y experimentar con ejemplos prácticos. También se puede observar el efecto de las variaciones de los programas en el funcionamiento del elemento didáctico de manera rápida. Ademas, esta actividad permite que se observen y manejen los efectos de la velocidad de los ciclos de ejecución de los programas.

2. Introducción

El Arduino Nano es un placa, pequeña, completa y apta para protoboard, basada en ATmega328. Se alimenta a través de un conector Mini-B y un cable USB. Nano fue diseñado y es producido por Gravitech.

Especificaciones

Características
Microcontroller Atmel ATmega328
Operating Voltage (logic level) 5 V
Input Voltage (recommended) 7-12 V
Input Voltage (limits) 6-20 V
Digital I/O Pins 14 (of which 6 provide PWM output)
Analog Input Pins 8
DC Current per I/O Pin 40 mA
Flash Memory 32 KB of which 2 KB used by bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz
Dimensions 0.73" x 1.70"
Length 45 mm
Width 18 mm
Weigth 5 g

Alimentación

El Arduino Nano se puede alimentar vía el conector Mini-B USB, fuente de alimentación externa no regulada de 6-20 V (pin 30), o fuente de alimentación externa regulada de 5 V (pin 27). La alimentación conmuta automáticamente a la fuente de mayor tensión.

Memoria

El ATmega328 tiene 32 KB de memoria flash para almacenar código (de los cuales 2 KB se utilizan para el bootloader). Además posee 2 KB de SRAM y 1 KB de EEPROM. (esta memoria es accesible a través de la librería EEPROM).

Input / Output

Cada uno de los 14 pines digitales del Nano pueden ser usados como entrada o salida, usando las funciones pinMode(), digitalWrite() y digitalRead(). Todos trabajan con 5 V. Cada pin puede entregar o recibir un máximo de 40 mA y poseen un resistencia de pull-up interna (desconectada por defecto) de 20-50 kΩ.
Algunos pines poseen además funciones especiales:
  • Serial: 0 (RX) y 1 (TX). Usado para recibir (RX) y transmitirt (TX) datos seriales TTL. Estos pines están conectados a los respectivos pines del integrado FTDI USB-to-TTL Serial chip.
  • Interrupciones Externas : 2 y 3. Estos pines se pueden configurar como disparadores de interrupciones por nivel bajo, flancos ascendentes o descendentes o por cambio de nivel. Ver la función attachInterrupt() para más detalles.
  • PWM: 3, 5, 6, 9, 10, y 11. Ofrecen salida PWM de 8-bit con la función analogWrite().
  • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines soporta comunicación SPI.
  • LED: 13. Existe un LED incorporado conectado al pin digital 13. Cunado el pin está en estado ALTO el LED se enciende y en estado BAJO se apaga.
El Arduino Nano tiene 8 entradas analógicas, cada una con una resolución de 10 bits (1024 valores diferentes). Por defecto miden de GND hasta 5 V, sin embargo se puede cambiar el límite superior del rango usando la función analogReference().

Otros pines especiales
  • I2C: A4 (SDA) y A5 (SCL). Soportan el protocolo de comunicación I2 C (TWI) usando la librería Wire.
  • AREF. Tensión de referencia para las entradas analógicas. Seusa con analogReference().

3. Programación

Los Arduinos se pueden programar en un lenguaje pseudo C++. Se utiliza para ello la IDE de Arduino. La estructura de un programa para arduino (sketch) consta de dos estructuras principales:

setup()

La función setup() se ejecuta cuando se inicia un sketch. Se utiliza para inicializar variables, el modo de los pines, librerías, etc. La función setup() solo se ejecuta por única vez después de cada arranque o reset de la placa Arduino.

loop()

Luego de que se ejecuta la función setup(), encargada de inicializar una serie de valores iniciales, la función loop() hace exactamente lo que su nombre sugiere, y produce un bucle continuo, permitiendo al programa cambiar y responder. Se usa para controlar activamente la placa Arduino.

Variables Globales

Como setup() y loop() son funciones independientes, es decir que no están anidadas ni se invocan mutuamente, la única manera de pasar parámetros de una a otro es a través de variables globales. Debido a esto, cuando programamos en C++ para arduino usamos variables globales.

Serial

Se utiliza para establecer una comunicación entre la placa Arduino y una computadora u otro dispositivo. Todas las placas Arduino tienen por lo menos un puerto serial (también conocido como UART o USART):Serial. Se comunica en los pines 0 (RX) y 1 (TX) así como con la computadora a través del puerto USB. Por eso, si se utiliza esta función, no se puede utilizar también los pines 0 y 1 como entrada/salida digital. Se puede utilizar la herramienta monitor serial, integrada en el entorno de desarrollo, para comunicarse con las placas Arduino.

Ejemplo setup() y loop()

const int buttonPin = 3;

// setup initializes serial and the button pin
void setup()
{
  Serial.begin(9600);
  pinMode(buttonPin, INPUT);
}

// loop checks the button pin each time,
// and will send serial if it is pressed
void loop()
{
  if (digitalRead(buttonPin) == HIGH)
    Serial.write('H');
  else
    Serial.write('L');

  delay(1000);
}

4. Ciruito a implementar.

La cátedra ofrece para la práctica los siguientes elementos:

  • Placa Arduino nano (con cable USB).
  • Leds.
  • Pulsadores.
  • Resistores de 120 - 220 ohm.
  • Placa para conexiones temporales a presión entre circuitos (Protoboard).
  • Cables para conexiones.
Con los que deberá construirse el siguiente circuito:
(Se utilizarán las resistencias de 120 - 220 ohm en lugar de las indicadas)


5. Actividades

  1. Implementar un programa en arduino que secuencie 4 LEDs. Crear una lista circular y una función que se encargue de controlar el encendido de los LEDs.
  2. Idem anterior pero agregando un pulsador que varíe la velocidad de la secuencia.
  3. Similar al anterior pero que la secuencia avance cuando se acciona el pulsador.

6. Ejemplo lista enlazada

//*****************************//
//  Germán Andrés Xander 2018  //
//*****************************//

struct led {
  int numero;
  led *proximo;
};

led *secuencia;
int tiempo=500;
long time=0;

void setup() {
  secuencia = new led[4];
  int i;
  for(i=0; i<4;i++) {
    (secuencia+i)->numero=(i*2)+6;
    pinMode((secuencia+i)->numero,OUTPUT);
    (secuencia+i)->proximo=(secuencia+i+1);
  }
  (secuencia+i-1)->proximo=secuencia;
  
  Serial.begin(9600);
}
 
void loop() {
  if((millis() - time) > tiempo) {
    time = millis();
    Serial.println(secuencia->numero);
    digitalWrite(secuencia->numero,LOW);
    secuencia=secuencia->proximo;
    digitalWrite(secuencia->numero,HIGH);
  }
}

7. Simulador de Arduino

Existen muchos simuladores de placas arduino.

Recomendamos SimulIDE ya que no requiere licencia por ser libre. Además es sencillo y multiplataforma. Hay que recordar que no es un simulador profesional.

“SimulIDE es un simulador simple de circuitos electrónicos en tiempo real, pensado para que estudiantes aprendan y experimenten con circuitos electrónicos simples y microcontroladores, soporta PIC, AVR y Arduino.”

Uso de SimulIDE

Este programa no requiere instalación, basta con descomprimir el archivo descarado y ejecutar “simuli-de.exe” que se encuentra en la carpeta “bin”.

SimulIDE no tiene un compilador por lo que se debe escribir el programa en la IDE de arduino y compilar el archivo binario que luego será usado en SimulIDE. En la IDE de arduino proceda de manera habitual, seleccionando la placa correcta en el menú Herramientas -> Placa. Cuando se quiera probar el programase deberá generar el binario. El procedimiento varía según la versión de la IDE:

  • Acceda al menú Programa -> Exportar Binarios compilados. Los binarios se guardan en la misma carpeta que el sketch (ino). Son archivos con extensión “.hex”.
  • Si la opción anterior no está disponible.
  1. En el menú Archivo -> Preferencias habilitar la opción “Mostrar resultado detallado durante la compilación”.
  2. En el menú Sketch -> Verificar/Compilar.
  3. En la parte inferior de la IDE se muestra la información de compilación. En las últimas lineas se muestra el nombre del binario generado y la ubicación del mismo en un directorio temporal.
En SimulIDE arme su circuito utilizando una placa arduino (1), leds (2), resistores (3), etc. En la sección de interruptores se encuentran los pulsadores. En la pestaña de Propiedades (4) se puede configurar cada componente (color, valor, etc).
Haciendo click derecho sobre la placa Arduino se despliega un menú con la opción Cargar Firmware (5).
En esa opción cargamos el archivo binario (.hex) generado en la IDE de arduino.
Por último corremos la simulación con el botón rojo (6).