Programación y robótica en Secundaria
- Introducción
- Programación y Robótica. Asignatura libre configuración autonómica 3º ESO
- Orientaciones didácticas y metodológicas
- 1. Introducción al Pensamiento Computacional
- 1.1 Definiciones previas: conceptos básicos asociados
- 1.2 Pensamiento computacional: evolución conceptual
- 1.3 Componentes del Pensamiento Computacional
- 1.4 Saberes básicos, competencias específicas y criterios de evaluación del bloque de pensamiento computacional
- Situación de aprendizaje 1. ¿Cómo pensamos de forma computacional?
- 2. Diagramas de Flujo
- 2.1 Qué son y cómo crear diagramas de flujo
- 2.2 Cómo nos van a ayudar en nuestra asignatura de 3º ESO
- Situación de aprendizaje 2 . Pon un diagrama de flujo en tu vida cotidiana
- Situación de aprendizaje 3. ¿Cómo funciona una calculadora básica?
- Situación de aprendizaje 4. Adivinando el número secreto
- 3. Programación
- Scratch - Entorno de programación por bloques
- Situación de aprendizaje 5. Programando la calculadora básica
- Situación de aprendizaje 6. Programando las tablas de multiplicar
- Situación de aprendizaje 7. Programando el juego de adivina el número secreto
- Situación de aprendizaje 8. Art coding
- 4. Robótica: Software + Hardware
- 5. Arduino
- 6. Diseño 2D de circuitos electrónicos: EasyEDA
- 7. ArduinoBlocks
- ¿Qué es Arduino Blocks?
- Crear cuenta
- Cuentas alumnado
- Arduino blocks connector
- Empezando un proyecto
- 8. Robótica Educativa
- Objetivos y contenidos
- Materiales
- Ejercicios propuestos
- Situación de aprendizaje 9: Semáforo adaptado
- Situación de aprendizaje 10: Sistema de aparcamiento para coches
- Situación de aprendizaje 11: Sistema de alarma (con interrupción)
- Ejercicio Final: Túnel de lavado con sensores
- Créditos
- Programación, robótica y accesibilidad
Introducción
Programación y Robótica, asignatura de libre elección de 3º ESO
Programación y Robótica. Asignatura libre configuración autonómica 3º ESO
A continuación detallamos las 5 competencias específicas que el alumnado debe alcanzar en esta asignatura. Para cada una de ellas a lo largo del curso propondremos situaciones de aprendizaje y las relacionaremos con los saberes básicos así como los criterios de evaluación asociados.
Competencia específica de la materia Programación y Robótica 1:
CE.PR.1. Abordar problemas tecnológicos con autonomía y actitud creativa, aplicando conocimientos interdisciplinares y trabajando de forma cooperativa y colaborativa, para diseñar y planificar soluciones a un problema o necesidad de forma eficaz, innovadora y sostenible.
Vinculación con el Perfil de salida
Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: CCL1, STEM1, STEM3, CD3, CPSAA3, CPSAA5, CE1, CE3.
Competencia específica de la materia Programación y Robótica 2:
CE.PR.2. Aplicar de forma apropiada y segura distintas técnicas y conocimientos interdisciplinares utilizando operadores, sistemas eléctricos y electrónicos y herramientas, teniendo en cuenta la planificación y el diseño previo, para construir o fabricar soluciones tecnológicas sostenibles que den respuesta a necesidades en diferentes contextos.
Vinculación con el Perfil de salida
Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: STEM2, STEM3, STEM5, CD5, CPSAA1, CE3, CCEC3.
Competencia específica de la materia Programación y Robótica 3:
CE.PR.3. Describir, representar e intercambiar ideas o soluciones a problemas tecnológicos o digitales, utilizando medios de representación, simbología y vocabulario adecuados, así como los instrumentos y recursos disponibles y valorando la utilidad de las herramientas digitales, para comunicar y difundir información y propuestas.
Vinculación con el Perfil de salida
Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: CCL1, STEM4, CD3, CCEC3, CCEC4.
Competencia específica de la materia Programación y Robótica 4:
CE.PR.4. Desarrollar algoritmos y aplicaciones informáticas en distintos entornos, aplicando los principios del pensamiento computacional e incorporando las tecnologías emergentes, para crear soluciones a problemas concretos, automatizar procesos y aplicarlos en sistemas de control o en robótica.
Vinculación con el Perfil de salida
Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: CP2, STEM1, STEM3, CD5, CPSAA5, CE3.
Competencia específica de la materia Programación y Robótica 5:
CE.PR.5. Hacer un uso responsable y ético de la tecnología, mostrando interés por un desarrollo sostenible, identificando sus repercusiones y valorando la contribución de las tecnologías emergentes, para identificar las aportaciones y el impacto del desarrollo tecnológico en la sociedad y en el entorno.
Vinculación con el Perfil de salida
Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: STEM2, STEM5, CD4, CC4.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Orientaciones didácticas y metodológicas
El enfoque para la creación de los contenidos y situaciones de aprendizaje de este curso ha sido el que impera en la propia Orden del currículo aragonés:
La finalidad de la materia Programación y Robótica es estimular la capacidad creadora del alumnado, poniéndole enfrente de situaciones problemáticas reales, y facilitándole los conocimientos y las herramientas técnicas necesarias para su resolución mediante los principios del pensamiento computacional y la programación.
Por su naturaleza eminentemente práctica combina gran cantidad de ingredientes, todos ellos indispensables en un tipo de aprendizaje que implica al alumnado y lo vuelve un agente activo: metodología de proyectos, resolución de problemas basados en situaciones reales, desarrollo del pensamiento computacional para modelizar y prediseñar, creación de prototipos, trabajo en equipo, aproximación multidisciplinar a problemas complejos, capacidad de comunicar procesos y resultados con lenguajes adecuados y aprendizaje-servicio en la búsqueda de soluciones constructivas para la comunidad.
Todo ello con la finalidad de, por un lado, ayudar al alumnado a comprender mejor el mundo que le rodea, conocer los principios de funcionamiento de los dispositivos digitales de su entorno, para configurarlos mejor e incluso modificarlos para adaptarlos a sus necesidades tal y como establecen los principios del software libre .
Por otro lado, ayudarle a contribuir a la transformación del entorno desde habilidades como la creación de software y sistemas físicos que, extrayendo información del mismo, produzcan los comportamientos que se deseen, siempre sin olvidar la perspectiva de adquirir competencias útiles que le permitan analizar críticamente la realidad y transformarla, uniendo el aprendizaje con el compromiso social (Aprendizaje-Servicio)
En cuanto al desarrollo del curso, la evolución en los contenidos conllevará a una movilización de los contenidos previos. Si realizamos un diagrama de flujo, habrá que tener en cuenta esas habilidades del pensamiento que nos ayudan a resolver problemas. Si realizamos un programa en Scratch, se aconseja realizar en primer lugar el diagrama de flujo antes de ponerse a programar. Y así sucesivamente... Se espera que de esta forma se consoliden los conocimientos y aprendizajes.
Todas las prácticas aquí planteadas han sido ideadas para poder llevarlas a clase para trabajar con el alumnado. Tienen que servir para conocer en primera instancia los diferentes software que se van a utilizar para realizar las actividades y como consecuencia que vayan adquiriendo las competencias específicas de cada bloque de contenido.
Se han planteado situaciones de aprendizaje que resuelvan problemas del mundo real, con software de código libre para que así mismo dichas soluciones puedan ser abiertas y compartidas con otros. Las soluciones planteadas pueden estar abiertas a otra interpretación y de hecho esto ayudará a estimular la creatividad de nuestros alumnos, dejándoles cierto margen para afrontarlas. Son actividades que favorecen el trabajo en grupo y también el trabajo individual a lo largo de las diferentes fases de cada actividad o proyecto.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
1. Introducción al Pensamiento Computacional
1.1 Definiciones previas: conceptos básicos asociados
En un momento donde vivimos rodeados de lo digital, surgen nuevas formas de inteligencias (inteligencia digital) y la aparición de nuevas habilidades como es la codigoalfabetización (codeliteracy) (Zapata-Ros, 2015). Según el autor, podemos definir la codigoalfabetización como el proceso de enseñanza-aprendizaje de la lectoescritura con los diferentes lenguajes de programación, donde lo importante no será el lenguaje de programación en sí mismo, sino la capacidad de realizar estas creaciones independientemente del propio lenguaje de programación. Una persona está códigoalfabetizada cuando es capaz de entender y crear con un lenguaje que los dispositivos programables entiendan. Según el autor, las personas que desarrollan y evolucionan esta capacidad se dice que piensan computacionalmente, que al fin y al cabo no es más que un proceso cognitivo que nos permite resolver problemas, y que finalmente será expresado de una forma códigoalfabetizada.
González ahonda en la concreción y diferenciación de conceptos importantes en la codigoalfabetización como son algoritmo y programa. Un algoritmo es una secuencia ordenada de instrucciones u operaciones cuya ejecución en ese correcto orden nos va a dar lugar la solución deseada para un problema. La construcción de estos algoritmos se produce en nuestra mente tras un espacio de tiempo variable de reflexión personal (Moschovakis, 2001). Para facilitar la creación de estos algoritmos y estandarizar propuestas universales independientemente de los lenguajes usados por los humanos, surgieron herramientas que nos van a ayudar en la construcción visual de estos algoritmos como pueden ser los diagramas de flujo: unos símbolos o dibujos que van a representar las operaciones básicas de cualquier algoritmo: secuencia, condición, repetición e iteración (Barrera, 2013).
El paso para convertir un algoritmo en un programa es el arte de codificar. La codificación tiene que ver con crear un código fuente en un determinado lenguaje de programación partiendo de un algoritmo previamente creado (González-González, 2019). La codificación nos permite la comunicación entre los humanos que crean esos algoritmos y el lenguaje que entiendan las máquinas. Para que los dispositivos puedan ser programados y realizar las funciones que deseamos que hagan, necesitamos convertir ese algoritmo que resuelve el problema en un “programa” con un lenguaje que sí pueda ser entendido por esta máquina, para que pueda ser procesado y finalmente ejecutado (Zapata-Ros, 2015). A esta variedad de lenguajes se les denomina lenguajes de programación, de los cuales podemos encontrar cientos de ellos con diferentes propósitos (Chatley, Donaldson y Mycroft 2019). Chatley argumenta que cada lenguaje de programación, al tener sus propias reglas de sintaxis y sus propios conjuntos de instrucciones, evolucionarán en un futuro a otros miles de lenguajes de programación que surgirán a partir de estos.
Bers (2017) argumenta que mientras el pensamiento computacional tiene que ver con habilidades del pensamiento para resolver problemas, la “codificación” se puede ver como una herramienta para enseñar el pensamiento computacional. La codificación es considerada según la Agenda Digital europea como una habilidad clave ya que ayuda a poner en práctica habilidades del siglo XXI tales como la resolución de problemas, el pensamiento analítico y el trabajo en equipo (Bocconi, Chioccariello, Dettori, Ferrari y Engelhardt, 2016).
Así pues, podemos concluir que cualquier programa estará asociado a un algoritmo que habrá resuelto el problema subyacente, de la misma forma que no todos los algoritmos podrán ser expresados como un programa. Además, es importante resaltar que un mismo programa podrá ser escrito por diferentes personas, con diferentes lenguajes de programación utilizando diferente código. Todas estas definiciones y precisiones terminológicas se espera que contribuyan a una lectura más ágil y precisa de las páginas que siguen a continuación, donde nos adentramos de lleno en las diferentes formas que existen para definir el pensamiento computacional.
Todos los conceptos y literatura comentadas en este capítulo están extraídos del trabajo de revisión sistemática sobre métodos de evaluación del pensamiento computacional (Ruiz y Bustamente, 2021).
Bibliografía
Barrera, Lizardo (2013). Algoritmos y programación para la enseñanza y aprendizaje de la matemática escolar. En SEMUR, Sociedad de Educación Matemática Uruguaya (Ed.), VII Congreso Iberoamericano de Educación Matemática (pp. 6680-6687). Montevideo, Uruguay: SEMUR.
Bers, M. U. (2017). Coding as a playground: Programming and computational thinking in the early childhood classroom. Routledge.
Bocconi, S., Chioccariello, A., Dettori, G., Ferrari, A., & Engelhardt, K. (2016). Developing computational thinking in compulsory education-Implications for policy and practice (No. JRC104188). Joint Research Centre (Seville site).
Chatley, R., Donaldson, A., & Mycroft, A. (2019). The next 7000 programming languages. In Computing and Software Science, 250-282
González-González, C. S. (2019). Estado del arte en la enseñanza del pensamiento computacional y la programación en la etapa infantil. Education in the Knowledge Society, 2019, Vol. 20, n. 1, 35
Moschovakis, Y. N. (2001). What is an algorithm?. In Mathematics unlimited—2001 and beyond (pp. 919-936). Springer, Berlin, Heidelberg.
Ruiz Reinales, C., & Bustamante, J. C. Pensamiento computacional en educación infantil y primaria: una revisión sistemática.
Zapata-Ros, M. (2015). Pensamiento computacional: Una nueva alfabetización digital. Revista de Educación a Distancia (RED), (46).
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
1.2 Pensamiento computacional: evolución conceptual
La primera referencia formal de pensamiento computacional la podemos encontrar en el artículo de Wing (2006), donde define el pensamiento computacional como la habilidad que implica resolver problemas, diseñar sistemas, y entender el comportamiento humano a partir de los conceptos fundamentales de la informática, y que incluye una gama de herramientas mentales que reflejan la amplitud del campo de la informática. La autora argumenta no sólo lo que es el pensamiento computacional, sino también lo que no es:
- “Conceptualizing, not programming” (conceptualizar, no programar’). Pensar como un programador de dispositivos va mucho más allá de estar capacitado para programar un ordenador, ya que ello requiere tener la capacidad de pensar en múltiples capas de abstracción.
- “A way that humans, not computers, think” (‘una manera en que los humanos piensan, no las computadoras’). El pensamiento computacional es una habilidad que las personas usamos para resolver problemas, no para simular el pensamiento de un ordenador. Las máquinas están a nuestra disposición y su forma de realizar las cosas es predecible. Sin embargo, las personas, tenemos la capacidad de ser creativos, inteligentes y espontáneos. Por lo tanto, somos los humanos los que creamos estas máquinas para que nos ayuden, utilizando para ello nuestra inteligencia para acometer y resolver problemas que seguramente seríamos incapaces de poder realizar antes de inventar las máquinas.
- “Fundamental, not rote skill” (habilidad básica, no puramente mecánica). Se considera una habilidad básica aquella que cualquier ser humano tiene que poseer para poder desenvolverse en esta sociedad actual.
- “Complements and combines mathematical and engineering thinking” (se complementa y se combina con el pensamiento matemático e ingeniero). El pensamiento computacional tiene una relación en su origen con el pensamiento matemático, como el resto de ciencias. De la misma forma, tiene una relación con el pensamiento desarrollado en estudios de ingeniería puesto que lo que se crean son construcciones de sistemas informáticos para interactuar con nuestro mundo físico.
- “Ideas, not artifacts” (ideas, no artefactos). El pensamiento computacional no sólo está relacionado con las creaciones hardware o software que el ser humano sea capaz de diseñar, sino que también es una habilidad que podemos usar siempre para resolver problemas tan cotidianos como preparar un plato en la cocina o para gestionar mejor nuestra agenda personal.
- “For everyone, everywhere” (para cualquiera, en cualquier parte). El pensamiento computacional será una realidad cuando lo tengamos tan integrado en nuestras formas de abordar tareas, que lo más lógico sea que desaparezca como término y filosofía explícitos.
La Doctora Wing actualizará su propia definición argumentando que el pensamiento computacional incluye los procesos de pensamiento implicados en la formulación de problemas y de sus soluciones, de tal modo que éstos estén representados de una manera que pueda ser abordada efectivamente por un agente-procesador de información (Wing, 2008).
A partir de este momento, se suceden en el tiempo diferentes aportaciones, todas ellas enfocadas a enriquecer los currículos educativos. Fruto del trabajo colaborativo de la “Computer Science Teachers Association” (CSTA, 2011) y la “International Society for Technology in Education” (ISTE) de los Estados Unidos surge su propia aportación: un enfoque para resolver un problema concreto que ayuda a la inclusión de tecnologías digitales con ideas humanas. Todo ello no reemplaza el énfasis en creatividad, razonamiento o pensamiento crítico pero refuerza esas habilidades al tiempo que realza formas de organizar el problema de manera que el ordenador pueda ayudar (CSTA & ISTE, 2011).
En 2012 la Royal Society (Reino Unido) crea su primera definición al respecto, donde se argumenta que el pensamiento computacional es el proceso de reconocimiento de los aspectos computables en el mundo que nos rodea, y de aplicar las herramientas y técnicas de las Ciencias de la Computación para comprender y razonar sobre sistemas y procesos, tanto naturales como artificiales (Royal Society, 2012).
Otra aportación interesante ha sido la que realizaron Grover y Pea (2013), quienes proponen los principales conceptos que ellos piensan que han generado el mayor consenso, y que por lo tanto, deberían estar presentes en cualquier currículo educativo:
- Abstracción y generalización de patrones (incluyendo modelos y simulaciones)
- Procesamiento sistemático de la información
- Sistemas de símbolos y representación
- Noción algorítmica de control de flujo
- Descomposición estructurada de problemas
- Pensamiento iterativo, recursivo y paralelo
- Lógica condicional
- Limitadores de eficiencia y rendimiento
- Depuración y detección sistemática de errores
Kafai y Burke (2014) amplían las definiciones anteriores con un concepto innovador, definiéndolo como un tipo de pensamiento basado en procesos ejecutados por una persona o una máquina utilizando métodos y modelos que permiten resolver problemas así como diseñar sistemas que por sí solos no podrían hacerlo.
El equipo de desarrollo de Scratch (Lamb y Johnson, 2011) el software educativo más utilizado en el mundo (Zhang y Nouri, 2019), aportó su visión definiendo el pensamiento computacional como un conjunto de conceptos, prácticas y perspectivas que está fundamentado en el ámbito de la informática. Para ellos, aprender a programar y compartir sus propias creaciones provoca en los estudiantes que se desarrollen como pensadores computacionales, aprendiendo conceptos básicos a la vez que son capaces de desarrollar estrategias de resolución de problemas, diseño y formas de colaboración (ScratchEd Team, 2015). En la misma línea, es visto como una metodología que implementa conceptos básicos de la computación que ayudan a resolver cualquier clase de problemas, forjar estrategias y ejecutar tareas de tal forma que nos permita afrontar los problemas con eficacia y posibilidades de éxito. (Olabe, Basogain y Basogain, 2015).
Para finalizar este apartado de definiciones, hilaremos la primera de las definiciones realizada por Wing (2006, 2008) con la postura de Bers (2017), la cual destaca que aunque la resolución de problemas tiene su importancia dentro de la definición más operacional del pensamiento computacional, le otorga especial relevancia al hecho de que el principal potencial es la posibilidad de expresar y crear ideas mientras programamos, argumentando que la programación, al igual que la escritura, es una forma de expresarse. Así, si con el lenguaje somos capaces de concretar múltiples y variadas representaciones, con los lenguajes de programación somos capaces también de expresarnos y crear productos (del Mar Sánchez-Vera, 2019).
Todos los conceptos y literatura comentadas en este capítulo están extraídos del trabajo de revisión sistemática sobre métodos de evaluación del pensamiento computacional (Ruiz y Bustamente, 2021).
Bibliografía
Bers, M. U. (2017). Coding as a playground: Programming and computational thinking in the early childhood classroom. Routledge.
CSTA (2011). K–12 Computer Science Standards (Level 2) [Documento en línea]. Recuperado de http://csta.acm.org/Curriculum/sub/CurrFiles/CSTA_K12_CSS.pdf
CSTA & ISTE (2011). Operational Definition of Computational Thinking for K–12 Education [Documento en línea]. Recuperado dehttp://csta.acm.org/Curriculum/sub/CurrFiles/CompThinkingFlyer.pdf
del Mar Sánchez-Vera, M. (2019). El pensamiento computacional en contextos educativos: una aproximacion desde la Tecnologia Educativa/Computational Thinking in Educational Environments: An Approach from Educational Technology/El pensament computacional en contextos educatius: una aproximado des de la Tecnologia Educativa. Research in Education and Learning Innovation Archives (REALIA), (23), 24-40.
Grover, S., & Pea, R. (2013). Computational thinking in K–12: A review of the state of the field. Educational researcher, 42(1), 38-43.
Kafai, Y. B., & Burke, Q. (2014). Connected code: why children need to learn programming. MIT Press.
Olabe, X. B., Basogain, M. Á. O., & Basogain, J. C. O. (2015). Pensamiento Computacional a través de la Programación: Paradigma de Aprendizaje. Revista de Educación a Distancia (RED), (46)
Royal Society (Great Britain). (2012). Shut down or restart?: The way forward for computing in UK schools. Royal Society.
Ruiz Reinales, C., & Bustamante, J. C. Pensamiento computacional en educación infantil y primaria: una revisión sistemática.
ScratchEd Team [Portal Web] (2015). Computational Thinking webinars. Recuperado 2 de Junio de 2015, de http://scratched.gse.harvard.edu/content/1488
Wing, J. M. (2006). Computational thinking. Communications of the ACM, 49(3), 33-35.
Wing, J. M. (2008). Computational thinking and thinking about computing. Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences, 366(1881), 3717-3725.
Wing, J. M. (2017). Computational thinking’s influence on research and education for all. Italian Journal of Educational Technology, 25(2), 7–14.
Zhang, L., & Nouri, J. (2019). A systematic review of learning computational thinking through Scratch in K-9. Computers & Education, 141, 103607.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
1.3 Componentes del Pensamiento Computacional
El pensamiento computacional es un término que sirve para aglutinar una serie de habilidades del pensamiento, imprescindibles para cualquier estudiante del siglo XXI (Kong, Lai y Sun, 2020). El Reino Unido, a través de su currículum en Ciencias de la Computación (DFE.U, 2013), y en el que nos vamos a apoyar principalmente como base para la realización de los ejercicios de este capítulo, detalla que el pensamiento computacional lo forman 6 conceptos (lógica, algoritmos, descomposición, patrones, abstracción, y evaluación sistemática) y 5 aproximaciones (experimentación, creación, depuración, perseverancia y colaboración). Los conceptos explicados serían los siguientes:
- Lógica: el razonamiento lógico nos ayuda a explicar por qué algo sucede. Por esta razón, podemos utilizar el razonamiento lógico para determinar lo que queremos que haga un algoritmo de forma exacta.
- Algoritmos: un algoritmo está escrito para ser entendido por humanos y es una secuencia de instrucciones o conjunto de reglas para solucionar un problema.
- Descomposición: la capacidad que tenemos para poder fraccionar un problema en partes más pequeñas a través de las cuales podamos resolver problemas complejos y gestionar proyectos grandes.
- Patrones: estamos rodeados de patrones. Ser capaces de identificar patrones nos permitirá hacer predicciones, crear reglas y resolver problemas más generales
- Abstracción: la abstracción tiene que ver con simplificar las cosas; identificando qué es importante sin preocuparnos demasiado por lo anecdótico o irrelevante. La abstracción nos permite manejar la complejidad.
- Evaluación sistemática: la evaluación es sistemática y rigurosa; tiene que ver con juzgar la calidad, la efectividad y la eficiencia de las soluciones, sistemas, productos y procesos. La evaluación comprueba que las soluciones aportadas resuelven el problema que nos planteábamos inicialmente no solo de una forma exitosa, sino además la más optimizada. Esto tiene mucho que ver con enseñar a nuestros alumnos que el error no tiene que generar frustración, sino que la programación nos da la maravillosa oportunidad de solucionar un error al estar en nuestras manos, en nuestra comprensión.
Y a continuación las aproximaciones:
- Experimentación (‘Tinkering’): significa probar ... haciendo. En los más pequeños es la forma más natural de probar los juegos, de una forma espontánea mediante la exploración y el descubrimiento. Para los más mayores tiene que ver más con el concepto de ensayo-error-mejora.
- Creación (‘Creating’): Programar es un proceso creativo que implica tanto originalidad como la generación de un producto final valioso.
- Depuración (‘Debugging’): los errores en un algoritmo, programa o código y el proceso de encontrarlos y arreglarlos se denomina ‘debugging’. Algunos ‘bugs’ son errores lógicos, otros son errores sintácticos.
- Perseverancia (‘Persevering’): programar puede ser una tarea ardua y compleja en la que también vamos a necesitar de nuestra predisposición a perseverar en momentos frustrantes.
- Colaboración (‘Collaborating’): colaborar significa trabajar con otros para asegurar un mejor resultado. Para la creación de un producto final, en el mundo real no lo crea una sola persona, sino que son varias personas, incluso con diferentes perfiles, las que van creando su propia parte del código para cerrar la solución final. En un caso más sencillo, también se programa por parejas validando la expresión coloquial “cuatro ojos ven más que dos”.
Estados Unidos fue otro de los países pioneros en crear un curriculum Computer Science. A través de su Fundación Nacional para la Ciencia de los Estados Unidos (“National Science Foundation”) pone en marcha una serie de acciones formativas para la comunidad educativa, como por ejemplo la iniciativa “CS Principles” (Astrachan y Briggs, 2012), cuyo objetivo es fijar y transmitir las bases de las Ciencias de la Computación al alumnado de Bachillerato y primeros años de universidad. Se destacan las siguientes ideas principales relacionadas con procesos cognitivos y operacionales previa a la que fue su primera definición del pensamiento computacional:
- Formular problemas de un modo que se haga posible utilizar un ordenador y otras máquinas en su resolución
- Automatizar soluciones a través del pensamiento algorítmico (una serie de pasos discretos y ordenados)
- Organizar lógicamente y analizar datos
- Identificar, analizar e implementar posibles soluciones con el objetivo de lograr la combinación más efectiva y eficiente de pasos y recursos
- Representar datos a través de abstracciones tales como modelos y simulaciones
- Generalizar y transferir este proceso de solución de problemas a una amplia variedad de situaciones
Otra aproximación distinta es la que realizó el grupo Google for Education (2014), detallando cuales son los 4 fases de procesos cognitivos que trabajan como una rueda circular :
- Descomposición de un problema o tarea en pasos discretos
- Reconocimiento de patrones (regularidades)
- Generalización de dichos patrones y abstracción (descubrir las leyes o principios que causan dichos patrones)
- Diseño algorítmico (desarrollar instrucciones precisas para resolver el problema y sus análogos)
En el mismo artículo se argumenta que el pensamiento computacional implica una serie de habilidades, incluyendo:
- Formular problemas de una manera que nos permita usar un ordenador y otras herramientas para ayudar a resolverlos
- Organizar y analizar de forma lógica un grupo de datos.
- Representación de datos a través de abstracciones como modelos y simulaciones
- Soluciones automatizadas a través del pensamiento algorítmico (una serie de pasos ordenados)
- Identificar, analizar e implementar posibles soluciones con el objetivo de lograr la combinación más eficiente y efectiva de pasos y recursos
- Generalizar y transferir este proceso de resolución de problemas a una amplia variedad de problemas
Lo realmente novedoso en su propuesta es que declaran que estas habilidades están respaldadas y mejoradas por una serie de disposiciones o actitudes que incluyen:
- Confianza al desenvolverse bien en la complejidad
- Persistencia al trabajar con problemas difíciles
- Ser más tolerante con respecto a la ambigüedad
- Capacidad de hacer frente a problemas abiertos (sin una solución concreta y evidente)
- Capacidad de comunicarse y trabajar con otros para llegar a una meta-solución común
Y aún van más allá asegurando que los conceptos de pensamiento computacional no son solo los procesos mentales (por ejemplo, abstracción, diseño de algoritmos, descomposición, reconocimiento de patrones, etc.) sino que también producen resultados tangibles (por ejemplo, automatización, representación de datos, generalización de patrones, etc.) asociados con la resolución de problemas en computación. Estos se definen de la siguiente manera:
- Abstracción: identificación y extracción de información relevante para definir las ideas principales
- Diseño de algoritmos: creación de una serie ordenada de instrucciones para resolver problemas similares o para realizar una tarea
- Automatización: Tener computadoras o máquinas para hacer tareas repetitivas.
- Análisis de datos: dar sentido a los datos mediante la búsqueda de patrones o el desarrollo de ideas
- Recopilación de datos: Recopilación de información
- Representación de datos: representación y organización de datos en gráficos, cuadros, palabras o imágenes apropiados
- Descomposición: desglosar datos, procesos o problemas en partes más pequeñas y manejables
- Paralelización: procesamiento simultáneo de tareas más pequeñas de una tarea más grande para alcanzar de manera más eficiente un objetivo común
- Generalización de patrones: creación de modelos, reglas, principios o teorías de patrones observados para probar los resultados previstos
- Reconocimiento de patrones: observación de patrones, tendencias y regularidades en los datos
- Simulación: Desarrollando un modelo para imitar procesos del mundo real
Bers (2017) amplía los elementos relacionados con el pensamiento computacional, concretándolo como un proceso expresivo organizado en siete habilidades de pensamiento computacional: algoritmos, modularidad, estructuras de control, representación, hardware / software, el proceso de diseño, y la depuración.
Para finalizar, partiendo de la propuesta original de Wing (2006), Olabe, Basogain y Basogain (2015) resumen las principales habilidades del pensamiento asociados al pensamiento computacional:
- Reformular un problema a uno parecido que sepamos resolver por reducción, encuadrarlo, transformar, simular
- Pensar Recursivamente
- Procesar en Paralelo
- Interpretar código como datos y datos como código
- Generalizar análisis dimensional
- Reconocer ventajas y desventajas del solapamiento
- Reconocer coste y potencia de tratamiento indirecto y llamada a proceso
- Juzgar un programa por simplicidad de diseño
- Utilizar Abstracción y descomposición en un problema complejo o diseño de sistemas complejos
- Elegir una correcta representación o modelo para hacer tratable el problema
- Seguridad en utilizarlo, modificarlo en un problema complejo sin conocer cada detalle
- Modularizar ante múltiples usuarios
- Prevención, protección, recuperarse de escenario peor caso
- Utilizar razonamiento heurístico para encontrar la solución
- Planificar y aprender en presencia de incertidumbre
- Buscar, buscar y buscar más
- Utilizar muchos datos para acelerar la computación
- Límite tiempo/espacio y memoria/potencia de procesado
Estas tres primeras páginas han servido como base teórica para comprender los procesos de pensamiento computacional con respecto a la resolución de problemas y procesos cognitivos asociados. Dada esta realidad, no es sorprendente que haya aparecido un interés en muchos países por introducir el pensamiento computacional como un conjunto de habilidades de resolución de problemas que los nuevos estudiantes deberían adquirir.
Todos los conceptos y literatura comentadas en este capítulo están extraídos del trabajo de revisión sistemática sobre métodos de evaluación del pensamiento computacional (Ruiz y Bustamente, 2021).
Bibliografía
Astrachan, O., & Briggs, A. (2012). The CS principles project. ACM Inroads, 3(2), 38-42.
Bers, M. U. (2017). Coding as a playground: Programming and computational thinking in the early childhood classroom. Routledge.
DFE, U. (2013). National curriculum in England: computing programmes of study. Retrieved July, 16, 2014.
Google for Education. (2014). Exploring Computational Thinking. Recuperado 15 de octubre de 2018, de Google for Education website: https://edu.google.com/resources/programs/exploring-computational-thinking/
Kong, S. C., Lai, M., & Sun, D. (2020). Teacher development in computational thinking: Design and learning outcomes of programming concepts, practices and pedagogy. Computers & Education, 151, 103872.
Olabe, X. B., Basogain, M. Á. O., & Basogain, J. C. O. (2015). Pensamiento Computacional a través de la Programación: Paradigma de Aprendizaje. Revista de Educación a Distancia (RED), (46)
Ruiz Reinales, C., & Bustamante, J. C. Pensamiento computacional en educación infantil y primaria: una revisión sistemática.
Wing, J. M. (2006). Computational thinking. Communications of the ACM, 49(3), 33-35.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
1.4 Saberes básicos, competencias específicas y criterios de evaluación del bloque de pensamiento computacional
Para favorecer la creación de la programación didáctica y la unidad didáctica correspondiente, realizamos una selección de los saberes básicos, competencias específicas y criterios de evaluación que se trabajarán de forma específica en este bloque de contenidos.
Relación con los saberes básicos:
- Estrategias, técnicas y marcos de resolución de problemas en diferentes contextos y sus fases.
- Emprendimiento, resiliencia, perseverancia y creatividad para abordar problemas desde una perspectiva interdisciplinar.
- Algorítmica y diagramas de flujo.
Relación con las competencias específicas:
- CE.PR.1. Abordar problemas tecnológicos con autonomía y actitud creativa, aplicando conocimientos interdisciplinares y trabajando de forma cooperativa y colaborativa, para diseñar y planificar soluciones a un problema o necesidad de forma eficaz, innovadora y sostenible.
Relación con los criterios de evaluación:
- CE.E.1. Abordar problemas tecnológicos con autonomía y actitud creativa, aplicando conocimientos interdisciplinares y trabajando de forma cooperativa y colaborativa, para diseñar y planificar soluciones a un problema o necesidad de forma eficaz, innovadora y sostenible.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 1. ¿Cómo pensamos de forma computacional?
Tras haber realizado al alumnado una presentación sobre el término de pensamiento computacional y las habilidades del pensamiento relacionadas, se propone un primer ejercicio para que puedan ser capaces de reconocerlas a la hora de afrontar la resolución de un problema. En esta primera situación de aprendizaje, no se trata de resolver el problema, sino solo de que el alumnado sea capaz de visibilizar y detectar estas habilidades del pensamiento. Se busca que el alumno afronte mejor la resolución de problemas detectando todas las claves, que como no puede ser de otra manera se encontraran dentro del enunciado.
Vamos a basarnos en el modelo británico y en las siguientes habilidades del pensamiento relacionadas con el pensamiento computacional que ya han sido comentadas en el apartado 1.3: razonamiento lógico, pensamiento algorítmico, descomposición, patrones, abstracción y evaluación sistemática.
A continuación planteamos el enunciado del problema a resolver, teniendo en cuenta que sólo hay que identificar algunas de estas habilidades del pensamiento. En el capítulo posterior diseñaremos el diagrama de flujo para este problema, y en el siguiente lo programaremos. Estas serán nuestras 3 fases a la hora de resolver cualquier problema de programación:
- Interpretación del enunciado
- Diagrama de flujo
- Codificación en lenguaje de programación
Enunciado
María es una alumna de 3º ESO que está muy interesada en simular el comportamiento de su calculadora y para ello quiere crear un programa que simule el funcionamiento de una calculadora básica donde introducimos 2 números y 4 operaciones posibles (+, -, /,*) teniendo en cuenta que la división tiene un caso especial (el segundo número no puede ser un cero). Tras cada operación matemática exitosa, la calculadora volverá a su estado inicial esperando realizar una nueva operación.
El trabajo a realizar es partiendo del enunciado, identificar todas las habilidades del pensamiento computacional vistas en clase para empezar a poner la solución como paso previo a la creación del diagrama de flujo.
Solución:
Seguramente no hay una única solución posible, pero una posible solución sería la siguiente:
Descomposición. El problema general tiene unos cuantos subproblemas a resolver:
- Pedir el primer número (e incluso a la hora de programar, asegurarnos que lo introducido sea un número)
- Pedir el segundo número (e incluso a la hora de programar, asegurarnos que lo introducido sea un número)
- Pedir la operación a realizar (e incluso a la hora de programar asegurarnos que sea una de las 4 operaciones posibles: + - * /)
- En el caso de que la operación sea la división asegurarnos que el segundo número no sea un 0
- Realizar la operación deseada y sacar datos por pantalla
Patrones. Operaciones que se van a repetir dentro de nuestro código:
- Hay un gran patrón que se repite tras realizar la operación de manera exitosa: el programa tiene que volver al principio para realizar una nueva operación. En programación esto habrá que programarlo con un bucle infinito a no ser que introduzcamos una condición de salida
- Después de este gran patrón, podemos encontrar otros patrones como podrían ser un bloque de código para asegurarnos que los números sean números, que sea una de las 4 operaciones posibles y por último que en el caso de la división, el segundo número no sea un cero. En cualquiera de estos 3 caso podríamos incluir un bucle para asegurarnos de que se cumple lo que esperamos en la introducción de datos
Abstracción. Información no relevante para resolver el problema
- La información referente a María y su interés no es relevante a la hora de resolver el problema
Pensamiento algorítmico. Secuencia de órdenes para resolver el problema en un orden en concreto:
- Pedir primero número y asegurarnos de que sea un número
- Pedir segundo número y asegurarnos de que sea un número
- Pedir una operación y asegurarnos de que sea una de las permitidas
- Si es una suma, realizo la operación de suma de los dos números y saco resultado por pantalla
- Si es una resta, realizo la operación de resta de los dos números y saco resultado por pantalla
- Si es una multiplicación, realizo la operación de multiplicación de los dos números y saco resultado por pantalla
- Si es una división, compruebo que el segundo número no sea un cero y en tal caso vuelvo a pedir segundo número hasta que sea distinto de cero. A continuación visualizo el resultado de la división
- Vuelvo al comienzo para esperar una nueva operación
Como podemos suponer, no hay una única solución muchas veces para el mismo problema, y es genial que el alumnado pueda darse cuenta de ello e incluso se pueda debatir en la pizarra y que cada uno argumente pros y contras. En este caso, una posible solución alternativa sería que antes de pedir el segundo número podría pedir la operación y a continuación pedir el segundo número de tal forma que puedo controlar en ese paso si es un cero o es un número correcto para realizar la división.
Por último, en esta serie de pasos para resolver un problema, podremos a su vez descomponerla en otras órdenes tal y como hemos visto en la parte de descomposición, llegando a hacer esta secuencia de órdenes más detallada.
Evaluación. Antes de ponernos a dar los siguientes pasos, asegurarnos que no nos hemos dejado nada clave en la resolución del problema
Lógica. Habremos aplicado razonamiento lógico para la detección de entender el enunciado, sus requisitos, las salidas esperadas, y por último, los aspectos a controlar y tener en cuenta.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
2. Diagramas de Flujo
2.1 Qué son y cómo crear diagramas de flujo
Un algoritmo es una sucesión de pasos que se deben realizar para resolver un problema.
Un diagrama de flujo es una forma de representar un proceso o algoritmo de manera visual, estructurada y organizada. Es una herramienta muy útil para organizar y estructurar una tarea de programación antes de entrar directamente con el código.
Ejemplo de diagrama de flujo:
Aunque existen diversos programas informáticos para la realización de diagramas de flujo, en este curso utilizaremos una funcionalidad de PSeInt que lo permite. No obstante, y atendiendo a la cada vez más abundante evidencia científica al respecto, recomendamos que los diagramas de flujo se aborden con el alumnado en primer lugar con papel y boli, y si es pertinente de forma colaborativa, dejando para el software simplemente su edición final para incluir como documentación del programa.
Elementos del diagrama de flujo
Un diagrama de flujo está formado fundamentalmente por los siguientes elementos:
- Línea o flechas del flujo: Indica la instrucción que se va a realizar, o la dirección del flujo del proceso. Muestra el carácter secuencial del programa.
- Terminal o inicio y final: Es la forma en la cual se indica el “inicio del proceso” y “final del proceso”. Su icono suele ser un rectángulo con las esquinas redondeadas.
- Asignación/ definición: Permite asignar un valor o definir una variable, donde se almacenan los datos que se necesitan para resolver el problema. Suele representarse con un rectángulo.
- Datos de entrada: Indica la recepción de datos en la entrada. Se representa con un recuadro con las esquinas inclinadas y una flecha hacia dentro.
- Datos de salida: Indica la impresión de datos en la salida. Se representa con un recuadro con las esquinas inclinadas y una flecha hacia fuera.
- Decisión: Indica que desde el punto en que nos encontramos, puede haber más de un camino para seguir, según la condición dada. En este caso se usa un rombo.
- Otros: Como algunos tipos de bucles, los iremos viendo más adelante.
Ejemplos sencillos de diagramas de flujo
Ejemplo 1: Diagrama de flujo de un programa que a partir de dos números los suma y muestra el resultado en pantalla
SOLUCIÓN:
- Salidas: tiene que pedir los dos números a sumar, y luego tiene que mostrar el resultado.
- Entradas: los dos números a sumar.
- Almacenamiento: dos variables que almacenen los números a sumar (num1 y num2) , y una tercera que almacene el resultado (resultado)
- Operación: suma.
Diagrama de flujo:
Ejemplo 2: Diagrama de flujo de un programa que a partir de dos números compara cuál es mayor y lo muestra en pantalla.
- Salidas: tiene que pedir los dos números a comparar, y luego tiene que mostrar el resultado de la comparación.
- Entradas: los dos números a comparar.
- Almacenamiento: dos variables que almacenen los números a comparar (num1 y num2)
- Operación: comparación lógica.
Diagrama de flujo:
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Esta explicación se ha extraído del curso de Aularagón: Fundamentos de programación estructurada con Pseint y Scratch
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
2.2 Cómo nos van a ayudar en nuestra asignatura de 3º ESO
Los diagramas de flujo son piezas clave en la enseñanza de programación ya que nos van a ayudar a representar de forma gráfica la solución a un problema.
Para favorecer la creación de la programación didáctica y la unidad didáctica correspondiente, realizamos una selección de las competencias específicas, criterios de evaluación y saberes básicos que se trabajarán de forma específica en este bloque de contenidos.
Relación con las competencias específicas y criterios de evaluación
Competencia específica de la materia Programación y Robótica 1 y criterios de evaluación implicados:
- CE.PR.1. Abordar problemas tecnológicos con autonomía y actitud creativa, aplicando conocimientos interdisciplinares y trabajando de forma cooperativa y colaborativa, para diseñar y planificar soluciones a un problema o necesidad de forma eficaz, innovadora y sostenible.
- 1.1. Idear y diseñar soluciones eficaces, innovadoras y sostenibles a problemas definidos, aplicando conceptos, técnicas y procedimientos interdisciplinares, así como criterios de sostenibilidad, con actitud emprendedora, perseverante y creativa.
- 1.2. Seleccionar, planificar y organizar los materiales y herramientas, así como las tareas necesarias para la construcción de una solución a un problema planteado, trabajando individualmente o en grupo de manera cooperativa y colaborativa.
Competencia específica de la materia Programación y Robótica 3 y criterios de evaluación implicados:
-
CE.PR.3. Describir, representar e intercambiar ideas o soluciones a problemas tecnológicos o digitales, utilizando medios de representación, simbología y vocabulario adecuados, así como los instrumentos y recursos disponibles y valorando la utilidad de las herramientas digitales, para comunicar y difundir información y propuestas.
-
3.1. Representar y comunicar el proceso de creación de un producto desde su diseño hasta su difusión, elaborando documentación técnica y gráfica con la ayuda de herramientas digitales, empleando los formatos y el vocabulario técnico adecuados, de manera colaborativa, tanto presencialmente como en remoto
-
Competencia específica de la materia Programación y Robótica 4 y criterios de evaluación implicados:
- CE.PR.4. Desarrollar algoritmos y aplicaciones informáticas en distintos entornos, aplicando los principios del pensamiento computacional e incorporando las tecnologías emergentes, para crear soluciones a problemas concretos, automatizar procesos y aplicarlos en sistemas de control o en robótica.
-
4.1. Describir, interpretar y diseñar soluciones a problemas informáticos a través de algoritmos y diagramas de flujo, aplicando los elementos y técnicas de programación de manera creativa.
-
Relación con los saberes básicos:
Bloque A. Proceso de resolución de problemas
El proceso de resolución de problemas es la búsqueda de soluciones tecnológicas a una necesidad o a un determinado problema, siguiendo una serie de pasos. Si bien se da una gran importancia a las fases de investigación, ideación, diseño y fabricación, también se incluye un adecuado tratamiento de la fase de presentación y comunicación de resultados como aspecto clave para la difusión de los trabajos realizados, hecho que relaciona los saberes básicos de los bloques A y B.
- Estrategias, técnicas y marcos de resolución de problemas en diferentes contextos y sus fases.
- Emprendimiento, resiliencia, perseverancia y creatividad para abordar problemas desde una perspectiva interdisciplinar.
Bloque B. Comunicación y difusión de ideas
En el mundo en el que nos movemos, tan importante es hacer las cosas, como difundirlas de forma correcta. Nuestro alumnado utilizará técnicas de representación en dos y tres dimensiones para la elaboración de nuestros proyectos, además de generar, publicar y difundir la información mediante herramientas digitales.
- Herramientas digitales para la elaboración, publicación y difusión de documentación técnica e información multimedia relativa a proyectos.
Bloque C. Pensamiento computacional, programación y robótica
Aplicaremos el pensamiento computacional para plantear procedimientos, la abstracción, la descomposición en tareas más simples con el objetivo de llegar a una solución del problema que pueda ser ejecutada por un sistema informático. Además, usaremos la programación y la robótica como medio de comunicación y herramienta de aprendizaje con el fin de mejorar la autonomía y creatividad a la hora de resolver problemas.
- Algorítmica y diagramas de flujo.
- Autoconfianza e iniciativa: el error, la reevaluación y la depuración de errores como parte del proceso de aprendizaje.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 2 . Pon un diagrama de flujo en tu vida cotidiana
Como ya hemos visto en las dos páginas anteriores, los diagramas de flujo nos ofrecen un método visual para la resolución de problemas siguiendo una serie de pasos con una simbología visual universal.
Tras explicar los símbolos al alumnado, se recomienda comenzar con una actividad distendida que les ayude a comprender la forma de trabajo de los diagramas de flujo. Para ayudar a crearlos más fácilmente os compartimos una diapositiva de Google Presentaciones con todos los símbolos necesarios para crear diagramas de flujo. Solo tendrás que hacerte una copia (iniciar sesión con cuenta de Gmail y Archivo-Crear una copia ) y a partir de aquí ir haciendo copias de los símbolos que necesites para ir generando tu diagrama de flujo. Puedes ver el original en este ENLACE
Planteamiento: dado un problema a resolver, mediante el uso de los símbolos típicos de los diagrama de flujo, utilizar los necesarios para visualizar la resolución del problema. Este problema a resolver se recomienda que sea elegido por los propios alumnos que pueden trabajar solos en grupos de 2 o 3 alumnos. Cada grupo encontrará su propia motivación para representar su idea en un diagrama de flujo.
Algunas de las ideas que se pueden facilitar podrían ser: ¿qué hago desde que me levanto por la mañana hasta que llego al colegio? ¿cómo cocinar mi plato favorito? ¿qué hago en mi tiempo libre?
Ejemplo 1. Representar el proceso de prepararse una taza de té.
Tenemos que dar la opción de preguntar si lo desea con leche, con azúcar, y finalmente, si quiere preparar otro más.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 3. ¿Cómo funciona una calculadora básica?
En esta situación de aprendizaje ya sí nos metemos en un actividad en la que en primer lugar resolveremos su diagrama de flujo y en el capítulo siguiente la programaremos. Esta forma de trabajo de incluir todo lo necesario para realizar un proyecto es la que se recomienda utilizar al menos en los proyectos a realizar por el alumnado. Se menciona en la siguiente competencia específica de la asignatura:
- Competencia específica de la materia Programación y Robótica 3: La competencia abarca los aspectos necesarios para la comunicación y expresión de ideas. Hace referencia a la exposición de propuestas, representación de diseños, manifestación de opiniones, etc. Asimismo, incluye la comunicación y difusión de documentación técnica relativa al proyecto. En este aspecto se debe tener en cuenta la utilización de herramientas digitales tanto en la elaboración de la información como en la comunicación.
Así como en el siguiente criterio de evaluación:
- CE.PR.3. Describir, representar e intercambiar ideas o soluciones a problemas tecnológicos o digitales, utilizando medios de representación, simbología y vocabulario adecuados, así como los instrumentos y recursos disponibles y valorando la utilidad de las herramientas digitales, para comunicar y difundir información y propuestas.
- 3.1. Representar y comunicar el proceso de creación de un producto desde su diseño hasta su difusión, elaborando documentación técnica y gráfica con la ayuda de herramientas digitales, empleando los formatos y el vocabulario técnico adecuados, de manera colaborativa, tanto presencialmente como en remoto.
Y por último, también lo podemos encontrar en la concreción de los saberes básicos:
- Bloque 2. B. Comunicación y difusión de ideas: herramientas digitales para la elaboración, publicación y difusión de documentación técnica e información multimedia relativa a proyectos.
Enunciado de situación de aprendizaje 3
Realizar un diagrama de flujo que simule el funcionamiento de una calculadora básica donde introducimos 2 números y 4 operaciones posibles (+, -, /,*) teniendo en cuenta que la división tiene un caso especial (el segundo número no puede ser un cero). Tras mostrar en pantalla el resultado final se ofrecerá la posibilidad de seguir realizando operaciones.
Mostramos dos soluciones. En la de izquierda el usuario se limita simplemente a sacar un mensaje de error si el segundo operando de una división es cero y en la de la derecha se vuelve a pedir el número y se comprueba constantemente que sea distinto de cero, y en tal caso, realizará la operación de la división.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 4. Adivinando el número secreto
Para terminar con el capítulo de diagramas de flujo vamos a plantear el típico ejercicio de adivinar el número secreto. Los condicionantes son los siguientes:
- Se generará un número aleatorio entre 1 y 100
- Se preguntará al usuario para que intente acertarlo
- Si el número introducido por el usuario es menor habrá que sacar un mensaje para decirle que el número a adivinar es más grande
- Si el número introducido por el usuario es mayor habrá que sacar un mensaje para decirle que el número a adivinar es más pequeño
- Si lo adivina mandar un mensaje de felicitaciones
- Preguntar si quiere volver a jugar, y en tal caso vuelta a empezar
SOLUCIÓN
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
3. Programación
Scratch - Entorno de programación por bloques
Scratch es un entorno de programación de programación por bloques muy visual que fue diseñado por el MIT (Massachusetts Institute of Technology), especialmente orientado a que los niños puedan aprender a programar, creando videojuegos, arte o contando historias que puedan afianzar las habilidades del pensamiento computacional así como estimular su creatividad.
Está muy basado en el sistema de bloques encajables al estilo de LEGO que pueden ser arrastradas a la pantalla de creación de código, lo cual lo convierte en un entorno de programación sencillo e intuitivo ya que tienes al alcance de la vista todas las instrucciones que puedes utilizar, agrupadas por temáticas y cada uno con su propio código de colores.
Para programar en Scratch, tendremos que ir a su página y a partir de aquí tendremos dos opciones:
- crearnos una cuenta y crear todos nuestros programas en la zona de creación que tienen online. De esta forma podremos crear nuestro propio repositorio de programas en Scratch y accesibles desde cualquier lugar con el simple hecho de hacer login con tu cuenta
- descargar el programa como una aplicación más de tu sistema operativo y trabajar en modo offline. Existen versiones para los principales sistemas operativos. Para el caso de linux, y en concreto Vitalinux, la versión offline está disponible en Vitalinux Play con el nombre Scratux. Podéis encontrar instrucciones concretas aquí.
En la página Web de Scratch hay muchos otros recursos para ayudar a aprender Scratch:
- proyectos ya realizados que pueden inspirar tus propias ideas
- tutoriales para empezar desde cero
Para conocer más sobre Scratch puedes acudir a los siguientes enlaces, pertenecientes al libro Enseña Pensamiento Computacional con Scratch de CATEDU
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 5. Programando la calculadora básica
Vamos a programar el ejercicio planteado en los diagramas de flujo sobre cómo programar una calculadora básica. Recordamos que solo puede haber las 4 operaciones básicas (+ - * /) y que tenemos que controlar que el segundo número no sea un cero si se ha elegido la división como operación. Tras mostrar el resultado, preguntaremos si quiere seguir jugando.
Como primera solución poco rigurosa, al detectar que el segundo número es un cero o si no introduce una de las 4 operaciones deseadas, simplemente sacará un mensaje de error y a continuación preguntará si quiere seguir jugando. El diagrama de flujo sería algo parecido a lo siguiente:
La experiencia de juego debería ser como la siguiente:
Esta primera resolución del problema tendría un código fuente parecido al siguiente:
Si lo que queremos es asegurarnos que el segundo número no sea un cero en una división y programar la solución para que la ejecución del programa no continue hasta que se introduzca algo diferente a un cero, habría que cambiar el código por lo siguiente:
Y la experiencia de juego sería así:
EJERCICIO EXTRA PROPUESTO:
Modificar el código propuesto para que el programa solo pueda aceptar como válidas una de las 4 operaciones deseadas y en el caso de la división el programa no continua hasta que el segundo dígito sea distinto de un cero. El programa tampoco continua hasta que se introduzca una operación válida
La experiencia de juego del programa quedaría de la siguiente forma:
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 6. Programando las tablas de multiplicar
Esta práctica nos viene genial para practicar el uso de bucles junto con variables que se van a tener que ir incrementando para lograr nuestros objetivos.
Podemos plantear dos ejercicios referidos a las tablas de multiplicar:
- Pedir el número de la tabla de multiplicar que queramos sacar por pantalla. Lo podemos complicar para que el usuario solo pueda meter números del 1 al 10 ambos inclusive y también para que introduzca S o N como únicas respuestas posibles ante la pregunta de si quiere seguir jugando.
- Crear un programa que automáticamente nos visualice en pantalla las 10 tablas de multiplicar. Este ejercicio nos viene muy bien para practicar el concepto de meter un bucle dentro de otro, algo que al alumnado novel en programación le cuesta entender un poco al principio
Opción 1. Mostrando una tabla de multiplicar elegida por el usuario
El diagrama de flujo que resuelve este problema sería algo parecido a lo siguiente:
Se recomienda siempre que el alumnado no intente programar el ejercicio en su totalidad, sino que vayan identificando las cosas que tienen que hacer, comiencen por el problema a resolver y posteriormente las particularidades. En este caso, se recomienda que los pasos a la hora de afrontar el algoritmo sean los siguientes:
- Programar la lógica referente a pedir un número, visualizar su tabla de multiplicar y finalmente preguntar si quiere seguir jugando, todo ello dentro de un bucle principal.
- Programar el requisito de que el número esté comprendido entre 1 y 10, ambos inclusive
- Programar que el usuario solo pueda introducir una S o una N ante la pregunta de si quiere seguir jugando.
El programa en su fase 1 tendría un código parecido al siguiente:
Cuando ya sabemos que nuestro programa funciona en líneas generales, podríamos incluir la programación de la limitación de que hasta que el usuario no introduzco un número entre 1 y 10 ambos inclusive, el programa no continua:
Finalmente, introducimos la programación de que la respuesta final del usuario solo puede ser S o N. Es el mismo tipo de bucle que en la anterior limitación:
Un aspecto importante a destacar es que si bien es cierto que en la programación de ambas limitaciones hemos utilizado el mismo tipo de bucle con dos condiciones a tener en cuenta, en el primero hemos utilizado una unión de esas dos condiciones con el bucle AND, puesto que necesitábamos que ambas se cumplieran, y en el segundo hemos utilizado un operador OR porque nos bastaba con que se cumpliera una de las dos. Estaría bien enseñar a los alumnos (si es que aún no lo saben) como son las tablas lógicas del AND y del OR.
Este ejercicio, aunque parezca sencillo en su formulación, contiene en su programación unos cuantos aspectos básicos en el aprendizaje de programación que deben quedar bien asentadas para futuros aprendizajes más profundos.
Finalmente, la experiencia de juego sería algo parecida a lo siguiente:
Propuesta Extra Opción 2. Visualizando todas las tablas de multiplicar del 1 al 10
¿Te atreves a realizar este programa por tu cuenta? Y la experiencia de juego sería como se puede ver a continuación:
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 7. Programando el juego de adivina el número secreto
Vamos a realizar un programa donde la máquina va a generar números aleatorios y nosotros lo tenemos que adivinar. Condicionantes del programa:
- El número aleatorio deberá estar en un intervalo de 0 a 100, ambos inclusive.
- El programa no para hasta que lo acertemos
- Tenemos que dar pistas al usuario. Si el número introducido es mayor o menor que el número secreto, deberemos decírselo
- Habrá que mostrar también el mensaje de que has acertado el número
- Habrá que decirle al usuario cuántos intentos le ha costado adivinar el número
- Una vez acertado el número, habrá que preguntar al usuario si quiere seguir jugando y en caso afirmativo deberá crearse un nuevo número aleatorio
Para crear un número aleatorio tenemos la instrucción PICK RANDOM (inglés) o NÚMERO ALEATORIO ENTRE (español)
SOLUCIÓN COMENTADA
A continuación la solución al programa con una serie de aclaraciones:
- Hay que iniciar la variable RESP (variable para controlar si queremos seguir jugando o no) con un valor inicial que al menos nos permita entrar la primera vez
- Antes de comenzar a intentar adivinar el número, tendremos que resetear el contador de INTENTOS a 0
- Instrucción para generar el número aleatorio
- Resetear la variable ACERTADO a N, ya que la pondremos a S cuando hayamos acertado
- Comenzamos con los tres IF para preguntar si es mayor, menor o hemos acertado y dar información al usuario
- Poner a S la variable ACERTADO en caso de acertar, para romper el bucle de seguir intentándolo
- Sacar el mensaje al usuario para decirle cuántos intentos ha tardado en adivinar el número. Esto lo haremos al acabar el bucle anterior
Y a continuación la experiencia del juego:
PROPUESTA DE MEJORA
Introduce las siguientes mejoras al programa:
- Ofrecer solo 5 intentos para adivinar el número secreto. El programa acabará bien porque acierta el usuario o bien porque se le acaban los intentos
- Forzar al usuario a que introduzca exclusivamente S o N para seguir jugando o no
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 8. Art coding
En este programa vamos a dibujar figuras geométricas que se van a ir desplazando por la pantalla para crear formas geométricas que van cambiando de colores.
Para realizar este programa, en primer lugar tenemos que sacar cómo dibujar una figura geométrica. Para ello utilizaremos un grupo concreto de instrucciones del bloque LÁPIZ:
Las instrucciones BAJAR LÁPIZ y SUBIR LÁPIZ hacen que la herramienta de pintar mientras nos movemos aparezca y desaparezca. Por lo tanto, si nos movemos en el escenario y tenemos puesta la instrucción de BAJAR LÁPIZ, se irá pintando una línea al mismo tiempo que nos movemos.
Lo primero que deberíamos realizar en nuestro programa es preguntarle al usuario cuántos lados tiene la figura geométrica que desea visualizar en pantalla. Dicho resultado lo guardaremos en una variable porque será la clave para poder generalizar la solución a cualquier número de lados. Hasta este momento, nuestro código debería tener algo parecido como lo siguiente:
Aclaraciones en este punto:
- La instrucción ESCONDER la utilizamos para hacer invisible el SPRITE y de esta manera la línea salgo más clara
- La instrucción APUNTAR EN DIRECCIÓN 90 nos sirve inicialmente para que su movimiento sea recto y dirección hacia la derecha
- La instrucción IR A X 0 Y 0 nos sirve para situar al SPRITE en el centro del mapa de coordenadas
Las instrucciones básicas para dibujar una figura geométrica serían:
- GIRAR x GRADOS. El valor de x va a estar directamente relacionado con el número de lados que queremos pintar. Si es un triángulo, para dibujarlo perfecto, habrá que aplicar la fórmula de 360/3, y por lo tanto en cada giro estaremos girando 120 grados, antes de volver a pintar
- MOVER x PASOS. El valor de x tiene que ver aquí con el tamaño del triángulo que queramos pintar. Un valor de x pequeño, por ejemplo, 5, nos dibujaría un triángulo pequeñito, y un valor de 20, un triángulo más grande.
Como en este curso lo que nos interesa es trabajar las habilidades del pensamiento, tendríamos que buscar una solución que nos sirva para generalizar nuestras instrucciones de programación para que nos sirva para cualquier número de lados. Y para ello tendríamos que ejecutar un bucle que nos sirva para tal propósito, teniendo en cuenta que se deberá de repetir tantas veces como LADOS hayamos elegido, y que en su interior tendrá las dos instrucciones indicadas anteriormente. Concretamente, la instrucción del giro, para generalizar, tendremos que incluir la variables LADOS como divisor del número 360.
Debería ser un bucle como el siguiente:
En este punto del programa ya habremos sido capaces de dibujar una figura geométrica con el número de lados que a nosotros nos haya interesado. A partir de aquí vamos a complicarlo un poco más. Vamos a intentar hacer algo como lo siguiente:
En este caso, se ha pintado un triángulo con un tamaño pequeño (5 pasos de movimiento). Nuestro objetivo será ir pintando esta figura geométrica de tal manera que vaya llenando toda nuestra pantalla. Para ello serán necesarias las siguientes acciones:
- Primero pintar nuestra figura
- A continuación hacer un giro de 45 grados
- A continuación desplazarnos una serie de pasos
- Cambiar el color del lápiz
- Que todo esto se repita el número de veces que nos interese, teniendo en cuenta que las dimensiones del escenario en Scratch tienen un límite y si lo superamos nuestra figura se empezará a deformar.
Para ir realizando esta figura que va aumentando su tamaño, la clave va a estar en ir aumentando el número de pasos que damos tras pinta nuestra figura. Para ello, podemos crear una variable con valor inicial por ejemplo de 1, y cuyo valor vaya aumentando en 1 después de que haya sido pintada la figura. Todo esto debería estar incluido dentro de un bucle POR SIEMPRE. Quedaría algo como se puede ver a continuación:
El programa tendría una ejecución parecido a lo siguiente:
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
4. Robótica: Software + Hardware
Robótica: Software + Hardware
El origen etimológico de la palabra robótica lo encontramos en el checo. En concreto, en la unión de dos términos: robota que puede definirse como “trabajo forzado” y en rabota que es sinónimo de “servidumbre”. De la misma forma, hay que subrayar que la primera vez que empieza a hacerse referencia más o menos a ella fue en el año 1920 en la obra del escritor Karel Capek titulada “Los robots universales de Rossum”.
La robótica es la ciencia y la técnica que está involucrada en el diseño, la fabricación y la utilización de robots. Un robot es, por otra parte, una máquina que puede programarse para que interactúe con objetos y lograr que imite, en cierta forma, el comportamiento humano o animal.
Dicho esto, y tomando las palabras "programación, diseño y fabricación" de la definición de robótica, podemos ver con claridad que todos nuestros proyectos van a ser el resultado de la unión de todas ellas, y por tanto serán una composición de hardware más software.
EL hardware que en este curso vamos a utilizar es Arduino Uno, y va a ser el "cerebro" que se ocupará de ejecutar las instrucciones que en él programemos. En el siguiente capitulo, se describen las principales características de este microprocesador, y como veremos, dispone de una serie de pines donde conectaremos nuestras entradas y salidas (sensores y actuadores).
En función de nuestro proyecto, definir las entradas y salidas involucradas, determinar las correctas conexiones teniendo en cuenta las especificaciones de cada sensor o actuador, puede convertirse en una tarea más o menos compleja, por lo que es fundamental que para ello diseñemos con anterioridad nuestro circuito. Esta tarea podemos realizarla sobre papel, o utilizar cualquiera de las herramientas digitales que existen para ello. En concreto, para este curso utilizaremos EasyEDA, la cual entre otras, permite representar nuestro esquema de conexiones de una forma sencilla y posee una biblioteca muy extensa a la hora de buscar nuestros componentes.
Finalmente, una vez diseñado y montado nuestro prototipo, será el momento de pensar la programación y grabarla en nuestro Arduino. Para ello, en este caso utilizaremos ArduinoBlocks que es una herramienta de programación por bloques que facilitará en gran medida este trabajo.
A continuación, en los siguientes temas por tanto, veremos qué es Arduino, como realizar nuestros diseños con EasyEDA y finalmente como programar nuestro conjunto con ArduinoBlocks para poder observar los resultados.
!Vamos a ello!
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
5. Arduino
Microcontrolador: Arduino
Visitando la web de Arduino, podemos leer:
"Arduino es una plataforma de desarrollo basada en una placa electrónica de hardware libre que incorpora un microcontrolador re-programable y una serie de pines hembra. Estos permiten establecer conexiones entre el microcontrolador y los diferentes sensores y actuadores de una manera muy sencilla "
Todos los proyectos que se van a desarrollar en este curso, lo harán sobre la placa de Arduino UNO, por tanto, esta placa va a contener el cerebro de nuestros proyectos y hará de interfaz de entrada/salida de nuestros sensores y actuadores.
A lo largo de los siguientes ítems, abordaremos qué es y cómo podemos utilizar esta placa para adentrarnos en el mundo de la robótica.
Un poco de historia
Hoy en día existen numerosas plataformas, con microprocesadores similares al de Arduino que pueden ser utilizadas en el aula. Todas ellas son compatibles con el IDE de Arduino, y esto no es casual, sino más bien obligatorio. El IDE es el entorno de desarrollo integrado que ofrece dicha plataforma y en este caso, la de Arduino es la más completa y compatible con otros lenguajes de programación.
Esto es así porque Arduino fue la primera plataforma que se creó en el año 2005 el Instituto de Diseño Interativo de Ivrea (Italia). Arduino apareció por la necesidad de contar con un dispositivo para utilizar en aulas que fuera de bajo coste. La idea original fue, fabricar una placa para uso interno de la escuela.
Por último, es obligatorio mencionar en este apartado a David Cuartielles, uno de los cofundadores de Arduino, por ser el único español en el equipo, en concreto, Zaragozano.
Arduino desde la mirada del alumnado
Una definición simple de robótica podría ser el resultado de combinar sensores y actuadores para que en su conjunto hagan determinadas acciones. En este sentido, para que una alarma se dispare cuando detecta una intrusión, un robot de limpieza gire al detectar un obstáculo, o un limpiaparabrisas se active al caer las primeras gotas de lluvia, requieren además de los sensores y actuadores que componen estos sistemas, una unidad central capaz de procesar el algoritmo lógico que va desencadenando las acciones.
Arduino reúne todas estas características. Cuenta con una serie de pines que serán configurados como entradas, en el caso de querer leer información procedente de los sensores, o serán configuradas como salidas en el caso de querer accionar un actuador. Más adelante explicaremos en profundidad los sensores y actuadores.
Además, cuenta con un microprocesador reprogramable sobre el cual vamos a poder subir o cargar nuestro programa y se encargará de leer la información de los sensores conectados en los pines de entrada, y activar (poner en estado ALTO o 5 voltios) o desactivar (poner en estado BAJO o 0 voltios) los pines de salida.
Dicho de otro modo, y tomando uno de los ejemplos anteriormente mencionados, podríamos configurar nuestro Arduino para crear un sistema de seguridad simple, del siguiente modo:
Definiremos el Pin2 de nuestro Arduino como una entrada. En dicho pin, conectaremos nuestro sensor de presencia que siempre se encuentra a 0 voltios, excepto cuando detecta una presencia y entonces se eleva a 5 voltios. Por tanto es muy sencillo: únicamente tenemos que leer repetidamente (en bucle) el valor del Pin2 de nuestro Arduino, y preguntarnos si vale 5 voltios, o en su defecto se encuentra en estado alto. Si esta condición se cumple es que hay una intrusión y por tanto deberemos activar la sirena para alarmar de ello.
La sirena se comporta como un actuador. Se activa cuando se cumple la condición de haber una intrusión. Para conseguir esto, únicamente debemos definir el Pin3 de nuestro Arduino como salida y mediante la programación la activaremos en el momento correspondiente.
Como puedes ver, el mayor peso va a estar siempre en nuestra programación. Debemos tener mucho cuidado con la secuenciación y contemplar toda la lógica que va a definir el comportamiento, y por tanto buen funcionamiento de nuestros proyectos. También va a ser de suma importancia como definimos en cada uno de ellos, los pines de nuestro Arduino, para lo cual tendremos que tener siempre claro cuales vamos a utilizar, y si van a ser de entrada o de salida. En el último punto, trabajaremos unos ejercicios sencillos que comenzarán a abrir tu imaginación y creatividad que junto a la del alumnado serán los únicos limites de vuestros proyectos, pero antes de llegar ahí, veamos en profundidad los sensores y actuadores y como programar nuestro Arduino desde un entorno gráfico.
Para conocer más sobre Arduino puedes acudir a los siguientes enlaces, pertenecientes al libro Programa Arduino Mediante Código de CATEDU
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Sensores
Esta sección es una visión rápida de las posibles entradas del Arduino y está adaptado de este enlace. José Andrés Echevarría @cantabRobots CC-BY-NC-SA
Cualquier sistema de control podríamos decir que funciona de una manera similar a un ser humano, salvando las distancias. Nosotros recibimos la información del mundo exterior gracias a nuestros sentidos (oído, olfato, gusto, vista y tacto), nuestro cerebro procesa esa información y a través de nuestros músculos o de nuestra voz realizamos diferentes acciones. Pues lo mismo sucede con los sistemas de control, reciben información del exterior gracias a los diferentes SENSORES, procesan esa información en sus PLACAS CONTROLADORAS (sus cerebros) tales como Arduino y dan una respuesta utilizando sus diferentes ACTUADORES.
Un sensor es un objeto capaz de detectar magnitudes físicas o químicas y transformarlas en variables eléctricas. Los sensores o periféricos de entrada nos permiten obtener información del mundo real para utilizarla desde el programa de Arduino.
En la actualidad la cantidad de sensores disponibles es tan extensa como las variables que queramos medir, desde sensores de temperatura, humedad, luminosidad,... hasta acelerómetros, giroscopios, GPS,... pasando por detectores de gases, de pulsos cardiacos, sensores de efecto HALL,...
La interfaz de conexión de un sensor con Arduino lo podemos clasificar en tres tipos: DIGITAL, ANALÓGICO o DATOS.
- DIGITAL: un sensor digital sólo tiene dos estados: activado/desactivado, ON/OFF, 1/0, Alto/Bajo, ... En este caso conectaremos el sensor a una de las entradas digitales de Arduino para leer el estado.
Ejemplo: un pulsador es un tipo de sensor sencillo que sólo nos da dos estados, “pulsado o no pulsado”. Conectado a la placa Arduino debe generar 0v en reposo y 5v al pulsarlo. De esta forma desde el programa de Arduino podremos leer el estado del botón.
- ANALÓGICO: el sensor nos puede dar un rango de valores, normalmente se traduce en un valor de tensión o de corriente variable en función de la señal captada al sensor. En este caso conectaremos el sensor a una de las entradas analógicas de Arduino (A0,..., A5). El rango de entrada será una tensión entre 0v (GND) y 5v.
Ejemplo: Una fotorresistencia es un componente electrónico cuya resistencia disminuye con el aumento de intensidad de luz incidente. Su valor varía entre 0 y 5 v. la cantidad de valores que pueden leer las entradas analógicas de Ardunio son de 10 bits es decir 1024 valores. De tal modo que 0 = 0 v. y 1023 = 5V.
- DATOS: el sensor ofrece su información a través de una interfaz de comunicación. La forma de comunicación puede ser por sistemas estándar como I2C o SPI o algunos sensores usan su propio protocolo para codificar la información y debemos realizar desde el software la decodificación correcta para interpretar los datos del sensor (normalmente los desarrolladores de este tipo de sensores ofrecen una librería software para Arduino que hace todo el trabajo).
Ejemplo: el sensor DHT11 que mide temperatura y humedad.
Sensores modulares más comunes.
En la actualidad existen infinidad de sensores que los fabricantes presentan en forma modular. Esto hace que su conexión y utilización sea mucho más sencilla que la tradicional, olvidándonos de resistencias, polaridades, cableados,… para su correcto funcionamiento.
Sensor pulsador
Es un sensor digital, que presenta dos estados; cuando se presiona el botón, emite una señal de bajo (0V), cuando suelta el botón, emite una señal de bajo alto (5V). Datasheet
Un ejemplo de uso
Otra manera más "barata" de sustituir este módulo pulsador es poner un pulsador normal y una resistencia (±10k), al pulsar se produce una entrada en el Arduino, hay dos configuraciones, que al pulsar se emita un 0 lógico (configuración Pull up) o que al pulsar emita un 1 lógico (configuración Pull down) ¿Por qué hay que poner una resistencia?
Lo "normal" es que al pulsar se emita un '1' configuración Pull down, pero hay pulsadores que funcionan al revés, lógica invertida o pull up, por eso en la programación por bloques podemos encontrar esto:
Sensor Táctil Capacitivo.
Este pequeño sensor puede "sentir" a las personas y el tacto y la retroalimentación de metales a un nivel de voltaje alto / bajo. Incluso aislado por alguna tela y papel, todavía puede sentir el tacto. Su sensibilidad disminuye a medida que la
capa de aislamiento se hace más gruesa. En nuestra opinión lo preferimos frente al Sensor pulsador pues es muy económico, duradero y fiable.
Un ejemplo de uso en
Potenciómetro y joystick
Un potenciómetro es una resistencia variable, es decir, cambia de valor mecánicamente, lo tenemos en multitud de dispositivos. El joystick es internamente dos potenciómetros con un pulsador integrado en un solo mando.
Este sensor es analógico, su salida puede ser cualquier valor entre Vcc y GND (si está en divisor de tensión como en la placa Edubásica no llega a esos valores extremos), por lo tanto hay que conectarlo a una entrada analógica de Arduino y como cualquier entrada analógica, proporcionará valores entre 0 y 1023.
Ejemplos de uso:
- Arduino con código: Mapeo del potenciómetro
- Arduino con código: Regular la luz con potenciómetro
- Arduinoblocks en el aula
- En Arduino con Echidna, con joystick
- Domótica con Arduino con joystick
Sensor Fotocélula LDR.
El uso de fotocélulas es muy común en nuestras vidas, las encontramos en el encendido automático de farolas, apertura de puertas,… La fotocélula es un semiconductor. Es ampliamente utilizado en campos de interruptores de control automático como cámaras, luces solares de jardín, lámparas de césped, detectores de dinero, relojes de cuarzo, tazas de música, cajas de regalo, mini luces nocturnas, interruptores de control de luz y sonido, etc.
Es un sensor analógico dando valores entre 0 y 5V y como entrada analógica de un Arduino se traduce en un rango de 0 a 1023 valores.
Un ejemplos de uso :
- el interruptor crepuscular del curso Arduino con ArduinoBlocks
- Medir la luz en Rover con Arduino
- Medir la oscuridad en Arduino con mBlock
- Hinchar un balón en Arduino con mBlock
Una manera más económica de montar este sensor es utilizar una resistencia y un LDR:
- El LDR cuando más oscuridad, más resistencia
- En una configuración PULL DOWN, cuanto más luz, la resistencia del LDR baja, por lo tanto más tensión en A6
Los módulos LDR que se venden suelen esta configuración Pull down, es decir, cuanto más luz, más tensión:
La instrucción con Arduinoblocks ya cuenta con esta configuración Pull downUp de que cuando más luz, más valor tiene la entrada analógica.
Hay módulos LDR ya montados, que tienen componentes activos es decir, llevan circuitos electrónicos, transistores que amplifican etc... y dan la salida digital con un potenciómetro para definir el rango de luz que cambia de estado lógico. Puedes ver en la figura que tiene una salida digital D0.
O hay algunos que tienen 4 pines como en la figura que ofrecen las dos cosas: salida analógica A0 y digital D0.
Nosotros aconsejamos el divisor de tensión por tres razones: más barato, no implica gran circuitería y es visible su funcionamiento frente a estos encapsulados.
Sensor de Ultrasonidos.
Es un sensor digital de distancias por ultrasonidos capaz de detectar objetos y calcular la distancia a la que se encuentra en un rango de 2 a 350 cm. Su uso es tan sencillo como enviar el pulso de arranque y medir la anchura del pulso de retorno. El más común es el HC-SR04. Para saber+
No es un sensor preciso, con una ligera inclinación de la superficie ya da lecturas erróneas pero es muy barato
Ejemplos de uso:
- Alarma en Domótica con Arduino
- Piano invisible en Arduino con ArduinoBlocks,
- Sensor parking en Arduino con ArduinoBlocks
- Piano invisible en Arduino con mBlock
- Sensor parking en Arduino con mBlock
- Sensor de distancia de ultrasonidos con Picobricks
Pines de conexión: VCC Trig (Disparo del ultrasonido) Echo (Recepción del ultrasonido) y GND
La distancia se calcula con esta fórmula:
Distancia en cm = {(Tiempo en segundos entre Trig y el Echo) * (V.Sonido 34000 en cm/s)} / 2
- Si programas en código, tienes que utilizar la fórmula anterior, previamente tienes que programar el cálculo del tiempo entre una emisión de un pulso en Trg y la respuesta en Echo.
- Si utilizas la programación en bloques, no es necesario, seguro que hay un bloque que lo hace todo por ti.
Sensor DHT11 (Temperatura y Humedad).
Este sensor de temperatura y humedad DHT11 tiene una salida de señal digital que funciona en un rango de temperaturas entre 0 y 50ºC con un error de ± 2ºC y un rango de humedad entre 20 y 90 % ± 5% . Tiene dentro un pequeño microprocesador que lanza por el bit de datos 40 bits en serie, los 16 primeros son la humedad y los 16 restantes es la temperatura los 8 restantes son de comprobación. Por ejemplo 0100 0111 0000 0011 0001 1001 0000 0000 0001 1000 es 0100 0111 0000 0011 = 47.03% de humedad y 0001 1001 0000 0000 = 19.00ºC y la comprobación es la suma de 4+7+0+3+1+9+0+0=24=11000
Ejemplos de uso:
- Medir H y T con Blink en Rover con Arduino
- Estación meteorológica Arduino con Arduinoblocks
- Arduinoblocks en el aula
No es un sensor con gran sensibilidad, pero para propósitos educativos cumple sus funciones. Por dentro tiene una resistencia NTC que decrementa su resistencia si aumenta la temperatura. Hay otros que van al revés, los PTC. Tanto los NTC como los PTC se llaman thermistores. Para la humedad, mide la capacidad de un condensador que es sensible a la humedad, o sea, un sensor capacitivo.
Tenemos dos opciones comerciales: Encapsulado que lo tienes preparado para conectar la alimentación y leer por el pin de datos, o sin encapsular, que hay que colocar una resistencia de aproximadamente 10k entre Vcc y Data
Ejemplo de uso de un DHT11 sin encapsular:
Fuente Luis LLamas CC-BY-NC-SA https://www.luisllamas.es/arduino-dht11-dht22/
Si queremos mejorar la sensibilidad, podemos utilizar el DHT22 que es igual pero de color blanco y más caro. Si lo que queremos es sólo la temperatura es mejor utilizar el LM35D que tiene un rango de temperaturas desde 0ºC a 100ºC con una sensibilidad de 2mV/ºC
Es un sensor bastante mediocre, si necesitas una precisión el doble, te recomendamos el DHT22 que funciona exáctamente igual pero es de color blanco y más caro ⁓3€. Ver https://www.luisllamas.es/arduino-dht11-dht22/
Sensor IR
Es un sensor para distancias cortas hasta 2cm y no da la distancia, simplemente si hay o no hay obstáculo, pero son muy baratos, unos 0.30€. Aquí tienes un ejemplo de evita obstáculos en un rover marciano con Raspberry Para saber más te recomendamos esta página de Luis Llamas
IR Sensor Module for Arduino Projects | 3D Model by Veer AI on Sketchfab
Sensores modulares menos comunes.
Sensor llama
Este sensor de llama se puede utilizar para detectar fuego u otras luces cuya longitud de onda se encuentra entre 760 nm ~ 1100nm.
Un ejemplo de su uso:
Sensor de humedad de suelo.
La función de este sensor es detectar la humedad del suelo. Si el suelo no tiene agua, el valor analógico emitido por el sensor disminuirá, de lo contrario, aumentará. Se puede utilizar este sensor para hacer un dispositivo de riego automático, puede detectar si las plantas “tienen sed” y evitar que se marchiten. El sensor se configura con dos sondas insertadas en el suelo, cuando la corriente atraviesa el suelo, el sensor obtendrá valor de resistencia al leer los cambios actuales entre las dos sondas y convertir dicho valor de resistencia en contenido de humedad. Cuanto mayor sea la humedad (menos resistencia), mayor será la conductividad del suelo. La corriente de trabajo del sensor es menor de 20mA. El voltaje de salida es de 0 a 2,3V (Cuando el sensor está totalmente sumergido en agua, el voltaje será 2,3V).
Sensor de humedad.
Este sensor analógico está diseñado para identificar y detectar la presencia de agua y su cantidad. Puede servir para detectar el nivel de agua, para disparar una alarma en caso de una fuga de agua, también para hacer un limpiapalabrisas automático.... puedes ver un ejemplo de uso en el curso de Domótica con Arduino
Mide el volumen de agua caída a través de una serie de rastros de cables paralelos expuestos.
Sensor de efecto Hall.
Este es un sensor de inducción magnética. Detecta los materiales magnéticos dentro de un rango de detección de hasta 3 cm. El rango de detección y la fuerza del campo magnético son proporcionales. La salida es digital.
Sensor Hall. Edwin Helber Hall De Desconocido - Popular Science Monthly Volume 64, Dominio público
Edwin Helbert Hall descubrió en 1879 que en presencia de un campo magnético, un conductor que conduzca una corriente se le producía un campo eléctrico porque las cargas eléctricas se desviaban de su trayectoria principal, nuestro sensor simplemente mide ese campo eléctrico:
De Luis Llamas CC-BY-NC
El sensor tiene un led de color rojo que indica que hay una lectura de campo magnético.
Un ejemplo de uso lo puedes ver aquí: medir rocas magnéticas con el Rover con Arduino
Sensor inclinación
Este sensor funciona al hacerle vibrar, emitiendo una señal digital de todo o nada. El módulo del sensor viene provisto de un potenciómetro para poder regularlo.
Sensor de golpe
Es un sensor digital que al ser golpeado este sensor envía una señal momentánea.
Sensor de pulso cardíaco.
Este módulo utiliza un LED infrarrojo (IR) ultrabrillante y un fototransistor para detectar el pulso en el dedo. Principio de funcionamiento: Se debe colocar el dedo entre el LED infrarrojo ultrabrillante (parte superior) mientras que el fototransistor, que queda en el otro lado, recoge la cantidad de luz transmitida. La resistencia del fototransistor variará levemente a medida que la sangre pase a través de su dedo.
Sensor de Alcohol.
Este sensor de gas analógico MQ-3 es adecuado para detectar alcohol. Se puede usar en un analizador de aliento. También tiene una alta sensibilidad al alcohol y baja sensibilidad a la bencina (éter de petróleo). La sensibilidad se puede ajustar con el potenciómetro.
Sensor de CO2
Hay sensores que utilizan el protocolo I2C, este protocolo permite conexiones serie y pueden compartir el mismo cable pues cada elemento tiene una dirección diferente. Esto lo veremos en el Display LCD. Se identifican por los pinen SDA y SCL
Sensor de Gas (MQ2).
Este sensor analógico de gas MQ-2 se utiliza en equipos de detección de fugas de gas en electrónica de consumo y mercados industriales. Este sensor es adecuado para detectar GLP, I-butano, propano, metano, alcohol, hidrógeno y humo. Tiene alta sensibilidad y respuesta rápida. La sensibilidad se puede ajustar girando el potenciómetro.
Esta sección está adaptado de este enlace. José Andrés Echevarría @cantabRobots CC-BY-NC-SA
Resistencia Flex
Es una resistencia que cuanto más se dobla más resistencia ofrece, desde 25k hasta 125k
Para utilizar esta resistencia haremos un DIVISOR DE TENSIÓN que consistirá en poner dos resistencias en serie y repartirá la tensión total entre 0V y 5V en las dos resistencias, el punto medio será un punto que tendrá una tensión variable en función de las dos resistencias, como la es variable, esa tensión es variable y ya tenemos la entrada analógica:
Es decir:
- La resistencia entre masa GND del ARDUINO (cable negro) y un punto en la placa protoboard
- ese punto medio conectarlo a una entrada analógica, por ejemplo A0 (cable amarillo)
- Una resistencia de valor parecida a la Flex de decenas de K entre ese punto y +5V (cable rojo en la foto)
Este sensor tiene posibilidades para usarlo en "ropa inteligente".
Sensor de movimiento con Microondas
Tradicionalmente se utilizan sensores PIR de infrarrojos para detectar el movimiento, pero personalmente veo que tienen falsos positivos y negativos, si quieres utilizarlos, te recomendamos esta página de Luis LLamas
Personalmente prefiero los sensores de microondas. Son un radar que por efecto Doppler pueden captar cualquier objeto en movimiento dentro de un alcance de 5-7 metros en cualquier dirección e independiente de su temperatura. Es un buen sensor para alarmas, activación de luz por presencia.... Curiosamente, su gran ventaja técnica es un gran inconveniente para usarlo en el aula, con cualquier movimiento se dispara. Para saber más ver la página de Luis Llamas
Su conexión es muy sencilla, es un detector digital que hay que alimentarlo como el resto de sensores.
Esta sección es una visión rápida de las posibles entradas del Arduino y está adaptado de este enlace. José Andrés Echevarría @cantabRobots CC-BY-NC-SA
Los contenidos de está página están extraídos del curso Programa Arduino mediante Código de Aularagón.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Actuadores
Los contenidos de está página están extraídos del curso Programa Arduino mediante Código de Aularagón.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
6. Diseño 2D de circuitos electrónicos: EasyEDA
Diseño de circuitos electrónicos: EasyEDA
Las herramientas EDA (Electronic Design Automation) son herramientas diseñadas específicamente a proyectos y producción de sistemas electrónicos, abarcando desde la creación del circuito integrado hasta el desarrollo de placas de circuito impreso.
Para el diseño de los circuitos electrónicos de nuestros proyectos en este curso te proponemos la utilización de EasyEDA.
La principal característica de EasyEDA es que gracias a las bibliotecas disponibles, tendremos la posibilidad de diseñar nuestros esquemas de forma fácil y rápida. Además es gratuita, no requiere instalación y es online.
Para utilizar EasyEDA no es necesario disponer de una cuenta, lo cual es siempre beneficioso cuando trabajamos con alumnado. No obstante, si queremos que nuestros proyectos se queden guardados en nuestro perfil, tenemos que crearnos una cuenta accediendo a a este link, pulsando sobre Register.
Una vez hayamos registrado nuestro usuario, accederemos a la plataforma. Si lo preferimos, también podemos acceder desde una cuenta de Google, y seleccionaremos desplegando Products, Standard Online Editor.
Es el momento de crear un nuevo proyecto (File-->New-->Project) donde indicaremos el titulo del proyecto y una breve descripción.
Una vez realizados estos pasos, estamos ya ante nuestro espacio de trabajo. En él, iremos buscando los componentes que tenemos que utilizar y una vez situados en la pantalla, comenzaremos las conexiones de cada componente.
Por ejemplo, para realizar un semáforo adaptado para personas invidentes, vamos a necesitar incorporar: un Arduino UNO, una tira de leds Neopixel y un zumbador.
Por tanto para añadir los componentes, accederemos al icono de la lupa (Lybrary) y los buscaremos. Empezamos por el Arduino Uno. Introducimos en el campo de búsqueda "Arduino Uno". Nos deja elegir entre varias librerías y una de ellas, es la que se alimenta de las contribuciones de los usuarios. En ella es habitual encontrar lo que necesitamos, aunque siempre deberemos verificar que se trata de nuestro componente. Como se ve en la imagen, al realizar la búsqueda aparecen muchos diseños, y seleccionaremos el que más nos convenga fijándonos en la previsualización verificando de este modo que es el diseño que buscamos.
Una vez hayamos pinchado con el ratón en el icono "Place", la ventana de búsqueda desaparece y nos deja posicionar el elemento seleccionado. Bastará con buscar el lugar donde queremos dejarlo y volver a hacer clic con el ratón. Para dejar de poner elementos, utilizaremos la tecla ESC.
El siguiente paso será añadir la tira led de Neopixel. Una vez que la depositamos en nuestra área de trabajo, es posible cambiar la orientación de los elementos pulsando la tecla "R" de rotar.
Y por último el Zumbador (buzzer)
Con todos los componentes en el área de trabajo solo nos falta cablearlos. Para ello utilizaremos las herramientas de cableado y uniremos los pines correspondientes obteniendo el siguiente circuito:
Por último decir que también existen otras herramientas para el diseño de circuitos electrónicos como Tinkercad o Fritzing (esta última con versión offline disponible)
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
7. ArduinoBlocks
¿Qué es Arduino Blocks?
Esto no pretende ser un tutorial exhaustivo de ARDUINOBLOCKS, sino una guía rápida.
ARDUINOBLOCKS es un programa que tiene muchas posibilidades. Si quieres saber más sobre ARDUINOBLOCKS tutoriales, ejemplos, foro.... te recomendamos http://arduinoblocks.didactronica.com/ o el libro Arduino blocks - libros y tutoriales
¿Por qué una programación con bloques?
Arduino se programa en lenguaje C++ (con algunas variaciones para simplificarlo). Para programar normalmente se utiliza el IDE (“Integrated Development Environment"/"Entorno de Desarrollo Integrado") de Arduino, que permite escribir el código, compilar el programa (crear el programa binario para el procesador Arduino) y grabarlo en la placa Arduino a través del puerto USB. El IDE de Arduino se puede descargar desde la web oficial. Es totalmente libre (José Andrés Echevarría @cantabRobots CC-BY-NC-SA)
(José Andrés Echevarría @cantabRobots CC-BY-NC-SA)
Sin embargo pensando en edades más tempranas se han desarrollado formas más sencillas e intuitivas de programar Arduino como son los lenguajes de programación por bloques. De todos estos lenguajes cabe destacar ARDUINOBLOCKS.
Gracias a este lenguaje visual podemos programar las placas Arduino sin necesidad de escribir ni una sola línea de código, de esta forma podemos empezar a realizar proyectos con Arduino de una forma muy rápida y a edades más tempranas. La única desventaja es que el lenguaje por código tiene todo el potencial que requiere la programación de un experto.
Mismo programa creado con el IDE de Arduino en C++ (imagen de la izquierda) y con Arduinoblocks (imagen de la derecha).
(José Andrés Echevarría @cantabRobots CC-BY-NC-SA)
(José Andrés Echevarría @cantabRobots CC-BY-NC-SA)
Para trabajar con Arduinoblocks debemos ir a su página web http://www.arduinoblocks.com/ desde cualquier navegador y para cualquier sistema operativo (Windows, Linux, Mac). (José Andrés Echevarría @cantabRobots CC-BY-NC-SA)
ArduinoBlocks
Arduinoblocks es un programa creado por el profesor Juanjo López. Gracias a su entorno gráfico facilita la programación de placas Arduino a todos los niveles. Esta herramienta permite programar a personas sin conocimientos previos de programación, pero su versatilidad y potencia es tan grande que expertos programadores también pueden utilizarlo. (José Andrés Echevarría @cantabRobots CC-BY-NC-SA)
De Juan José López Almendros CC-BY-SA
La programación en ArduinoBlocks se realiza con bloques al estilo AppInventor o Scratch, se puede utilizar a partir de 8 años. No tenemos que escribir líneas de código y no nos permitirá unir bloques incompatibles evitando así posibles errores de sintaxis. La plataforma ArduinoBlocks genera, compila y sube el programa a la placa Arduino por medio de la conexión USB. Una vez subido el programa, la placa el Arduino no necesitará de la conexión al PC para funcionar pudiendo alimentarla con baterías o una fuente de alimentación para que funcione de forma autónoma.
ArduinoBlocks actualmente funciona con todos los navegadores de última generación: Mozilla Firefox, Google Chrome, Opera, Safari,...
(José Andrés Echevarría @cantabRobots CC-BY-NC-SA)
Por otro lado, tal y como se describe en la Wiki de Vitalinux, ArduinoBlocks funciona perfectamente con todos los sistemas operativos, pudiendo ser fácilmente instalable en equipos individuales y a nivel de centro dentro del soporte de Vitalinux.
Ayuda en Arduinoblocks
Además hay chat de Telegram con una comunidad de profesores y técnicos de la empresa que apoya Arduinoblocks donde puedes encontrar proyectos, enlaces interesantes y lo más importante: Puedes preguntar tus dudas o problemas
https://t.me/innovadidactic_comunidad
Los contenidos de esta página se han extraído del curso Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) de Aularagón.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Crear cuenta
Registrándonos como usuarios de la plataforma ArduinoBlocks podemos aprovechar todas estas posibilidades:
- Guardar tus proyectos en la nube de ArduinoBlocks.
- Añadir información al proyecto: descripción, componentes utilizados, imágenes, etc.
- Añadir archivos adjuntos relacionados con el proyecto: esquemas, fotos, archivos para impresión 3D, aplicaciones, etc.
- Compartir proyectos con el resto del mundo.
- Importar proyectos compartidos por otros usuarios.
- Valorar y comentar proyectos.
- Programar directamente Arduino desde el propio navegador (con la aplicación: ArduinoBlocks-Connector).
- Utilizar la consola serie desde el propio navegador.
(José Andrés Echevarría @cantabRobots CC-BY-NC-SA)
Entramos en http://www.arduinoblocks.com/ e iniciamos sesión
Y rellenamos el formulario
Los contenidos de esta página se han extraído del curso Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) de Aularagón.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Cuentas alumnado
Tal y como dice el tutorial de Juanjo López :
Permite a un usuario registrado con email, crear y administrar nuevas cuentas de usuario dentro de una organización, centro educativo o institución.
Si lo quieres en papel, te recomendamos el tutorial de Juanjo López son 12 diapositivas muy bien explicados https://github.com/arduinoblocks/documentacion/blob/master/usuarios_gestionados.pdf
El contar con esta funcionalidad es especialmente interesante en el caso de alumnado menor de 14 años, de forma que no sea necesario ceder ningún tipo de datos de ellos, ni recabar consentimientos parentales para la utilización de la plataforma. En general por criterios de protección y privacidad de datos, siempre es preferible trabajar con aplicaciones que solo requieren registro por parte del profesorado.
Los contenidos de esta página se han extraído del curso Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) de Aularagón.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Arduino blocks connector
Espera !!! Aún no conectes tu placa (Arduino, ESP32, NodeMCU, KeyStudio TDR STEAM...)
PRIMER PASO Descargar e instalar ArduinoBlocks Connector
Para poder usar la herramienta Arduinoblocks tenemos que ejecutar antes Arduinoblocks conector. Lo descargamos de la misma página de ArduinoBlocks según el sistema operativo que usemos: Windows (W7 E INFERIORES NO FUNCIONA), Linux ....
Lo descargamos y lo instalamos.
En el caso de tener equipos Vitalinux, es fácilmente accesible e instalable desde la aplicación Vitalinux Play o si se desea una instalación masiva en el centro a través de su página de soporte:
SEGUNDO PASO: INSTALAR LOS DRIVERS
Si no hacemos estos pasos, cuando conectamos la placa, siempre sale en el COM1, le damos a subir y sale erro
En http://www.arduinoblocks.com/web/site/abconnector5 tenemos abajo ARDUINO SERIAL DRIVERS
RECOMENDAMOS EL PRIMER ENLACE Y EL TERCERO
En el primero el instalador está en este enlace https://cdn.sparkfun.com/assets/learn_tutorials/7/4/CDM21228_Setup.exe
El segundo sólo si quieres utilizar Arduinos no oficiales, de fabricantes chinos, que tiene el CH340g y hay que leerse la página, paciencia
El tercero es necesario el 2102 si utilizas el ESP32 el instalador esta en este enlace, es una carpeta comprimida, la descomprimes y está el ejecutable instalador https://www.silabs.com/documents/public/software/CP210x_Windows_Drivers.zip
COMPROBAR QUE DETECTA LA PLACA
Ahora conectamos la placa (Arduino, NodeMCU, KeyStudio TDR STEAM...) a nuestro ordenador, y observamos si lo detecta, en Windows entramos en Administrador de dispositivos:
Y vemos que en los puertos COM se ha detectado correctamente la placa:
En el caso de que no aparezca, es que no se han instalado correctamente los drivers de Arduino. Entonces vamos a la página oficial de Arduino y descargamos el programa ARDUINO IDE : https://www.arduino.cc/en/software y lo instalamos. Al instalar este programa se instalan los drivers en nuestro ordenador. No hace falta ejecutarlo.
En el caso de equipos con sistema operativo Linux (como Vitalinux) el puerto serie tiene la forma /dev/XXXX
YA PUEDES EJECUTAR ARDUINOBLOCKS CONNECTOR
Ahora buscamos el programa ArduinoBlocks connector que hemos descargado e instalado en el primer paso y lo ejecutamos.
ATENCIÓN No podemos cerrar la ventana mientras utilizamos Arduinoblocks, la minimizamos simplemente.
En caso contrario, Arduinoblocks no se puede comunicar con nuestra placa Arduino, NodeMCU, KeyStudio, etc ....
YA PUEDES EJECUTAR ARDUINOBLOCKS
Entramos en la web ARDUINOBLOCKS http://www.arduinoblocks.com/ nos logueamos e iniciciamos un proyecto, Vemos que en el editor que aparece ya los puertos COM (si no te aparece, dale a la rueda actualizar)
Aparecen varios COM, elegir el último que tiene que coincidir con el que has visto en el segundo paso, no necesariamente es el COM más alto.
Si se queda una ruleta de espera demasiado tiempo, entonces, actualizar la página o darle a actualizar el botón 1 de la figura :
Una vez elegido el COM ya puedes darle al botón amarillo SUBIR cuando has realizado tu proyecto pero antes de subir, por si acaso dale a guardar el proyecto que has realizado.
En el caso de equipos con Linux veremos algo así:
¿Tengo que hacer los cuatro pasos cada vez?
No, sólo la primera vez para asegurar los drivers del Arduino, las siguientes veces que te conectes lo único que tienes que hacer es el tercer y cuarto paso
IMPORTANTE: TENER EL SOFTWARE ARDUINOBLOCKS ACTUALIZADO para que funcionen los nuevos bloques que se incorporan en Arudinoblocks
Los contenidos de esta página se han extraído del curso Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) de Aularagón.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Empezando un proyecto
Entramos en Proyectos y podemos ver nuestros proyectos creados como también empezar uno.
Y nos aparece tres opciones :
En esta ventana podremos elegir que tipo de proyecto vamos a realizar:
- Proyecto Personal: Iniciar un nuevo proyecto que sólo será accesible para el usuario. Posteriormente se puede compartir al resto de la comunidad si se desea.
- Proyecto Profesor: Iniciar un proyecto como profesor. De esta forma no se inicia un proyecto como tal, sino que se especifican los datos del proyecto y se genera un código para que los alumnos se puedan suscribir al proyecto. El profesor podrá supervisar y valorar los proyectos de sus alumnos.
- Alumno: De esta forma nos unimos a un proyecto planteado por el profesor. Nosotros realizaremos el proyecto como si de un proyecto personal se tratara, pero el profesor podrá supervisar y valorar nuestro trabajo.
Adaptado de este enlace. José Andrés Echevarría @cantabRobots CC-BY-NC-SA
Lo primero que tenemos que elegir es para qué tipo de placa se hace el proyecto.
- En el caso de que estés con el kit de CATEDU Rover marciano con Arduinoblocks el tipo de proyecto es para ESP8266 / NodeMCU
- En el caso de que estés con el kit de CATEDU Arduino con Arduinoblocks el tipo de proyecto es para Arduino UNO
- En el caso de que estés con el kit de CATEDU ArduinoBlocks en el aula tienes dos opciones totalmente válidas:
- ArduinoUno
- ArduinoUno + Imagina TdR STEAM
- En el caso de que estés con el kit de CATEDU ESP32 en el aula tienes dos opciones totalmente válidas:
- ESP32 STEAMakers
- ESP32 STEMakers + Imagina TdR STEAM
ATENCIÓN luego NO se puede cambiar. Es decir, un proyecto realizado para un tipo de placa, no se puede cambiar a otro tipo de placa (la razón es simpe: las instrucciones cambian)
Luego el nombre y el resto de campos es optativo pero importante y buena costumbre rellenarlos, sobre todo si el proyecto lo compartimos:
- Descripción
- Componentes
- Comentarios
Área de programación del proyecto
Este es el área sobre el que se trabaja en Arduinoblocks. En esta área arrastraremos y colocaremos los bloques que vamos a utilizar para crear nuestro programa.
En el área de trabajo hay un Zoom (2) para ampliar o reducir la imagen, un icono para centrar
(1) y un icono donde podremos borrar los bloques que no utilicemos (3).
Adaptado de este enlace. José Andrés Echevarría @cantabRobots CC-BY-NC-SA
Las principales secciones del área de programación son las siguientes :
Adaptado de este enlace. José Andrés Echevarría @cantabRobots CC-BY-NC-SA
Ver el código
ArduinoBlocks genera el código de Arduino a partir de los bloques. El programa se puede compilar y subir directamente a la placa Arduino gracias a la aplicación ArduinoBlocks-Connector, sin embargo si deseamos ver o descargar el código podemos realizarlo desde el área de bloques.
Adaptado de este enlace. José Andrés Echevarría @cantabRobots CC-BY-NC-SA
Siempre, desde un lenguaje de programación en bloques podemos obtener su equivalente a Código de Arduino IDE (de hecho es lo que hacen los programas), y luego con las funciones de Código de Arduino IDE el software lo pasa a lenguaje máquina que es la que se graba el Arduino, pero no al revés es decir, no existen programas que dado un código máquina o código Arduino IDE lo pasen a bloques gráficos, (igual que no hay programas que lean el código máquina que hay grabado en un Arduino y lo pasen a código Arduino IDE). Esto no es del todo 100% verdadero pues la Ingeniería inversa en informática trata pues de eso: obtener la fuente aunque sea parcial, pues si obtienes el código legible, puedes alterar lo que quieras.
Cuando compras un programa comercial, te dan el lenguaje máquina ilegible. Mientras que los programas de software libre se publica el código fuente legible para que todo el mundo pueda mejorarlo.
Por ejemplo en la siguiente figura, el programa gráfico mBlock que se utiliza en Arduino, mBot, etc... pasa sus instrucciones de lenguaje de programación de bloques parecido a Scratch a lenguaje de Código de Arduino IDE y Arduino IDE graba instrucciones binarias de lenguaje máquina al Arduino.
¡¡A disfrutar!!
Consejo: Te recomendamos visitar el canal de Youtube de Arduinoblocks https://www.youtube.com/c/ArduinoBlocks
Los contenidos de esta página se han extraído del curso Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) de Aularagón.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
8. Robótica Educativa
Objetivos y contenidos
Esta parte del curso pretende aplicar la parte teórica (programación) en clases prácticas (robótica) a través de proyectos transversales que incluso pueden permitir la realización de proyectos STEAM interdisciplinares con otras materias como la Física, Biología, Matemáticas, Arte, etc…
Una vez adquiridos los contenidos, el alumnado desarrollará la creatividad y el emprendimiento ya que aporta técnicas y herramientas al alumnado para idear y diseñar soluciones a problemas definidos que tienen que cumplir una serie de requisitos, y lo orienta a la organización de las tareas que deberá desempeñar de manera personal o en grupo.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Materiales
Para la realización de esta parte del curso, se requieren los siguientes materiales, incluidos en el kit de préstamo de CATEDU.
- Arduino UNO
- Sensor de ultrasonidos
- Sensor de presencia PIR
- Servomotor
- Botón/pulsador
- Tira de 8 leds Neopixel
- Conector Gnd
- Conector 5v
- Zumbador
- Cables de conexión (13 macho-hembra, 3 macho-macho, cable USB)
Para simplificar las conexiones, se han incluido los cables necesarios para realizar las conexiones directamente de los sensores/actuadores al Arduino. Igualmente, en cada kit de préstamo, se incluyen dos adaptadores para Gnd y 5v que multiplican estos pines, para que en aquellas practicas en las que se requieren más tomas de las que dispone Arduino, evitar de la utilización de protoboards que complican las conexiones.
En la siguiente fotografía, observamos como al utilizar estos conectores, obtenemos 4 tomas a 5v y otras 4 para Gnd
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Ejercicios propuestos
A continuación se proponen una serie de ejercicios (situaciones de aprendizaje) que van a permitir al alumnado tener una visión real de como aplicar la programación a la robótica y de este modo resolver situaciones reales. Desde el punto de vista de la LOMLOE, se describen a continuación los saberes básicos, competencias específicas y criterios de evaluación que se van a ver implicados en el desarrollo de los mismos.
Saberes básicos, competencias específicas y criterios de evaluación del bloque de robótica
Objetivos didácticos:
- Conocer y analizar el funcionamiento de los semáforos, distinguiendo el de peatones y el de coches.
- Comprender el funcionamiento de los actuadores en los semáforos y los principios existentes en la electrónica que los constituye.
- Programar mediante software tanto la recogida de datos como el accionamiento de dispositivos físicos de forma que respondan al comportamiento deseado.
- Analizar de forma crítica la irrupción de la automatización de procesos en nuestra cotidianeidad, introduciendo perspectiva accesibilidad e inclusión en dicho análisis.
Elementos curriculares involucrados (Saberes básicos):
Bloque A: Proceso de resolución de problemas.
- Estrategias de búsqueda crítica de información durante la investigación y definición de problemas planteados.
- Electricidad y electrónica básica para el montaje de esquemas y circuitos físicos o simulados. Interpretación, diseño y aplicación en proyectos.
Bloque B: Comunicación y difusión de ideas.
- Aplicaciones CAD en dos dimensiones para la representación de esquemas y circuitos electrónicos. (Uso de Tinkercad)
Bloque C: Pensamiento computacional. Programación y robótica.
- Algorítmica y diagramas de flujo.
- Sistemas de control programado. Montaje físico y programación sencilla de dispositivos.
- Fundamentos de la robótica. Montaje, control programado de robots de manera física.
- Autoconfianza e iniciativa: el error, la reevaluación y la depuración de errores como parte del proceso de aprendizaje.
Bloque D: Tecnología sostenible.
- Desarrollo tecnológico: creatividad, innovación, investigación, obsolescencia e impacto social y ambiental. Ética y aplicaciones de las tecnologías emergentes.
Relación con las competencias específicas:
- CE.PR.1. Abordar problemas tecnológicos con autonomía y actitud creativa, aplicando conocimientos interdisciplinares y trabajando de forma cooperativa y colaborativa, para diseñar y planificar soluciones a un problema o necesidad de forma eficaz, innovadora y sostenible.
- CE.PR.2. Aplicar de forma apropiada y segura distintas técnicas y conocimientos interdisciplinares utilizando operadores, sistemas tecnológicos y herramientas, teniendo en cuenta la planificación y el diseño previo, para construir o fabricar soluciones tecnológicas y sostenibles que den respuesta a necesidades en diferentes contextos.
- CE.PR.3. Describir, representar e intercambiar ideas o soluciones a problemas tecnológicos o digitales, utilizando medios de representación, simbología y vocabulario adecuados, así como los instrumentos y recursos disponibles y valorando la utilidad de las herramientas digitales, para comunicar y difundir información y propuestas.
- CE.PR.4. Desarrollar algoritmos y aplicaciones informáticas en distintos entornos, aplicando los principios del pensamiento computacional e incorporando las tecnologías emergentes, para crear soluciones a problemas concretos, automatizar procesos y aplicarlos en sistemas de control o en robótica.
- CE.PR.5. Hacer un uso responsable y ético de la tecnología, mostrando interés por un desarrollo sostenible, identificando sus repercusiones y valorando la contribución de las tecnologías emergentes, para identificar las aportaciones y el impacto del desarrollo tecnológico en la sociedad y en el entorno.
Relación con los criterios de evaluación:
- CE.E.1.
1.1. Idear y diseñar soluciones eficaces, innovadoras y sostenibles a problemas definidos, aplicando conceptos, técnicas y procedimientos interdisciplinares, así como criterios de sostenibilidad, con actitud emprendedora, perseverante y creativa.
1.2. Seleccionar, planificar y organizar los materiales y herramientas, así como las tareas necesarias para la construcción de una solución a un problema planteado, trabajando individualmente o en grupo de manera cooperativa y colaborativa.
- CE.E.2.
2.1. Fabricar objetos o sistemas robóticos mediante la manipulación y conformación de materiales, empleando herramientas y máquinas adecuadas, aplicando los fundamentos de estructuras, mecanismos, electricidad y fundamentalmente electrónica, respetando las normas de seguridad y salud correspondientes.
- CE.E.3.
3.1. Representar y comunicar el proceso de creación de un producto desde su diseño hasta su difusión, elaborando documentación técnica y gráfica con la ayuda de herramientas digitales, empleando los formatos y el vocabulario técnico adecuados, de manera colaborativa, tanto presencialmente como en remoto.
- CE.E.4.
4.1. Describir, interpretar y diseñar soluciones a problemas informáticos a través de algoritmos y diagramas de flujo, aplicando los elementos y técnicas de programación de manera creativa.
4.2. Programar aplicaciones sencillas para distintos dispositivos (ordenadores, dispositivos móviles y otros) empleando los elementos de programación de manera apropiada y aplicando herramientas de edición, así como módulos de inteligencia artificial que añadan funcionalidades a la solución.
4.3. Automatizar procesos, máquinas y objetos de manera autónoma, con conexión a internet, mediante el análisis, construcción y programación de robots y sistemas de control.
- CE.E.5.
5.1. Reconocer la influencia de la actividad tecnológica en la sociedad y en la sostenibilidad ambiental a lo largo de su historia, identificando sus aportaciones y repercusiones y valorando su importancia para el desarrollo sostenible.
5.2. Identificar las aportaciones de las tecnologías emergentes al bienestar, a la igualdad social y a la disminución del impacto ambiental, haciendo un uso responsable y ético de las mismas.
Situación de aprendizaje 9: Semáforo adaptado.
Programación con Arduino y posterior prototipado de un semáforo que incluya una señal auditiva cuando el semáforo esté en rojo (verde para peatones), para adaptarlo a personas con deficiencia visual.
Situación de aprendizaje 10: Montando un sistema de aparcamiento
Programación con Arduino y posterior prototipado de un sistema de aparcamiento por ultrasonidos con avisador visual y sonoro.
Situación de aprendizaje 11: Creando un sistema de alarma
Programación con Arduino y posterior prototipado de un sistema de alarma con sensor de presencia, avisador visual y sonoro y pulsador para detener la alarma.
Situación de aprendizaje 12: Creando un túnel de lavado con sensores
Programación con Arduino y posterior prototipado de un túnel del lavado, con semáforo por detección de ultrasonidos para regular la entrada y barrera automática de salida, dotado a su vez de un pulsador de emergencia para detener el proceso por medio de interrupción.
.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 9: Semáforo adaptado
Programación con Arduino y posterior prototipado de un semáforo que incluya una señal auditiva cuando el semáforo esté en rojo (verde para peatones), para adaptarlo a personas con deficiencia visual.
COMPONENTES |
Arduino Uno |
Tira leds NeoPixel |
|
Zumbador |
|
Conectores 5v y Gnd |
Trabajo de indagación: En cualquier proyecto debemos investigar sobre el funcionamiento y comportamiento esperado para nuestro prototipo. En este caso, sabemos que los semáforos adaptados emiten un tono discontinuo cuando los peatones pueden cruzar, posibilitando de este modo a personas con dificultades de visión el paso de un lado a otro de forma segura. Los semáforos mediante código de colores (rojo, ámbar y verde), indican a los conductores/peatones si es momento de esperar o avanzar. La secuencia que siguen los semáforos de conductores es: rojo, verde y ámbar. Cuando esta rojo para coches, el de peatones esta en verde y al contrario. En el caso que nos toca, tendremos entonces que contemplar emitir los tonos, cuando el semáforo de coches este en rojo.
Para todos nuestros prototipos, vamos a utilizar una herramienta de diseño 2D con la que representaremos nuestro esquema de conexiones.
Diseño 2D
Es conveniente utilizar alguna herramienta para diseñar nuestro circuito antes de proceder al montaje. De este modo evitaremos cometer errores con el cableado. Existen muchas herramientas online para este propósito y algunas de ellas como Tinkercad incluso permiten su simulación, pero tienen mayor limitación en las librerías de componentes, por lo que en este caso utilizaremos EasyEDA.
Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando aquí.
Como podemos observar en nuestro esquemático, vamos a conectar dos actuadores a nuestro Arduino. Ambos tienen un pin a GND y otro a 5V, y cada uno de ellos tiene un pin de datos que asignaremos a los pines 2 y 3.
La placa de Arduino tiene 3 pines conectados a GND y uno a 5v, por lo que haremos uso del adaptador incluido en el kit para la conexión a 5v o en su defecto se podría utilizar una placa de prototipado.
Para abordar la programación de este proyecto, en primer lugar inicializaremos los componentes y crearemos 4 funciones: "encender verde"," encender ámbar"," encender rojo" y "sonido". De este modo, será tan sencillo como llamar a cada una de ellas en el bucle principal, las cuales se repetirán indefinidamente.
Construcción
Arduino tiene únicamente 1 pin a 5v y 3 a Gnd.
En esta práctica, utilizamos el Zumbador que tiene 3 pines (5v, Gnd y Señal) y la tira led Neopixel que igualmente tiene otros 3 pines (5v, Gnd y datos).
Para alimentar a 5v ambos actuadores, necesitaremos utilizar el conector multiplicador (1 a 4). El pin de datos de la tira led irá según nuestra programación al Pin2 de Arduino y el del zumbador al Pin3 de Arduino. El Gnd del zumbador y el de la tira led, los conectaremos a cualquiera de los 3 pines habilitados para ello en Arduino sin necesidad de utilizar el multiplicador.
Programación - Inicialización de componentes
Representamos lo primero de todo un diagrama de flujo que nos ayude a comprender el comportamiento de nuestro proyecto:
El siguiente paso, una vez hemos diseñado nuestro circuito es programarlo. Para ello abrimos el editor web de ArduinoBlocks y nos conectamos con nuestro usuario. Partiendo de un proyecto en blanco eligiendo como placa Arduino Uno, lo primero que haremos será sacar en pantalla nuestros componentes.
En primer lugar arrastraremos al área de trabajo el Zumbador, que lo encontraremos dentro del bloque de actuadores.
y haremos lo mismo con la tira led de NeoPixel, que la encontraremos en Visualización, NeoPixel.
Con esto ya tenemos todos los componentes que intervienen en nuestro circuito.
Ahora debemos asignarle a cada uno de ellos el Pin al que, en el paso anterior, hemos decidido que debe ir conectado. Para el Zumbador tendremos que modificarlo al Pin3 y deberemos asegurarnos que la Inicialización de la tira Led la hacemos sobre el Pin2. Además, podemos observar que la tira Led tiene otros 3 parámetros a los que debemos prestar atención. El primero de ellos es la codificación de colores que tiene nuestro componente. En nuestro caso "GRB" (green, red, blue). El segundo de ellos es la frecuencia, que fijaremos en 800Khz, y el tercero, indica el número de leds que compone la tira. En nuestro caso 8, pero debemos tener en cuenta que la posición del primer led se cuenta como 0, por tanto deberemos indicar 7.
Todas las opciones que podemos realizar con la tira de leds, las podemos encontrar al seleccionar en "Visualización" el apartado "NeoPixel": Las que vamos a utilizar son: iniciar, establecer brillo, limpiar, mostrar y establecer pixel # a un determinado color.
- Establecer brillo - Como su nombre indica, haciendo uso de este parámetro vamos a poder determinar la intensidad del brillo de los leds. Su valor puede ir de 0 a 255, siendo 0 la intensidad mínima (apagado) y 255 la máxima. A mayor intensidad de brillo, mayor demanda de corriente tendrá nuestro circuito, por lo que este valor es muy importante a la hora de elegir el método de alimentación de la tira NeoPixel. Cada Led consume unos 60mA (0,3W), dando color blanco intenso (20mA por cada componente de color) Esto supone un consumo de 9W para 30 LED, y 18W para 60 LED, lo que es mucha potencia en una fuente de 5V. Si nuestra tira demanda más potencia que la que puede obtener del propio Arduino, estaremos obligados a alimentar los leds con una fuente externa. Para no tener que recurrir a una fuente externa, en nuestro ejercicio, fijaremos la intensidad del brillo en 10.
- Establecer pixel # " " color - Gracias a este componente podemos determinar, teniendo en cuenta que el primer led ocupa la posición 0, de que color queremos que se ilumine un determinado Led. Si quiero que el led 2 de mi tira de NeoPixel se encienda de color rojo, bastará con configurarlo como: Establecer pixel # 1 color rojo.
- Mostrar - Cualquier configuarción que haga, no será visible hasta que la muestre. Este componente lo utilizaremos cada vez que queramos mostrar un cambio. Para que el Pin 2 del apartado anterior se muestre en color rojo, tendremos que utilizar el bloque "mostrar".
- Limpiar - Utilizaremos este componente cada vez que queramos eliminar cualquier configuración anterior. Sí quiero que el led 2 de mi tira que anteriormente lo hemos fijado a color rojo se apague, utilizaré este bloque.
Todos estos valores, los actualizaremos y pondremos en el bloque de "Inicializar", para que de este modo, Arduino sepa que en el Pin2 va a tener conectada una tira NeoPixel de 8 leds.
Para crear funciones, debemos abrir el menú de funciones y arrastrar el bloque al área de trabajo:
Programación - Funciones
Vemos el código para las funciones. Todas se van a comportar igual salvo la diferencia de los colores, los leds que encendemos y el tiempo de espera para cada color. Definimos los pines 1 y 2 para encender en color verde. Los pines 3 y 4 para el color ámbar y por último, los pines 5 y 6 para el color rojo. El tiempo que permanece la luz de color roja y verde lo definimos en 10 segundos, (10.000 milisegundos) y el de la luz en ámbar lo fijamos en 3 segundos (3.000 milisegundos).
Hay que tener en cuenta que la posición del vector de Leds para BitBlock comienza en 0. Por tanto, el primer led ocupa la posición 0, el segundo la posición 1, y así sucesivamente.
Como nuestra tira tiene 8 pines, en nuestro ejercicio no utilizaremos ni el primero ni el último.
encender verde: Esablecemos pixeles de las posiciones 2 y 3 a color verde, los mostramos y lo mantenemos así durante 10 segundos.
encender ámbar : Esablecemos pixeles de las posiciones 3 y 4 a color ámbar, los mostramos y lo mantenemos así durante 3 segundos.
encender rojo: Esablecemos pixeles de las posiciones 5 y 6 a color rojo, los mostramos y lo mantenemos así durante 10 segundos.
sonar zumbador: Teniendo el zumbador conectado al Pin3 de Arduino, emitimos un sonido con frecuencia de 500Hz durante 1 segundo y al finalizar, esperamos 1 segundo.
Teniendo ya definidas nuestras funciones, tan solo nos quedaría incluirlas en el Bucle principal para que se repitan indefinidamente, pero para cumplir con las especificaciones del programa, debemos realizar algunas modificaciones para que mientras el semáforo esta en rojo se escuche el sonido del zumbador. Por tanto, tenemos que hacer un llamamiento a la función "sonar zumbador" desde la función "encender rojo". Si observamos bien, para mantener las luces rojas, hemos tenido que utilizar una espera de 10 segundos, que ahora podremos sustituir por la espera que se produce cada vez que se produce un sonido por el zumbador (suena 1 segundo y espera en silencio otro segundo). En concreto, cada vez que llamamos a la función del zumbador, transcurren 2 segundos, por lo que si la repetimos 5 veces, estaremos empleando 10 segundos que son los que queremos que la luz roja permanezca encendida mientras escuchamos un "beep" de manera intermitente. La función modificada quedaría de la siguiente manera:
encender rojo actualizada
Con esta actualización ya estariamos cumpliendo los requisitos del enunciado, y nuestro programa finalmente quedaría del siguiente modo:
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 10: Sistema de aparcamiento para coches
Programación con Arduino y posterior prototipado de un sistema de aparcamiento para coches que incluya un avisador acústico que advierta al conductor del peligro de colisión por cercanía.
COMPONENTES |
Arduino Uno |
Zumbador |
|
Sensor Ultrasonidos |
|
Conector 5v |
Trabajo de indagación: Gracias a los sensores de ultrasonidos, podemos averiguar la distancia que hay a un objeto. Estos emiten un ultrasonido, reciben el rebote y miden el tiempo que ha transcurrido desde la emisión hasta la recepción permitiéndonos calcular la distancia con la formula velocidad=espacio*tiempo. Utilizando un ultrasonido en la parte trasera de un vehículo, podemos emitir un sonido cuando detectemos una distancia prudencial al objeto y evitar de este modo chocar con él.
Diseño 2D
Es conveniente utilizar alguna herramienta para diseñar nuestro circuito antes de proceder al montaje. De este modo evitaremos cometer errores con el cableado. Existen muchas herramientas online para este propósito y algunas de ellas como Tinkercad incluso permiten su simulación, pero tienen mayor limitación en las librerías de componentes, por lo que en este caso utilizaremos EasyEDA.
Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando aquí.
Incorporamos el Arduino, buzzer y sensor ultrasónico a nuestro proyecto resultando del siguiente modo:
Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando aquí.Como podemos observar, en nuestro esquemático, vamos a conectar un actuador (buzzer) y un sensor (sensor ultrasónico). Ambos tienen un pin a GND y otro a 5V, El zumbador tiene un pin de salida que conectaremos al número 2 de nuestra placa y en cambio, el sensor de ultrasonidos, tiene 2 pines, uno de salida o Trigger (le pide al sensor que envíe un tono ultrasónico) que conectaremos al pin 3, y otro de entrada o echo (por el que se recibe el aviso de haber recibido el rebote del disparo inicial) que conectaremos al pin 4 de nuestra placa.
Para abordar la programación de este proyecto, en primer lugar inicializaremos el puerto serie que nos servirá para ver en pantalla las medidas del sensor, y crearemos 3 funciones "lejos", "cerca" y "muy_cerca". De este modo será tan sencillo como llamar a cada una de ellas en el bucle principal en función de los rangos de distancia que determinemos para cada uno de estos supuestos.
Construcción
Arduino tiene únicamente 1 pin a 5v y 3 a Gnd.
En esta práctica, utilizamos el Zumbador que tiene 3 pines (5v, Gnd y Señal) y el sensor de ultrasonidos, que tiene 4 pines (2 de datos, uno para Gnd y el otro para 5v).
Para alimentar a 5v ambos, necesitaremos utilizar el conector multiplicador (1 a 4). Utilizaremos cualquiera de los 3 pines Gnd del Arduino para conectar los Gnd del sensor y del zumbador. El pin de datos del zumbador lo conectaremos al número 2 de nuestra placa y los dos pines (trigger y echo) del sensor de ultrasonidos irán respectivamente al 3 y 4 de la placa de Arduino.
Programación - Inicialización del puerto serie y asignación de pines
Como venimos haciendo hasta ahora, representamos un sencillo diagrama de flujo que nos ayude a comprender la ejecución del bucle:
El siguiente paso, una vez hemos diseñado nuestro circuito es programarlo. Para ello abrimos el editor web de ArduinoBlocks y nos conectamos con nuestro usuario. Partiendo de un proyecto en blanco eligiendo como placa Arduino Uno, lo primero que haremos será sacar en pantalla nuestros componentes.
En primer lugar arrastraremos al área de trabajo el Zumbador que lo encontramos dentro del bloque de "actuadores".
y haremos lo mismo con el sensor ultrasónico.
. Ahora debemos asignarle a cada uno de ellos los Pines que hemos planteado en nuestro esquema electrónico. Para el zumbador tendremos que asignarle el Pin2, el Pin3 y Pin4 respectivamente para los pines Trig y Echo del sensor de ultrasonidos.
El puerto serie del Arduino sirve para poder comunicarse con el ordenador y de este modo, además de poder grabar en su procesador nuestros programas, nos sirve para visualizar en pantalla los valores de entradas y salidas que configuremos.
En el caso que nos afecta, dentro del bucle principal, crearemos una variable que contendrá en cada momento el valor del sensor de distancia, que se verá modificada en función de la distancia a la que se encuentre un objeto de este. Aprovecharemos que este valor se actualiza en esta variable para mostrar su valor por pantalla gracias a la comunicación del puerto serie.
Para inicializar el puerto serie, lo haremos directamente sobre el bloque de Inicializar, de ArduinoBlocks del siguiente modo:
|
Para crear funciones, debemos abrir el menú de funciones y arrastra el bloque al área de trabajo:
Programación de las funciones
En el planteamiento de nuestra solución, decidimos implementar 3 rangos de actuación determinados por la distancia a la que se encuentra el objeto. Cuando el objeto esta en la zona "lejos" el zumbador emitirá un tono grave y con una pausa de un segundo, si se encuentra en la zona "cerca", aumentará la frecuencia del tono y disminuirá la pausa a medio segundo y por último, si el objeto se encuentra "muy cerca", el zumbador deberá emitir tonos sin apenas pausa (50 milisegundos) y un tono lo suficientemente agudo como para advertir del peligro.
Por ello configuramos 3 funciones que llamaremos desde el programa principal en función de que se cumplan dichas condiciones y que quedarán del siguiente modo:
Antes de incluir las funciones en nuestro programa principal, vamos a configurar la lógica de actuación del sensor. Para ello, como indicábamos anteriormente, definimos una variable que contenga el valor de las medidas del sensor y la mostramos por el puerto serial para ver su valor.
Para crear variables, seleccionamos en el menú lateral "Variables" y seleccionamos el bloque "Crear variable". Estas pueden ser numéricas, de texto o lógicas (verdadera/falsa).
Seleccionaremos "Crear variable....(Número)" y le introduciremos por nombre "distancia". A partir de este momento, en el mismo menú lateral, al elegir la opción Variables, podremos ver bloques para establecer o tomar el valor de nuestra variable recién creada.
Para asignarle un valor a nuestra variable "distancia" elegimos el bloque "Establecer [distancia]" y lo asociamos al sensor de ultrasonidos que tenemos definido con los pines 3 Trigger y 4 Echo. De este modo, la información del sensor quedará almacenada en la variable y al estar dentro del bucle principal, cada vez que haya un cambio, quedará almacenado el nuevo valor.
En estos momentos podemos subir el programa a nuestro Arduino y conectar el puerto serial para ver los resultados del siguiente modo:
En estos momentos podemos observar como alejando y acercando un objeto al sensor, los valores de medida cambian. Estos sensores no son muy precisos y es aconsejable determinar cual es la máxima y la mínima distancias en las que es capaz de medir correctamente, para determinar los rangos de actuación.
En el desarrollo de esta practica, con los valores obtenidos se definieron los siguientes rangos:
muy_cerca--> entre 0 y 10 centímetros
cerca--> de 11 a 30 centímetros
lejos--> de 31 a 60 centímetros
Por último solo nos falta programar las condiciones para cada rango y llamar a cada función según proceda.
Para crear las condiciones, utilizamos los bloques que encontramos en Lógica.
Si el valor del sensor (distancia) es mayor que cero y además es menor o igual que 10, debe activarse la función "muy_cerca":
Si distancia es mayor que 10 y menor o igual que 30 entonces debe activarse la función "cerca".
Si distancia es mayor que 30 y menor o igual que 60 entonces deberá advertirnos de la existencia de un objeto lejano.
y finalmente nuestro programa completo quedaría del siguiente modo:
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Situación de aprendizaje 11: Sistema de alarma (con interrupción)
Programación con Arduino y posterior prototipado de un sistema de alarma para un espacio mediante un sensor PIR, un avisador acústico y un botón de desactivado por medio de interrupción.
COMPONENTES |
Arduino Uno |
Sensor PIR |
|
Zumbador |
|
Botón/Pulsador |
|
Conectores 5v y Gnd |
Trabajo de Indagación: Un sistema de alarma se basa en la detección del movimiento de la persona que accede a un lugar cerrado y que previamente había sido armado. Si esto sucede, se dispara la alarma que pone en marcha un plan de emergencia que pasa por el aviso a los servicios de emergencia, si tras haber contactado con el propietario este denuncia no ser él quien esta accediendo al recinto. En caso de ser un error por parte del propietario, este dispone de unos segundos para poder introducir su clave de seguridad y de este modo desarmar la alarma.
La detección del movimiento se obtiene gracias a los sensores piroélectricos o sensores PIR. Un sensor PIR o funciona comparando la temperatura que desprende un objeto con la de su alrededor, de forma que puede detectar con precisión una presencia en un lugar determinado. Se tratan de sensores que son los encargados de medir las variaciones de radiaciones infrarrojas que se reciben.
En este reto, utilizaremos por tanto un sensor PIR que será el encargado de enviar una señal al Arduino en caso de detectar movimiento. Si esto ocurre, el zumbador comenzará a sonar y solo se detendrá en caso de que el propietario desactive la alarma introduciendo su código secreto. En nuestro caso, simularemos la introducción del número secreto pulsando un botón conectado al sistema de alarmado.
Diseño 2D
Es conveniente utilizar alguna herramienta para diseñar nuestro circuito antes de proceder al montaje. De este modo evitaremos cometer errores con el cableado. Existen muchas herramientas online para este propósito y algunas de ellas como Tinkercad incluso permiten su simulación, pero tienen mayor limitación en las librerías de componentes, por lo que en este caso utilizaremos EasyEDA.
Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando aquí.
El botón que vamos a utilizar tiene integrada una resistencia, lo cual facilita nuestro cableado. Tiene 3 pines (-,+ y S) y para la realización del esquemático, hemos buscado "button pull down", del cual utilizaremos el Pin1 como Vin (5v) el Pin3 como Gnd y el Pin2 como señal de entrada.
En este proyecto contamos con 2 entradas, la señal de activación que proviene del sensor de movimiento que la conectaremos al Pin2 de nuestra placa y la que proviene del botón que irá conectada al Pin3 del Arduino.
Como en los proyectos anteriores, el zumbador, en este caso conectado al Pin4, será una salida.
Como en los ejercicios anteriores, hemos añadido el resto de componentes y una vez cableado queda de la siguiente manera:
Para la realización de este proyecto vamos a utilizar Interrupciones. Tomado de esta entrada de Luis LLamas,
los microprocesadores incorporan el concepto de interrupción, que es un mecanismo que permite asociar una función a la ocurrencia de un determinado evento. Esta función de callback asociada se denomina ISR (Interruption Service Rutine).
Cuando ocurre el evento el procesador “sale” inmediatamente del flujo normal del programa y ejecuta la función ISR asociada ignorando por completo cualquier otra tarea (por esto se llama interrupción). Al finalizar la función ISR asociada, el procesador vuelve al flujo principal, en el mismo punto donde había sido interrumpido.
Como vemos, las interrupciones son un mecanismo muy potente y cómodo que mejora nuestros programas y nos permite realizar acciones que no serían posibles sin el uso de interrupciones.
Dentro de las interrupciones de hardware, Arduino es capaz de detectar los siguientes eventos.
- RISING, ocurre en el flanco de subida de LOW a HIGH.
- FALLING, ocurre en el flanco de bajada de HIGH a LOW.
- CHANGING, ocurre cuando el pin cambia de estado (rising + falling).
- LOW, se ejecuta continuamente mientras está en estado LOW.
Nuestro pulsador se encuentra conectado a 5v y al pulsarlo es cuando cae a 0 voltios. Por tanto, si utilizamos la interrupción RISING, podremos observar el flanco de subida de 0 a 5 voltios en el momento de dejar de presionar el botón.
Construcción
El botón que vamos a utilizar tiene integrada una resistencia, lo cual facilita nuestro cableado. Tiene 3 pines (-,+ y S) y para la realización del esquemático, hemos buscado "button pull down", del cual utilizaremos el Pin1 como Vin (5v) el Pin3 como Gnd y el Pin2 como señal de entrada.
En este proyecto contamos con 2 entradas, la señal de activación que proviene del sensor de movimiento que la conectaremos al Pin2 de nuestra placa y la que proviene del botón que irá conectada al Pin3 del Arduino.
Como en los proyectos anteriores, el zumbador, en este caso conectado al Pin4, será una salida.
Finalmente, como ha ocurrido en los ejercicios anteriores, necesitaremos utilizar el conector 1 a 4 de 5v para poder alimentar el zumbador, el sensor PIR y el botón. En cuanto a las tomas de tierra (Gnd) podemos utilizar las 3 disponibles en la placa.
Programación - Inicialización de variables e Interrupción
Una vez más representamos en un diagrama de flujo nuestro reto para simplificar su programación.
Utilizaremos la variable "alarma" para almacenar en ella el momento en el que la alarma se dispara por intrusión. Para crear la variable, recuerda que debes acceder en el menú lateral de ArduinoBlocks a la sección "Variables" y en este caso elegiremos una variable booleana (verdadera o falsa). La inicializaremos como falsa, y obligaremos a que cambie a verdadera si el sensor de presencia informa de una intrusión. Así mismo, estableceremos la Interrupción RISING en el Pin3. Arduino Uno tiene únicamente dos pines que admiten interrupciones. Estos solo pueden ser el 2 y el 3.
Cuando la alarma se active por una intrusión, el zumbador comenzará a sonar mientras la variable "alarma" sea verdadera. AL entrar en la interrupción, la pondremos nuevamente en estado falso y esto hará que el sonido se pare.
Veamos como implementamos esto con los bloques de ArduinoBlocks.
Como habíamos mencionado, el sensor PIR lo tenemos conectado en el Pin2. Si éste, detecta movimiento, enviará una señal (HIGH) al Arduino, y la almacenamos en la variable "movimiento": Al igual que con la variable "alarma", definiremos la variable "movimiento" como booleana. El valor de esta, dependerá de si el sensor envía estado alto, lo cual la establecerá a verdadera, o si por el contrario, no hay movimiento y se encuentra siempre en estado bajo, configurándola como falsa.
Con esta información, bastará con utilizar un bloque "Si <condición> es verdadera, entonces hacer..." que lo podemos encontrar en el menú que se despliega al pinchar en "Lógica". Para nosotros la condición es sencilla: Si movimiento es verdadero, entonces modificamos el valor de la variable "alarma" de falso a "verdadero".
En la siguiente instrucción, introduciremos otro bloque lógico, de manera que: Si la variable "alarma" es verdadera, entonces el zumbador comenzará a emitir un tono.
Cuando el programa vuelve a la primera instrucción del bucle principal, ya no importa si el sensor sigue notando movimiento o no, puesto que la variable "alarma" queda ya en estado verdadero y siempre se cumplirá la última condición, por lo que el zumbador no dejará de sonar a menos que "alarma" cambie a "falso" y esto solo sucederá si se activa la interrupción pulsando el botón que simula que introducimos la contraseña para desarmar la alarma. Si el botón es pulsado, "alarma" pasa a almacenar nuevamente el valor "false" y por tanto, si no hay movimiento en el interior, no se cumplirá la última condición y por tanto el zumbador no emitirá ningún sonido. Visionando todos los bloques, quedarían del siguiente modo:
Antes de dar por terminado este ejercicio, nos planteamos una mejora, y es que tal y como lo hemos configurado, una vez armada la alarma, cuando volvamos a nuestro local, nada más entrar la alarma se disparará. Vamos a modificar nuestro código para que al detectarse una intrusión, durante unos segundos emita unos tonos de advertencia y si en ese intervalo no se desarma, entonces es cuando comenzará a sonar la sirena.
Para ello, si el sensor detecta una intrusión, a parte de establecer "alarma" como verdadero, utilizaremos un bloque de repetición para emitir un tono muy corto, y si en ese intervalo se pulsa el botón, nuestra variable "alarma" volverá a ser falsa y no sonará la alarma. Por el contrario, si se trata realmente de un intruso, al no saber la contraseña, finalizado el bucle de repetición de sonidos cortos, la alarma comenzará a emitir dos tonos similares a los de una sirena.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Ejercicio Final: Túnel de lavado con sensores
Programación con Arduino y posterior prototipado de un sistema de lavado automático para coches.
COMPONENTES |
Arduino UNO |
Sensor de Ultrasonidos |
|
Tira leds NeoPixel |
|
ServoMotor |
El acceso al túnel estará regulado por un semáforo (2 leds de la tira Neopixel) que permanecerá en verde hasta que el vehículo se acerque justo a la posición donde debe parar. En este instante el semáforo cambiará a rojo, y comenzará el proceso de lavado.
Durante el tiempo de lavado (6 segundos), el resto de leds de la tira, se irán encendiendo en color azul, uno a uno cada segundo, indicando de este modo el progreso del servicio.
Finalizado el proceso de limpiado y secado, la barrera de salida (un servomotor en posición 0 grados), se abrirá (posición 90 grados) para dejar salir al vehículo, y el semáforo volverá a ponerse en verde.
Al tratarse del ejercicio final, únicamente vamos a ver como accionar un servomotor, ya que se pretende ver como el alumnado ha adquirido los conocimientos, y el resto de componentes han sido ya tratados en las experiencias anteriores.
Diseño 2D
Es conveniente utilizar alguna herramienta para diseñar nuestro circuito antes de proceder al montaje. De este modo evitaremos cometer errores con el cableado. Existen muchas herramientas online para este propósito y algunas de ellas como Tinkercad incluso permiten su simulación, pero tienen mayor limitación en las librerías de componentes, por lo que en este caso utilizaremos EasyEDA.
Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando aquí.
En este caso, como indicaba al principio, vamos a implementar únicamente el diseño de las conexiones del servomotor. El resto del diseño forma parte de la tarea evaluable de este curso.
Los servomotores tienen 3 Pines. Positivo, Gnd y datos. A continuación muestro el servo que he utilizado y como quedan las conexiones.
A continuación vemos como programar el movimiento de un servo con ArduinoBlocks.
Programación - Servomotor
Los servomotores pueden mover su posición de 0 a 180 grados. En ArduinoBlocks, hay un apartado de "Motores" donde podremos encontrar los servos. Lo arrastramos al campo de trabajo y asignamos su pin de datos.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Créditos
Curso creado en Octubre de 2022 por:
- Cristian Ruiz Reinales y Ricardo Aguado Vallejo excepto en los párrafos y citas que se cita su autor y procedencia, así como los capítulos 5 y 7 en su totalidad, los cuales están tomados de otros libros de CATEDU ya existentes.
Cualquier observación o detección de error en soporte.catedu.es
Los contenidos se distribuyen bajo licencia Creative Commons tipo BY-NC-SA excepto en los párrafos que se indique lo contrario.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU
Programación, robótica y accesibilidad
1.- Introducción
Durante mucho tiempo la robótica fue patrimonio de personas y/o instituciones con alta capacidad económica (podían adquirir las placas con microcontroladores comerciales) y capacidad intelectual (podían entender y programar el funcionamiento de las mismas) siempre dentro de los límites establecidos por las marcas comerciales y lo que pudieran “desvelar” de su funcionamiento, vigilando siempre que la competencia no “robara” sus secretos y “copiara” sus soluciones.
Todo esto saltó por los aires en torno a 2005 con la irrupción de un grupo de profesores y estudiantes jóvenes, que decidieron romper con esta dinámica, tratando de poner a disposición de su alumnado microcontroladores económicamente accesibles y que les permitieran conocer su funcionamiento, sus componentes, e incluso replicarlos y mejorarlos. Nacía Arduino y el concepto de Hardware Open Source. Detrás de este concepto se encuentra la accesibilidad universal. En un proyecto Open Source todo el mundo puede venir, ayudar y contribuir, minimizando barreras económicas e intelectuales.
Arduino traslada al hardware un concepto ya muy conocido en el ámbito del software, como es el software open source o software libre.
Software libre
Cuando los desarrolladores de software terminan su creación, tienen múltiples posibilidades de ponerlo a disposición de las personas, y lo hacen con condiciones específicas especificadas en una licencia. Esta licencia es un contrato entre el creador o propietario de un software y la persona que finalmente acabará utilizando este software. Como usuarios, es nuestro deber conocer las condiciones y permisos con las que el autor ha licenciado su producto, para conocer bajo qué condiciones podemos instalar y utilizar cada programa.
Existen muchas posibilidades de licencias: software privativo, comercial, freeware, shareware, etc.. Nos centraremos aquí en la de software libre.
GNU (https://www.gnu.org) es una organización sin ánimo de lucro que puso una primera definición disponible de lo que es software libre: Software libre significa que los usuarios del software tienen libertad (la cuestión no es el precio). Desarrollaron el sistema operativo GNU para que los usuarios pudiesen tener libertad en sus tareas informáticas. Para GNU, el software libre implica que los usuarios tienen las cuatro libertades esenciales:
1. ejecutar el programa.
2. estudiar y modificar el código fuente del programa.
3. redistribuir copias exactas.
4. distribuir versiones modificadas.
En otras palabras, el software libre es un tipo de software que se distribuye bajo una licencia que permite a los usuarios utilizarlo, modificarlo y distribuirlo libremente. Esto significa que los usuarios tienen libertad de ejecutar el software para cualquier propósito, de estudiar cómo funciona el software y de adaptarlo a sus necesidades, de distribuir copias del software a otros usuarios y de mejorar el software y liberar las mejoras al público.
El software libre se basa en el principio de la libertad de uso, y no en el principio de la propiedad. Esto significa que los usuarios tienen la libertad de utilizar el software de la manera que deseen, siempre y cuando no violen las condiciones de la licencia. El software libre es diferente del software propietario, que es el software que se distribuye con restricciones en su uso y modificación. El software propietario suele estar protegido por derechos de autor y solo se puede utilizar bajo los términos y condiciones especificados por el propietario del software.
Recomendamos la visualización de este video para entender mejor el concepto.
Más adelante, entorno a 2015, en Reino Unido, surgiría también la placa BBC Micro:bit, con la misma filosofía de popularizar y hacer accesible en este caso al alumnado de ese país la programación y la robótica. También hablaremos de ella.
2.- ARDUINO o LA ROBÓTICA ACCESIBLE
Arduino es una plataforma de hardware y software libre.
Hardware libre
Esto significa que tanto la placa Arduino como el entorno de desarrollo integrado (IDE) son de código abierto. Arduino permite a los usuarios utilizar, modificar y distribuir tanto el software como el hardware de manera libre y gratuita, siempre y cuando se respeten las condiciones de las licencias correspondientes.
El hardware libre es un tipo de hardware cuya documentación y diseño están disponibles de manera gratuita y libre para su modificación y distribución. Esto permite a los usuarios entender cómo funciona el hardware y adaptarlo a sus necesidades, así como también crear sus propias versiones modificadas del hardware.
Arduino surge como solución al elevado precio de los microcontroladores allá por el año 2005. En el ámbito de la educación, los microcontroladores solo se utilizaban en la etapa universitaria, y su coste era tan elevado que muchos proyectos de fin de carrera se quedaban únicamente en prototipos virtuales ya que las universidades no podían proveer a cada estudiante con un microprocesador, contando además que en el propio proceso de experimentación lo más habitual era que una mala conexión hiciera que se rompieran. Otro gran inconveniente era la dificultad de la programación. Cada fabricante entregaba su manual de programación, lo que hacía que de unos a otros no hubiera un lenguaje estándar, y la consecuente dificultad de interpretación. Además, su programación era a bajo nivel en lenguaje máquina. Generar una simple PWM requería una ardua y minuciosa secuenciación que podía llevar varias horas hasta conseguir el resultado deseado. Por este motivo, el enfoque de Arduino desde el principio fue ser Open Source tanto en hardware como en software. El desarrollo del hardware fue la parte más sencilla. Orientado a educación, sufre algunas modificaciones frente a los microprocesadores existentes para hacer más fácil su manejo y accesibilidad a cualquier sensor o actuador. El mayor esfuerzo se entregó en todas las líneas de código que hacían posible que ya no hubiera que programar a bajo nivel gracias al IDE de Arduino que incluía bibliotecas y librerías que estandarizaban los procesos y hacían tremendamente sencillo su manejo. Ahora el alumnado para mover un motor, ya no tenía que modificar las tramas de bits del procesador una a una, sino que bastaba con decir que quería moverlo en tal dirección, a tal velocidad, o a equis grados.
Acabábamos de pasar de unos costes muy elevados y una programación muy compleja a tener una placa accesible, open source y de bajo coste que además hacía muy accesible su programación y entendimiento, características fundamentales para su implantación en educación, hasta tal punto que su uso ya no era exclusivo de universidades, sino que se extiende a la educación secundaria.
Este hecho es fundamental para el desarrollo del Pensamiento Computacional en el aula observándose que su accesibilidad y beneficios son tales, que alcanzan a centros con alumnado de toda tipología como la aplicación del pensamiento computacional y robótica en aulas con alumnos de necesidades especiales. Una vez más, aparece el concepto de accesibilidad asociado a esta filosofía Open Source.
A este respecto, recomendamos la lectura de este interesante blog, que tiene por título: ROBOTIQUEAMOS...” Experiencia de aproximación a la robótica en Educación Especial (CPEE ÁNGEL RIVIÈRE). También recomendamos los trabajos robótica en Educación Especial (CPEE ÁNGEL RIVIÈRE): http://zaragozacpeeangelriviere.blogspot.com/search/label/ROB%C3%93TICA
Igualmente, la aparición de Arduino supone una gran facilidad para la aplicación de la robótica y la programación en la atención temprana, donde son numerosas sus aplicaciones desde ayudar a mitigar el déficit de atención en jóvenes autistas, hasta ayudar a socializar a los alumnos con dificultades para ello, o ayudar a alumnos de altas capacidades a desarrollar sus ideas.
Por otro lado su accesibilidad económica lo ha llevado a popularizarse en países de todo el mundo, especialmente en aquellos cuyos sistemas educativos no disponen en muchas ocasiones de recursos suficientes, lo que supone en la práctica una democratización del conocimiento y superación de brecha digital.
Filosofía del Arduino ver vídeo
Arduino y su IDE son la primera solución que aparece en educación con todas las ventajas que hemos enumerado, y esto hace que todos los nuevos prototipados y semejantes tengan algo en común, siempre son compatibles con Arduino
Para entender bien la filosofía de Arduino y el hardware libre, os recomendamos este documental de 30 minutos. Arduino the Documentary
Scratch: software libre para el desarrollo del pensamiento computacional
Scratch es un lenguaje de programación visual desarrollado por el grupo Lifelong Kindergarten del MIT Media Lab. Scratch es un software libre. Esto significa que está disponible gratuitamente para todos y que se distribuye bajo una licencia de software libre, la Licencia Pública General de Massachusetts (MIT License). Esta licencia permite a los usuarios utilizar, modificar y distribuir el software de manera libre, siempre y cuando se respeten ciertas condiciones. Entre otras cosas, la licencia de Scratch permite a los usuarios utilizar el software para cualquier propósito, incluyendo fines comerciales. También permite modificar el software y distribuir las modificaciones, siempre y cuando se incluya una copia de la licencia y se indique que el software ha sido modificado. En resumen, Scratch es un software libre que permite a los usuarios utilizar, modificar y distribuir el software de manera libre y gratuita, siempre y cuando se respeten las condiciones de la licencia. De hecho, gracias a que está licenciado de esta forma, han surgido decenas de variaciones de Scratch para todo tipos de propósitos, eso sí, siempre educativos y relacionados con las enseñanzas de programación y robótica
3. BBC micro:bit y la Teoría del Cambio
BBC micro:bit, a veces escrito como Microbit o Micro Bit, es un pequeño ordenador del tamaño de media tarjeta de crédito, creado en 2015 por la BBC con el fin de promover el desarrollo de la robótica y el pensamiento computacional entre la población escolar del Reino Unido. Actualmente su uso está extendido entre 25 millones de escolares de 7 a 16 años de más de 60 países.
Tarjeta BBC micro:bit V1. Fuente: https://microbit.org. CC BY-SA 4.0.
Aunque el proyecto fue iniciado por la BBC, su desarrollo fue llevado a cabo por 29 socios tecnológicos de primera línea. Por ejemplo, la implementación del Bluetooth integrado en la tarjeta corrió a cargo de la fundación propietaria de la marca, Bluetooth SIG, una asociación privada sin ánimo de lucro.
El hardware y el software resultantes son 100% abiertos, y están gestionados por una fundación sin ánimo de lucro que comenzó a funcionar en el año 2016, la Micro:bit Educational Foundation. La fundación basa sus actuaciones en su Teoría del Cambio,
Teoría del cambio y más sobre microbit
Teoría del cambio puede resumirse en tres principios:
- El convencimiento de que la capacidad de comprender, participar y trabajar en el mundo digital es de vital importancia para las oportunidades de vida de una persona joven.
- La necesidad de emocionar y atraer a las personas jóvenes por medio de BBC micro:bit, especialmente a las que podrían pensar que la tecnología no es para ellas.
- Diversificar a los estudiantes que eligen las materias STEM a medida que avanzan en la escuela y en sus carreras, para hacer crecer una fuente diversa de talento, impulsando la equidad social y contribuyendo a crear una tecnología mejor.
Para desarrollar sus principios, la fundación trabaja en tres líneas de acción:
- El desarrollo de hardware y software que contribuyan a despertar el entusiasmo en las personas jóvenes hacia la tecnología y hacia las oportunidades que presenta.
- La creación de recursos educativos gratuitos y fáciles de usar que permitan al profesorado enseñar de forma atractiva y creativa.
- La colaboración con entidades asociadas que compartan una misma visión para ofrecer programas educativos de alto impacto en todo el mundo.
Uno de los objetivos de la Micro:bit Educational Foundation es llegar a 100 millones de escolares en todo el mundo.
En correspondencia con las líneas de acción y con los principios expuestos, el sistema resultante es muy económico: tanto las placas como los accesorios producidos por terceras empresas tienen un precio muy contenido. Además, dado el carácter abierto del proyecto, están disponibles algunos clones totalmente compatibles, como Elecrow Mbits o bpi:bit. Estos clones son incluso más potentes y económicos que la placa original.
El universo micro:bit destaca por su alta integración de software y hardware: basta un clic de ratón para cargar las librerías necesarias para que funcione cualquier complemento robótico, como sensores, pantallas, tarjetas de Internet de las Cosas, robots, casas domóticas, etc.
La programación de la placa se realiza desde un ordenador a través de un navegador cualquiera, estando disponibles 12 lenguajes de programación. De nuevo, por ser un sistema abierto, existen múltiples soluciones de programación, aunque las más común es MakeCode.
Captura de pantalla del editor MakeCode, https://makecode.microbit.org/#.
El sitio web MakeCode permite programar con bloques y también en Python y en Java, traduciendo de un lenguaje a otro instantáneamente. No se necesita ningún registro en la plataforma para poder programar.
Los programas también pueden guardarse descargados en el ordenador compilados en código de máquina. Al subir de nuevo el programa al editor, se realiza una decompilación automática al lenguaje de bloques, Python o Java. Los programas guardados en código de máquina se pueden cargar directamente en micro:bit, que en el escritorio de un ordenador se maneja como una simple unidad de memoria USB.
MakeCode contiene además múltiples recursos como tutoriales, vídeos, fichas de programación, cursos para el profesorado, ejemplos y propuestas de proyectos y experimentos, todo ello en varios idiomas y clasificado por edades desde los 7 años.
Otra solución muy usada para programar micro:bit es MicroPython, creada por Python Software Foundation, otra organización sin ánimo de lucro.
MicroCode permite que los más pequeños, a partir de los 6 años de edad, programen micro:bit mediante un sistema de fichas dispuestas en líneas de acción. Están disponibles un tutorial introductorio en 20 idiomas, una guía del usuario y muchos ejemplos. El proyecto es de código abierto.
Micro:bit también es programable en Scratch con sólo añadir una extensión al editor.
Todos los entornos de desarrollo descritos disponen de un simulador de micro:bit, por lo que ni siquiera resulta necesario disponer de una tarjeta física para aprender a programar.
Una vez realizada la programación, la placa y sus complementos pueden funcionar desconectados del ordenador por medio de un cargador de móvil, una batería externa o un simple par de pilas alcalinas.
Versiones y características de micro:bit
A pesar de su pequeño tamaño, micro:bit es un sistema potente. Existen dos versiones de la placa. La más moderna, llamada micro:bit V2, tiene las siguientes características:
- Procesador de 64 MHz.
- 512 KB de RAM Flash y 128 KB de RAM.
- Matriz de 5 x 5 LED rojos.
- Dos pulsadores mecánicos y un tercer pulsador de apagado y reset.
- Un pulsador táctil.
- Micrófono y altavoz.
- Acelerómetro y brújula.
- Sensores de luz y de temperatura.
- Comunicación con otras placas por Bluetooth de bajo consumo.
- Alimentación a 3 V o por USB.
- 25 pines de entradas y salidas para conectar motorcitos, sensores, placas de Intenet de las Cosas, robots y, en general, cualquier otro tipo de accesorio.
- 200 mA de intensidad de corriente disponibles en las salidas para alimentar accesorios.
4.- LA IMPORTANCIA DEL OPEN SOURCE / CÓDIGO ABIERTO EN EDUCACIÓN
La creación, distribución, modificación y redistribución del hardware y software libre así como su utilización, están asociados a una serie de valores que deberían ser explicados en la escuela a nuestros alumnos para dar una alternativa a la versión mercantilista de que cualquier creación es creada para obtener beneficios económicos.
En GNU, pusieron especial énfasis en la difusión del software libre en colegios y universidades, promoviendo una serie de valores fundacionales:
Valores GNU
Compartir
El código fuente y los métodos del hardware y software libre son parte del conocimiento humano. Al contrario, el hardware software privativo es conocimiento secreto y restringido. El código abierto no es simplemente un asunto técnico, es un asunto ético, social y político. Es una cuestión de derechos humanos que la personas usuarias deben tener. La libertad y la cooperación son valores esenciales del código abierto. El sistema GNU pone en práctica estos valores y el principio del compartir, pues compartir es bueno y útil para el progreso de la humanidad. Las escuelas deben enseñar el valor de compartir dando ejemplo. El hardware y software libre favorece la educación pues permite compartir conocimientos y herramientas.
Responsabilidad social
La informática, electrónica, robótica... han pasado a ser una parte esencial de la vida diaria. La tecnología digital está transformando la sociedad muy rápidamente y las escuelas ejercen una influencia decisiva en el futuro de la sociedad. Su misión es preparar al alumnado para que participen en una sociedad digital libre, mediante la enseñanza de habilidades que les permitan tomar el control de sus propias vidas con facilidad. El hardware y el software no debería estar bajo el poder de un desarrollador que toma decisiones unilaterales que nadie más puede cambiar.
Independencia
Las escuelas tienen la responsabilidad ética de enseñar la fortaleza, no la dependencia de un único producto o de una poderosa empresa en particular. Además, al elegir hardware y software libre, la misma escuela gana independencia de cualquier interés comercial y evita permanecer cautiva de un único proveedor. Las licencias de hardware y software libre no expiran
Aprendizaje
Con el open source los estudiantes tienen la libertad de examinar cómo funcionan los dispositivos y programas y aprender cómo adaptarlos si fuera necesario. Con el software libre se aprende también la ética del desarrollo de software y la práctica profesional.
Ahorro
Esta es una ventaja obvia que percibirán inmediatamente muchos administradores de instituciones educativas, pero se trata de un beneficio marginal. El punto principal de este aspecto es que, por estar autorizadas a distribuir copias de los programas a bajo costo o gratuitamente, las escuelas pueden realmente ayudar a las familias que se encuentran en dificultad económica, con lo cual promueven la equidad y la igualdad de oportunidades de aprendizaje entre los estudiantes, y contribuyen de forma decisiva a ser una escuela inclusiva.
Calidad
Estable, seguro y fácilmente instalable, el software libre ofrece una amplia gama de soluciones para la educación.
Para saber más
En los años 90, era realmente complicado utilizar un sistema operativo Linux y la mayoría de la cuota del mercado de los ordenadores personales estaba dominada por Windows. Encontrar drivers de Linux para el hardware que tenía tu equipo era casi una quimera dado que las principales compañías de hardware y de software no se molestaban en crear software para este sistema operativo, puesto que alimentaba la independencia de los usuarios con respecto a ellas mismas.
Afortunadamente, y gracias a la creciente presión de su comunidad de usuarios, estas situaciones pertenecen al pasado, y las compañías fabricantes de hardware han tenido que variar el rumbo. Hoy en día tenemos una gran cantidad de argumentos en los que nos podemos basar para dar el salto hacia cualquier sistema operativo basado en Linux. Tal y como podemos leer en educacionit.com, podemos encontrar las siguientes ventajas:
- Es seguro y respeta la privacidad de los usuarios: Aunque hay compañías linuxeras, como Oracle, Novell, Canonical, Red Hat o SUSE, el grueso de distribuciones y software Linux está mantenido por usuarios y colectivos sin ánimo de lucro. De esta forma, podemos confiar en que una comunidad que tiene detrás millones de usuarios, pueda validar el código fuente de cualquier de estas distribuciones, asegurándonos la calidad de las mismas, compartir posibles problemas de seguridad, y sobre todo, estar bien tranquilos con la privacidad y seguridad de nuestros datos e información personal, aspecto que debería ser crítico y determinante a la hora de trabajar con los datos de menores de edad en las escuelas y colegios.
- Es ético y socialmente responsable: La naturaleza de Linux y su filosofía de código abierto y libre hace posible que cualquier usuario con conocimientos pueda crear su propia distribución basada en otras o probar las decenas de versiones que nos podemos encontrar de una distribución Linux. Este es el caso de Ubuntu por ejemplo. Gracias a esta democratización de los sistemas operativos, incluso han podido aparecer en nuestras vidas nuevos dispositivos basados en software y hardware libre como Arduino y Raspberry Pi.
- Es personalizable: el código abierto permite su estudio, modificación y adaptación a las necesidades de los diferentes usuarios, teniendo así no un único producto sino una multiplicidad de distribuciones que satisfacen las necesidades de los diferentes colectivos a los que se dirijan. Especialmente útiles son las distribuciones educativas libres, que pueden ser adaptadas a las necesidades de las escuelas.
- Está basado en las necesidades de los usuarios y no en las de los creadores de hardware y software
- Es gratis. La mayoría de las distribuciones Linux son gratuitas y de libre descarga
- Es fácil de usar. Una de las barreras que durante años ha evitado a muchos usar Linux es su complejidad. Las distribuciones orientadas al consumo doméstico cumplen los estándares de simplicidad y necesidades que cualquier usuario sin conocimientos de tecnología pueda necesitar. El entorno gráfico es sencillo, intuitivo, e incluso se puede customizar para que se pueda parecer a los más conocidos como Windows y MacOS. Además, vienen con la mayoría de aplicaciones que cualquier usuario puede necesitar: ofimáticas, edición de audio y vídeo y navegación por Internet.
- Es suficiente. Tiene su propio market de aplicaciones. Como el resto de sistemas operativos ya sea para ordenadores o dispositivos móviles, también podemos encontrar un lugar único donde poder descargar cientos de aplicaciones para todos los gustos y necesidades.
Por estas razones, el software libre se ha expandido por toda la comunidad educativa en los últimos años de manera exponencial. Un buen ejemplo de lo que estamos hablando es Bookstack, este sistema de edición de contenidos para cursos que utiliza Aularagón así como el uso de Moodle como plataforma de enseñanza y aprendizaje. En cuanto a sistema operativo para ordenadores, en Aragón disponemos de nuestra propia distribución Linux: Vitalinux EDU. Tal y como podemos leer desde su página web: Vitalinux EDU (DGA) es la distribución Linux elegida por el Gobierno de Aragón para los centros educativos. Está basada en Vitalinux, que se define como un proyecto para llevar el Software Libre a personas y organizaciones facilitando al máximo su instalación, uso y mantenimiento. En concreto Vitalinux EDU (DGA) es una distribución Ubuntu (Lubuntu) personalizada para Educación, "tuneada" por los requisitos y necesidades de los propios usuarios de los centros y adaptada de forma personalizada a cada centro y a la que se ha añadido una aplicación cliente Migasfree. De ésta forma, obtenemos:
- Un Sistema Ligero. Permite "revivir" equipos obsoletos y "volar" en equipos modernos. Esto garantiza la sostenibilidad de un sistema que no consume recursos de hardware innecesariamente ni obliga a la sustitución del hardware cada poco tiempo en esa espiral de obsolescencia programada en la que se ha convertido el mercado tecnológico.
- Facilidad en la instalación y el uso del sistema mediante programas personalizados.
- Un Sistema que se adapta al centro y/o a cada aula o espacio, y no un centro que se adapta a un Sistema Operativo.
- Gestión de equipo y del software de manera remota y desatendida mediante un servidor Migasfree.
- Inventario de todo el hardware y software del equipo de una forma muy cómoda.
- Soporte y apoyo de una comunidad que crea, comparte e innova constantemente.
Financiado por el Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU