AVCB Tema2 BloquesI IOs Digitales

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 47

ARDUINO VIRTUAL EN C Y BLOQUES

TEMA 2
Lenguaje de Bloques I. I/Os digitales.

Curso 20VA77IN015

Marcos Tomás Leirós Otero


ÍNDICE

1. Accesorios para Arduino 1

1.1. Introducción 1

1.2. Escudos 1

1.3. Sensores 6

1.4. Actuadores 11

1.5. Interfaces de E/S 14

1.6. Accesorios 17

1.7. Packs o Kits de Desarrollo 27

1.8. Ejercicio a entregar (Test del tema 2 en Moodle) 27

2. Lenguaje de bloques I 28

2.1. Introducción 28

2.2. Instrucciones de bloque I 28

2.3. Salidas digitales 33

2.3.1 Práctica 2.1 guiada (Led cíclico) 33

2.3.2 Práctica 2.2 semiguiada (Display 7 segmentos, con buzzer) 38

2.4. Entradas digitales 41

2.4.1 Práctica 2.3 guiada (Pulsador simple) 41

2.4.2 Práctica 2.4 guiada (Pulsadores complejo) 42

2.4.3 Práctica 2.5 (Pulsadores con display) 43

2.4.4 Práctica 2.6 semiguiada (Alarma) 44

2.4.5 Práctica 2.7 Starters Arduino (Varios tonos) 46

2.4.6 Práctica 2.8 Voluntaria (Cuenta pulsaciones) 46

3. Ejercicios a entregar 47

4. Ejercicio voluntario 47

Arduino virtual en C y bloques Tema 2 / pág. 2 Marcos Tomás Leirós Otero


1) ACCESORIOS PARA ARDUINO

1.1 INTRODUCCIÓN

En el tema 1 se ha descrito el mundo Arduino, hemos conocido en profundidad el modelo conocido


como UNO, que es el más empleado del mercado, además de estudiar las posibles aplicaciones. Las
aplicaciones de Arduino están muy ligadas a los accesorios disponibles. Vamos a ver seguidamente las
características de todos estos elementos. El conexionado con el Arduino y el uso de muchos de ellos, los iremos
viendo a medida que los usemos en las prácticas, ahora se trata de conocer rápidamente el material que
tenemos disponible en el mundo de Arduino real, sin entrar en mucho detalle.

1.2 ESCUDOS

Se entiende por escudos (Shield) una serie de tarjetas electrónicas que se acoplan o “pinchan” encima
del Arduino y que se conecta directamente a sus entradas/salidas, la instalación es por lo tanto muy cómoda, al
no requerir de cableado. Básicamente existen de dos tipos, uno que sencillamente facilita el montaje o
cableado, y otro que extiende las capacidades.

» W5100, Ethernet shield.

Este escudo añade un interface de red por cable al Arduino, por lo tanto es ideal para aplicaciones de
domótica, podemos crear un servidor web en el propio Arduino, y controlar mediante un navegador web las
entradas/salidas. Seguidamente una pequeña web capaz de encender y apagar una salida del Arduino.

• Voltaje de operación: 5v DC
• Basado en el W5100 Wiznet, compatible con librerías originales
• Velocidad Ethernet: 10/100 Mbps
• Tipo de conector: RJ45
• Compatibles con Arduino UNO, MEGA, Leonardo
• Soporta en Hardware los protocolos TCP, UDP, ICMP, IPv4 ARP, IGMP, PPPoE, Ethernet
• Incluye leds de estado: TX, RX, Full/Half duplex, Collision, Link, Speed
• Incluye Slot para tarjeta micro SD

Arduino virtual en C y bloques Tema 2 / pág. 3 Marcos Tomás Leirós Otero


» Sensor shield v5.

Este escudo facilita enormemente el cableado cuando hay muchos sensores, por ejemplo, a la hora de montar
un coche robot. El motivo es que la placa Arduino tiene pocas tomas de corriente para alimentar los sensores, y
si tenemos muchos tendremos serios problemas para alimentarlos todos con la corriente continua. Sin
embargo, usando este escudo, cada I/O del Arduino tendrá su propio conector de tres pins numerados por las
letras SGV, S es la señal del sensor, G es la masa o negativo, y V es la corriente de alimentación positiva.

• 6 entradas analógicas
• Interfaz I2C
• Interfaz para 14 servos
• Interfaz del módulo bluetooth
• Interfaz APC220 wireless
• Interfaz RS232
• Interfaz módulo tarjeta SD
• Interfaz de comunicación APC220 inalámbrica módulo de RF
• Interfaces 12864 LCD serie y paralelo
• Interfaz sensor de ultrasonidos

» ProtoShield.

Se trata de una placa para facilitar el montaje y cableado de prácticas de laboratorio, es decir, que no se suele
usar para un montaje final de un proyecto. Lleva incorporado encima una pequeña protoboard.

• Prototype Size:7cm x 5.5cm x 2cm


• Mini breadboard size: 4.4 x3.4 x1cm

» L293D, shield controlador de motores DC / PaP, 4 /2 canales.


El Arduino puede controlar directamente pulsadores/interruptores conectados a sus entradas, o un led
conectado a sus salidas, pero no puede activar motores DC directamente, el motivo es obvio, ningún
microcontrolador o microprocesador soporta la potencia eléctrica necesaria para un motor. Por ello, siempre
que se requiera controlar un motor DC o “paso a paso” (stepper), necesitaremos un interface, el escudo L293D

Arduino virtual en C y bloques Tema 2 / pág. 4 Marcos Tomás Leirós Otero


realmente es un interface diseñado en forma de escudo, y permite conectar hasta cuatro motores DC (cuatro
canales), o bien dos motores “paso a paso”, además de otros dos motores servo como extra.

• Voltaje operativo mínimo: 4.5 V


• Voltaje operativo máximo: 36 V
• Máxima corriente: ± 1.2 A (650mA)
• Voltaje lógico: 5V
• Controlador L293D
• Medidas: 70x55x20 mm

» CNC shield v3.

Se trata de una tarjeta de expansión, que sería útil como controlador para máquinas fresadoras tipo CNC,
impresoras 3D, cortadoras laser etc.

• Tensión de alimentación: 12v-36v DC (dependiendo de los controladores utilizados)


• 4 Zócalos compatibles con drivers A4988 y DRV8825
• Compatible con Firmware GRBL 0.8c
• Soporte para 4 ejes (X, Y, Z, A)
• 2 conexiones para finales de carrera para cada eje (6 en total)
• Salida "Spindle enable" y "direction"
• Salida "Coolant enable"

» JoyStick Shield GamePad.

Se trata de un escudo tipo gamepad de videojuegos, además añade otras funcionalidades extra.

Arduino virtual en C y bloques Tema 2 / pág. 5 Marcos Tomás Leirós Otero


• Incorpora nRF24L01 Interface
• Añade Nokia 5110 LCD Interface
• Amplia Bluetooth Interface
• I2C Interface
• Compatible with Arduino
• Operating voltage 3.5V or 5V

NOTA: Hemos visto los escudos más importantes o utilizados, aunque tenemos disponibles otros que no vamos
a describir, pero cuya nomenclatura y/o utilidad se menciona seguidamente para que el lector pueda investigar
sobre ellos:

• EL0496 (Shield Multifunción Expansión)


• EL0436(LCD 1602 con teclado KEYPAD)
• Velleman KA05(Interface de I/Os)
• KEYESTUDIO MAX3232 (Conversor TTL a Puerto Serial Rs232C)
• P4S-347 (Programable Internet de las cosas IOT)

1.3 SENSORES

Existen muchos sistemas de percepción preparados para conectar a las entradas del Arduino, y usarlos
en nuestros proyectos, veamos los sensores más empleados.

» HC-SR04, sensor ultrasónico.

Se trata de un sensor de distancia, la medida la hace emitiendo un sonido ultrasónico y midiendo lo que tarda
en regresar.

• Tensión de alimentación: 5V (4.5V- 6V)


• Consumo: 30 mA típico, (35 mA max)
• Interfaz: VCC, GND, Señal
• Rango: 2 cm a 3 metros
• Ángulo 15º
• LED indicador de medición en curso
• Frequency: 40 kHz for 200 µs
• Tamaño: 30 mm x 20 mm

» SENSOR DE OBSTÁCULOS POR IR.

Se trata de un detector de objetos por proximidad por infrarrojos.

• Alimentación: 3.3 - 5V DC
• Salida OUT nivel 0 / 1

Arduino virtual en C y bloques Tema 2 / pág. 6 Marcos Tomás Leirós Otero


• Ajuste de sensibilidad
• Led de encendido
• Distancia de detección: 2 - 30cm (max60cm)
• Ángulo de detección: 35º
• Indicador led de estado de salida
• Dimensiones: 40x13x8mm

» TCRT5000, módulo sensor seguidor de líneas.

En robótica educativa, es bastante habitual, hacer un coche robot que tenga que seguir una línea, o bien que
no se salga de un círculo. Para tal fin tenemos este sensor, que normalmente se sitúa debajo del robot.

• Fuente de alimentación: 3,3-5V


• Rango: 0.2 mm - 15 mm
• Consumo de corriente 20 mA máx
• Temperatura de funcionamiento 10-30ºC
• Dimensiones de PCB :32 x 14 mm

» DHT22 o AM2302, SENSOR DE TEMPERATURA Y HUMEDAD.

Este sensor utiliza un sensor capacitivo que devuelve una señal digital con la medición. A diferencia del DHT11,
es capaz de medir valores negativos de temperatura y como resolución puede medir hasta décimas de grado.

• Tensión de operación: 3 a 5,5 VDC


• Rango de medición de humedad: 0-100% ±2% de exactitud.
• Rango de medición de temperatura: -40ºC a 80ºC ±0.5º de exactitud.
• Máxima velocidad de muestreo: 2 segundos

» Sensor fotorresistivo LDR de luz.

Mediante este sensor podemos medir o detectar los cambios de luz.

Arduino virtual en C y bloques Tema 2 / pág. 7 Marcos Tomás Leirós Otero


• Detecta el brillo y la intensidad de luz del entorno.
• Sensibilidad ajustable mediante potenciómetro.
• Tensión de funcionamiento: 3,3v a 5v.
• Salida de tensión digital (DO).
• Utiliza LM393 chip comparador, estabilidad de trabajo.

» DS18B20, sonda de temperatura.

Sensor digital de temperatura sumergible.

• Rango –55°C a +100°C (–67°F a +212°F)


• Resolución ajustable de 9 a 12 bits
• Error absoluto típico +- 0,5 ºC
• Tiempo de conversión max. 750 ms
• Almacenamiento no volátil de valores de alarma fijados por usuario.
• Ideal para medidas en sensores remotos.
• Posibilidad de conexión de múltiples sensores DS18b20 a través de un mismo cable de datos
• Voltaje de alimentación: Entre 3.3 y 5.5 Voltios

» VS1838B, sensor IR.

Se trata de un fotodiodo que hace las veces de receptor o sensor de infrarrojos (IR), funciona a 38 Khz,
normalmente para usar con un mando a distancia.

• Tensión: 2,7v a 5,5v DC


• Alcance recepción: 18m - 25m
• Ángulo de recepción: ±45 Grados
• Low Level Voltage: 0,4V
• High Level Voltage: 4,5V
• Frecuencia: 38KHz

» Sensor acústico con Chip LM393.

Se trata detector de sonido, no es más que un micrófono con un pequeño amplificador que permite medir
sonido. Se puede usar en juguetería, sonómetro, sistemas de alarma etc.

Arduino virtual en C y bloques Tema 2 / pág. 8 Marcos Tomás Leirós Otero


• Sensor Acústico de Alta Sensibilidad Ajustable
• Chip LM393
• LED rojo indicador integrado
• Rango de Frecuencia entre 30 y 15000 Hz
• Alimentación 4~6V
• Medidas 32x16x10mm

» MPU-6050 o GY-521, módulo Acelerómetro + Giroscopio.

Aporta un giroscopio y un acelerómetro. Gracias a sus características es un chip muy utilizado en smartphones
y tablets. Este módulo cuenta con un regulador de voltaje para trabajar entre 3v y 5v.

• Alimentación: 3V-5V.
• Corriente de operación: 5mA.
• Comunicación: I2C.
• Convertidor analógico-digital de 16 bits en todos los ejes.
• Escalas del giroscopio: ±250, ±500, ±1000 y ±2000 ° / seg (dps) (programables por el usuario).
• Escalas del acelerómetro: ±2g, ±4g, ±8g y ±16g (programables por el usuario).
• Dimensiones: 20mm. x 215mm. x 2mm.

» GY-271 o QMC5883L, brújula digital.


Se trata de un magnetómetro o brújula / compas digital.

• Voltaje de alimentación de 3,3V - 6V


• Consumo actual de 100μA (standby 2uA)
• Interfaz I2C
• Velocidad de transmisión 400kHz
• Sensibilidad 230-1370 LSB / Gs
• Resolución 0.73-4.35mGs

Arduino virtual en C y bloques Tema 2 / pág. 9 Marcos Tomás Leirós Otero


• Frecuencia de 75Hz
• Medición del campo magnético en tres ejes de ± 8 Gauss con una resolución de 5 millas gauss.
• Interrupción DRDY pin
• Dimensiones de 14 mm x 14 mm

» BMP280, módulo presión barométrica.

Permite al Arduino medir la presión barométrica y la altitud.

• Modelo: GY-BMP280-3.3
• Chip: BMP280.
• Voltaje de alimentación: 3,3v.
• Bajo consumo de energía: 4 μA
• Rango de presión: 300-1100 hPa
• Interfaz de comunicación: I2C o SPI
• Medición: Presión barométrica y altitud

» Módulo final de carrera (switch).

Se trata de un simple pulsador o conmutador accionado mecánicamente por palanca, ideal para detectar un
final de recorrido, útil para brazos mecánicos, impresoras 3d etc.

• Tipo de contacto: SPDT (dos posiciones, NO y NC).


• Incluye LED de activación.

» HC-SR501, sensor PIR, detector de movimiento

Se trata de un pequeño detector de presencia por infrarrojos, es el típicamente usado para las alarmas, lleva
incorporada una lente de Fresnel, que le aporta un rango de detección de 7 metros y un ángulo operativo de
120º.

• Sensor infrarrojo con circuito de control


• Sensibilidad y tiempo ajustables
• Voltaje de funcionamiento: 4.5V- 20V

Arduino virtual en C y bloques Tema 2 / pág. 10 Marcos Tomás Leirós Otero


• Consumo en estado inactivo: <60uA
• Voltaje de salida: 3.3V TTL output
• Intervalo de tiempo: 0,5-200s (ajustable, por defecto 5s ±3%)
• Tiempo de bloque: 2.5s (por defecto)
• Temperatura de trabajo: -20ºC a 70°C.
• Dimensiones: 3,2 x 2,4 x 1,8cm

Existe un modelo en miniatura, el HC-SR505.

» KY-024, sensor de efecto HALL.

Se pueden utilizar para una gran variedad de aplicaciones como controladores de motores, lectura de código
magnético, detección de metales ferrosos, sensor de corriente, sensor de posición y detección de campos
magnéticos. Existe un modelo más sencillo, el KY-003.

• Voltaje de funcionamiento: 3,3v - 24v


• Comparador: LM393
• Led indicador alimentación
• Led indicador salida sensor digital
• Salidas: Analógica y digital
• Salida digital a través de amplificador operacional
• Temperatura de funcionamiento: -25ºC a 85ºC

1.4 ACTUADORES

Existen muchos mecanismos de acción preparados para conectar a las salidas del Arduino y usarlos en
nuestros proyectos, veamos los actuadores más empleados.

» Mini motor DC, modelo 130


Se trata de un motor de corriente continua (DC) muy común en juguetería, ya que permiten una rotación muy
rápida, aunque sin precisión ni control sobre el paro. Requiere interface DC.

• Voltaje de operación: 1.5 V a 6 V


• Corriente DC: 350mA
• Torque max.: 15g/cm

Arduino virtual en C y bloques Tema 2 / pág. 11 Marcos Tomás Leirós Otero


• Velocidad max.: 12000rpm
• Peso:16,5 g
• Tamaño: 25x10x2mm

» Motor DC con reductora.

Suele llevar dentro el mismo motor DC del punto anterior, pero está acoplado a una reductora 48:1 para
poderlo usar como tracción de un coche robot o similares, la reductora de es de plástico. Requiere interface.

• Voltaje de funcionamiento: 3-6v DC


• Reducción: 48:1
• Consumo de corriente máx.: 150mA
• Velocidad sin cargar (3vDC): 125rpm
• Velocidad con carga (3vDC): 95rpm
• Torque de salida (3vDC): 0,8Kg/cm
• Velocidad sin cargar (5vDC): 200rpm
• Velocidad con carga (5vDC): 152rpm
• Torque de salida (5vDC): 1,0Kg/cm
• Velocidad sin cargar (6vDC): 230rpm
• Velocidad con carga (6vDC): 175rpm
• Torque de salida (6vDC): 1,1Kg/cm

» Motor DC con reductor, modelo N20


Motor totalmente metálico, con reducción, muy usado en juguetería.

» SG90, Motor micro servo.


Los motores servo permiten hacerlos rotar por grados, no pueden dar vueltas completas (a no ser que se
modifiquen), en definitiva, se usan para brazos de grúas, pinzas etc. Este modelo en concreto es mini. No
requieren de interface ya que tienen la electrónica de control dentro. Se usan con salidas PWM. 0-180 grados.

Arduino virtual en C y bloques Tema 2 / pág. 12 Marcos Tomás Leirós Otero


• Voltaje de funcionamiento: 3,0-7,2V
• Velocidad (4.8V sin carga): 0.12sec/60 degrees
• Fuerza: 1.2kg / 42.3oz(4.8V);1.6 kg / 56.4oz (6.0V)
• Temperatura de trabajo: -30 to +60 Degree C
• Longitud de cable: aprox. 23cm
• Incluye accesorios de la foto y tornillos
• Dimensiones: 22x11.5x27mm

» MG995, Motor servo.

Se trata de un motor servo como el anterior, pero de mayor tamaño y potencia. Otro modelo similar, muy
empleado y de mayor calidad, es el de la marca Futaba modelo S3003.

» 28BYJ-48, Motor Paso a Paso (STEPPER).

Este tipo de motores soportan velocidades medias, pero con control total paso a paso y permiten rotaciones
completas. La ventaja es que podemos pararlo con altísima precisión, por lo que es ideal para robots,
movimiento de ejes de una impresora 3D etc. Este motor requiere de controlador o driver, normalmente se usa
la placa ULN2003 (ver interfaces).

• Fases motor: 4
• Frecuencia: 100 Hz
• Voltaje de funcionamiento: 5V
• Corriente de funcionamiento: 200mA
• Potencia Máxima: 20W
• Resistencia del devanado: 70 ohm
• Ángulo por paso: 5,625º
• Pasos por vuelta: 64
• Torque: 0,3 Kgr/cm
• Velocidad: 1900 rpm
• Temperatura de funcionamiento: -45ºC a +125ºC
• Longitud del cable motor: 19cm
• Diámetro bloque motor: 28mm
• Dimensiones motor: 42mm x 32mm x 30mm

Arduino virtual en C y bloques Tema 2 / pág. 13 Marcos Tomás Leirós Otero


» Buzzer o zumbador.

Permite generar sonidos con el Arduino.

• Diámetro: 12mm
• Voltaje de entrada: 3,3v a 5v DC
• Corriente Máxima: <30mA
• Frecuencia: 2000Hz
• Intensidad de sonido: 85dB a 10cm
• Temperatura de funcionamiento: -40ºC a +85º

1.5 INTERFACES DE E/S

Los interfaces de entrada y/o salida son placas electrónicas que adaptan las señales eléctricas que van a entrar
o salir por las entradas/salidas del propio Arduino. Su uso es obligado en muchos casos, imaginar que
deseamos encender la calefacción mediante un Arduino, la salida del Arduino solamente aporta 5 voltios (ó
3,3), pero el AACC funciona a 220 voltios, deberemos intercalar un interface (como un relé, tríac, etc.). Lo
mismo ocurre si por ejemplo, deseamos saber si en un enchufe hay corriente, no podemos conectarlo
directamente a una entrada del Arduino, necesitaremos un interface (como un optoacoplador etc.). Los
interfaces de entrada están relacionados con los sensores y los interfaces de salida lo están con los actuadores.

» RL05, Módulo de relé (Existe de 3,3V).

Se trata de un interface de salida, en la práctica no es más que un conmutador controlado por tensión, es decir,
el Arduino le entrega 5V/3,3V y luego al activarse el conmutador puede controlar cualquier cosa,
independientemente de su tensión de funcionamiento.

• Canal: 1
• Tensión de Alimentación: 5V
• Corriente de Salida: 10A
• Corriente de activación por relé: 15mA~20mA
• LED indicador
• Dimensiones: 30x 54mm

Existen otros modelos: RL06 (Dos relés o canales), RL07 con cuatro relés, RL08 con ocho y RL09 dieciséis relés.

Arduino virtual en C y bloques Tema 2 / pág. 14 Marcos Tomás Leirós Otero


» G3MB-202P, relé de estado sólido.

Los anteriores relés son electromecánicos, tienen la ventaja de ser muy robustos eléctricamente y permiten el
paso de cualquier tipo de señal y corriente en la salida, pero las desventajas del desgaste, de hacer ruido y de
ser lentos. En ocasiones si necesitamos más velocidad podemos usar un módulo de relé de estado sólido,
además al ser electrónico, no tiene partes móviles, ni hace ruido.

También existen módulos con más canales, 4, 8 etc.

» HG7881CP o EL0463, pequeño módulo controlador de dos motores DC.

Se trata de un controlador para dos motores DC de baja potencia o uno paso a paso de cuatro hilos. Usado para
mover independientemente hacia adelante o hacia atrás dos motores.

Arduino virtual en C y bloques Tema 2 / pág. 15 Marcos Tomás Leirós Otero


• Puede controlar 2 motores simultáneamente DC y o uno paso a paso de 4 hilos
• Tensión de entrada: 2,5~12V
• Cada canal tiene una capacidad de salida de 800mA
• Tamaño PCB 29.2 (mm) x23 (mm)

Existe el modelo Quad HG7881 que admite hasta cuatro motores.

» L298N o M0100, módulo controlador de dos motores DC.

Se trata del controlador de motores DC más empleado, y funciona por doble puente H. Permite accionar hacia
adelante o hacia atrás dos motores independientes (o uno paso a paso). Normalmente se usa para los motores
de tracción, es más potente que el anterior al usar el chip de potencia L298.

• Voltaje operativo mínimo: 5 V


• Voltaje operativo máximo: 35 V
• Máxima corriente: ± 2 A
• Voltaje lógico: 5V
• Entradas de señal PWM para el control de velocidad
• Salidas: para 2 motores de DC o para un motor bipolar paso a paso
• Medidas: 43x43x24 mm

» ULN2003, módulo controlador o driver de motores Paso a Paso.

Se trata del driver para el control de motores de precisión paso a paso.

• Voltaje de alimentación: 5V -12V


• Máxima corriente: 0.5 A
• LEDs indicadores de estado
• Dimensiones driver: 35 x 33 x 11mm

Arduino virtual en C y bloques Tema 2 / pág. 16 Marcos Tomás Leirós Otero


1.6 ACCESORIOS

Como accesorios entendemos pequeños dispositivos externos que amplían las capacidades del Arduino.
Deberemos escogerlos según la funcionalidad de nuestro proyecto. Muchos de estos dispositivos se conectan
al bus I2C para su control. También podemos añadir en este punto cajas, cables, boards o similares.

» HC-05, módulo BLUETOOTH Slave/Master (6 PIN).

El módulo transceptor (transmisión / recepción) permite conexiones inalámbricas bluetooth como maestro o
esclavo, funciona de forma transparente como si realizáramos una conexión serie RS-232 TTL con cable.
Chipset CSR BC417. Este modelo puede ser tanto maestro como esclavo (con button maestro/esclavo).

• Alimentación de 3,6 a 6 Vdc


• Bluetooth versión V2.0+EDR
• Frecuencia: 2.4GHz banda ISM
• Modulación: GFSK
• Alcance aprox. 10m
• Seguridad: Autentificación y encriptación.
• Velocidad-> Asíncrono: 2.1Mbps (Max) / 160 kbps; Síncrono: 1Mbps/1Mbps
• Soporta comandos AT para configuración a través de un puerto serie
• Temperatura de trabajo: -20 ºC a +75 ºC
• Corriente de trabajo (emparejamiento): 80 mA
• Transmisión: 8mA
• Corriente modo sleep: < 1mA
• Tamaño: 37 x 16 mm

» HC-06, módul0 BLUETOOTH esclavo (4 PIN).


Aporta la funcionalidad Bluetooth al Arduino. En concreto el modelo HC-06 es un esclavo, es decir, no permite
aceptar comunicaciones, no es servidor, solo permite conectarse con un dispositivo que sea maestro, además
solo tiene 4 pines, dos de alimentación y los dos de TX/RX, los cuales se conectan con cable cruzado al RX/TX
del Arduino.

• Chipset CSR BC417


• Alimentación 3,5V -5V
• Bluetooth versión V2.0+EDR
• Frecuencia: 2.4GHz banda ISM
• Modulación: GFSK
• Alcance aprox. 10m
• Seguridad: Autentificación y encriptación.

Arduino virtual en C y bloques Tema 2 / pág. 17 Marcos Tomás Leirós Otero


• Velocidad-> Asíncrono: 2.1Mbps (Max) / 160 kbps; Síncrono: 1Mbps/1Mbps
• Soporta comandos AT para configuración a través de un puerto serie
• Temperatura de trabajo: -20 ºC a +75 ºC
• Corriente de trabajo (emparejamiento): 80 mA
• Transmisión: 8mA
• Tamaño: 37 x 16m

» ESP8266 o ESP-01, módulo WIFI.

Aporta funcionalidad WIFI al Arduino.

• Tensión de alimentación: 3.3V


• Protocolos soportados: 802.11 b/g/n.
• Soporte de red: 2,4 GHz
• Banda: 2400 (MHz)
• Wi-Fi Direct (P2p), Soft Access Point.
• Stack TCP/IP integrado.
• PLL, reguladores y unidades de manejo de energía integrados.
• Potencia de salida: 0,15 (W); +19.5dBm en modo 802.11b
• Consumo en modo de baja energía: <10 uA.
• Procesador integrado de 32 bits.
• Soporta tres modos de funcionamiento: AP, STA, STA + AP
• Comunicación tipo de interfaz: Serial, UART
• Tamaño: 24 mm x 14 mm

» LCD 1602, pantalla de cristal líquido.


Añade una pantalla LCD de 16x2 caracteres.

• Pantalla LCD, 16 caracteres y 2 líneas


• Alimentación 5V
• Controlador compatible HD44780
• Fondo azul retroiluminado, letras en blanco
• Incluir un pin de contraste ajustable
• Dimensiones (mm): 80 x 36 x 12

» TM1637, display de 4 dígitos.

Pequeña placa que nos proporciona un display de cuatro dígitos y siete segmentos.

Arduino virtual en C y bloques Tema 2 / pág. 18 Marcos Tomás Leirós Otero


• Tensión de alimentación de 3V-5V
• Consumo de corriente 250 mA
• Display de 7 segmentos 4 dígitos ánodo común
• Tamaño del dígito: 0,36 pulgadas
• Dimensiones: 42x24x11mm

» Pantalla OLED 0.96" I2C 128X64.

La pantalla OLED es la que tenemos disponible para mostrar información compleja.

• Ultra-low power consumption: full screen lit 0.08W


• Super high brightness and contrast are adjustable
• With embedded driver/controller Interface type is IIC
• Pin Definition: GND, VCC, SCL, SDA Pins: 4 pins
• Voltage: 3V ~ 5V DC
• Working Temperature: -30 ℃ ~ 70 ℃
• Character Colors: Blue (as pictures show)
• Drive Duty: 1/64 Duty
• High resolution: 128 * 64
• Panel Dimensions: 26.70* 19.26* 1.85mm/1.03*0.76*0.07 inch(approx)
• Active Area: 21.74* 11.2mm /0.86*0.44 inch(approx)
• Driver IC: SSD1306

» DS3231, módulo de reloj en tiempo real RTC.

Con el Arduino podemos usar delay como pausa para gestionar el tiempo, pero no disponemos de reloj para
poder programar acciones en horas concretas, para ello disponemos de este módulo, requiere de pila, y
además dispone memoria Eeprom. Se controla mediante el bus I2C.

• Basado en DS3231
• EEPROM AT24C32 (32K)
• Interfaz I2C
• Indicador LED de trabajo

También existen los modelos RTC DS1302 o RTC DS1307 más sencillos:

Arduino virtual en C y bloques Tema 2 / pág. 19 Marcos Tomás Leirós Otero


» Interface controlador RGB para LEDs.

Se emplea como intermediario entre el Arduino y los LED WS2812 de tipo 5050.

• Power supply of controlling interface for MCU is 4.5~5.5VDC


• External power supply is 12VDC
• Cascadable
• Can drive 5 meters of RGB LED Strip (72W Max)

» WS2812B, Tira de 8 LED RGB, tipo 5050 (Existen en forma de tira, matriz y círculo).

Ideal para efectos lumínicos mediante led RGB.

Tamaño de la tira: 5,3 x 1,0 cm. Seguidamente se muestran otros diseños:

» Matriz LED basada en MAX7219, matriz 8x8.


Permite visualizar letras e información encendiendo los leds de la matriz que necesitemos.

Arduino virtual en C y bloques Tema 2 / pág. 20 Marcos Tomás Leirós Otero


• Led 3mm color rojo
• Comunicación SPI
• Voltaje: 4.7 - 5.3V DC
• Interfaces para gestionar múltiples módulos en cascada
• Dimensiones de matriz: 32mm x 32mm x 8mm
• Dimensiones de PCB: 32mm x 50mm

Existen otras versiones con más matrices 8x8 juntas, concretamente cuatro. Estos packs están preparados para
serializar más módulos uno tras otro, que permite mostrar mensajes largos:

También existe un modelo similar con led RGB:

» KY-040 o M0012, codificador rotatorio.


Se trata de un mando que al girar el codificador se puede contar en positivo o negativo, dependiendo de la
dirección de giro, el eje tiene un pulsador. No es un potenciómetro.

• Voltaje: 3,3V / 5V
• Pinouts:
• CLK - Encoder A output
• DT - Encoder B output
• GND - Ground / 0V
• SW - 'Select' switch (activado cuando el eje se presiona en la parte superior)
• Círculo de pulso: 20
• Separación pins: 2,54mm
• Material: encoder metálico + placa de PCB

Arduino virtual en C y bloques Tema 2 / pág. 21 Marcos Tomás Leirós Otero


• Tamaño: 31 x 19 x 29mm aprox.

» NRF24L01 o W0005, módulo RF de 2.4 Ghz.

Se trata de un módulo inalámbrico que transmite y recibe radio a 2.4GHz.

• Banda libre: 2,4GHz ISM


• Velocidad: 250kbps,1Mbps,2Mbps
• Corriente de trabajo – recepción: 13 mA, transmisión: 11 mA (900nA - deep sleep mode)
• Sensibilidad de recepción: -94dB 250kbps
• Cobertura en espacios cerrados: 15m / 30m
• Interfaz SPI
• Voltaje de entrada: 1,9V- 3,6V
• Voltaje de puertos entrada/salida: 0V-3,3V / 5V
• Cobertura en áreas abiertas: 100m aprox.
• Frecuencia de reloj: 16MHz
• Temperatura de funcionamiento: -40ºC a +85ºC
• Dimensiones: 29x 16x 11mm

» Módulos de radiofrecuencia RF de 433 Mhz (de TX y de RX por separado).

Permite transmitir y recibir datos a 433 Mhz (una de las frecuencias típica de los mandos a distancia), incluso se
puede usar para comunicar dos Arduino, estos módulos van por separado uno para TX y otro para RX. También
existe de 315 Mhz.

Especificaciones módulo emisor:

• Alimentación: 3V~12V
• Intensidad de trabajo: max=40mA (a 12V), min=9mA (a 3V)
• Modulación AM ASK /OOK
• Filtro SAW
• Frecuencia de trabajo: 315MHz-433.92MHz,
• Potencia de transmisión: 25mW (315MHz at 12V)
• Rango: 20 a 200 metros (diferentes tensiones pueden dar diferentes resultados)
• Velocidad de transferencia: 4 kB / S
• Dimensiones: 19 x 19 x 7 mm

Especificaciones módulo receptor:

• Alimentación: 5.0VDC +0.5V


• Intensidad de trabajo: 5.5mA (a 5.0VDC)

Arduino virtual en C y bloques Tema 2 / pág. 22 Marcos Tomás Leirós Otero


• Frecuencia de trabajo: 315MHz-433.92MHz,
• Sensibilidad del receptor: –100dBm
• Dimensiones: 30x 14x 9 mm

» RC522, módulo RFID.

Se usa mucho como llave por radiofrecuencia de cercanía. Suele venir con un llavero.

• Soporta Quick CRYPTO1 y MIFARE


• Corriente de operación: 13-26mA a 3.3V
• Corriente de standby: 10-13mA a 3.3V
• Corriente de sleep-mode: <80µA
• Corriente máxima: 30mA
• Frecuencia de operación: 13.56Mhz
• Distancia de lectura: 0 a 60mm
• Protocolo de comunicación: SPI
• Máxima velocidad de SPI: 10Mbit/s
• Velocidad de datos máxima: 10Mbit/s
• Temperatura de operación: -20 a 80ºC
• Humedad de operación: 5%-95%
• Dimensiones: 40 x 60 mm

» Teclados para Arduino.

Tenemos disponibles diferentes tipos de teclados en forma de matriz, que nos permitirán introducir datos.

» Módulo lector de tarjeta SD.

Permite leer tarjetas SD.

Arduino virtual en C y bloques Tema 2 / pág. 23 Marcos Tomás Leirós Otero


• Voltaje de alimentación: 3,3V o 5V
• Interfaz: SPI
• Dimensiones: 30mm x 50mm x 12mm

» AMS1117, módulo reductor DC-DC.

Muchas veces necesitamos alimentar dispositivos de 3,3 VDC desde los 5 VDC del Arduino.

• Basado en el regulador AMS1117-3.3V


• Voltaje de Entrada: 4.5 – 12Vdc
• Voltaje de Salida: 3.3Vdc (+/-0,05V)
• Corriente de Salida máx.: 800mA
• Temperatura de funcionamiento: -40ºC a +150ºC
• Dimensiones: 25mm x 12mm

» Alimentador 12V DC Jack 5,5.

Es para alimentar el Arduino (y sus accesorios) empleando el enchufe de la red eléctrica. Las características
pueden ser muy variadas, con respecto a la potencia los más usados son los de 1A, 2A, o de 3A, el conector es
de tipo tubular.

» Batería recargable portátil de litio con cargador.


Tenemos disponibles unos packs de baterías recargables ideales para trabajar con coches robot Arduino, de lo
contrario el gasto en pilas será considerable. Este siguiente es el modelo recomendado, existen de diferentes
tensiones e intensidades con sus correspondientes tamaños. Una de 11.1V 4000mAh podría ser buena opción.

Arduino virtual en C y bloques Tema 2 / pág. 24 Marcos Tomás Leirós Otero


• Tamaño: 97x57x20mm (batería)
• Color: azul
• Capacidad: 4000 mAh.
• Tipo de batería: batería recargable de litio.
• Voltaje de entrada: 12.6 V
• Voltaje de salida: 10.8 ~ 12.6 DC
• Corriente de salida: 1-2A
• Especificación de interfaz de línea 5.5 * 2.1 MM
• Vida del producto: carga de circulación y descarga más de 500 veces.

» Caja para Arduino.

Debido a que el Arduino es una tarjeta electrónica que viene sin caja, es posible crear cortocircuitos mientras
trabajamos con él. Por lo tanto, la caja aporta seguridad para el mismo.

• Compatible con Arduino UNO


• Material: acrílico transparente
• Dimensiones exteriores: 80 x 65 x 18,5 mm

» Cables dupont (M-M, M-H, H-H).

Son para realizar las conexiones “pinchando” sin soldadura, necesitaremos tanto macho-macho, como macho-
hembra, como hembra-hembra, además de deferentes longitudes.

» Tiras de pines (macho y hembra, rectas y en codo).

Arduino virtual en C y bloques Tema 2 / pág. 25 Marcos Tomás Leirós Otero


» Protoboard.
Se trata de una placa que facilita el montaje de prototipos de laboratorio, nunca para montaje final. Existen de
muchos tamaños. Una opción muy interesante es la PLACA PROTOTIPO MB-102 + el módulo de alimentación

Las placas board aprenderemos a usarlas en el tema 3 del presente curso.

NOTA: Hemos visto los sensores, actuadores y accesorios más importantes, pero tenemos disponibles otros
que no vamos a describir, cuya nomenclatura y/o funcionalidad se menciona seguidamente para que el lector
pueda investigar sobre ellos:

• ISD1820 (Grabador y reproductor de voz),


• Mini Mp3 DFPlayer (reproductor MP3),
• PAM8610 (amplificador de Audio de 2 canales),
• LM2596 (fuente de alimentación convertidor voltaje DC-DC 3-40 V),
• TCS230 (reconocimiento y medición de color RGB),
• TP4056 (cargador de batería litio 1000 mA USB),
• MAX3232 (convertidor RS232 <-> TTL),
• RDA5807M (módulo receptor de radio comercial FM),
• MCP4725 conversor Digita/Analógico, Bombas de agua sumergibles, Vibrador, etc.
• Módulo Joystick KY-023 PS2 Dual axis XY dos ejes
• MQ-9 modulo sensor gas monóxido de carbono
• Sensor lluvia detector de gotas agua (Pic Arduino Raindrops) FC-37 YL-83
• Regulador AC Dimmer 2 canales, Arduino 220v PWM 10A
• Detector de Latidos Arduino KY-039
• Cámara VGA 640x480 OV7670
• EL0493 Sensor Rayos Ultravioleta UV Módulo Radiación Solar
• Sensor de Corriente ACS712 AC / DC
• Módulo Arduino detector de humedad higrómetro
• LM35 sensor de temperatura (en formato transistor TO92)
• Módulo sensor Luz BH1750 FVI
• Módulo TTP223 Sensor Capacitivo Configurable
• EL0432 Medidor de caudal de agua
• Módulo adaptador i2c para LCD 1602 / 2004
• EL0426 MÓDULO INTENSIDAD 5A AC
• EL0497 Potenciómetro Arduino con mando embellecedor Regulador volumen Rotary 10K
• EL0518 sensor piezoeléctrico módulo piezoeléctrico cerámico vibración
• Módulo TTP229 16 canales sensor capacitivo digital táctil
• Módulo GSM SIM800L V2.0 850/900/1800/1900MHz

Arduino virtual en C y bloques Tema 2 / pág. 26 Marcos Tomás Leirós Otero


1.7 PACKS o KITS DE DESARROLLO

Existen muchos kits de desarrollo, que son unas cajas con un set de sensores y actuadores (o coches robot
etc.), ideales para hacer prácticas de laboratorio, salen más baratos y lo tenemos todo ordenado.

1.8 EJERCICIO A ENTREGAR (TEST del tema 2 en Moodle)

Tienes en Moodle un test online sobre los conocimientos adquiridos en este tema hasta aquí, es muy
fácil ya que salen preguntas del tipo ¿Cuál de los siguientes no es un modelo de Arduino?, además tienes dos
intentos. Mira el calendario de activación.

Arduino virtual en C y bloques Tema 2 / pág. 27 Marcos Tomás Leirós Otero


2) LENGUAJE DE BLOQUES I

2.1 INTRODUCCIÓN

En el tema 1 ya hemos visto que el Arduino UNO dispone de 14 entradas/salidas digitales


configurables, y sin muchas explicaciones hemos conectado LEDs a ellas por medio de resistencias en serie para
encenderlos/apagarlos. Vamos ahora a profundizar el uso de dichas salidas digitales, punto que ampliaremos
con el uso de las entradas digitales, todo ello mediante lenguaje de bloques.

2.2 INTRUCCIONES DEL BLOQUE I

Dentro de la plataforma Tinkercad, podemos observar que en la pestaña CÓDIGO existen seis tipos de
instrucciones diferenciadas por seis colores diferentes. Vamos a comenzar con las azules conocidas también
como Salida.

Menú Azul o Salida

Seguidamente se explican en orden descendente las cinco instrucciones de este tipo que vamos a ver
en este tema, dejando las otras tres para el tema 3.

» La instrucción “definir LED integrado en [ALTA|BAJA]”, se emplea para encender (ALTA) o apagar (BAJA) el
led que tiene siempre el Arduino integrado y conectado a la patilla 13 (conocido también como build-in led),
cabe recordar que en electrónica digital una señal ALTA equivale a un 1 lógico (es decir corriente máxima), y
BAJA equivale a un 0 lógico (es decir corriente mínima). Esta instrucción configura de manera implícita, es decir
automáticamente, la patilla 13 como salida.

» La instrucción “definir pasador [0-14|A0-A5] en [ALTA|BAJA]”, se emplea para encender o apagar cualquiera
de las salidas del Arduino. Esta instrucción configura de manera implícita, como salida, la patilla que se
seleccione en la misma. Cabe señalar, que nos permite escoger el rango A0-A5 también, ya que las seis
entradas analógicas (desde A0 hasta A5) admiten ser usadas como salidas digitales, pero recuerda que el
Arduino no dispone de salidas analógicas, en analógico solamente se pueden emplear como entradas.

Arduino virtual en C y bloques Tema 2 / pág. 28 Marcos Tomás Leirós Otero


NOTA: A pesar de que la plataforma es espléndida, como podemos observar, la traducción al castellano no es
muy buena, con “definir pasador” quieren decir algo así como “Poner salida”, por lo tanto, “definir pasador 3
en ALTA” sería algo así como “Poner salida 3 a 1”, es decir, encender la salida nº3.

» La instrucción “reproducir altavoz en el pasador [0-14|A0-A5] con tono [tono] durante [seg]”, hace sonar un
altavoz conectado a la salida escogida, con el tono deseado (rango del tono [1-12239]), durante los segundos
escogidos.

El tono y el tiempo se escriben a mano (o mediante una variable cuyo uso veremos más adelante).

» La instrucción “desactivar el altavoz en pasador [0-14|A0-A5]”, apaga el sonido del altavoz que esté
conectado en el pin o patilla escogida. Se emplea para parar un sonido activado con la instrucción anterior
antes de que expire el tiempo programado. Vemos seguidamente un ejemplo. Probadlo con el Tinkercad.

» En la parte inferior derecha de Tinkercad tenemos disponible el Monitor en serie, se hace visible o invisible
mediante la pestaña marcada en amarillo. La instrucción “imprimir en monitor serie [texto], nueva línea
[con|sin]”, imprime (visualiza) en dicho Monitor en serie el texto escrito en texto, y detrás imprime un carácter
de final de línea si escogemos con y no imprime ninguno extra si escogemos sin, este carácter lo usaremos en
sin cuando deseemos imprimir varias cosas distintas en la misma línea. El texto de escribe a mano (o mediante
una variable que veremos más adelante). Vemos el resultado de ejecutarla tres veces.

Arduino virtual en C y bloques Tema 2 / pág. 29 Marcos Tomás Leirós Otero


NOTA: En Arduino, la posibilidad de imprimir caracteres y/o texto por el puerto serie, tiene más potencia y
utilidades de las que uno puede imaginar. Para empezar, podemos usarlo para depurar programas complejos
visualizando logs en la pantalla del ordenador con el valor de variables (se verá más adelante). También
podemos usarlo para ver datos de sensores como la distancia detectada. O, más potente todavía, en un
Arduino real imprimir por el serie hace que ese carácter o texto salga con codificación ASCII por el puerto serie
físico (patillas 0 y 1 del Arduino UNO) y por el USB (están eléctricamente conectados como se ve en el esquema
del Arduino UNO en pdf que os he dejado en el Moodle), por lo tanto, podemos mandar mensajes e
información que otros dispositivos pueden leer, usando una comunicación serie de toda la vida.

Menú naranja o Control

Vamos ahora a comentar las instrucciones naranja conocidas también como Control, explicando en
orden descendente las cinco que vamos a ver en este tema, dejando la última para el tema 3.

» La instrucción “esperar [tiempo] [segundos|milisegundos]”, se emplea para una pausa o delay, se configura
según el tiempo y unidad, el tiempo se pone a mano, cabe destacar que esta instrucción para o detiene el flujo
de su programa. El tiempo se pone a mano o mediante una variable.

» La instrucción “repetir [numero] veces”, se emplea como bucle, ya que permite repetir la ejecución de las
instrucciones que tenga dentro el número de veces escogido.

Arduino virtual en C y bloques Tema 2 / pág. 30 Marcos Tomás Leirós Otero


Como se aprecia en la anterior imagen de la derecha se ha imprimido 5 veces la frase, sin salto de línea.

» La instrucción “repetir [mientras|hasta] <condición>”, es otro bucle pero más complejo, se emplea para
repetir la ejecución de las instrucciones interna mientras o hasta que se cumpla una condición que se pone
dentro de su rombo <>, las condiciones se encuentran dentro de las instrucciones verdes o Matemáticas (ya
que nos hace falta pongo ahora una instrucción verde, que ampliaremos más adelante).

Como se aprecia en la anterior imagen de la derecha, ese código imprimiría el texto indefinidamente, una vez
cada segundo, ya que la condición <1 = 1> se cumple siempre. Evidentemente aquí normalmente pondremos
condiciones similares a “si la variable i es mayor que 5”, veremos más adelante las variables.

» La instrucción “si <condición> entonces”, es una instrucción que nos brinda el poder de decisión, permite
ejecutar las instrucciones que tiene dentro solamente si se cumple la condición.

Como se aprecia en la anterior imagen de la derecha, ese código nunca encenderá la salida 2, ya que 1 nunca
va a ser distinto de 1. Evidentemente aquí normalmente pondremos condiciones similares a “si la distancia a la
pared es menor que 25 cm”, o del tipo “si la variable i vale 5”, o del tipo “si la entrada 3 esta activada”,
veremos más adelante las variables y las entradas.

» La instrucción “si <condición> entonces Intrucciones1, si no Intrucciones2”, nos brinda un poder de decisión
más complejo, permite ejecutar las instrucciones escritas en el bloque Instrucciones1 si se cumple la condición
y se ejecutaran las del bloque Intrucciones2 en caso contrario.

Como se aprecia en la anterior imagen de la derecha, como 1 nunca va a ser mayor que 1, el led integrado se
apagará siempre que se ejecute ese programa.

Menú rosa o Variables

En el menú rosa o Variables, no veremos instrucciones, únicamente divisaremos el botón “Crear variable”. Si
pulsamos en dicho botón, nos permitirá crear una, en este la llamo contador.

Como se aprecia en la anterior imagen de más a la derecha, se ha creado la propia variable llamada contador, y
dos instrucciones nuevas, definir y cambiar.

» La instrucción “definir [variable] en [valor]”, escribe en la variable el valor deseado (el nombre tiene que ser
creado previamente, el valor deseado se escribe a mano). Ejemplo para escribir un 0.

Arduino virtual en C y bloques Tema 2 / pág. 31 Marcos Tomás Leirós Otero


Como se puede apreciar acepta otras opciones, como renombrar la variable o borrarla.

» La instrucción “cambiar [variable] por [valor]”, suma a la variable el valor es escrito, en el siguiente ejemplo
incrementa el valor de la variable en 1.

Como se puede apreciar acepta otras opciones, como renombrar la variable o borrarla.

La duda que surge ahora es como hacer cálculos con la variable, la respuesta la tenemos en las Matemáticas o
menú verde, cuyas instrucciones se usan mucho combinadas con las variables.

Menú verde o Matemáticas

Gracias a este menú, entre otras cosas, tenemos la posibilidad de realizar comparaciones relacionales (ya lo
hemos usado antes comparando 1 con 1), además de poder realizar diversos tipos de cálculos matemáticos,
tanto aritméticos como lógicos. Las opciones de este menú nunca se usan solas, se insertan dentro de una
instrucción a modo de rompecabezas. Vamos a ver ahora las dos primeras y la última dejando el resto para el
tema 3.

» La primera opción disponible es para realizar los cálculos aritméticos básicos, fíjate que es un óvalo alargado,
ya que siempre se usa dentro de alguna instrucción con un hueco de esa forma. Admite escribir dentro
variables o valores a piñón fijo.

Arduino virtual en C y bloques Tema 2 / pág. 32 Marcos Tomás Leirós Otero


» La segunda opción disponible es para realizar comparaciones relacionales básicas, fíjate que es un rombo
alargado, ya que siempre se usa dentro de alguna instrucción con un hueco de esa forma (ya lo hemos usado
antes). Admite escribir dentro variables o valores a piñón fijo.

» La última opción disponible “[ALTA|BAJA]” sencillamente es un operando para poder comparar con valor 1 o
0 lógico. Lo usaremos más adelante junto con el menú púrpura (Entrada).

2.3 SALIDAS DIGITALES

Las salidas digitales solamente pueden tener dos valores, o un valor alto (1 lógico), o bajo (0 lógico).
Por lo tanto, se emplean mucho para activar (encender) o desactivar (apagar) cualquier elemento.

2.3.1 PRÁCTICA_2_1 GUIADA (Led cíclico)

Vamos a explicar cómo activar salidas digitales mediante una práctica guiada, de esta forma,
aprendemos practicando. En Tinkerkad, crea nuevo proyecto, llámalo Práctica_2_1, pon un Arduino.

Visualiza los componentes Básico, sitúa un led amarillo encima de la patilla 13, llámalo LED1, pon una
resistencia de 250 ohmios (Ω) y llámala R1, conéctala entre la patilla 13 y el positivo del led (ánodo +, es la
patilla recta), pon un cable negro desde el GND del Arduino al negativo del LED (cátodo -, es la patilla curva).
Recuerda que los led tienen polaridad y no funcionan si se conectan al revés, y que la resistencia se inserta para
que no se estropeen, ya que el Arduino les entrega 5V y los led de ese tamaño y color funcionan sobre 1,6V.
Visualiza el código en modo Bloques, simula, deberías tener el siguiente código y el led debería parpadear.

Esto ya se vio en el tema 1, valga ahora como repaso, y para usarlo como base he ir ampliando
conocimientos. Fíjate que el Arduino está funcionando sin pila, esto es debido a que está alimentado ya por el
USB, si observas al simular se conecta el cable USB, y al parar la simulación se desconecta el cable físicamente.

Arduino virtual en C y bloques Tema 2 / pág. 33 Marcos Tomás Leirós Otero


Vamos a trabajar ahora con algunas de las anteriores instrucciones vistas. Arrastra “repetir [número]
veces” de manera que “coja” o envuelva todas las instrucciones que tenemos, cambia el 10 por “3”, añade al
final un “esperar 1 segundos”.

Ahora con clic derecho sobre el bloque, duplícalo e insértalo debajo. En ese segundo bloque cambia el
3 por “16”, añade al final un “esperar 2 segundos”, cambia los tiempos a 200 milisegundos. Simula.

El led debería parpadear tres veces lentamente y luego dieciséis rápidamente, repitiendo el ciclo sin parar.

Añade dos instrucciones “imprimir en monitor en serie” como se ve seguidamente, una que imprima
“Velocidad lenta: ” y la otra “Velocidad rápida: ” (deja un espacio tras los :, no pongas tildes ya que no se
imprimen bien). Al simular verás como en el Monitor en serie se va mostrando el paso del programa por cada
velocidad.

Arduino virtual en C y bloques Tema 2 / pág. 34 Marcos Tomás Leirós Otero


Como se puede apreciar el ciclo se repite sin parar, la duda surge enseguida, ¿Cómo podríamos
controlar a voluntad las veces que se repite?

Una forma de conseguirlo es mediante el uso combinado de las condiciones (en el menú verde) y de
las variables (con el menú rosa).

Arrastra ahora un “repetir [mientras] <condición>” de manera que “coja” o envuelva todas las
instrucciones que tenemos.

Añade un segundo “repetir [mientras] <condición>” de manera que “coja” o envuelva de nuevo todas
las instrucciones que tenemos, incluido el bucle anterior.

Desde el menú rosa, crea una variable y llámala contador, añade como primera línea un “definir
[contador] en [1]”. Seguidamente desde el menú verde, pon una comparación de 1 = 1 en la condición del
primer bucle.

De nuevo desde el menú verde, arrastra otra comparación, esta vez en el segundo bucle, cambia el
mientras por hasta y cambia la comparación a >

Arduino virtual en C y bloques Tema 2 / pág. 35 Marcos Tomás Leirós Otero


Ahora arrastra la variable contador a esta nueva condición, y en el otro lado de la misma, escribe 3.

Para continuar, desde el menú rosa, pon un ”cambiar [contador] por [valor]” al final del todo, pero
dentro del segundo bucle, que incremente el contador en 1 como se ve seguidamente.

Simula. Ahora el ciclo debería funcionar tres veces únicamente y parar. Fíjate en el Monitor en serie.

Ya te debería estar quedando más o menos claro el mecanismo de la programación en lenguaje de


bloques. No obstante, vamos a añadir algunas instrucciones a modo de log, para ver si lo entendemos mejor.

Completa el programa como en la siguiente imagen:

• En los dos “imprimir en monitor en serie” se ha cambiado el con a sin.

Arduino virtual en C y bloques Tema 2 / pág. 36 Marcos Tomás Leirós Otero


• Luego se han introducido tres “imprimir en monitor en serie” nuevos, fíjate en los lugares y en los
mensajes que tienen puestos, y si están en modo sin o con. Además, date cuenta de que en dos de
ellos lo que imprime es el valor de la variable contador.

• Se ha introducido un “esperar 3 segundos”

El programa completo es:

El resultado en el Monitor será:

Explicación:

» Al principio insertamos la variable contador, la ponemos a 1, imprimiendo luego “Comenzando”.

» Luego vienen dos bucles anidados, el primero (el mientras), se ejecutará sin salirse nunca ya que compara si
1=1, eso se hace para que nunca se salga del él, es lo que se conoce como bucle infinito, y gracias a ello nunca
se ejecutarán de nuevo las líneas anteriores, por lo tanto, en estas primeras líneas normalmente se ponen las
instrucciones que configuran el programa correspondiente al arrancar.

» El segundo bucle (en hasta), tiene dentro otros dos bucles, el que repite hasta 3 para la velocidad lenta, y el
que repite hasta 16 para la rápida, antes de cada uno de ellos se imprime el mensaje de velocidad y la variable
contador, la velocidad se pone en modo sin para que no imprima un salto de línea y así el valor de la variable se
imprime en la misma línea.

» Una vez que el contador es mayor que 3 el segundo bucle (el hasta) termina y ya no se ejecuta más, por lo
que se imprime “Terminado” cada tres segundos.

NOTA: Puedes ver el funcionamiento en el Moodle, video Practica_2_1.mp4

Arduino virtual en C y bloques Tema 2 / pág. 37 Marcos Tomás Leirós Otero


NOTA: Llegado a este punto es muy importante comprender el mecanismo de programación por bloques, si
todavía no te ha quedado claro, te recomiendo repasar todo hasta comprenderlo, preguntar en el foro si es
necesario, y no avanzar en el tema hasta entonces. Por otro lado, puedes hacer todas las reformas y pruebas
que consideres oportunas para practicar y entenderlo mejor.

Reto voluntario: Crea al principio del programa dos variables, una llamada tLargo con valor 1, y otra llamada
tCorto con valor 200. En todos los esperar que estén a 1 segundo, arrastra la variable tLargo al lugar de 1, y en
los esperar que estén a 200 arrastra en su lugar tCorto. De esta manera, tendremos la ventaja de poder
cambiar los dos tiempos de forma centralizada desde el comienzo del programa.

2.3.2 PRÁCTICA_2_2 SEMIGUIADA (Display 7 segmentos con buzzer) (A entregar la segunda parte)

Vamos a seguir trabajando con las salidas digitales, concretamente nos interesa poder
activar/desactivar varias a la vez, para ello, vamos a ver el display de siete segmentos. Este tipo de dispositivo
no son más que siete diodos led dentro de la misma pastilla, para ahorrar en conexiones, siempre tiene una
patilla común que puede ser positivo común (ánodo común) o negativo común (cátodo común), además,
existen modelos con un octavo led que vale para representar un punto. Estudiemos como están conectados
internamente los leds en ambos casos (el led de arriba se numera como a, y va rotando hacia la derecha).

Por ejemplo, en el caso de usar uno con positivo común, las siete salidas deberían tener los siguientes
valores (en el dibujo de la izquierda los dos * son la patilla común y están unidas, el DP es el punto), fíjate como
al ser ánodo común para encender los leds hay que mandarle un 0. El cátodo común sería totalmente al revés.

Entra a Tinkerkad, ve a Circuits, crea un nuevo proyecto y llámalo Práctica_2_2, inserta un Arduino,
llámale Arduino UNO. Pon la visualización de Componentes en Todos, y sitúa encima de las salidas [1-7] el
Display (Tinkercad lo llama Visualizador), ponle de nombre Display3 y escógelo como Cátodo común (negativo
común).

Arduino virtual en C y bloques Tema 2 / pág. 38 Marcos Tomás Leirós Otero


Ya que estamos aquí, sitúa en el tablero al lado izquierdo del display un Buzzer piezoeléctrico
llamándolo Buzzer3 (Tinkercad lo llama Piezo y está en componentes justo encima del display), pon también
una lamparita incandescente llamándola Lampara3 (Tinkercad la llama Bombilla). En ambos componentes a la
hora de conectarlos la polaridad no tiene importancia.

Recordad que con los leds hay que tener en cuenta la polaridad (conexión + y -), y necesitan de una
resistencia en serie si se alimentan a más de 2V, por lo tanto, vamos a poner siete resistencias de 220 ohmios
entre el Arduino y el display, llámalas de derecha a izquierda R_A, R_B y así consecutivamente, las
conectaremos directamente a las salidas [1-7], siendo R_A la que se conecta a la salida 1 y corresponde a la
letra A del display. Termina de conectar los otros extremos de las resistencias al display, fíjate en la imagen
como al acercar el cable a los terminales del display nos dice su letra correspondiente.

Una vez completados los siete cables nos faltara el común, recuerda que hemos configurado el display
como cátodo común, por lo que hay que conectarlo al negativo o GND del Arduino. Como es negativo una vez
puesto cámbialo a color negro.

Conecta ahora las patillas izquierdas tanto del buzzer como de la bombilla al mismo GND, con sendos
cables negros. Y la patilla que queda libre del buzzer la conectaremos a la salida 9, y la de la lámpara a la 10.

Ahora vamos al Código en modo Bloques. Ponemos el siguiente programa y simulamos. ¿Qué ha
ocurrido?

Arduino virtual en C y bloques Tema 2 / pág. 39 Marcos Tomás Leirós Otero


En efecto, veremos el 1 de manera fija en la pantalla, ya que hemos encendido sus dos leds
correspondientes, el B y el C, conectados a las patillas 2 y 3 respectivamente.

Usando como base el mini programa anterior crea este nuevo, la columna de la izquierda visualiza el
cero ya que enciende todos los leds menos el G, además, le da un 1 lógico al buzzer para que suene (patilla 9) y
un 0 lógico a la lámpara para apagarla (patilla 10), las otras dos columnas es fácil adivinarlo. Tienes que hacer
un solo programa uniendo en una columna las tres siguientes consecutivamente, aprovecha que puedes
“duplicar” código para crear la segunda y la tercera parte, con la primera como base, luego júntalas.

Simula. Verás un contador de 0 a 2 en el display, cuando pone cero avisa que va a comenzar la cuenta
mediante un zumbido (enciende el audio del ordenador), y cuando llega al final de la cuenta se enciende la luz.

Ejercicio a entregar: Tienes que ampliar esta práctica para entregarla, con los siguientes puntos.

a) Usando las partes que necesites de la práctica 2.3.2, haz que la cuenta de 0 a 2 solo la haga una vez y pare.
Es decir, crea la variable contador y los dos bucles. Como estamos en programación se admiten otros
algoritmos.

b) Amplia para que ahora la cuenta vaya desde 0 a 9 cada segundo, la bombilla ahora se encenderá al llegar a 9,
y el zumbador sonará con el 1 (no con el 0), así indicará que la cuenta ha comenzado.

c) Haz que el paso del 0 al 1 sea a los 5 segundos, el resto seguirá a 1 segundo.

NOTA: Puedes ver el funcionamiento en el Moodle, video Practica_2_2.mp4

Arduino virtual en C y bloques Tema 2 / pág. 40 Marcos Tomás Leirós Otero


2.4 ENTRADAS DIGITALES

Las entradas digitales, al igual que las salidas, solamente pueden tener dos valores, o un valor alto H (1
lógico), o bajo L (0 lógico). Por lo tanto, no podemos conectar sensores analógicos a estas entradas. Se usan
mucho para conectar pulsadores/interruptores/conmutadores, sensores con dos estados de salida como el de
presencia, finales de carrera etc. Vamos a necesitar una introducción al menú púrpura o de Entrada.

Menú púrpura o Entrada

En el menú púrpura o Entrada, tenemos siete instrucciones de entre las cuales requerimos la primera
en este apartado, el resto las dejaremos para el tema 3.

» La opción “leer pasador digital [0-1 A0-A5]”, se emplea para consultar si una entrada digital está a nivel alto
o lógico. Al igual que ocurría con las entradas admite usar la numeración de las entradas analógicas.

Esta opción NO se puede usar sola, necesita de una instrucción que la contenga a modo de
rompecabezas. Seguidamente observamos cómo se usa dentro de una instrucción SI. Como se puede apreciar
requiere de una comparación con ALTA o BAJA. En este ejemplo si la entrada 2 está a nivel alto se imprime el
mensaje.

2.4.1 PRÁCTICA_2_3 GUIADA (Pulsador simple)

Vamos a explicar cómo leer y operar con las entradas digitales, mediante una práctica guiada, de esta
forma, aprendemos practicando. Entra a Tinkerkad, ve a Circuits, crea un nuevo proyecto y llámalo
Práctica_2_3, inserta un Arduino y crea el circuito y el programa de la siguiente imagen.

Con respecto al circuito hemos empleado dos Componentes Básico, una resistencia de 2200 ohmios y
un pulsador de circuito impreso. La conexión de la resistencia es pull-down, está conectada entre la entrada (la

Arduino virtual en C y bloques Tema 2 / pág. 41 Marcos Tomás Leirós Otero


2 en este caso) y la masa o GND, esto asegura que la entrada tenga un 0 en caso de no estar pulsado el
pulsador, cabe recordad, que en electrónica digital no es lo mismo un 0 que NADA.

Con respecto al programa se ha empleado una instrucción de tipo SI/SI NO, la cual nos brinda poder de
decisión, en este caso imprime un mensaje en caso de que la entrada tenga un 1 lógico y otro en el caso
contrario, además si es nivel alto enciende el led build-in de la patilla 13.

Fíjate en el Monitor en serie lo que hace al simular, en caso de no pulsar se imprime L, y si pulsas se
imprime H todo el rato que esté pulsado (además de encender el led 13 interno).

NOTA: Puedes ver el funcionamiento en el Moodle, video Practica_2_3.mp4

RETO voluntario: Ten en cuenta que el pulsador es sustituible por cualquier otro elemento o sensor que tenga
salida digital, y el circuito funcionaría exactamente igual. Si quieres, prueba por tu cuenta a cambiarlo, y
simular por ejemplo por un “Interruptor deslizante” (se trata de un conmutador cuya patilla común es la
central, por lo que debes usar el pin central y el de cualquier lado), o con un “Sensor de inclinación”.

Seguidamente tienes disponible como extra un corto video de una práctica similar, pero montada en protoboard.

URL: https://www.youtube.com/watch?v=PC15jBx2UxI&list=PLV6cmKvnKRs5geApVORPW79U6s3wpa0Ht&index=5

2.4.2 PRÁCTICA_2_4 GUIADA (Pulsadores complejo)

Vamos ahora a combinar el uso de sentencias condicionales con las entradas y salidas digitales, de
manera que las mismas salidas actúen de manera diferente si detectamos señal en una entrada u otra, esto lo
haremos mediante otra práctica guiada. Entra a Tinkerkad, ve a Circuits, crea un nuevo proyecto y llámalo
Práctica_2_4, inserta un Arduino y crea el circuito y el programa de la siguiente imagen.

Arduino virtual en C y bloques Tema 2 / pág. 42 Marcos Tomás Leirós Otero


Con respecto al circuito hemos empleado tres leds con sus respectivas resistencias limitadoras de 220 ohmios
(Ω) conectados a las salidas digitales 6/4/2, y dos pulsadores con sus respectivas resistencias pull-down de 2
kiloohmios (kΩ) conectados a las entradas digitales 12/10.

Con respecto al programa ahora ya no es necesario juntar los dos bloques en una misma columna, ya que los
vamos a usar como dos programas concurrentes, por lo tanto, hay que dejarlo tal cual está en la imagen. Lo
que hace el programa es que si pulsamos el pulsador conectado a la entrada 12 los leds se van encendiendo de
derecha a izquierda y al contrario si se pulsa el 10, si se deja de pulsar cualquier pulsador se paga todo debido
al código puesto en la parte del SI NO.

NOTA: Puedes ver el funcionamiento en el Moodle, video Practica_2_4.mp4

2.4.3 PRÁCTICA_2_5 (Pulsadores con display) (A entregar)

Duplica la práctica anterior y llámala Práctica_2_5. Recuerda que el display tiene que quedarse como
cátodo común.

Deja los pulsadores con sus resistencias tal cual sin tocar. Pero borra los tres leds con sus resistencias.

Inserta un display de 7 segmentos en las salidas [1-7] con sus resistencias. Recuerda, la patilla 1 al A, la 2 al B y
así sucesivamente hasta G. El código quedará en dos columnas como en la práctica anterior, modifícalo como
sigue.

Haz que al pulsar el pulsador de la izquierda se ponga el display a 5, y sin soltarlo, descuente hasta 0 cada
segundo, quedándose en 0 parado tres segundos, reiniciando el ciclo si no se suelta el pulsador, si se suelta el
pulsador de borra todo.

Arduino virtual en C y bloques Tema 2 / pág. 43 Marcos Tomás Leirós Otero


Haz que al pulsar el pulsador de la derecha se ponga el display a 0, y sin solarlo, cuente hasta 5 cada segundo,
quedándose en 5 parado tres segundos, reiniciando el ciclo si no se suelta el pulsador, si se suelta el pulsador
de borra todo.

Es decir, el montaje virtual quedará así:

NOTA: Puedes ver el funcionamiento en el Moodle, video Practica_2_5.mp4

2.4.4 PRÁCTICA_2_6 SEMIGUIADA (Alarma) (A entregar la segunda parte)

Vamos a seguir trabajando con las entradas y salidas digitales, concretamente vamos a crear una
sencilla alarma, para ello requeriremos del sensor de presencia o PIR (tipo HC-SR501), cuya señal es digital, o
detecta o no detecta, no obstante, los reales poseen una resistencia variable para ajustar su sensibilidad.

Crea en Tinkerkad Circuits y crea el siguiente circuito, llámalo Práctica_2_6. Desde Componentes Todos,
inserta un Arduino, un Interruptor deslizante, una Resistencia de 5 kΩ, un Piezo (Buzzer), una Bombilla y un
Sensor PIR.

Arduino virtual en C y bloques Tema 2 / pág. 44 Marcos Tomás Leirós Otero


Con respecto al programa “escribe” el siguiente:

Al simular, no debería hacer nada si no activamos el interruptor deslizante, aunque lea el sensor PIR. Si esta el
interruptor encendido, y detecta el sensor PIR, sonará la alarma (enciende el altavoz del PC para escucharla) y
se encenderá la luz durante 12 segundos.

Para simular hay que tener claro que los sensores PIR no están detectando todo el rato, aunque estuviera una
persona delante de él, el sujeto tiene que moverse ya que realmente detecta el movimiento de calor, en el
simulador, cuando detecta se enciende en rojo un instante dando señal al mismo tiempo, y luego deja de dar
señal, es decir, da un pulso cada vez que detecta movimiento, haced clic en la bolita azul para que detecte de
nuevo. Por eso el programan necesita el “esperar”, para que siga sonando cuando deje de leer el PIR.

Ejercicio a entregar: Una casa normalmente tiene varios sensores, por lo tanto, tienes que ampliar esta
práctica para entregarla, con los siguientes puntos.

a) Sin tocar nada del circuito actual, añade un segundo sensor PIR y conéctalo a la entrada 4, la alimentación
pónsela en paralelo al otro sensor PIR. En cuanto al programa, deseamos que de igual que lea uno o el otro, el
efecto tiene que ser el mismo, sonar la alarma y brillar la luz un tiempo. Es muy fácil, y se hace evidente que
tendrás que usar un operador “OR”, si “lee uno” o “lee otro”.

NOTA: Puedes ver el funcionamiento en el Moodle, video Practica_2_6.mp4

RETO voluntario: ¿Serías capaz de poner por tu cuenta un tercer sensor PIR?

Arduino virtual en C y bloques Tema 2 / pág. 45 Marcos Tomás Leirós Otero


2.4.5 PRÁCTICA_2_7 STARTERS ARDUINO (Varios tonos) (A entregar)

Crea una práctica nueva y llámala Práctica_2_7, déjala vacía. Tinkercad tiene predefinido unos
proyectos de prueba, destinados al autoaprendizaje, es lo que se conoce como Starters, están en
Componentes, dentro de ellos, existe un apartado para Arduino. Extrae al tablero el proyecto Varios tonos.

Estudia el conexionado, estudia el programa de bloques. Simula.

Se pide añadir dos Buzzers con sus respectivas resistencias a las patillas 4 y 5, y ampliar el programa con otros
dos tonos a tu gusto.

2.4.6 PRÁCTICA_2_8 Voluntaria (Cuenta pulsaciones)

Trabajar con variables es muy importante, aunque a veces, se puede complicar en exceso. Por eso es
bueno practicar con ellas, te propongo aquí un reto voluntario.

Duplica la práctica 2.5 y guárdala como Práctica_2_8. Elimina el segundo pulsador y su resistencia. Conecta el
punto del display, cableando la patilla DP del display con la salida 0 del Arduino.

Debes conseguir que al comenzar la simulación aparezca en la pantalla le letra L. (con el punto encendido), y
luego mediante una variable contador, si pulsas tres veces el pulsador que aparezca la letra H (sin el punto).

NOTA: Puedes ver el funcionamiento en el Moodle, video Practica_2_8.mp4

Arduino virtual en C y bloques Tema 2 / pág. 46 Marcos Tomás Leirós Otero


3) EJERCICIOS A ENTREGAR

Tienes que entregar las prácticas 2.2 (con la segunda parte completada), la 2.5, la 2.6 y la 2.7 (con la
segunda parte completada, el reto es voluntario), para ello, tienes que conseguir un enlace de cada una para
compartir (repasa el tema 1 si no recuerdas como se comparte).

Puedes escribir directamente los dos enlaces en la entrega de la práctica, y/o añadirlos en un archivo de texto,
que tenga el nombre “Apellido_Nombre_Practicas2.txt/pdf/doc/docx/odt”.

4) EJERCICIO VOLUNTARIO

Como actividad extra no obligatoria, puedes entregar la práctica 2.8, para ello tienes que conseguir un
enlace para compartir (repasa el tema 1 si no recuerdas como se comparte).

Puedes escribir directamente el enlace en la entrega de la práctica junto a las otras, y/o añadirlo al archivo de
texto de las prácticas obligatorias, que tenga el nombre “Apellido_Nombre_Practicas2.txt/pdf/doc/docx/odt”.

NOTA: No borréis vuestras prácticas del Tinkercad, y dejadlas con sus respectivos nombres, algunas podrían
hacer falta en los temas 4 y 5, programación en C.

Arduino virtual en C y bloques Tema 2 / pág. 47 Marcos Tomás Leirós Otero

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy