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, 22 de enero de 2025, 13:55 |
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
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
Memoria
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.
- 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.
5. Actividades
- 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.
- Idem anterior pero agregando un pulsador que varíe la velocidad de la secuencia.
- 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.
- En el menú Archivo -> Preferencias habilitar la opción “Mostrar resultado detallado durante la compilación”.
- En el menú Sketch -> Verificar/Compilar.
- 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.