LABORATORIO 3 - DF - FCEyN - UBA
1er cuatrimestre - 2023
¿Qué es Arduino? Plataforma de creación de electrónica [Link]
Placa Arduino Software de programación
(Arduino IDE)
Hardware y software abiertos
El proyecto nació en 2003, impulsado por
estudiantes del Instituto de Diseño
Interactivo de Ivrea, Italia, con el fin de
facilitar el acceso y uso de electrónica y
programación.
¿Cómo funciona?
Entradas → Procesamiento → Salida
Analógicas (conversor ADC) Interruptores
Microprocesador
Digitales (lógicas) Control de motores
Comunicación con PC
Señales
...
Arduino UNO: conversor ADC
Precio Aproximado $ 4000
• Conversor Analógico Digital (ADC) 10 bits
• 6 Entradas analógicas Rango [0 ,5] V
• Sample rate aprox. 10 kS/s (0.1 ms de tiempo de medición)
10 bit → 2^10 = 1024 divisiones
analogRead() devuelve un número entre 0 y 1023
Donde 0 es 0 V y 1023 es Vref
• Se puede usar un voltaje de referencia distinto al 5 V por defecto en el pin Vref
• Con Vref = 5 V, la sensibilidad es de 4.9 mV
Arduino UNO Pines del microcontrolador
Comunicación Serie
• Microcontrolador: (USB)
Atmel ATmega328p 8bits,
clock: 16MHz 32KB Flash + potencia
(τ ~ 60 ns) + lenta
Comunicación con
otros periféricos
+ rápida
Alimentación (salida) - potencia
Pulse Width Modulation
Entradas analógicas
(ADC) Interrupciones externas
0 V < Vin < 5 V Comunicación Serie
14 Entradas/Salidas digitales
6 salidas PWM
Para programar otros microcontroladores → (5V – 20 mA)
Arduino UNO Elementos sobre la placa
Alimentación (entrada)
Fuente externa
Otras placas de Arduino
Due Mega
Microcontrolador de 32 Bits Microcontrolador ATmega2560.
Tiene 54 entradas/salidas digitales 54 entradas/salidas digitales 16 (PWM)
12 entradas analógicas, 16 entradas analógicas
Funcionan todos los módulos basados en 3.3V Tiene 6 interrupciones externas.
(no soporta 5V) 4 UART 2 buses modos PWI ,1 SPI
2 buses TWI, SPI y 4 UART
Dos puerto USB para controlar periféricos.
• Más barato
• Necesita regulador externo para la tensión de entrada
Nano • Necesita soldar los pines
Programar Arduino UNO
Programa de placa Arduino + Serial Plot
Instalación / Programación Adicionales
Guía de instalación para Windows y otros Aprendiendo Arduino (Curso)
[Link] [Link]
[Link]
(seguir las instrucciones)
Algo sobre microcontroladores
Guía para la instalación específica de UNO [Link]
[Link] [Link]
Guía para la programación (en Español) [Link]
[Link] del-atmega8/
Programar Arduino UNO 1. Conectar Arduino via USB
2. Seleccionar placa y puerto
¡A diferencia de Python, cuando se crea una variable hay que determinar su tipo!
Programar Todas las líneas terminan en ; excepto bucles y condicionales
Arduino UNO
(similar a C++)
Aquí se declaran las variables
globales y su tipo
Ej.: int led = 9;
Aquí se determinan algunos
parámetros ligados al
microcontrolador, los pines y
las comunicaciones
Aquí se especifica la rutina que se
ejecutará a modo de Loop
8 bits = 1 byte
Tipos de variables
int → 2 bytes (2^16 posibilidades: 2^15 ~ 32k + signo)
long → 4 bytes
float → 4 bytes
double → en Arduino UNO es igual que float
Las operaciones con enteros (int, long) son EXACTAS!
boolean → 1 byte. True o False
Control de tiempos
delay() → Tiempo de espera, en milisegundos. Bloquea el código
millis() → Milisegundos desde el encendido de la placa
Comunicación con Arduino UNO: Serial
[Link]
La información entra en una cola (buffer)
Serial Monitor o Plot
Void Loop en ejecución que se borra cuando se produce la lectura.
Se configura en void setup() {} Configuración: BAUD (bits por segundo) data parity stop bits
Típ. 9600 8 bits no 1 stop bit
[Link](9600) Por defecto
5V
0V
Comunicación con Arduino UNO: Serial
[Link]() → Transforma el contenido en caracteres ASCII (1 byte por caracter)
Ej.: [Link](78) envía dos bytes con los números 55 y 56
[Link]() → Igual pero agrega un caracter de salto de línea (\n)
[Link]() → Envía un byte con el contenido
[Link](78) envía un byte con el número 78 (comunicación más rápida)
La pantalla muestra “N” porque Serial Monitor asume ASCII
Representación hexadecimal
• Es útil para representar un byte.
• 1 byte = 8 bit → 28 = 256 posibilidades:
• 4 bit → 24 = 16 posibilidades:
• 0, 1, 2, ... , 9, A, B, C, D, E, F
• 2 hex = 162 = 256 posibilidades
• Ejemplo: Uso en representación de colores
(256 colores por canal RGB)
DECIMAL 9 11 255
HEX 09 0B FF
Control por Ancho de Pulso PWM (pulse width modulation)
Se varia el ciclo de trabajo (Duty Cycle). Hay dos periodos fijos para elegir.
En dispositivos con respuesta temporal lenta, permite regular intensidades de
luz, velocidades de giro, mediante una señal digital.
Acondicionamiento de señal utilizando un divisor resistivo
Arduino mide solo señales positivas. Entonces hay que sumar un offset
a señales < 0 V. ¿Cómo lo hacemos?
5V
Una señal de 2 Vpp va entre 1 y -1 V
V1 C R
V2
Acondicionada se mueve entre 0 V y 2 V
R Ahora es posible medirla con Arduino
Resistencias pull-up o pull-down
El estado lógico (tensión) de una entrada desconectada no está definido.
INDEFINIDO PULL-UP EXTERNO PULL-UP INTERNO PULL-DOWN INTERNO
Control de Arduino con Python
[Link]
Algunos sensores
Temperatura Sensor corriente
Sensor ultrasonido Sensor de movimiento Sensor Touch capacitivo
y Humedad (efecto hall)
Sensor monóxido Sensor Luz Sensor intensidad
Sensor Humedad Suelo Celda de carga
de carbono Fotoresistor de luz
Actividades
1. Encender un LED externo cada cierto tiempo. Limitar la corriente < 20 mA!
1. [Link]
2. Blink without [Link]
2. Leer una señal analógica con un potenciómetro
1. [Link]
3. Controlar intensidad de LED usando una señal PWM + potenciómetro
1. Usando analogWrite()
4. Medir con el osciloscopio el tren de bits en la comunicación Serie e
interpretar.
5. Acondicionar una señal del generador de funciones para poder medirla
con Arduino.
Cómo destruir un Arduino….o todo lo que hay que evitar!!!
• Voltaje inverso • Exceso de corriente
• Sobrevoltaje • Otras...
Voltaje inverso (V<0 V) aplicado a la Sobrevoltaje (V>5 V) aplicado a un pin
alimentación (VIN), a las entradas/salidas analógico/digital o a un pin de alimentación
digitales o analógicas (VIN)
Cómo destruir un Arduino….o todo lo que hay que evitar!!!
Cortocircuito en placa! Sobrecorriente en pin digital (> 20 mA)
Para evitarla, usar siempre una R>=220 ohm
para este tipo de conexión
Algunos ejemplos [Link]
Arduino UNO
• Leer una señal analógica
Conectar la salida de un potenciómetro a una entrada analógica
Permitira poner la entrada A0 a una tensión intermedia entre 0 y 5 V.
Utilizar un potenciómetro de 10 kW
Leer una señal Analógica
Leer una tensión
Destello de un LED Blink
Desvanecimiento de un LED Fading a LED
Mediante PWM Salidas digitales con ~