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.
You are viewing an older revision! See the latest version
Homepage
SISTEMA DE ALMACENAMIENTO¶
- Brian Alexis Cárdenas Castañeda 67574
- Valeria Alejandra Bravo Bonilla 67577
- Angela Manuela González Plazas 60534
En el siguiente informe se presentará la compilación de dos manuales; uno técnico y uno del usuario respectivamente; En el manual técnico se incluirá todo lo relacionado con las especificaciones de la tarjeta de desarrollo STM Nucleo 32F446-RE con la cual estaremos desarrollando el proyecto, indicaciones de conexión, desglose de los componentes que utilizamos más una explicación sustancial del código con el que se ha trabajado; en el manual del Usuario se explicará cómo y cuales son los pasos para poner en funcionamiento el proyecto y cumplir adecuadamente el proceso.
1.Manual Técnico¶
- Tarjeta de Desarrollo STM Nucleo-F446RE.

La tarjeta Nucleo-F446RE es una placa de desarrollo STM32, que cuenta con un microcontrolador ARM cortex M4; la cual trabaja a una velocidad de 180Mhz y un sistema SRAM de 128 KB. También se cuentan con estás demás especificaciones. USB VBUS or external source (3.3 V, 5 V, 7 - 12 V). Two push buttons: USER and RESET. 512 KB Flash.

- Diagrama de Conexiones.

- Servomotor:

El servomotor es un dispositivo que en su interior dispone de un pequeño motor con un reductor de velocidad y multiplicador de fuerza, también dispone de un circuito que controla el sistema. Para controlar un servomotor se debe aplicar un pulso de duración y frecuencia específicos. Todos los servomotores disponen de tres cables, dos para alimentación Vcc y Gnd y un tercero para aplicar el tren de pulsos de control, que hace que el circuito de control diferencial interno ponga el servo en la posición indicada, dependiendo del ancho del pulso. En el servomotor SG90 el ángulo de giro del eje es de 180º . un servo es muy importante por que es el encargado de dar movilidad al robot.
- Ángulos de giro de un servomotor:

- Modulación por Ancho de pulso (PWM).
Es una técnica utilizada para regular la velocidad de giro de los motores eléctricos de inducción o asíncronos.u Mantiene el par motor constante y no supone un desaprovechamiento de la energía eléctrica. Se utiliza tanto en corriente continua como en alterna, como su nombre lo indica, al controlar: un momento alto (encendido o alimentado) y un momento bajo (apagado o desconectado),

COOLTERM:
Es una sencilla aplicación creada por Roger Meier que permite tener una terminal para nuestros puertos serie, su menú de configuración esta 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.

El sistema de almacenamiento es un prototipo de robot para almacenar en celtas piezas clasificándolas por color, adicionalmente cuenta con dos formas de use, uno manual en donde el usuario por medio de un joystick puede manejar el robot a su criterio llevándolo a las posiciones deseadas, el otro es en modo automático donde ya se tiene las posiciones especificadas, por medio de programación se cumplen rutinas del proceso.
Sensor Óptico:
se trataba de resistencias cuyo valor disminuía con la luz, de forma que cuando reciben un haz de luz permiten el paso de la corriente eléctrica por el circuito de control. Cuando una persona o un obstáculo interrumpen el paso de la luz, la LDR aumenta su resistencia e interrumpe el paso de corriente por el circuito de control. (Los sensores ópticos más utilizados son aquellos que detectan billetes y monedas falsos considerando que es el uso más práctico que se le pude dar)
Partes de un Sensor:
- Emisor: Da origen a un haz luminoso normalmente a travez de un led infrarrojo.
- Receptor: Esta encargado de captar la señal producida por el emisor, generalmente se utiliza un fototransistor o un fotodiodo.
- Lentes: Están diseñados para modificar el campo de visión de los componentes, esto trae como consecuencia el aumento de la distancia de detección
- Circuito de salida: Básicamente es el circuito que se encarga de mandar la señal de salida ya sea digital o analógica.

Sensor Óptico Retroreflexivo o Reflex:
El emisor y el receptor están incluidos en un solo lugar, con la diferencia que se utiliza un espejo reflector que logra rebotar la señal producida hacia el mismo lugar de origen. Tiene el mismo funcionamiento que el sensor óptico de tipo barrera, cuando un objeto se posiciona entre el dispositivo de sensado y el espejo reflector este obstaculiza la señal para no poder retornar.

En el brazo robótico utilizamos el sensor STC3200.

SENSOR STC3200:
es un convertidor de luz a frecuencia que combina fotodiodos de silicio reconfigurables y una corriente de frecuencia en un solo circuito integrado. La salida es una onda cuadrada (ciclo de trabajo 50%) con una frecuencia directamente proporcional a la intensidad de luz. Las entradas y salidas digitales permiten una interfaz directa con un microcontrolador u otro conjunto de circuitos lógicos, por esta razón el sensor TCS3200 es ideal para líneas de producción, domótica, robótica, etc. El sensor es un convertidor de luz a frecuencia que lee una matriz de 8×8 fotodiodos , de tal manera que 16 fotodiodos tienen filtro azul, 16 fotodiodos tienen filtro verde, 16 fotodiodos tienen filtro rojo y 16 fotodiodos son sin filtro.
ESPECIFICACIONES DEL 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 .

Frecuentemente el TCS3200 se distribuye en módulos que incorporan dos o cuatro LED de luz blanca y un protector de plástico. El objetivo de ambas medidas es minimizar los efectos de la iluminación ambiente en la medición. Pese a sus especificaciones y elementos para eliminar la luz ambiente, el TCS3200 no es capaz de medir de forma precisa el color RGB de un objeto, o la temperatura de color de una fuente luminosa. Sin embargo, podemos emplearlo para distinguir entre colores básicos. Por ejemplo, podemos emplearlo para reconocer el color de una tarjeta o un objeto, y guiar a un robot en un recorrido.
Conexión del sensor a la tarjeta:

Esquema del montaje:
El TCS3200 tiene cuatro entradas digitales S0, S1, S2, y S3, y una salida digital Out. Para conectarlo, necesitaremos emplear al menos 3 pines digitales. En primer lugar debemos alimentar el módulo conectando los pines Gnd y Vcc del TCS3200, respectivamente, a Gnd y Vcc respesctivamente.
Los pines S0 y S1 controlan la frecuencia de la salida y la desactivación del módulo. Los conectamos a dos salidas digitales, o podemos conectarlas a 5V si no queremos poder apagar el módulo.

Por otra parte, los pines S2 y S3 seleccionan el color a medir. Deberemos conectarlos a dos salidas digitales de nuestra tarjeta.

Escala de frecuencia

((mirar datasheet del sensor para los valores del espectro de luz))

Espectro de luz visible:
es el espectro de radiación electromagnética que es visible para el ojo humano. Va desde una longitud de onda de 400 nm hasta 700 nm. Además, también se conoce con otro nombre: el espectro óptico de la luz. Estas son entonces las ondas que componen lo que llamamos luz visible. Cuando estamos viendo un objeto, es porque ese objeto está siendo iluminado por la luz visible. Por otra parte, cuando vemos que el cielo es de color azul, que el pasto es de color verde o que el cabello de alguien es de color negro, es porque en ese momento estamos recibiendo diferentes longitudes de onda en la banda de los 400 nm y los 700 nm.

La longitud de onda (la cual está relacionada a la frecuencia y la energía) de la luz es la que determina el color que percibimos. El rango de estos diferentes colores es bastante amplio y extenso, habiendo numerosos colores entre los que nos es posible distinguir.
Algunos estudiosos y científicos no están de acuerdo entre sí sobre los diferentes rangos de las longitudes de onda, por lo que es difícil calcular con precisión en dónde comienza y en dónde acaba cada color Esto se debe a que los límites de los colores se aproximan a medida que los mismos se van mezclando unos con los otros.

La mayor parte de la radiación electromagnética que llega a la Tierra procede del Sol. El Sol emite energía en forma de radiaciones electromagnéticas y la que llega a la Tierra está formada por rayos ultravioletas, luz visible y radiación infrarroja, entre 200 y 4000 nm de longitud de onda.
JOYSTICK: es un periférico de entrada que consiste en una palanca que gira sobre una base e informa su ángulo o dirección al dispositivo que está controlando, es un periférico de entrada que consiste en una palanca que gira sobre una base e informa su ángulo o dirección al dispositivo que está controlando.

Conexión del Joystick

El Joystick analógico es el más tradicional. En forma de manche, este dispositivo posee una palanca para posicionamiento continuo. Es movido libremente al lo largo de dos ejes, un vertical y un horizontal, y es apoyado sobre una mesa a través de ventosas, que ayudan en su fijación. Ya el Joystick digital, también conocido como joypad, no posee palanca, pero sí una pequeña cruz con la cual pueden ser definidas las posiciones direccionales (arriba, abajo, izquierda, derecha).
MI CÓDIGO:
Se crean las clases para los objetos, que en este caso son los cuatro Servo-motores definiendo de una ves los pines de conexión.
PwmOut myservo1(PB_10); PwmOut myservo2(PB_4); PwmOut myservo3(PB_5); PwmOut myservo4(PB_3);
Se habilita la comunicación serial y poder enviar datos y se mencionan las variables globales.
Serial pc(USBTX, USBRX); uint8_t telecomando; uint8_t parametro; uint8_t nm;//variable de motores uint8_t ng;
Se crea una función que permite controlar el ancho del pulso para el Servo-motor. Está función convierte el valor del ciclo útil dado en us dentro del periodo en una posición en grados para el servomotor.
uint32_t degrees2usec(uint8_t grados){
// Retorno el valor en usegundos, donde
// y − y1 = m(x − x1 )
if(grados <= 180)
return int(750+grados*1900/180);// u6
return 750;
Tasa de baudios para la comunicación serial.
pc.baud(9600);
Comando de apertura para el envió de la trama desde Coolterm, expresado en Hexadecimal.
while (pc.getc()!=0XFF); //sincronizacion
Configuramos el ancho de pulso para cada uno de los servos y así sus respectivos ángulos. Para el caso tenemos solo el servo 1.
myservo1.pulsewidth_us(2000);
myservo1.period_ms(20)
Funciones para las rutinas del robot.
void home() void material() void celda1() void celda2() void celda3() void celda4()
Se crea una función para abrir y cerrar la pinza.
if (parametro==01)
{
myservo4.pulsewidth_us(degrees2usec(0));
}
else if(parametro==02)
{
myservo4.pulsewidth_us(degrees2usec(180));
Se crea otra función para indicar el caso para cada una de las rutinas, previamente definidas en las funciones anteriores. Este Switch interpreta la variable parámetro
void mover_pos()
Se crea una función que indica sí lo que se quiere controlar es una de las funciones del brazo, la pinza o cada motor por individual.
void mover_servo(uint8_t nm, uint8_t ng)
Luego se inicializá el programa principal.
int main()
{
config_uart();
config_servo();
while(1)
{
Leer_Datos();
mover_servo(telecomando, parametro);
}
}
2. Manual de Usuario¶
A continuación se describirán los pasos que el usuario debe seguir para hacer funcionar de manera correcta el proyecto del brazo de almacenamiento, todo ello ira con su respectiva imagen, para una mejor guia.
- Se debe tener conectada la tarjeta de desarrollo Núcleo STM F446RE.
- Descargar el código del software al Hardware. Luego de conectarla tarjeta , esta aparecerá en los equipos o dispositivos conectados al PC, se debe guardar el código y compilarlo correctamente en el software para luego copiar este mismo código a la carpeta de la tarjeta que aparece en los dispositivos. ((Imageeeen))
- Iniciar desde el PC el programa Coolterm.
Para ver el funcionamiento de la lectura del sensor TCS3200, se conectara el coolterm y luego en la pestaña
- Ingresar los comandos funcionales para que el robot inicie ha realizar las rutinas.
Para saber cuales son los comando interpretables por el software se presentara a siguiente tabla.
En la tabla se definió los comandos para dar inicio a el funcionamiento del robot. la primera columna inicializa la trama de datos en valores hexadecimales condicionando a que sea únicamente "0XFF" de lo contrario no se desarrollará el programa.
En la segunda columna se especifica el tipo de Telecomando siendo "0X01" funciones que determinan únicamente el movimiento del brazo y siendo "0X02" función para abrir y cerrar la pinza. Para la columna tercera y cuarta se especifican las posiciones de cada uno de los eslabones. Adicionalmente en la columna de telecomandos está configurada para que cada motor se mueva individualmente, esto se logra dándole valores en hexadecimal correspondientes a cada grado en la columna de parámetros, como por ejemplo si se desea 180° se debe ingresar B4 ó 0 grados se ingresa 01 para mejor explicación se adjunta la siguiente tabla donde se explican cada 10°.

Luego siguen el telecomando de velocidad el cual se representa por "0X07" y se divide en tres parámetros brindando tres velocidades distintas en las cuales los servomotores deben funcionar, yendo de la velocidad mas lenta con el parámetros de 0X01 , velocidad media con el parámetro 0X02 y velocidad máxima con 0X03 hacia la posicion deseada.
- Demostración del Funcionamiento.
A continuación se mostrarán las correspondientes imágenes al funcionamiento de cada función.
Home.
Material.
Celda 1.
Celda 2.
Celda 3.
Celda 4.

Ahora se agregaron dos telecomandos mas 0X08 y 0X09, el primer telecomando se utiliza para el manejo de la pinza con el Joystick, el cual realizara el movimiento del motor desde 0° a 180°, el cual se compone de dos parámetros 0X01 con el cual se inicia el movimiento del brazo por medio del Joystick y el 0X02 el cual detiene el movimiento del brazo por medio del Joystick el cual funciona con el principio de un pulsador.
((Imagen joystick funcionando))
El ultimo telecomando añadido fue el 0X09, el cual se utiliza para activar la lectura del sensor TCS3200 , cuando ya no se este utilizando mas el control manual por medio del Joystick, el cual se utiliza un WIT diferente "0XFE" para su implementacion tanto en el código como en el programa Coolterm, según la tabla mostrada a continuación se puede diferenciar entre los colores según los parámetros dados como resultados de las lecturas del sensor en el Coolterm, dando como resultado el color según la lectura del sensor.
