icono mBlock centro




CURSO DE ARDUINO

con mBlock e IDE

Microlog+mBLock3+IDE3-8-9

PRÁCTICAS 3

DETECTORES, SERVOMOTORES Y CONTROL DE MOTORES


15. CNY70 - DETECTOR DE COLOR BLANCO


ORIGINAL


https://arduino.microlog.es/cny70-detector-de-obstaculo/
Material necesario:

1 Arduino UNO LOG 8431

1 Cable USB LOG 7509

1 Protoboard LOG 886

1 Optoacoplador CNY70 LOG 837

2 Resistencias de 220 Ohmios (rojo – rojo – marrón) LOG 748 220

1 Resistencia de 10K Ohmios (marrón – negro – naranja) LOG 748 10K

1 Diodo LED 5mm Verde LOG 722

7 Latiguillos board macho–macho LOG 7519


Circuito revisado:
El circuito de basa en el optoacoplador CNY70, formado por un diodo emisor de infrarrojos acoplado a un fototransistor que hace de receptor.
foto CNY70 patillaje
CNY70CNY70 3D
El circuito funciona de la forma siguiente:
  • El diodo emite constantemente una luz infrarroja (no es visible al ojo humano)
  • Si el receptor (fototransistor) recibe rayos reflejados, deja pasar la corriente (disminuye mucho su resistencia), de modo el valor que llega a la toma A5 de Arduino es de +5V aproximadamente.
  • Si el receptor NO recibe luz reflejada, no deja pasar la corriente (su resistencia se mantiene muy elevada), quedando la toma A5 de Arduino en un valor bajo, aproximadamente 0V.
  • Para que se reflejen los rayos infrarrojos, hay que situar un objeto de color blanco (o claro) a una distancia de entre 0 y 5mm.
CNY70 funcionamiento con 10K


Usando la configuración indicada arriba, las conexiones en el circuito CNY70 serían las siguientes:

Circuito CNY70 - 10KCNY70 conexiones 10K


Como las patillas A (Ánodo) y C (Colector) van conectadas al mismo punto (volyaje +5V) resulta más útil insertar el CNY70 en la Protoboard de forma inclinada, abriendo ligeramente sus patillas (¡con mucho cuidado!)

CNY70 patillas abiertasCNY70 colocada en PlacaCNY70 girado con placa+Patillas


El circuito completo, usando la entrada analógica A5 para detectar las señales recibidas en el fototransistor, quedaria así:

Detector de Obstáculo Claro
(pincha para verlo más grande)


Programa en mBlock:
Detector Color Blanco mBlock

Programa en IDE de Arduino:
Detector de Color Blanco IDE

Funcionamiento:
El circuito detecta obstáculos cercanos, preferiblemente de color blanco o un color claro:
  • Acerca diversos objetos con colores distintos y observa si se enciende el LED.
  • Con una resistencia de 10K prácticamente sólo detecta objetos de color blanco pegados al sensor. Es lo que se usa para detectar líneas blancas en los circuitos con robots seguidores de línea.
  • Si cambias la resistencia de 10K por otra mayor, podrás alejar más los objetos para que los detecte, aunque llegará un momento en que no se apague el LED en ningún caso.

RETOS:

15-B- CNY70 con luz alternante: Añade un LED de color Rojo:
  • El LED Verde se encenderá cuando se detecte un color Claro
  • y el Rojo cuando no se detecte, o el color sea oscuro.



16. MOVIENDO UN SERVOMOTOR


ORIGINAL


https://arduino.microlog.es/moviendo-un-servomotor/
Material necesario:

1 Arduino UNO LOG 8431

1 Cable USB LOG 7509

1 Miniservo 4,5V SG90 180º LOG 06

3 Latiguillos board macho–macho LOG 7519

Circuito revisado:
Existen distintos modelos de servomotores y según el fabricante, los colores de los cables son distintos.
En el caso del SG90 tenemos que:
  • La señal de Control se manda por el cable del extremo, de color NARANJA.
  • La alimentación transcurre por el cable central, de color ROJO.
  • La toma negativa o tierra (GND) corresponde al cable del otro extremo, de color MARRÓN.
En nuestro caso, conectamos la señal de control al PIN 9 de tipo ~PWM (señales de Pulsos)
Colores Servomotor SG90


No se necesita placa Board para conectar el Servomotor a Arduino:

Moviendo un Servomotor
(pincha para verlo más grande)

Programa en mBlock:
Moviendo Servomotor mBlock

Programa en IDE de Arduino:
Moviendo Servomotor IDE

RETOS:

16-B- Ciclo de posiciones del Servomotor: Modifica el programa creando un ciclo de posiciones del Servomotor::
  • Inicialmente se posicionará en 0º
  • Cada segundo incrementará su posición 30º
  • Cuando llegue a 180º volverá decreciendo cada segundo hasta volver a 0º
  • En definitiva, irá pasando por 0º, 30º, 60º, 90º etc hasta llegar a 180º y luego viceversa: 180º, 150º, 120º, 90º...
  • El ciclo se repetirá indefinidamente
Para este programa no es necesario usar el puerto Serie. Elimina todas las órdenes referidas al mismo.

Para simplificar el programa, lo más útil es hacer un bucle para los valores crecientes y otro para los decrecientes:







 


RETOS:

16-C- Posiciones del Servomotor y su lectura en el Monitor Serie: Amplía el programa anterior con el ciclo de posiciones del Servomotor::
  • Igual que en el apartado anterior, el servomotor irá cambiando su posición desde 0º hasta 180º y viceversa a razón de 30º cada segundo.
  • Se utilizará el puerto serie como Receptor, es decir, Arduino nos informará cada segundo de los grados en que se sitúa el servomotor, mandando la información por el Monitor Serie.
  • Una vez que compruebes los números que aparecen por el monitor serie puedes hacer cambios si detectas errores.




17. MOVIENDO UN SERVOMOTOR CON UN POTENCIÓMETRO


ORIGINAL


https://arduino.microlog.es/moviendo-un-servomotor-con-un-potenciometro/
Material necesario:

1 Arduino UNO LOG 8431

1 Cable USB LOG 7509

1 Protoboard LOG 886

1 Potenciómetro de 100K LOG 743

1 Miniservo 4,5V SG90 180º LOG 06

8 Latiguillos board macho–macho LOG 7519

Circuito revisado:
Mover un servomotor con un potenciómetro
(Pulsa para verlo más grande)

Programa en mBlock:
Para facilitar la comprensión del programa se han creado dos variables:
Variables para mover Servomotor con potenciómetro
  • POTENCIOMETRO: Almacena el valor obtenido del cursor del potenciómetro en la entrada analógica (A0). Se trata de un número entre 0 y 1023.
  • ANGULO: Es el valor que se pasa al servomotor. Debe estar entre 0 y 179. Se calcula mediante regla de tres, a partir del la variable anterior:
    • ANGULO = POTENCIOMETRO*179/1023
Mover Servomotor con Potenciómetro

En realidad no es necesario crear las variables, pudiendo realizarse todo el programa directamente en una orden que lo aglutine todo:
Mover Servomotor con Potenciómetro simplificado

Programa en IDE de Arduino:
El programa en el IDE reproduce la misma idea del anterior, usando dos variables:
  • potenciometro: Almacena el valor leído en la entrada analógica (A0), que depende de la posición del cursor del potenciómetro. Puede variar entre 0 y 1023.
  • angulo: Este valor será el que se escriba en el servomotor, por tanto debe estar entre 0 y 179. Se hace una regla de tres para calcularlo a partir de la variable anterior:
    • angulo = potenciometro*179/1023
Mover un Servo con un potenciómetro

RETOS:

17-B- Añade un LED que se encienda más o menos en función del valor del potenciómetro. utiliza para controlar su luminosidad una salida digital tipo ~PWM de Arduino
(por ejemplo la ~5)


El circuito sería el siguiente:

Mover un servomotor con un potenciómetro
(Pulsa para verlo más grande)

  • Para hacerlo en mBlock utiliza la orden "Fijar pin PWM __  a _____"
    • esta orden sólo es válida para los pines  ~3   ~5   ~6   ~9   ~10   ú  ~11 (los marcados con el signo ~)
    • pudiendo usar valores desde 0 hasta 255
Usar PWM mBlockUsar PWM mBlock 0-255

  • En el IDE de Arduino, el comando correspondiente es   analogWrite ( pin , valor );
    • sólo se puede usar para los pines  ~3   ~5   ~6   ~9   ~10   ú  ~11 (los marcados con el signo ~)
    • y admite valores entre 0 y 255.
analogWrite





18. CONTROL DE MOTORES CON PUENTE EN H


ORIGINAL


https://arduino.microlog.es/control-de-motores-con-puente-en-h/
Material necesario:

1 Arduino UNO LOG 8431

1 Cable USB LOG 7509

1 Protoboard LOG 886

2 Motores de CC de 1,5-4,5V y eje de 2mm LOG 00

2 Condensadores de poliéster de 100nF LOG 770

1 Puente en H - Driver de motores L293D LOG 874

3 pilas Alcalinas AA de 1,5V R6 LOG 570

1 Portapilas 3xR6 (para 3 pilas 1,5V AA) LOG 533

20 Latiguillos board macho–macho LOG 7519


Circuito revisado:

El control de motores se basa en el circuito
L293D
L293DPatillas del L293 y L293D

El circuito integrado L293D es un Driver de motores. Esto significa que:
  • Proporciona alimentación a los motores que se conecten, evitando que Arduino se sobrecargue.
  • En función de las señales de Arduino, puede manejar motores en distinta configuración:
    • 4 motores DC conectados en configuración Directa o Inversa. Con esta configuración podemos conseguir que un motor gire más o menos deprisa, pero no invertir su giro (ejemplo).
    • ó 2 motores DC conectados en configuración Push-Pull. En esta configuración puede hacerse que cada motor invierta su sentido de giro, además de controlar su velocidad (ejemplo)
    • ó 1 motor stepper, también llamado motor "paso a paso", es un motor de corriente continua en el que podemos elegir la posición angular (ejemplo)
Modos de conexión L293DModos de conexión L293D Stepper
(Para más detalles, consultar hoja de caracteristicas y conexiones del L293 y L293D)


En el ejercicio que vamos a realizar, usaremos 2 motores DC (de corriente continua) en configuración Push-Pull. Esta configuración utiliza dos de los amplificadores del L293D. Controlando ambos amplificadores, puede conseguirse que el motor gire en un sentido u otro:


AMPLIFICADORES MOTOR
1 2
0
0
PARO
1
0
HORARIO
0
1
ANTIHORARIO
1
1
PARO


El siguiente diagrama muestra el funcionamiento del L293D en configuración Push-Pull con dos motores:
Diagrama Lógico del L293 con 2 Motores en Push-Pull
 
Especificaciones:
  • El propio circuito integrado L293D tiene que tener su propia alimentación de +5V para poder funcionar. Esta toma de tensión se denomina Vcc1 y se obtendrá de Arduino.
  • Conviene situar un par de condensadores en paralelo con los motores para que el arranque y la parada sean más graduales, evitando picos de corriente. Además de eso, el propio circuito L293D incorpora diodos internos para evitar las corrientes inversas (el L293 "normal" no tiene estos diodos. Precisamente esta es la diferencia entre el L293 y el L293D)
  • Por otra parte, aunque Arduino es capaz de alimentar estos pequeños motores, para no sobrecargarlo se recomienda utilizar una alimentación externa para los motores. Por este motivo se incluye una batería, que se conecta en la toma llamada Vcc2.
  • Las tomas denominadas ENABLE (o EN) sirven para desactivar o activar los amplificadores correspondientes, de modo que:
    • Si se pone a "0", es decir, si se conecta ENABLE a 0V (GND), se desactiva los amplificadores asociados.
    • Si se pone a "1", o sea, ENABLE se conecta a +5V, se activan dichos amplificadores.
    • Por construcción del circuito, si se dejan estas tomas sin conectar, actúan como si se tuvieran un "1". Pero por precaución las conectaremos a +5V obtenidos de Arduino.
  • Hay que conectar a GND todas las tomas de tierra del L293D, así como el negativo de la pila.
El esquema final, con la conexión propuesta a Arduino, sería el siguiente:

L293D con Arduino y 2 Push-Pull

El circuito usando la placa Protoboard sería el siguiente:
2 motores Push-Pull con Arduino y Protoboard
(Pulsa para verlo más grande)

Programa en mBlock:
Para realizar el programa, vamos a suponer que ambos motores se montan en un chasis, de modo que la combinación de los giros de ambos motores produce un movimiento global de Avance, giro a la Derecha o a la Izquierda, movimiento hacia Atrás y Paro. Todo ello se explica en el siguiente apartado


MOVIMIENTO DE UN CHASIS-ROBOT CON DOS MOTORES

Montamos los dos Motores DC en un chasis para un Robot.
Los Motores DC (de corriente continua), producen un giro continuo que puede ser
Horario o Antihorario.
SENTIDO DE ROTACIÓN EFECTIVO: En un motor DC comercial ¿Cómo se entiende el sentido de una rotación?
Si el motor tiene alguna marca se supone que el sentido Horario es cuando el valor + se conecta en ese polo y el - en el contrario.
Sin embargo ¿Desde dónde se mira el sentido horario? ¿Desde el punto de vista del motor o desde el espectador externo?

Observamos aquí el punto de vista del motor. En este ejemplo se ha representado el Sentido Horario en color rojo y el Antihorario en verde.

Este es el punto de vista de un observador externo. Los mismos sentidos anteriores, desde esta perspectiva parecen "equivocados". Seguimos representando el sentido Horario en rojo y el Antihorario en verde.

Sin embargo, este criterio no siempre se respeta por el fabricante, por lo que será mejor comprobarlo en cada caso.


ROBOT MODELO
Para la práctica se utiliza un robot gobernado por dos Servomotores M1 y M2.
Para mantener la estabilidad y poder girar con facilidad, se sitúa una rueda loca en posición delantera
.

En el modelo se indican los sentidos de giro. Según el criterio del punto de vista del motor la flecha roja indica el sentido Horario y la verde el Antihorario.

Con los motores montados uno frente al otro, hay que estudiar los sentidos de giro necesarios para que el robot haga las cinco operaciones básicas:

MOVIMIENTOS DEL ROBOT:
Con este criterio, para conseguir...


 
(1) Que el robot AVANCE:
  • el motor M1 debe girar en sentido Horario y
  • M2 en modo Antihorario

(2) para que el robot vaya hacia ATRÁS:
  • M1 debe girar en modo Antihorario y
  • M2 en modo Horario


(3) El GIRO a la IZQUIERDA se consigue con:
  • M1 en modo Antihorario y
  • M2 también en Antihorario
(También se podría hacer con M1 parado, pero sería un giro más amplio y, por tanto, menos preciso)




(4) El GIRO a la DERECHA se logra con:
  • M1 en modo Horario y
  • M2 asímismo en modo Horario
(Igualmente se podría hacer con M2 parado, pero sería un giro más amplio y menos preciso)



(5) Finalmente, para que el ROBOT se PARE, los dos motores deben estar parados.



Para simplificar el programa, definimos previamente 5 bloques:
  • AVANCE
  • PARO
  • IZQUIERDA
  • DERECHA y
  • ATRÁS (no poner tilde en mBlock ni IDE)
ML18 nombre de bloques mBlock


Como se ha explicado antes, la definición de cada bloque dependerá del giro efectivo que hagan los motores y la conexión de sus terminales.
El programa siguiente es un ejemplo que habría que comprobar en la práctica:

ejemplo Bloques 18ML mBlock


Por último, se completaría el programa con los movimientos que queremos que haga el robot:

18ML 2 Motores con puente en H

Programa en IDE de Arduino:
El programa propuesto también utiliza funciones (equivalentes a los Bloques en mBlock) para definir los modos de Avance, giro a la Derecha o a la Izquierda, movimiento hacia Atrás y Paro.
Una vez definidos éstos, el bucle con la secuencia del programa queda mucho más sencillo.
Se podría redactar sólo los apartados void setup y void draw pero en lugar de cada orden AVANCE, DERECHA, IZQUIERDA, ATRAS y PARO habría que introducir las órdenes que contienen dichas funciones, resultando el programa más complicado de seguir.

2 Motores DC en Push-Pull - programa con Funciones


RETOS:

18-B- Se puede independizar el circuito del ordenador siguiendo los pasos siguientes:
    • Se conecta el positivo de la batería externa +Vcc2 a la toma Vin de Arduino (Voltaje de entrada).
    • Se elimina el cable que partía desde Arduino para propocionar voltaje de +5V al circuito.
    • Una vez cargado el programa a Arduino, se desconecta el cable USB.
2 motores Push-Pull alimentado con batería


18-C- Hasta ahora hemos conectado las tomas ENABLE del L293D al positivo (+5V) de Arduino o de la batería (+Vcc2).
Pero también se podrían conectar a una salida ~PWM de Arduino.
Las salidas ~PWM  proporcionan pulsos que permiten graduar el valor digital desde un nivel 0 (mínimo) hasta el nivel 255 (máximo).
Si una salida ~PWM se conecta a Arduino se podría Regular la velocidad de los motores, consiguiendo:
  • Que se detengan los motores si ENABLE =  0
  • Que giren al valor máximo si ENABLE = 255
  • Que giren a un valor intermedio usando un valor entre ENABLE = 0 y ENABLE = 255
Reescribe el programa para hacer una simulación de giro de los motores a distintas velocidades.

Los motores:
  • Deben estar 2 segundos detenidos.
  • Luego deben girar 2 segundos a una velocidad media.
  • Girarán otros 2 segundos a velocidad máxima.
  • A continuación girarán de nuevo a velocidad media.
  • Por último se detendrán otros 2 segundos.
  • Acto seguido, realizarán la misma secuencia pero girando en sentido contrario.
2 Push-Pull con L293D+Batería+Enable-3
(Pulsa para verlo más grande)



18-D- Vamos a añadir un potenciómetro para regular el nivel de velocidad de los motores.

Monta el circuito y diseña un programa para que haga lo siguiente:
  • La señal del cursor del potenciómetro se introduce en la entrada Analógica A5 produciendo un valor entre 0 y 1024.
  • Este valor se traducirá en otro que varíe entre 0 y 255.
  • Este último valor será el que salga por la entrada PWM~3 para alimentar las tomas ENABLE.
  • El resultado debe ser que, girando el potenciómetro se consiga variar la velocidad de ambos motores
  • En esta práctica es indiferente el sentido de giro de los motores.
Push-Pull con L293D + batería y Potenciómetro
(Pulsa para verlo más grande)




19. RECEPTOR INFRARROJO


ORIGINAL


https://arduino.microlog.es/receptor-infrarrojo/
Material necesario:

1 Arduino UNO LOG 8431

1 Cable USB LOG 7509

1 Protoboard LOG 886

1 Kit mando + Receptor infrarrojos TSOP LOG 8401

1 Pila de botón CR2032 de Litio de 3V para mando LOG 602

3 Latiguillos board macho–macho LOG 7519

Circuito revisado:

El circuito Receptor de infrarrojos (el llamado IR remote o TSOP) se conecta de la forma siguiente:

  • La patilla Positiva (+) se conecta a la toma de +5V de Arduino
  • La patilla Negativa (-) se conecta a la toma de tierra GND de Arduino
  • La patilla de Señal (Signal) se conectará a un PIN de Arduino. En nuestro caso hemos escogido el PIN ~5, que es del tipo ~PWM pero no es necesario que lo sea, de hecho al utilizarse como entrada es indiferente, pues la funcion ~PWM se emplea en el casi de las salidas
  • (En la extensión de mBlock que vamos a usar se asigna las patillas ~3 y ~9 para tareas específicas, por lo que no las emplearemos para la Señal del TSOP)
IR remote - TSOP + Arduino
(Pulsa para verlo más grande)

Programa en mBlock3
Se necesita un complemento para que mBlock disponga de los bloques necesarios para controlar el chip receptor de infrarrojos iRremote TSOP LOG 8401

INSTALACIÓN DE EXTENSIONES EN mBlock3

  1. En el caso de mBlock estos complementos se llaman extensiones. Para instalar una extensión accede al menú Extensiones > Administrar extensiones Ctrl+Shift+T
Administrar extensiones mB

  1. La versión de mBlock3 ya no tiene conexión con el servidor de extensiones, seguramente por ello aparece un mensaje que informa de un tiempo de conexión agotado.
Tiempo de conexión agotado

  1. Como se observa, en mBlock3 la búsqueda no produce ningún resultado:
Búsqueda extensiones en mB

  1. La solución para mBlock3 es buscar directamente la extensión deseada en la página https://mblock3-ext.mblock.cc/
Búsqueda en internet

  1. Todas las extensiones aparecen en la misma página, para buscar entre los resultados pulsa Ctrl+F y en el cuadro de búsqueda escribe IRremote para que se resalten todos los resultados con este texto. En este caso hemos encontrado un resultado. Pincha en el texto IRremote para descargar la extensión
Búsqueda en internet IR remote

La versión escogida la puedes descargar aquí para continuar con el tutorial: IRremote 0-1-3 (para mBlock3)
    Puedes encontrar otras versiones si en el cuadro de búsqueda escribes IR remote (separado) y las enlazamos también aquí aunque no todas se han probado:



  1. Una vez que disponemos del archivo descargado (IRremote 0-1-3 (para mBlock3) hay que incorporar esta extensión a mBlock.
Para ello accede al menú Extensiones > Administrar extensiones Ctrl+Shift+T y pulsa el botón Añadir Extensión.
Agregar extensiones en mB

  1. Cambia el tipo de archivo que aparece por defecto a zip file
Agregar extensiones archivo zip

  1. Carga la extenxión IRremote_0-1-3 que ahora sí aparece en la pantalla. Selecciónala y pulsa Abrir
Agregar extension IRremote.zip

  1. Si pulsamos en Instalado en el administrador de extensiones veremos que ya aparece IRremote junto a otras de las extensiones que ya están instaladas o vienen por defecto como Arduino.
Agregada extension IRremote.zip

  1. Las extensiones que están en uso son sólo las que están marcadas con un signo   en el listado que aparece al pulsar el menú Extensiones
Extensiones activas

  1. Puede verse los bloques de las extensiones activas accediendo al apartado Robots
Ahora mismo mBlock no está conectado a la placa de Arduino, por ello el indicador que hay junto a cada extensión está en rojo.
Bloques de las extensiones en ROBOTS

  1. El programa que realizaremos es el siguiente, que utliza bloques de las extensiones Arduino e IRremote.
Se usa el PIN ~5 de Arduino para recibir la señal del TSOP
El monitor Serie nos servirá para informarnos del valor del código recibido por el TSOP. Este código es el que emite el mando a distancia y debe ser distinto para cada botón del mando. El mando puede ser el que viene con el pack o incluso otro que emita señales infrarrojas que detecte el TSOP.

19ML LEER TECLAS IRremote

  1. Activando el Modo Arduino a través del menú Editar > Modo Arduino se observa la ventana exclusivamente con los bloques, la zona del programa y, a la derecha, la transcripción a código de Arduino, quedando abajo a la derecha el visor del Monitor Serie.
Editar - Modo Arduino
8 Incluir Librerias ZIP

  1. A continuación podríamos conectar la placa de Arduino al puerto serie correspondiente: COM3  en  el ejemplo
Después activaríamos la conexión en Conectar > Puerto Serie > COM3
Conectar Puerto Serie COM3

Y subiríamos el programa a Arduino pulsando el botón Subir a Arduino
Subir a Arduino mB


Al subir el programa a Arduino se desconecta el puerto Serie y no podríamos usar el Monitor Serie. Tendríamos que activar de nuevo el Puerto Serie en Conectar > Puerto Serie > COM3
Conectar Puerto Serie COM3

Y escogeríamos que se muestre la información por el Monitor Serie en modo de caracteres
Modo de caracteres - Monitor Serie

Sin embargo hay un problema que hace que no funcione bien el programa. Resulta que el Monitor Serie de las placas de Arduino básicas funciona a 9600 baudios, pero en la configuración por defecto que genera mBlock esta velocidad es de 115200 baudios. Esta velocidad tan grande no es capaz de gestionarla la placa de Arduino en muchos casos, de modo que no se recibe nada por el puerto serie. Para combiar ésto sólo podemos hacerlo desde el IDE.
velocidad 115200 baudios
  1. Para solucionar este problema, pulsa el botón Editar con IDE de Arduino y, si tienes instalado este programa, se cargará el código en el IDE
Editar con IDE de Arduino


  1. Rectifica el dato de los baudios poniendo 9600
9600 Baudios IDE

  1. Conecta la placa Arduino y en el menú Herramientas de IDE escoge la Placa y el Puerto adecuados. En nuestro ejemplo Placa Arduino UNO y puerto COM3.
Herramientas-Placa-Puerto

  1. Por último, en el menú Herramientas activa el Monitor Serie del IDE para recibir los datos
Herramientas-Monitor Serie IDE

Si aparece un mensaje de error indicando que el Puerto Serie está ocupado seguramente sea porque debes desconectarlo de mBlock
Puerto COM3 busy

Para desconectar el puerto Serie de mBlock hazlo en el mismo menú "Conectar" en que lo activaste pero haciendo que desaparezca el signo   junto al puerto COM
COM3 desactivado mB
  1. Activa de forma definitiva el monitor Serie en el IDE
Activar Monitor Serie IDE
 
Verás que cada vez que pulsas un botón del mando a distancia aparece un código distinto:
Monitor Serie Recibiendo Códigos


Es posible que no te funcione del todo bien. Has de tener en cuenta que para hacer ciertas tareas mBlock crea ciertas funciones que hacen más complejo el programa y ésto podría interferir en el resultado, además de que la extensión utilizada (IRremoteNEW) no es la "oficial" de Arduino. Después vamos a hacerlo directamente con el IDE a ver si funciona mejor.


RETOS: Ejercicio 19A - Instala la extensión IRremote en mBlock 3

RETOS: Ejercicio 19B - Una vez instalada la extensión IRremote en mBlock 3, realiza el programa propuesto.
Anota en una tabla como la siguiente a qué código corresponden las teclas inferiores del mando:


Mando TSOP de 17 teclas
(El mando que usamos es el modelo de 17 teclas)

Tabla de ´´odigos Mando de 17 teclas
Programa en IDE de Arduino:
CONFIGURACIONES PREVIAS
Para poder manejar el receptor infrarrojo (iR remote) hay que instalar las "librerías" adecuadas para controlarlo. Estas "librerías" son programas que contienen órdenes diseñadas especialmente para trabajar con dichos aparatos. Las librerías son algo así como los "drivers".

Sigue el proceso siguiente para instalar la librería IRremote que te permitirá controlar el Receptor de infra-Rojos
TSOP LOG 8401

(NOTA: TSOP significa Transmission System Operator Package)


La extensión de mBlock que hemos usado para controlar el TSOP se basa en la librería IRremote 1.0.0 del IDE. Aunque existen versiones más actuales, es útil utilizar ésta porque sirve para nuestros propósitos y, al ser la que usa mBlock, nos facilita el trabajo porque los comandos los genera el propio programa.

¿Cómo hacemos para obtener la versión de IRremote 1.0.0?

Hay dos formas de hacerlo:
  • Procedimiento 1 - se tarda más debido a que el Administrador de extensiones del IDE va muy lento.

(Pulsa cualquiera de las imágenes para verla en tamaño grande)

PROCEDIMIENTO 1
Instalar la librería IRremote 1.0.0 desde el buscador del IDE de Arduino
  1. Para instalar librerías para el IDE de Arduino accede al menú Programa > Incluir Librería > Administrar Bibliotecas... (Ctrl+Mayús+I)
1 Administrar Bibliotecas

  1. En este momento se actualizará la lista de las librerías que están instaladas
2 Administrar Bibliotecas

  1. Escribe en el Cuadro de Búsqueda superior el texto IRremote
3 Administrar Bibliotecas

  1. Tras unos segundos se muestra en la pantalla distintas librerías en las que se incluye el término IRremote. Escoge la denominada IRremote by shirriff en la versión deseada (en este caso la 1.0.0) y pulsa Instalar
4 Administrar Bibliotecas


Pero ¿Y si tenías ya instalada otra versión de IRremote como por ejemplo la 4.4.0? Entonces te aparecerá esa librería como INSTALADA y tendrás que escoger en el desplegable de abajo la versión que prefieres (en nuestro caso la 1.0.0) y pulsa Instalar
4 Administrar Bibliotecas
4 Administrar Bibliotecas

  1. Tras el proceso, aparecerá la nueva versión 1.0.0 de la librería como INSTALADA
5 Administrar Bibliotecas

  1. Cierra la ventana de las librerías. En la ventana principal del IDE de Arduino accede de nuevo al menú Programa > Incluir Librería y verás que en la lista que se ofrece aparece la librería recién instalada: IRremote (al estar recién instalada aparecerá al final del todo)
Pulsa sobre el texto IRremote para agregarla al programa.
6 Administrar Bibliotecas

  1. Al pulsar sobre IRremote el volvemos a la pantalla inicial y en el programa vemos que ya se ha incluido la referencia a una librería del sistema.
En este caso aparecen dos librerías:
  • La primera es IRremote.h que es la que continene las órdenes que vamos a utilizar en la práctica
  • La otra es IRremoteInt.h que sirve para programar Interrupciones" en el microcontrolador (microprocesador de Arduino), que se usan cuando Arduino tiene que conmutar entre distintos procesos que exigen una 'atención constante' de modo que para el usuario parezca que los controla todos a la vez. Igualmente sirve para establecer temporizadores. Todo esto son funciones avanzadas que no usaremos y podríamos borrar esa referencia a la librería IRremoteInt.h
7 Administrar Bibliotecas

Si en el apartado de IRremote del  Gestor de librerías pulsamos en More info se nos abre la página de github con información sobre la librería IRremote pero no se encuentra allí el enlace a la versión IRremote-1.0.0 ¿Entonces cómo podemos obtener los archivos IRremote para otro ordenador?
NOTA: en la plataforma github sólo se ofrecen las versiones de IRremote a partir de la 4.0.0 y en las explicaciones sólo se comenta las diferencias entre las versiones 2, 3 y 4 (aunque la 2 es en realidad muy similar a la 1 y los comandos que nos interesan son los mismos).
8 Administrar Bibliotecas

  1. Para obtener el archivo de IRremote, lo más fácil es acceder a la guía de referencia de Arduino o buscar directamente en internet la palaba IRremote y de este modo acceder a la información sobre dicha librería que aparece en la nombrada guía de referencia de Arduino: https://www.arduino.cc/reference/en/libraries/irremote/

8 Administrar Bibliotecas
8 Administrar Bibliotecas
8 Administrar Bibliotecas


  1. En esta página podemos acceder a todas las versiones de esta librería, desde la inicial (la 1.0.0) hasta la que es la última a fecha de redacción de este tutorial: la 4.4.0 (actual)
De este modo, podremos descargar la versión deseada en formato ZIP: IRremote-1.0.0.zip
8 Administrar Bibliotecas

  1. Guarda el archivo en un lugar adecuado para que el IDE de Arduino lo encuentre. Un buen sitio sería en la ruta Mis documentos \ Arduino \ libraries
12 Administrar Bibliotecas
En dicha carpeta (creada cuando se instaló Arduino en el ordenador) suele haber un archivo de texto llamado "readme" que simplemente ofrece una dirección donde se explica cómo instalar librerías. La dirección aludida es http://arduino.cc/en/Guide/Libraries
Readme libraries





Vamos a ver cómo sería el procedimiento si partimos de un archivo ya descargado: IRremote-1.0.0.zip

PROCEDIMIENTO 2
Instalar IRremote-1.0.0 a partir de un archivo ya descargado

  1. Vamos a instalar la librería IRremote desde un archivo ya descargado. Utiliza este archivo: IRremote (versión 1.0.0)
Guarda el archivo anterior en una carpeta adecuada. Por ejemplo en Mis documentos \ Arduino \ libraries
Si ya habías instalado previamente otra versión de IRremote aparecerá todo en la misma carpeta:
1 Administrar Bibliotecas

  1. No podrás instalar una versión anterior desde un zip si ya tienes una versión más actualizada instalada. Lo primero que debes hacer es borrar los archivos y carpetas de la versión anterior (borrar IRremote-4.4.0 en este caso)
2 Administrar Bibliotecas
2b Administrar Bibliotecas

  1. Ahora sí, accede al menú Programa > Incluir Librería > Añadir biblioteca .ZIP
3 Incluir Librerias ZIP

  1. Busca el archivo de IRremote-1.0.0 descargado en tu carpeta en la ruta: Mis documentos \ Arduino \ libraries 
En el apartado Archivos de tipo: debes escoger Ficheros Zip o Carpetas
4 Incluir Librerias ZIP

Y entonces seleccionar el archivo deseado IRremote-1.0.0 en la ruta: Mis documentos \ Arduino \ libraries
4b Incluir Librerias ZIP

  1. Acabado ésto, aparece un mensaje en la zona de notificaciones indicando que se ha añadido la librería a Arduino y, por tanto. aparece disponible en el menú "Incluir Librería".
5 Incluir Librerias ZIP

  1. Para utilizar en el programa la librería accedemos al menú  Programa > Incluir Librería  y observamos que aparece en el listado (si está recién instalada estará en la zona del final)
6 Incluir Librerias ZIP

  1. Ya se incluyen los comandos para utilizar la librería en el programa actual. Como se dijo antes aparecen dos librerías aunque la que nos interesa es la primera.
7 Incluir Librerias ZIP

  1. Si accedes a la ruta donde descargaste el archivo ( Mis documentos \ Arduino \ libraries) verás que automáticamente aparece descomprimido en una carpeta con el mismo nombre mostrándose sólo la versión que vamos a usar inicialmente: IRremote-1.0.0
8 Incluir Librerias ZIP




Acabado cuaquiera de estos procedimientos, podemos realizar el programa básico del receptor infrarrojo en el IDE. Para diseñarlo nos hemos basado en las instrucciones creadas por mBlock, en las explicaciones de la web github y en los propios ejemplos incluidos en la carpeta de IRremote-1.0.0
Ejemplo IRremote

El programa para el IDE de Arduino usando la librería IRremote-1.0.0 sería el siguiente:
Ejemplo IRremote



Circuito propuesto:
Vamos a recordar el circuito propuesto para el Receptor de infrarrojos (el llamado IR remote o TSOP):
  • La patilla Positiva (+) se conecta a la toma de +5V de Arduino
  • La patilla Negativa (-) se conecta a la toma de tierra GND de Arduino
  • La patilla de Señal (Signal) se conectará a un PIN ~PWM de Arduino. En nuestro caso hemos escogido el PIN ~5

IR remote -Placa+ TSOP + Arduino
(Pulsa para verlo más grande)

RETOS: Ejercicio 19C - Instala la extensión IRremote-1.0.0 en el IDE de Arduino siguiendo alguno de los procedimientos anteriores

RETOS: Ejercicio 19D - Realiza el programa estudiado con el IDE usando la librería IRremote-1.0.0 y comprueba su funcionamiento mediante el Monitor Serie
Para ello, completa una tabla como la siguiente, con los Códigos de las teclas indicadas del mando del TSOP

Mando TSOP de 17 teclas
(El mando que usamos es el modelo de 17 teclas)

Tabla de ´´odigos Mando de 17 teclas

El programa para el IDE de Arduino usando la librería IRremote-1.0.0 tal como hemos visto, sería
:
Ejemplo IRremote


RETOS: Ejercicio 19E - Realiza un programa que controle la luminosidad de un LED mediante el mando a distancia del TSOP:
IR remote -Placa+ TSOP + Arduino
(Pulsa para verlo más grande)

PARTICULARIDADES DEL CIRCUITO:

  • El LED se conectará al PIN PWM ~5 de Arduino
  • El Receptor TSOP se conectará al PIN ~10 (observa que es un PIN distinto al usado en los circuitos anteriores). Como ya hemos dicho antes, al usarse como ENTRADA no es necesario que sea ~PWM
  • Al pulsar la tecla "0" (CERO) el LED se iluminará a un valor PWM intermedio: 120
  • Cada vez que se pulsa la tecla "#" el valor PWM asignado al LED aumentará en 15
  • Cada vez que pulsamos la tecla "*" el valor PWM asignado al LED disminuirá en 15
  • PWM sólo puede variar entre 0 y 255

Previamente deberás anotar los códigos necesarios para las teclas. Éstos varían según la libreria usada:


 TECLA
*
0
#
LIBRERÍA
IRremote 1.0.0
código:
código: código:

Ejemplo de programa con IRremote-1.0.0:
Ejemplo IRremote
NOTA: Lo relacionado con el Monitor Serie se puede borrar. Su utilidad es como realimentación, para comprobar lo que va ocurriendo en el programa


RETOS: Ejercicio 19F - Basándote en el anterior, realiza un programa que controle la luminosidad de un LED RGB mediante el mando a distancia del TSOP:
IR remote -Placa+ TSOP + Arduino
(Pulsa para verlo más grande)

LAS CONDICIONES SON LAS SIGUIENTES:

  • El LED RGB se conectará a los PINES PWM de Arduino ~5 (Rojo) ~6 (Verde) y ~9 (Azul)
  • El Receptor TSOP se conectará al PIN ~10 (como antes)
  • Las teclas numéricas del 1 al 9 serán las que controlan la luminosidad de cada uno de los colores de forma similar al proyecto anterior:
    • Las teclas 1, 2 y 3 controlan el color Rojo (haciendo que el valor disminuya 15 / se ajuste a 120 / o aumente 15 respectivamente)
    • Las teclas 4, 5 y 6 controlan el color Verde (para que el valor disminuya 15 / sea 120 / o aumente 15 respectivamente)
    • Las teclas 7, 8 y 9 controlan el color Azul (logrando que el valor disminuya 15 / se fije a 120 / o aumente 15 respectivamente)

Previamente deberás anotar los códigos necesarios para las teclas. Éstos varían según la libreria usada:


LIBRERÍA
PWM-15 PWM=120
PWM+15
IRremote 1.0.0
PIN ~5 "ROJO"
1
2
3
código:
código: código:
PIN ~6 "VERDE"
4
5
6
código: código: código:
PIN ~9 "AZUL"
7
8
9
código: código: código:



RETOS: Ejercicio 19G - Realiza el programa de control de un móvil formado por 2 motores DC en configuración Puente, desde el mando a distancia:
  • Completa el circuito con un receptor TSOP que se conectará al PIN ~3
  • El Receptor TSOP permitirá el control del movimiento de los motores usando el mando a distancia. Se pueden controlar muchas variables pero inicialmente te pedimos que hagas al menos lo siguiente:
    • Las teclas de control serán las flechas y el botón OK
    • Según la flecha pulsada, el móvil se moverá en esa dirección, haciendo los cambios de giro de los motores pertinentes.
    • El botón OK servirá para parar el móvil completamente.

    Como ampliación, harás que 3 botones controlen la velocidad, cambiando el valor PWM que les llega a los motores. Eso será en la práctica siguiente pero te lo adelanto para que lo tengas en cuenta y no borres el apartado de la variable PWM porque te puede servir en la práctica siguiente.

Circuito propuesto:

IR remote + Motores DC - puente H
Lo más fácil es que combines las ideas que se han ido sembrando en estas prácticas. Por ejemplo, el programa para el control de motores con el dedicado al receptor TSOP a partir del mando a distancia:
Mando TSOP de 17 teclasTabla de ´´odigos Mando de 17 teclas
  • Lo primero que debes hacer es identificar los códigos de las teclas y anotarlo.
  • Tendrás que cambiar las teclas asignadas a las distintas funciones.
  • Respecto a la variable PWM puedes dejarla, porque te puede servir para la práctica siguiente.
  • Una vez comprobado el funcionamiento del programa puedes quitar los mensajes del monitor Serie.
Ejemplo IRremote

  • Localizadas las teclas, define las funciones que vas a necesitar (fíjate en el ejemplo siguiente) y en lugar de hacer una SECUENCIA de movimientos haz que, al pulsar cierta tecla del mando, el programa "llame" a la función correspondiente:
2 Motores DC en Push-Pull - programa con Funciones

RETOS:Ejercicio 19H (Ampliación) - Completa el sistema de control del ejercicio anterior de la forma siguiente:
    • Haz que otros 3 botones del mando controlen la velocidad, cambiando el valor PWM de las tomas ENABLE (1 y 9) del L293D.
    • Para ello hay que cambiar el circuito, alimentando las tomas ENABLE (1 y 9) del L293D a partir del PIN ~11 de Arduino.
    • Usa las mismas teclas y criterios que en el ejercicio 19E:
      • Al pulsar la tecla "0" (CERO) el móvil se moverá con un valor PWM intermedio: 120
      • Cada vez que se pulsa la tecla "#" el valor PWM asignado al PIN~11 aumentará en 15
      • Cada vez que pulsamos la tecla "*" el valor PWM asignado al PIN~11 disminuirá en 15
      • PWM sólo puede variar entre 0 y 255

Circuito propuesto:

IR remote + Motores DC - puente H
Las teclas de  control son las que están situadas en la mitad inferior del mando:
Mando TSOP de 17 teclasTabla de ´´odigos Mando de 17 teclas

Ahora cobra sentido mantener la variable PWM y las órdenes asociadas, porque servirán para completar las especificaciones del programa:

Ejemplo IRremote

Combina ambos códigos para diseñar un programa que cumpla con todas las especificaciones.
2 Motores DC en Push-Pull - programa con Funciones




MATERIAL NECESARIO PARA TODAS LAS PRÁCTICAS ANTERIORES


ORIGINAL


https://arduino.microlog.es/
Material necesario:

1 Arduino UNO LOG 8431

1 Cable USB LOG 7509

1 Protoboard LOG 886

7 Resistencias de 220 Ohmios (rojo – rojo – marrón) LOG 748 220

3 Resistencias de 470 Ohmios (amarillo – morado – marrón) LOG 748 470

2 Resistencias de 1K Ohmios (marrón – negro – rojo) LOG 748 1K

1 Resistencia de 10K Ohmios (marrón – negro – naranja) LOG 748 10K

1 LDR LOG 731

1 Pulsador para circuito impreso LOG 542

1 Zumbador piezo-eléctrico activo LOG 714

1 Diodo de silicio 1N4007 LOG 760

1 Transistor NPN BC547 LOG 751

1 Hélice de 4 aspas para ejes de 2mm LOG 22

1 Led RGB ánodo común LOG 730

1 Display de 7 segmentos Cátodo Común de 1 dígito SC39-11 LOG 831-CC11

1 Optoacoplador CNY70 LOG 837

2 Diodos LED 5mm Rojo LOG 724

2 Diodos LED 5mm Amarillo (Ámbar) LOG 723

2 Diodos LED 5mm Verde LOG 722

1 Potenciómetro de 100K LOG 743

1 Miniservo 4,5V SG90 180º LOG 06

2 Motores de CC de 1,5-4,5V y eje de 2mm LOG 00

2 Condensadores de poliéster de 100nF LOG 770

1 Puente en H - Driver de motores L293D LOG 874

3 pilas Alcalinas AA de 1,5V R6 LOG 570

1 Portapilas 3xR6 (para 3 pilas 1,5V AA) LOG 533

1 Kit mando + Receptor infrarrojos TSOP LOG 8401

1 Pila de botón CR2032 de Litio de 3V para mando LOG 602

20 Latiguillos board macho–macho LOG 7519








arriba

icono mBlock centro