Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
AVANCE DE PROYECTO SENSOR TCS3200 Y BUZ
A continuación, se hará una pequeña muestra de la primera parte del proyecto robot detector de colores operado por voz.
Para la creación del primer avance se necesita:
• Tarjeta STM32L476
• Plataforma virtual Mbed, https://www.mbed.com/en/
• Software Cool term (Permite crear una interfaz para recibir y enviar telecomandos)
• Jumpers
• Sensor de color TCS3200
• Buzzer
MANUAL DEL USUARIO¶
RECONOCIMIENTO DE COLORES Y GENERACIÓN DE TONOS¶
La programación que se realizó reconoce colores determinados (Rojo, azul, verde y amarillo) por medio del sensor de color TSC3200 que se encargara de identificar algún color devolver la traducción al CoolTerm, y por medio de un buzzer se escuchara un sonido ya programado (DO, RE, MI, FA, SOL) con una frecuencia especifica en el tiempo seleccionado por el usuario.
A continuación, encontrará la descripción de los componentes utilizados para la ejecución de las funciones del código.
STM32L476¶
La placa STM32 Núcleo proporciona una forma asequible y flexible para que los usuarios prueben nuevas ideas y construyan prototipos con cualquier línea de microcontrolador STM32, eligiendo entre las diversas combinaciones de rendimiento, consumo de energía y características. La tarjeta tiene unas especificaciones básicas que debes de tener en cuenta
• Habilitado para mbed (http://mbed.org)
• Alimentación placa Flexible
o VBUS USB o fuente externa (3,3 V, 5 V, 7-12 V)
o Punto de Acceso para gestión de potencia
• Tres LEDs
o Comunicación USB (LD1) LED de usuario (LD2) de LED (LD3)
• Dos pulsadores: usuario y reinicio
• Capacidad de reenumeración USB: tres interfaces diferentes compatibles con USB
o Puerto Com Virtual
o Almacenamiento en masa
o Puerto de depuración
Como conectar la tarjeta STM32L476:
La tarjeta trae un puerto mini USB, que se conecta por medio del cable al puerto USB del computador donde se realizará la programación, de esta manera la tarjeta estará conectada. En el momento que se compila un nuevo programa se dará cuenta que uno de los led de la tarjeta titila varias veces indicando el proceso de compilado (Ver compilación en la descripción de MBED).
SENSOR DE COLOR TCS3200¶
• Alta resolución de conversión de luz a frecuencia.
• Frecuencia de salida Programable en color y escala completa.
• Se comunica directamente con un microcontrolador.
• Voltaje de funcionamiento: 2.7-5.5 V.
• Rango de error típicamente de 0,2% a 50 kHz.
• Coeficiente de temperatura 200 ppm/°C .
PRINCIPIO DE FUNCIONAMIENTO¶
El TCS3200 va detectar colores rojo, verde, azul y amarillo. en el monitor serial se mostrara la cantidad que color es de acuerdo a los rangos que definimos, estos deben ser previamente analizados desde el datasheet para poder ser definidos.
FUNCION DE TERMINALES¶
OPCIONES¶
COOLTERM¶
Es una sencilla aplicación que permite tener una terminal para los puertos serie, su menú de configuración está muy completo, permitiendo elegir desde una lista los puertos disponibles y seleccionar su velocidad y demás parámetros; despliega los datos recibidos tanto en ascii como en hexadecimal. Sin duda una gran aplicación para los que hacemos uso de este protocolo constantemente para conexión del ordenador con microcontroladores, módulos USB-serial, GPS, controladores de servos, etc. Lo mejor de todo está bajo una licencia freeware y es multiplataforma. Con CoolTerm se lograra generar las señales necesarias para que el programa ejecute las funciones.
Para obtener coolterm debemos ingresar a la siguiente pagina http://freeware.the-meiers.org/
La descarga se realiza de acuerdo al sistema operativo de la computadora en donde se trabaje.
El Coolterm se descarga en una carpeta comprimida en donde se debe seleccionar el ejecutable.
Seleccionar ejecutar.
Seleccionamos “Connect“
Por medio de este programa se envía la señal FE 01 para que se ejecute el programa
MANUAL TECNICO¶
Para la programación de la tarjeta STM32L476 se utilizo MBED, esta es una plataforma y sistema operativo para dispositivos conectados a Internet basados en microcontroladores ARM Cortex-M de 32 bits. La principal ventaja es que puede compilarse en la nube, es decir desde Internet. Mbed se desarrolló pensando en IoT – Internet of Things – El Internet de las Cosas. Además está enfocado a la programación de sistemas embebidos basados en arquitecturas ARM. Por ejemplo, existen más de 100 tarjetas de desarrollo que se puede elegir. Todas ellas con arquitectura ARM. El compilador que usa mbed está en la “nube”. En otras palabras, se requiere de un explorador web como chrome, firefox o explorer para crear tus aplicaciones y programas.
¿COMO CREAR UN NUEVO PROYECTO EN MBED?¶
Para iniciar a crear el código se debe acceder a la pagina https://www.mbed.com/en/ en donde encontraran lo siguiente:
Damos click sobre el usuario de allí se despliega la siguiente pagina en donde seleccionamos Sing up
Registramos los datos para crear un usuario.
Una vez creado el usuario ingresamos a la plataforma
Ventana de inicio al programa, seleccione “compiler”
Se abrirá la ventana donde se debe seleccionar la tarjeta a utilizar que en este caso es la STM32L476
Seleccionar tarjeta
Al seleccionar la tarjeta se encontraran dos ventanas, la primera da una descripción general de la tarjeta y en la segunda se encuentra el “Pinout” de la misma.
Ahora ya esta listo para crear su codigo.
DIAGRAMA DE CONEXIÓN GENERAL¶
CODIGO¶
MAIN.CPP¶
• Llamar librarías
- include "mbed.h"
- include "scolor_TCS3200.h"
• Creación de variables
Command variable del Periferico serial
USBTX, USRX Pines de la tarjeta
Serial command(USBTX, USBRX);
• Periferico PWM
Variable mybuzzer
Pin de la tarjeta D9
PwmOut mybuzzer(D9);
S0, S1, S2, S3, OUT
• Pines a utilizar del sensor
scolor_TCS3200 scolor(PA_8, PB_10, PB_4, PB_5, PB_3);
Pines a utilizar de la tarjeta
• Definición de telecomandos
- define INITCMD 0xFE
- define INITELE 0xFE
- define CMD 0x01
- define DO 100
- define RE 150
- define MI 200
- define FA 250
- define SO 300
• Declaración de variable tipo uint
uint8_t tono; variable almacena la frecuencia del buzzer
uint8_t tiempo; varable almacena los tiempos del buzzer leer_datos()
uint8_t cmd;
• Definición de las funciones
void setup_uart();
void buzzer_on(uint8_t tono);
void leer_datos();
void leer_color();
• Programa principal
int main() {
setup_uart();
while(1){
leer_datos();
• Condicion para señal enviada desde coolterm, si dicha condición de igualación se cumple, la acción programada se ejecutará de lo contrario no.
if (cmd==CMD){
leer_color();
}
}
}
• Inicio de board y asignación de la velocidad de comunicación
void setup_uart(){
command.baud(115200);
}
• Función leer datos: se encarga de cargar el valor recibido a la variable cmd.
void leer_datos(){
cmd=command.getc();
}
• Función leer color: se encarga de cargar el valor leído por el sensor a cada una de las variables respecto al periodo. void leer_color(){
long red = scolor.ReadRed();
long green = scolor.ReadGreen();
long blue = scolor.ReadBlue();
long clear = scolor.ReadClear();
• Inicio de buzzer en 0
mybuzzer.write(0);
• Condicionales con respecto a la lectura del sensor en este caso rojo para ejecutar una acción.
if (red <=800) lee el rojo----
{
if (green>=1200 and green <=1500)
{
if (blue>=1200 and blue <=1500)
{
• Si la condición dicha se cumple, se visualiza |FE 01| y se enciende el buzzer con un tono DO definido al inicio del programa durante 4 segundos.
printf("|FE 01|\n");
mybuzzer.period_ms(DO);
mybuzzer.write(0.5);
wait_ms(4000);
mybuzzer.write(0);
} } }
• Condicionales con respecto a la lectura del sensor en este caso verde para ejecutar una acción.
if (red <=2700) lee el verde --------
{
if (green>=900 and green <=1500)
{
if (blue>=1400 and blue <=2000)
{
• Si la condición dicha se cumple, se visualiza |FE 03| y se enciende el buzzer con un tono RE definido al inicio del programa durante 4 segundos.
printf("|FE 03|\n");
mybuzzer.period_ms(RE);
mybuzzer.write(0.5);
wait_ms(4000);
mybuzzer.write(0);
}
}
}
• Condicionales con respecto a la lectura del sensor en este caso Azul para ejecutar una acción.
if (red<=2400) lee el azul--------
{
if (green>=800 and green <=1000)
{
if (blue>=600 and blue <=800)
{
• Si la condición dicha se cumple, se visualiza |FE 02| y se enciende el buzzer con un tono MI definido al inicio del programa durante 4 segundos.
printf("|FE 02|\n");
mybuzzer.period_ms(MI);
mybuzzer.write(0.5);
wait_ms(4000);
mybuzzer.write(0);
}
}
}
• Condicionales con respecto a la lectura del sensor en este caso Amarillo para ejecutar una acción.
if (red <=700) lee el amarillo--------
{
if (green>=500 and green <=700)
{
if (blue>=500 and blue <=1500)
{
• Si la condición dicha se cumple, se visualiza |FE 04| y se enciende el buzzer con un tono FA definido al inicio del programa durante 4 segundos.
printf("|FE 04|\n");
mybuzzer.period_ms(FA);
mybuzzer.write(0.5);
wait_ms(4000);
mybuzzer.write(0);
}
}
}
• Condicionales con respecto a la lectura del sensor en este caso de ser errada para ejecutar una acción.
if (red <=200) lectura errada--------
{
if (green <=300)
{
if (blue <=300)
{
• Si la condición dicha se cumple, se visualiza |FE 00| y se enciende el buzzer con un tono SO definido al inicio del programa durante 4 segundos.
printf("|FE 00|\n");
mybuzzer.period_ms(SO);
mybuzzer.write(0.5);
wait_ms(4000);
mybuzzer.write(0);
}
}
}
• Esta parte del programa se usa para visualizar las lecturas de las cuatro variables roja, verde, azul, amarillo y clear,
printf("RED: %5d GREEN: %5d BLUE: %5d CLEAR: %5d \n ", red, green, blue, clear);
}