Introducción

Este documento es un sı́ntesis del curso de control de una lı́nea de cereza. Al finalizar el curso se espera que los participantes puedan implementar un sistema que incluye los componentes electrónicos y computacionales de un calibrador de cereza. El curso no toca los aspectos mecánicos de una lı́nea a pesar de la importancia que tiene la separación de racimos, singulación de la fruta y traslado de la fruta sobre los rodillos. Tampoco se trata el control de los periféricos, aunque es muy conveniente que este control se integra a los sistemas computacionales que sı́ forman parte de este curso.

  1. Distribución de pulsos desde el encoder
  2. Sincronización de iluminación y cámaras
  3. Captura y procesamiento de imágenes
  4. Asignación de salidas
  5. Sincronización de solenoides de salida
  6. Interfaz de control para el operador

La estructura lógica del sistema está ilustrado en el siguiente diagrama:

System Design

Los ı́conos con forma cuadrada son microcontroladores de la familia AVR con entrada y salida digital, y comunicaciones seriales. El PDI y Opera con computadores tipo PC. Los elementos dentro del recuadro amarillo se repiten para cada vı́a. Lo mı́nimo son dos vı́as, y tipicamente van a haber múltiples de dos vias, dos vı́as por cadena. En esta estructura de sistema, hay un solo Encoder y Director para todo la lı́nea y una sola estación Opera de interfaz con el operador, independiente del número de vı́as. Por ejemplo, si la máquina fuera de seis vı́as, entonces habrı́an seis controladores Lumos, seis Expelliarmus, seis PDI y seis conjuntos de cámaras. Un solo PC Opera administra todos los PDI de la máquina.

Expectativas para los participantes

El primer clase de programación que el autor de este documento cursó fue en 1974. Los programas mismos, en Fortran, se escribieron en tarjetas perforadas de 80 columns. El proceso de compilar un programa tardaba 24 horas y si uno se equivocó en el sintaxis, otro dia. La ejecución también era de un dı́a para el otro. Se construyeron edificios para albergar a un computador, un mainframe, siempre IBM. Al principio de los ’80, empezaron a aparecer los computadores personales. Los primeros eran teclados que se conectaban a un televisor, y usaron cintas de audio para grabar programas y datos. Después llegaron los PC’s, y Bill Gates hizo su tremenda hazaña de desafiar a IBM con MS-DOS. Se abrieron las ventanas, y la evolución computacional tomó vuelo. Como lenguajes de programación, empezamos con Fortran, un poco de PL/1 y Cobol. Con los PCs, Pascal apareció. Basic era común. Después habı́a C, y mas tarde orientación a objeto con C++, Java, JavaScript. Siempre son lenguajes de sintáxis secuencial, muy poco programación en paralelo sobre FPGAs. Un aspecto importante del desarrollo es el sistema operativo. Recuerdo haber comprado SCO Xenix (una licencia para Unix) en aproximadamente $usd5000. La última vez que he usado Windows fue a mediados de los ’90. Era Windows 3.11, y la necesidad de comprar un nuevo computador para poder utilizar la interfaz gráfica fue demasiado. Linux es el sistema operativo con que se trabaja en este equipo. El sistema que se describe en este curso, y que se espera que los integrantes aprenden replicar, tiene un componente fuerte en programación. Inclusive la electrónica digital también es programación. Los controladores AVR se programan en C. Los programas de los PC’s son una mezcla de C y C++. Si los integrantes saben programar algun lenguaje, por ejemplo Python o JavaScript, es probable que van a poder entender el código que acompaña el curso. También hay conceptos del sistema operativo, shared memory, sockets, interrupciones que habrá que llegar a conocer. No es poca cosa. Tengo la impresión que hay casi una carrera de ingenerı́a en computación en este sistema. Se una persona no tiene formación en programación, pero sı́ conoce la operación de lı́neas de cereza, va a poder aprovechar del curso también. Posiblemente, su aporte va a ser mas como un usuario avanzado, indicando funcionalidad necesaria. Ya que estamos en el dı́a de la inteligencia artificial, serı́a gracioso si se pueden reemplazar estos años de trabajo con unas sesiones con ChatGPT. Hay tutoriales en lı́nea que pueden ser útiles para empezar. Por ejemplo, Programación de Arduino con AVR-GCC, Programación de microcontroladores AVR en Linux, programación de AVR usando C. Básicamente hay que tener: 1. inux instalado (yo voy con Ubuntu) 2. editor de texto para escribir los programas. Yo uso ’vi’, pero hay otros mas GUI, mas amigables 3. El compilador avr-gcc. Para programar los PC, el compilador es gcc, muy similar al avr-gcc. 4. El programador avrdude (el programa que pasa tu código compilado en el PC a la memoria flash del microcontrolador. Para los PC, este programa no es necesario. .5 Un programa tipo terminal para visualizar la salida del programa corriendo en tu AVR

Estructura del curso

La estructura del curso sigue la estructura del sistema.


  1. El primer paso es adecuación de los computadores de los participantes, instalación del sistema operativo mas el software para desarrollo.
  2. Se empieza con la programación del Director, el microcontrolador que recibe los pulsos desde el encoder, los mastica y los envı́a a los otros componentes del sistema.
  3. Segundo es la programación del Lumos. Lumos recibe pulsos desde Director, los mastica de nuevo y envia pulsos a los LEDs de iluminación y las cámaras.
  4. Los siguientes pasos son de los computadores, el PDI y el Opera. En el computador PDI, hay dos programas. Primero el programa de procesamiento de las imágenes, que también llamamos PDI. El programa PDI capta imágenes, las analiza, determina que salida corresponde y envı́a ese dato al controlador Expelliarmus. Es el corazón del sistema y podrı́a llevar varias sesiones del curso.
  5. El programa configPDI recibe información de configuración desde el PC del operador. Tiene que ser muy eficiente y no interferir con el programa PDI.
  6. Después tocamos la programación del microcontrolador Expelliarmus. La operación de Expelliarmus es crı́tica. Expelliarmus recibe pulsos desde el Director, y tambien por cada imagen con fruta recibe un byte desde el programa PDI. Este byte es el número de la salida asignada. Expelliarmus tiene que contar los pasos hasta esa salida y después activa el solenoide de la válvulo neumático. Sincronizar la recepción del pulso desde el Director y el número de salida desde PDI es esencial para el funcionamiento del sistema.
  7. El computador Opera también tiene dos programas, uno es configOpera, que distribuye las configuraciones, por ejemplo de asignación de salidas, a los programas configPDI en los computadores PDI. El configOpera no hace mucho, pero tiene que estar siempre atento a las indicaciones del operador.
  8. Finalmente, hay un módulo del curso en que se trata la interfaz del operador, que en esta implementación se llama wtServer. Es un servidor web escrito en C++ que permite interactuar con el configOpera de manera transparente al usuario.

En este curso hay que trabajar sobre una lı́nea fı́sica, programando y equivocándose. Se espera que el curso cuente con una lı́nea fı́sica operando sobre que los participantes pueden programar y probar sus código. Es un curso práctico, no teórico. Hay que terminar con el control funcionando de una lı́nea.

Si cada participante, o cada grupo de participantes, trae las siguientes materiales a las primeras sesiones, entonces va a poder impĺementar un sistema para su propio uso.

  1. Dos computadores tipo PC, no necesariamente tan potente (i3, por ejemplo), uno para PDI y otro para Opera.
  2. Tres tarjetas tipo ATmega2560 (Arduino Mega)