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.
wiki final
SISTEMA DE ALMACENAMIENTO¶
- Brian Alexis Cárdenas Castañeda 67574
- Valeria Alejandra Bravo Bonilla 67577
- Angela Manuela González Plazas 60534
El Sistema de Almacenamiento es un proyecto desarrollado en la ciudad de Bogotá Colombia con el que se busca diseñar y ensamblar un prototipo de (brazo robótico) robot clasificador con la capacidad de identificación de color así cuando se detecte un objeto el brazo lo clasifique según su color, usando un sensor óptico, dos Joystick para su movimiento manual en donde el usuario podrá decidir hacia que dirección mover el brazo y la tarjeta de programación descrita a continuación; adicional mente se tiene la programación por medio de telecomandos y telemetrias para hacer el proceso automático sin la intervención del usuario.
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 TCS 3200

El sensor de color programable, es un sensor óptico que convierte la frecuencia de los haces de luz en una frecuencia de corriente. y como resultado da una salida de onda cuadrada. A continuación, se pude ver el datasheet del sensor.

Funcionamiento Sensor TCS - 3200:
El sensor es un convertidor de luz a frecuencia que combina fotodiodos de silicio y una corriente de frecuencia en un solo circuito integrado. La salida es una onda cuadrada con una frecuencia directamente proporcional a la intensidad de luz. Las entradas y salidas digitales permiten una interfaz directa con un microcontrolodor. 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:

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 respectivamente.
- Funciones de los Terminales*

- Opciones Seleccionables*
Los pines S0 y S1 controlan la frecuencia de la salida y la des activació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.

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. Estas son 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.

- 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.
El Joystick consta básicamente de dos potenciometros que representan los dos ejes de libertad en las que las palancas se pueden mover; el eje 'x' y el eje 'y'. Y además cuenta con un pulsador. A continuación se puede observar el diagrama esquemático del Joystick.

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).
Funciones de los Terminales

TECLADO MATRICIAL
Por requerimiento se implementó un plus para la presentación final, en el que se decidió utilizar un teclado matricial 4X4, el cual controlara el acceso a la planta del sistema , por medio de una contraseña así, de momento tal de que no se ingresa correctamente no permita el desarrollo de los motores individuales.
Teclado matricial de 4 filas y 4 columnas para un total de 16 teclas. El teclado es tipo membrana, por lo que entre sus ventajas se encuentra el poco espacio que requiere para ser instalado. Puede ser conectado a cualquier tarjeta de desarrollo.
El teclado matricial 4x4 está constituido por una matriz de pulsadores dispuestos en filas (A,B,C,D) y columnas (1,2,3,4), con la intención de reducir el número de pines necesarios para su conexión. Las 16 teclas necesitan sólo 8 pines de la tarjeta, en lugar de los 16 pines que se requerirían para la conexión de 16 teclas independientes. Para poder leer que tecla ha sido pulsada se debe de utilizar una técnica de barrido y no solo leer un pin.

ESPECIFICACIONES TÉCNICAS
- 16 botones con organización matricial (4 filas x 4 columnas)
- Teclado tipo membrana
- Mayor resistencia al agua y al polvo
- Auto adhesivo en la parte de atrás
- Tiempo de rebote (Bounce time): ≤5 ms
- Máximo voltaje operativo: 24 V DC
- Máxima corriente operativa: 30 mA
- Resistencia de aislamiento: 100 MΩ (@ 100 V)
- Voltaje que soporta el dieléctrico: 250 VRMS (@ 60Hz, por 1 min)
- Expectativa de vida: 1.000.000 de operaciones
- Dimensiones del pad: 6.9 x 7.6 cm aprox.
- Cable de cinta plana de 8.5 cm de largo aprox. (incluido el conector)
- Conector tipo DuPont hembra de una fila y 8 contactos con separación estándar 0.1" (2.54mm)
- Temperatura de operación: 0 a 50 °C

para su programación usamos interrupciones, declaramos las entradas y salidas del teclado en la tarjeta de desarrollo


INTERRUPCIONES:
en seguida mostramos la programación de las interrupciones para activar las columnas.

- MI CÓDIGO:
En esta sección detallamos y explicamos partes del código para garantizar la comprensión del lector:
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 inicia el programa principal.
int main()
{
config_uart();
config_servo();
while(1)
{
Leer_Datos();
mover_servo(telecomando, parametro);
}
}
VELOCIDAD:
Creamos variables para las tres diferentes velocidades con un tiempo determinado y variables para almacenar los datos del pulso actual del motor y el pulso nuevo.
uint32_t velocidad_1=50; uint32_t velocidad_2=100; uint32_t velocidad_3=500; uint32_t dpulse_new=0; uint32_t dpulse_act;
para la velocidad alta definida como speed1 en el ponemos el telecomando numero 1 para activarlo, seguida seleccionar que motor individual desea mover. para le motor 1 marcar 01
void speed_1(uint8_t nm, uint8_t ng)
{
uint32_t dpulse_new=0;
uint32_t dpulse_act;
dpulse_new=degrees2usec(ng);
int i;
if (nm==01)
{
printf("Entrado_1");
dpulse_act =(uint32_t)(myservo1.read()*20000);
printf("act %d new %d \n", dpulse_act,dpulse_new);
if (dpulse_act < dpulse_new)
for ( i =dpulse_act ; i< dpulse_new; i=i+50){
printf("%d\n",i);
myservo1.pulsewidth_us(i);
wait_ms(velocidad_1);
}
else
for (i =dpulse_act ; i > dpulse_new; i=i-50){
myservo1.pulsewidth_us(i);
printf("%d\n",i);
wait_ms(velocidad_1);
}
myservo1.pulsewidth_us(dpulse_new);
}
Así sucesivamente con el resto de velocidades con los motores 2, 3 y 4.
para las otras dos velocidades (media y baja) se definieron como speed 2 (con un tiempo de velocidad 2 a 100) y speed 3. (con un tiempo de velocidad 3 a 500)
utilizamos una función llamada seleccionar la velocidad deseada por el cliente, y por medio de casos se efectúa lo deseado dependiendo del parametro.
case 01:
printf ("A \n");
speed_1(nm, ng);
break;
case 02:
printf ("B \n");
speed_2(nm, ng);
break;
case 03:
printf ("C \n");
speed_3(nm, ng);
}
para entrar en la opción de velocidad es importante escribir el telecomando 0FXF seguido de 07 en donde se selecciona la opción de velocidad y 01 para velocidad rápida, 02 para velocidad media o 03 para velocidad baja. en el menú principal se identifica cual telecomando se seleccionó
while(1)
{
Leer_Datos();
if (telecomando == 07)
{
selec_speed();
}
if (telecomando != 07)
{
printf("Error");
}
CÓDIGO PARA EL FUNCIONAMIENTO DEL SENSOR ÓPTICO:
declaramos los pines correspondientes a cada sensor sea S0, S1, S2, S3, OUT respectivamente.
// S0, S1, S2, S3, OUT scolor_TCS3200 scolor(PA_8, PB_10, PB_9, PB_5, PB_8);
creamos la clase leer_color para cada uno de las tonalidades diferentes en variables float para guardar los valores en frecuencia de cada uno dados por el sensor de color.
float red_sr = scolor.ReadRed();
float green_sr = scolor.ReadGreen();
float blue_sr = scolor.ReadBlue();
float clear_sr = scolor.ReadClear();
se desarrolló una función en donde por medio de una regla de 3 se compararon todos los colores con respecto a CLEAR y sacarlos en porcentajes.
float porcentajeR=(clear_sr/red_sr*100);
float porcentajeG=(clear_sr/green_sr*100);
float porcentajeB=(clear_sr/blue_sr*100);
desarrollamos condiciones en las que se caractericen los tonos siendo mayor que o menor que para así poder identificarlos.
if (porcentajeR > porcentajeB && porcentajeB > porcentajeG)
{
printf("Rojo \n");
}
else if (porcentajeB > porcentajeG && porcentajeG > porcentajeR)
{
printf("Azul \n");
}
else if (porcentajeG == porcentajeB && porcentajeG > porcentajeR)
{
printf("Verde \n");
}
else if (porcentajeR == porcentajeG && porcentajeB > porcentajeR)
{
printf("Blanco \n");
}
else
{
printf("No se detecta ningún color \n");
}
}
CÓDIGO PARA EL FUNCIONAMIENTO DEL JOYSTICK:
Declaramos los pines de la tarjeta de desarrollo con los pines del Joystick en las debidas conexiones.
AnalogIn joy(A0); AnalogIn joy1(A1); AnalogIn joy2(A2); DigitalIn bot1(PA_9);
creamos variables para los valores del voltaje del Joystick y los respectivos grados que toma cada uno al no ser pulsados.
float vx=0; float vy=0; float vz=0; float grados = 90; float grados1 = 90; float grados2 =90; bool pulsador=0;
En la clase mover manual se interpreta como si los valores del Joystick son mayores de 0.8 aumente el servomotor 10 grados, si son menores de 0.2 disminuya el servomotor 10 grados adicional mente restringimos los servos de 0 a 180 grados para evitar forzarlos y para el pulsador del Joystick 1 que al ser presionado nos abra la pinza y con el pulsador del Joystick 2 se cierre. (asi para cada uno de los 4 servos utilizados)
vx=joy1.read();
if (vx<0.2)
{
grados=grados-10;
myservo1.pulsewidth_us(degrees2usec(grados));
wait(0.1);
if (grados <0)
{
grados=0;
}
}
if (vx>0.8)
{
grados= grados+10;
myservo1.pulsewidth_us(degrees2usec(grados));
wait(0.1);
if (grados>180)
{
grados=180;
}
}
command.printf("%f \n ",grados);
bot1.read();
if(bot1.read()==0)
{
myservo1.pulsewidth_us(degrees2usec(150));
command.printf("0");
wait(0.1);
}
if (bot1.read()==1)
{
myservo1.pulsewidth_us(degrees2usec(80));
command.printf("1");
wait(0.1);
}
command.printf("%d \n ",bot1.read());
}
CÓDIGO PARA INTERRUPCIONES Y TECLADO:
void Interrupcion_Timeout(void)
{
BANDERA_TECLA = 0;
OBJ_TKR.attach(&Interrupcion_Ticker, 0.05);
L1 = 0;
}
void Interrupcion_Ticker(void)
{
//PinInt.fall(NULL);
if(FILAS != 15)
{
OBJ_TKR.detach(); // Desactiva la Interrupcion del Ticker
OBJ_TOUT.attach(&Interrupcion_Timeout, 1); // ACtiva la interrupcion del Timeout
L1 = 1;
//-------------------------------------------
<</code>>
anunciamos las interrupciones
<<code>>
COLUMNAS = 14; // Activa la columna 1
if(F_0 == 0 && BANDERA_TECLA == 0 )
{
PC.putc('1');
BANDERA_TECLA = 1;
TECLA = '1';
}
if (F_1 == 0 && BANDERA_TECLA == 0)
{
PC.putc('4');
BANDERA_TECLA = 1;
TECLA = '4';
}
if (F_2 == 0 && BANDERA_TECLA == 0)
{
PC.putc('7');
BANDERA_TECLA = 1;
TECLA = '7';
}
if (F_3 == 0 && BANDERA_TECLA == 0)
{
PC.putc('*');
BANDERA_TECLA = 1;
TECLA = '*';
}
//-------------------------------------------
COLUMNAS = 13; // Activa la columna 2
if(F_0 == 0 && BANDERA_TECLA == 0 )
{
PC.putc('2');
BANDERA_TECLA = 1;
TECLA = '2';
}
if (F_1 == 0 && BANDERA_TECLA == 0)
{
PC.putc('5');
BANDERA_TECLA = 1;
TECLA = '5';
}
if (F_2 == 0 && BANDERA_TECLA == 0)
{
PC.putc('8');
BANDERA_TECLA = 1;
TECLA = '8';
}
if (F_3 == 0 && BANDERA_TECLA == 0)
{
PC.putc('0');
BANDERA_TECLA = 1;
TECLA = '0';
}
//-------------------------------------------
COLUMNAS = 11; // Activa la columna 3
if(F_0 == 0 && BANDERA_TECLA == 0 )
{
PC.putc('3');
BANDERA_TECLA = 1;
TECLA = '3';
}
if (F_1 == 0 && BANDERA_TECLA == 0)
{
PC.putc('6');
BANDERA_TECLA = 1;
TECLA = '6';
}
if (F_2 == 0 && BANDERA_TECLA == 0)
{
PC.putc('9');
BANDERA_TECLA = 1;
TECLA = '9';
}
if (F_3 == 0 && BANDERA_TECLA == 0)
{
PC.putc('#');
BANDERA_TECLA = 1;
TECLA = '#';
}
//-------------------------------------------
COLUMNAS = 7; // Activa la columna 4
if(F_0 == 0 && BANDERA_TECLA == 0 )
{
PC.putc('A');
BANDERA_TECLA = 1;
TECLA = 'A';
}
if (F_1 == 0 && BANDERA_TECLA == 0)
{
PC.putc('B');
BANDERA_TECLA = 1;
TECLA = 'B';
}
if (F_2 == 0 && BANDERA_TECLA == 0)
{
PC.putc('C');
BANDERA_TECLA = 1;
TECLA = 'C';
}
if (F_3 == 0 && BANDERA_TECLA == 0)
{
PC.putc('D');
BANDERA_TECLA = 1;
TECLA = 'D';
}
}
COLUMNAS = 0; // Activa nuevamente las columnas
}
en donde por medio de las interrupciones podemos trabajar con el teclado
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.
- 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.
PLANOS DE LAS CELDAS: por medio de SolidWork diseñamos la estructura de las celdas, adjuntamos planos y fotografías:


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.

El siguiente telecomando 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.

La lectura del sensor se realiza en distintos colores, como se muestra a continuación:

por ultimo tenemos las fotografías de nuestro proyecto terminado con celdas ensambladas apartadas por color, sensor óptico, joystick y teclado matricial.

CONTRASEÑA DE ACCESO:
por favor ingrese la contraseña 1597 como se muestra en la siguiente imagen para acceder a la configuración de los motores individuales de lo contrario aparecerá una nota de contraseña incorrecta en el CoolTerm, seguido del ingreso correcto se visualizará las posiciones de cada uno de los eslabones del robot.

CONEXIÓN DEL TECLADO:

Y finalmente estas lecturas se reflejan en el programa Coolterm.
