Arduino Con C++
Arduino Con C++
Sesión 2
• Comunicación serie Sesión 4
• E/S analógica • Control de cargas
• Bibliotecas de terceros • Motores
21 Abr. 28 Abr.
Placas Arduino
IDE Arduino
Lenguaje C++
Salida digital
E/S Digital Retardos
Entrada digital. Pulsadores
Plataforma Arduino
Plataforma de código abierto hardware y
software
IDE basado en C++
• Gran potencia
• Orientado a conectividad total
• Herramientas de programación en desarrollo
Especificaciones ESP32 ESP8266 Arduino UNO
Número de núcleos 2 1 1
WIFI SI SI NO
Bluetooth SI NO NO
Pines GPIO 36 17 14
Entradas analógicas 18 1 6
Salidas analógicas 2 0 0
• Placa Arduino UNO
Arduino starter • Multitud de componentes
kit • Ideal para empezar
Arduino UNO
• Procesador ATmega328P
• 20 pines E/S digital
• 6 Entradas analógicas
• 6 salidas PWM
• Pines de tensión y tierra
• Conexión USB
IDE Arduino
• Open source
• Multiplataforma
• Versión portable
• https://www.arduino.cc/en/Main/Software
Conexión al PC
• Interfaz USB
• Puerto COM virtual
• Placas originales
• Placas compatibles
• Descargar drivers
Bajo nivel Alto nivel
• Código máquina •C
• Ensamblador • Python
Lenguajes de
programación Específicos Programación
• PHP por bloques
• SQL • AppInventor
• ArduinoBlocks
Evolución de C
setup() loop()
nombreFuncion(param1,param2,...,paramN);
Array Objeto
if switch
while for
Estructura condicional if – else
do{
instrucciones a ejecutar
}while(condicion);
Bucle for
Reutilización de código
Declaración:
void controlSalida(int pin, bool sentido){
if(sentido){
digitalWrite(pin,HIGH);
}
}
Llamada:
• controlSalida(3,true);
pinMode(pin, función)
• Define la función del pin
• Normalmente en setup()
• Función: INPUT, OUTPUT, INPUT_PULLUP
Entrada - digitalRead(pin)
digitalWrite(pin, estado)
• Establece el estado de un pin de salida
• Nivel alto: 1, HIGH, true
• Nivel bajo: 0, LOW, false
TEMPORIZACIÓN
delay(milisegundos)
• Espera el tiempo pasado como argumento
• Bloquea la ejecución del programa (se pueden perder eventos)
• delayMicroseconds(microsegundos) para tiempos más pequeños
millis()
• Devuelve los milisegundos transcurridos desde el inicio del sketch en UINT
• Misma funcionalidad que con delay() sin dejar de atender el sistema
• Desbordamiento al cabo de un tiempo en función del tipo de variable usado
Temporización con millis()
Bibliotecas de terceros
Interfaces de comunicación
Serial.available()
Serial.read()
• Lee un carácter recibido por el puerto serie
• El dato leído se elimina del buffer de entrada
• Devuelve un valor de tipo char
Serial.write(carácter)
Serial.print(dato)
Puerto Serie II • Envía un dato complejo por el puerto serie
• cadena, número, variable, etc.
Serial.println(dato)
analogWrite(pin, CT)
• Entrega en el pin una onda PWM
• Ciclo de trabajo (CT) entre 0 y 255
• Solo los pines marcados con ~ (3, 5, 6, 9, 10, 11)
Elementos analógicos
• Potenciómetro
• Joystick
• LDR
• LM35
Sistema de iluminación automática
Control de iluminación PWM
for(int i=0;i<256;i++){
analogWrite(salida,i);
delay(1);
}
for(int i=255;i>=0;i--){
analogWrite(salida,i);
delay(1);
}
Bibliotecas
• Ficheros desarrollados por terceros
• Incluyen ejemplos de uso
• Gestor de librerías
• Directiva #include
Sensor de Tª DHT11
• Sensor de bajo coste
• Humedad y temperatura
• Poco preciso (±2 ºC)
• Conexión one-wire
• Salida en colector abierto
Uso de sensor DHT11
#include <DHT.h>
DHT dht(DHTPin, DHTTYPE);
//iniciar en setup()
dht.begin();
//realizar lecturas
float h = dht.readHumidity();
float t = dht.readTemperature();
Ejercicios
Enviar cuenta por puerto serie
Control de climatización
BUS I2C
• Bus de comunicación serie síncrono M/S
• Dos señales con resistencias de pull-up
• SCL para reloj (pin A4)
• SDA para transmisión de datos bidireccional
(pin A5)
• Hasta 112 dispositivos
• Pantallas, sensores, expansores, ADC…
I2C scanner
• Busca dispositivos
conectados
• Devuelve la dirección
• Útil cuando se desconoce
la dirección
BMP180
• Sensor de presión, temperatura y altura
• Evolución de BMP085
• Conexión I2C en la dirección 0x77
• Presión: 300~1100 hPa. Precisión: 0.02 hPa
• Temperatura: -40 ~ 85°C. Precisión: 2 ºC
• Alternativas: DHT11, DHT22, BMP280, BME280
Uso de sensor BMP180
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;
//iniciar en setup()
bmp.begin();
//realizar lecturas
float t = dht.readTemperature();
float h = dht.readPressure();
float p = dht.readAltitude();
Display LCD
1602
• Display alfanumérico
• 2 filas x 16 columnas
• Retroiluminado
• Necesita de 7 a 11 pines
Adaptador
I2C
• Permite conexión con solo
2 pines
• Incorporado a adquirido
por separado
• Control de contraste
• Ajuste de dirección
• Control de
retroiluminación
• Liqu
Biblioteca LiquidCrystalI2C
Frank de Brabander
Función Descripción
LiquidCrystal_I2C(Add,c,r) Crea una instancia de la clase
init() Inicializa el display LCD
clear() Borra la pantalla y sitúa el cursor en la posición 0,0
setCursor(col, row) Coloca el cursor en la posición col, row
print(text) Escribe un texto en la posición actual
printf(text) Imprime texto formateado
scrollDisplayLeft() Desplaza el texto en pantalla a la izquierda
scrollDisplayRight() Desplaza el texto en pantalla a la derecha
backlight() / noBacklight() Activa / desactiva la retroiluminación del display
createChar (dir, datos) Crea un carácter personalizado en la RAM del display
Ejemplo de uso LCD 1602
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
Servomotor
Relés
• Libres de tensión
• Grandes cargas
• Solo control ON / OFF
Control de Transistores
cargas de • Solo CC
• Limitación de potencia
Drivers
• Transistores integrados
• Montaje más simple
• Limitaciones de potencia
Relé
• Circuito electromagnético
• Mecánico
• Libre de tensión
• No se puede activar directamente
• Módulo Relé
Transistor
Interruptor electrónico
• Conexión directa al micro
• Tensiones de CC
• Unir tierras de las fuentes
Tres terminales
• Emisor
• Base
• Colector
Cargas Inductivas
• Se puede destruir el transistor
• Diodo en antiparalelo
• Relés, motores, etc.
Drivers
• Transistores integrados
• ULN2003 /ULN2803
• L293 / L298
• Control del sentido de giro
• Control con un pin
Motor de • Control de velocidad con PWM
• Transistor o driver ULN2003
corriente continua • Sentido del giro cambiando polaridad
• Dos pines
• Driver L293
Motor paso a paso
• Control con 4 pines
• Se indica el número de pasos
• Ajuste preciso
• Stepper 28BYJ-48
• Placa con driver
• 2048 pasos / vuelta
Servo
• Permite ajustar el ángulo de posicionamiento
• Control mediante un único pin
• No necesita driver
• Microservo SG90
• Pequeños robots
Control de servomotor
#include <Servo.h>
Servo servo1; // crear objeto Servo
// En setup()
servo1.attach(9); // servo en pin 9
servo1.write(0); //posicionar en 0º
servo1.write(180); //posicionar en 180º
Ejercicios
Control bombilla relé
Control motor CC
Control Stepper