Un Arduino-Shield didáctico para iniciarse en la programación

Dr. Zoidberg

Well-known-Papá Pitufo
#1
En la facultad estamos trabajando para cambiar el plan de estudios de la carrera Ingeniería Electrónica, y uno de los principales objetivos es reforzar el análisis y diseño en la programación, a la vez de agregar componentes "motivacionales" que hagan que los chicos tomen a la programación como algo divertido, que pueden aplicar a sus necesidades y que tiene un ciclo de análisis, diseño y desarrollo que se debe encarar en forma seria y metódica si se pretende que los ingenieros dejen de programar como NABOS y apliquen alguna metodología de trabajo ordenada y efectiva.

El primer problema es que la formación en sistemas digitales tiene muchas asignaturas (comparativamente hablando) y estas se extienden a lo largo de toda la carrera, así que la programación deben encararse desde el primer semestre del primer año para que la apropiación de contenidos sea lo suficientemente extensa y firme cuando lleguen a la etapa de aplicación "real".

En este sentido, tenemos algunos cuantos alumnos que ya vienen "programando" desde la escuela secundaria habiendo trabajado, principalmente, con Arduino. Y durante la carrera, hay varias asignaturas que si bien no están relacionadas directamente con los sistemas digitales, hacen uso intensivo de programación microcontroladores utilizando también la plataforma Arduino para el procesamiento digital de señales (Arduino Mega) y para implementación de lazos y componentes de control industrial conectados con sistemas SCADA, PLCs y toda la bola (Arduino Uno y Mega).

Entonces, nos pareció interesante tratar de insertar la plataforma Arduino desde los primeros semestres de la carrera como base para aprender la programación de microcontroladores, aún sin que los chicos sepan todavía que diablos es un microcontrolador (eso lo verán mas adelante en la carrera). De esta forma se les puede secar la mente con las bases de las metodología de análisis y diseño y lograr programas operativos no solo en la PC y con interfaz de usuario, sino también en microcontroladores que hagan "cositas" interactuando con el mundo exterior.

Con esto en mente, decidí hacer algunas pruebas con Arduino Uno y diseñar un shield de muuuuy bajo costo que le permita a los chicos programar un módulo Arduino, ingresar señales (por ahora solo Si/No...no saben tanto como para meter señales analógicas) y mostrar resultados a la salida en un grupo de 8 LEDs. La foto que sigue es la vista del shield del lado de los componentes:

Arduino-shield-LEDs.png

que terminada y colocada en el Arduino queda esto:

01-Arduino-shield-LEDs.jpg

Bueno, abajo están los archivos esquemáticos y el PCB para hacer con la plancha, y como verán, no es nada muy sofisticado por que la idea es que comiencen a programar sin romper nada, que puedan comprar su propio Arduino y practicar en casa. El costo del shield es del orden de los 3 trumps, dependiendo donde compren los materiales y cuantos PCB hagan juntos.

Los LEDs están conectados de una forma un poco particular ya que 6 están controlados por los 6 MSB de un port del ATMega y los otros dos, por los 2 LSB de otro port (la idea era no interactuar con las líneas de comunicación serie ;)), así que les adjunto un par de "sketchs" por si lo hacen y quieren probar el funcionamiento básico:

  • Prueba03.zip tiene las funciones de configuración y acceso en C ANSI.
  • Prueba04.zip está escrito en C++ y aplica el patrón Singleton para proteger el acceso concurrente al puerto, si es que alguien lo hace, y no desparramar varias instancias diferentes de una unica plaqueta, lo que podría traer problemas operativos.
OJO!!! Los programas son demos y no está escritos como bibliotecas ni nada parecido, por que solo le dediqué un par de horas para probar la operación de todo el conjunto, así que queda bastante por hacer, pero ambos demos funcionan OK.

Tengan en cuenta que a raíz de una discusión que tuve con otro docente, las funciones de acceso al shield NO USAN ninguna de las funciones estándard de Arduino para leer y escribir en los ports, sino que hace acceso directo a los registros de configuración de los puertos y a los registros de los puertos del ATMega. Con eso le demostré que no hace falta usar las bibliotecas estándard de Arduino para mover y leer los bits de los ports. Mas adelante voy a agregar la lectura de los switches usando interrupciones, pero va a tener que esperar un poco por que tengo trabajo pendiente.

Si a alguien le resulta útil, sientase libre de usarlo y modificarlo a su antojo.
 

Adjuntos

Última edición:
#2
Si señor, precisamente estaba buscando eso y se ve que no existe comercialmente.

Voy a ver si hago algo parecido para unos arduino micro
 
#5
existen algunas placas como estas

o esta otra

la primera se consigue en el pais en unos 85 pesos
Esta es otra muy interesante


este otro también es muy didáctico

los conectores de arriba sirven para comandar display LCD paralelo y serie

La primera se puede utilizar tanto con la proto como soldando en el area de la placa armando asi cualquier configuración
 
Última edición:
#6
Si, las conozco.
En lugar de la primera mejor un protoboard normal

Y las demás por un estilo, demasiado complejas para las primeras prácticas.
 

Dr. Zoidberg

Well-known-Papá Pitufo
#7
Y las demás por un estilo, demasiado complejas para las primeras prácticas.
Claro, eso pensé cuando me puse a diseñar este shield. Todos los que mostró panda están buenos... pero solo si el que los usa es capaz de hacer algo con la electrónica. En mi caso, los que los van a usar son chicos de 1º y 2º año que aún no han entrado en contacto con la electrónica y ponerlos a conectar cosas, en esta etapa, solo va a terminar en una parva de Arduinos quemados :eek:.
La idea es que tengan un conjunto de entradas y salidas ya listas para usar, para que entiendan los conceptos de interacción con el medio, y que además permitan que ellos puedan diseñar programas que causen un efecto físico (cambios en los LEDs) al interactuar con las entradas.
De esta forma, no existe separación (al menos en forma preliminar) entre las técnicas de programación para computadoras y para microcontroladores, lo que parece ser algo que resulta difícil de apreciar. Por otra parte, pueden comprobar la relación entre niveles lógicos físicos y niveles lógicos en software. También pueden programar anti-rebotes (que no es mas que una resta entre dos cuentas de reloj) cuando usen los pulsadores por interrupciones. Claro, aparte de la secada de mente con el análisis y diseño de funciones.
 

Fogonazo

Exorcista & Moderador eventual
#8
Claro, eso pensé cuando me puse a diseñar este shield. Todos los que mostró panda están buenos... pero solo si el que los usa es capaz de hacer algo con la electrónica. En mi caso, los que los van a usar son chicos de 1º y 2º año que aún no han entrado en contacto con la electrónica y ponerlos a conectar cosas, en esta etapa, solo va a terminar en una parva de Arduinos quemados :eek:.. . .
¡ ¡ ¡ Aguafiestas ! ! !
Si no quemamos cosas, ¿ Como aprendemos ?

La idea del Profe "Z" me pareció ¡ Eselente ! y propia de alguien que además de cobrar el sueldo pretende que las "Pequeñas bestias" :rolleyes: aprendan a programar de forma interactiva y segura.;)
 
Última edición:
#9
Me gusta y completamente apruebo que los jóvenes aprendan a usar los Arduino sin usar librerías. Ya hemos discutido varias veces en este foro que el uso de las bibliotecas fomenta el programar sin realmente entender. El resultado se puede apreciar en algunas de las preguntas de novatos aquí en el foro. Yo tuve la suerte que empecé a dedicarme a controladores con la MC6809 de Motorola y el 7220 de NEC como controlador de las pantallas. Las cosas entonces eran todavía muy simples y en consecuencia fáciles de entender. Es mas, cuando empecé a trabajar para National Semiconductors como especialista para su familia de DP8500, uno de los 2 primeros "procesadores gráficos", el jefe del departamento de desarrollo en Santa Clara, CA, me recomendó comprar el tomo 1 de "Inside Macintosh". Así pude aprender todo lo relacionado a un ordenador con un os, entonces el tal "sistema 6", que usaba la metodología de "collaborative multitasking", para hacer posible la ejecución de programas en "paralelo".

El uso del Arduino con el "Shield" aquí presentado permite aprender y comprender lo básico sin el peligro de dañar el "hardware"! Repito, excelente forma de proceder!
 
#10
Hace ya algunos años un amigo y yo realizamos un curso para capacitar modelistas navales y aéreos a incluir electrónica en su portafolio de tecnologías. Yo traducí ese curso al Español y lo publiqué en 2 foros de modelismo naval en Español. Los modelistas aéreos, en un foro muy popular en Alemán se mostraron muy abiertos y es impresionante ver las cosas que hacen. En el foro modelismo naval solo una persona lo completó y hoy hace maravillas. Las reacciones personales contra mi persona al limitar mi apoyo solo y exclusivamente a aquellos que tomaran el curso fueron tan violentas que reducí mis actividades en ese foro. Así las contribuciones en los 2 hilos que os daré demuestran esos ataques. Menciono esto porque leyendo las contribuciones se pueden ver las reacciones.

La idea del curso de la "tarjeta experimental" fue la de capacitar y motivar modelistas para crear una tarjeta experimental partiendo del esquema electrónico. Un amigo que he ido acompañando me demostró que el objetivo fue logrado. El curso uso módulos simples y cortos y logra al novato experimentar éxitos. Eso motiva la perseverancia. El curso tiene lugar en cortos módulos de hardware, y apenas se tiene el controlador AVR mega8 funcionando acompaña cada módulo con un programita que ejecuta alguna función.

El compilador usado es el "BASCOM" que tiene librerías en forma de sentencias especiales incluidas en el compilador.

Resulta que en el modelismo naval se puede establecer un set de módulos como piezas de "Lego". Combinándolas se pueden crear la gran mayoría de los proyectos en el modelismo naval.

Hardware Parte 1, "Hardware Parte 2" y la Software

Estoy convencido que si un novato quiere utilizar la electrónica e informática en otra afición, los principales objetivos son el ver la "Electrónica no como una caja negra" y el perderle el miedo a los esquemas de circuitos. Quien ha experimentado personalmente como el pasar una parte de un circuito electrónica de un esquema a una placa de huecos y soldado lo cables para pasar "líneas en el esquema" a cables físicos, quién ha aprendido por experiencia propia el encontrar donde en ese proceso quizá ha cometido un error, desarrolla una relación personal entre el esquema y su propia hardware!

En eso veo la analogía del tema de este hilo entre el "jugar con una placa Arduino y ese "Shield" especial que permite aprender sin miedo a romper algo!
 
Última edición:

Dr. Zoidberg

Well-known-Papá Pitufo
#12
Dificilmente pueda hacer eso, por dos motivos:
A) esos chicos no tienen formacion para saber que es una nand, ni el algebra de bool ni el teorema de de-morgan.
B) mi responsbilidad es enseñarles a analizar problemas y desarrollar software para resolverlos. El diseño de computadoras desde cero no es algo de lo que me encargue yo. Para eso tienen mas materias en la carrera...
 
#13
Estoy de acuerdo. Si no saben, no se puede profundizar tanto.

Solo unos comentarios para completar la información.

A) El curso lo ha hecho gente que ni siquiera tiene formación de electrónica o de informática (en la charla TED comentan el caso de un escritor que hizo el curso porque le pareció interesante).

B) Gran parte del curso se desarrolla sobre una plataforma de emulación escrita en Java. Al final de las doce semanas es donde los alumnos empiezan a explotar las capacidades de la CPU emulada/construida semanas atrás, es decir, comienzan a programar.

Hay otra opción, la de Fran Gallego: enseñarles programación en Amstrad CPC, como él hace en la asignatura de Razonamiento Automático, en la Universidad de Alicante, usando su CPCtelera.

https://www.youtube.com/watch?v=Drd...e&list=PLmxqg54iaXriIiLmRbeOiwE_NWKM-i8DB&t=9
 
Última edición:
#15
Tengo entendido que no estás obligado a empezar por las puertas NAND, sino que puedes disponer de todos los materiales de todas las clases, incluida la máquina virtual, escrita en Java, de la CPU que se construye en los primeros pasos.

Este enlace te lleva al software disponible, que incluye: simulador de hardware (las puertas lógicas); emulador de CPU, tanto en binario como en ensamblador; emulador de la máquina virtual (ejecuta programas escritos en bytecode); ensamblador; y compilador.

http://nand2tetris.org/software.php

El próximo curso comienza el día 25, en Coursera.org, por si quieres valorarlo.

https://www.coursera.org/learn/build-a-computer

Ejemplo de lo que se puede hacer (impresionante).


En fin... que por materiales, en Internet, hay unos cuántos, y no solo de este curso.
 
#16
En la facultad estamos trabajando para cambiar el plan de estudios de la carrera Ingeniería Electrónica, y uno de los principales objetivos es reforzar el análisis y diseño en la programación, a la vez de agregar componentes "motivacionales" que hagan que los chicos tomen a la programación como algo divertido, que pueden aplicar a sus necesidades y que tiene un ciclo de análisis, diseño y desarrollo que se debe encarar en forma seria y metódica si se pretende que los ingenieros dejen de programar como NABOS y apliquen alguna metodología de trabajo ordenada y efectiva.

En mi humilde parecer, cualquiera que pretenda enseñar o aplicar el uso de circuitos digitales debe afrontar con toda la seriedad el tema del álgebra de Boole y no dar por echo que; o ya se sabe, o lo sabrán; En el ámbito del diseño electrónico, su aplicación principal radica en dos rubros estructurales:

  • El análisis, porque es una forma concreta de describir cómo funcionan los circuitos.
  • Al diseño, ya que teniendo una función, aplicamos álgebra Booleana para poder desarrollar una implementación de dicha función.


Todos los que tenemos la experiencia en el diseño/programación con circuitos digitales, sabemos la importancia del álgebra de Boole y su “sencillez” por sus elementos excluyentes (1 y 0 en lo digital), en lo físico (5 y 0 volts) y en programación (Verdadero y Falso) de tal suerte que sus variables pueden ser más fácilmente transportables y comprensibles por el desarrollador para crear tablas, por ejemplo muy burdo:

[TABLE]Operación Notación matemática Función lógica Significado
Suma A+B OR A+B Vale 1 solo cuando A o B, o ambas valen 1
Producto A*B AND A*B vale 1 solo cuando A Y B valen 1
Complemento A NOT Cambia el estado de la variable[/TABLE]

Con este antecedente, cualquier intento de enseñar programación aplicada a circuitos digitales debe estar muy enfocado a estructurarse basados en el álgebra de Boole, y por tanto a dejar muy especificados sus conceptos para crear tablas que dejen muy claramente la función de entradas y salidas tanto en el ámbito físico (hardware), como en el de la programación (software).

Por el lado de la Shield propuesta me parece excelente, aunque para poder “interactuar” con más ejemplos que demuestren el uso y aplicación del algebra de Boole, yo intentaría dejar más botones.

Y por último, diseñar circuitos electrónicos “ejemplo” con su debida programación en C++ que enseñen la función de las compuertas lógicas básicas, su equivalente operacional (todos los operandos), su programación y su demostración física (electrónica), de tal suerte que sea un procedimiento natural para el estudiante; la creación de tablas de verdad y su debida aplicación algebraica, sin importar desde donde se vea la función de algún circuito.

Después, al que logre entender y aplicar el Álgebra de Boole, si estará en vías de estudiar todo el mundo de la electrónica, informática y su sutil interacción.

Saludos
 
Última edición:

Dr. Zoidberg

Well-known-Papá Pitufo
#17
En mi humilde parecer, cualquiera que pretenda enseñar o aplicar el uso de circuitos digitales debe afrontar con toda la seriedad el tema del álgebra de Boole y no dar por echo que; o ya se sabe, o lo sabrán; En el ámbito del diseño electrónico, su aplicación principal radica en dos rubros estructurales:

  • El análisis, porque es una forma concreta de describir cómo funcionan los circuitos.
  • Al diseño, ya que teniendo una función, aplicamos álgebra Booleana para poder desarrollar una implementación de dicha función.
Todos los que tenemos la experiencia en el diseño/programación con circuitos digitales, sabemos la importancia del álgebra de Boole y su “sencillez” por sus elementos excluyentes (1 y 0 en lo digital), en lo físico (5 y 0 volts) y en programación (Verdadero y Falso) de tal suerte que sus variables pueden ser más fácilmente transportables y comprensibles por el desarrollador para crear tablas, por ejemplo muy burdo:
Es que no es tan fácil en el contexto de un plan de estudios que exige una secuenciación de contenidos que permitan su apropiación fundamentada y duradera, y que además debe cumplir con ciertos estándares que permiten la acreditación de la carrera ante organismos nacionales de control.

Si bien yo NO les enseño algebra de Boole como tal, por que eso es parte de una materia mas adelante en la carrera, si ven conmigo las operaciones booleanas desde el punto de vista lógico para su uso en predicados relacionales en programación, cosas de la forma:
Código:
IF fruta = "banana" [B]AND[/B] animal = "mono" THEN
        Escribir "comida en peligro!"
ENDIF
Que en escencia es lo mismo, pero mas parecido a como lo pensó Boole que a como se usa en el diseño de sistemas digitales combinacionales.

La asignatura que yo llevo está relacionada con el análisis de problemas y el diseño de programas para su solución. Estas asignaturas no tienen nada que ver con hardware por que se dictan en el primer año de la carrera y los chicos no tienen ninguna formación en electrónica en esta etapa.
 
Última edición:

Dr. Zoidberg

Well-known-Papá Pitufo
#18
Acá les traigo un ejemplo de lo que puede hacerse con el shield. Básicamente es una imitación de las luces de los coches de la policía (de mi provincia) con velocidad controlable vía interrupciones Pin-change.
El código de la gestion de las interrupciones está en el proyecto adjunto, pero está totalmente copiado del foro de Arduino.cc

Acá tienen un video:

y abajo está el código...

Los archivos NoBounce.xxxx están en el camino de ser un anti-rebote para los pulsadores, pero no están terminados ni mucho menos probados, así que mejor no los usen.
 

Adjuntos

Temas similares

Arriba