# Programación y robótica en Secundaria

# 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:**

<span style="font-weight: 400;">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.</span>

*<span style="font-weight: 400;">Vinculación con el Perfil de salida</span>*

<span style="font-weight: 400;">Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: CCL1, STEM1, STEM3, CD3, CPSAA3, CPSAA5, CE1, CE3.</span>

**Competencia específica de la materia Programación y Robótica 2:**

<span style="font-weight: 400;">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.</span>

*<span style="font-weight: 400;">Vinculación con el Perfil de salida</span>*

<span style="font-weight: 400;">Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: STEM2, STEM3, STEM5, CD5, CPSAA1, CE3, CCEC3.</span>

**Competencia específica de la materia Programación y Robótica 3:**

<span style="font-weight: 400;">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.</span>

*<span style="font-weight: 400;">Vinculación con el Perfil de salida</span>*

<span style="font-weight: 400;">Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: CCL1, STEM4, CD3, CCEC3, CCEC4.</span>

**Competencia específica de la materia Programación y Robótica 4:**

<span style="font-weight: 400;">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.</span>

*<span style="font-weight: 400;">Vinculación con el Perfil de salida</span>*

<span style="font-weight: 400;">Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: CP2, STEM1, STEM3, CD5, CPSAA5, CE3.</span>

**Competencia específica de la materia Programación y Robótica 5:**

<span style="font-weight: 400;">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.</span>

*<span style="font-weight: 400;">Vinculación con el Perfil de salida</span>*

<span style="font-weight: 400;">Esta competencia específica se conecta con los siguientes descriptores del Perfil de salida: STEM2, STEM5, CD4, CC4.</span>

{{@5685}}

# 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:

<p class="callout info">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)</p>

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.

{{@5685}}

# 1. Introducción al Pensamiento Computacional

# 1.1 Definiciones previas: conceptos básicos asociados

<span style="font-weight: 400;">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 </span>**codigoalfabetización**<span style="font-weight: 400;"> (</span>*<span style="font-weight: 400;">codeliteracy</span>*<span style="font-weight: 400;">) (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. </span>

<span style="font-weight: 400;">González ahonda en la concreción y diferenciación de conceptos importantes en la codigoalfabetización como son algoritmo y programa. Un </span>**algoritmo**<span style="font-weight: 400;"> 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 </span>**diagramas de flujo**<span style="font-weight: 400;">: 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).</span>

<span style="font-weight: 400;">El paso para convertir un algoritmo en un programa es el arte de codificar. La </span>**codificación**<span style="font-weight: 400;"> 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 “</span>**programa**<span style="font-weight: 400;">” 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 l</span>**enguajes de programación**<span style="font-weight: 400;">, 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.</span>

<span style="font-weight: 400;">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).</span>

<span style="font-weight: 400;">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.</span>

<span style="font-weight: 400;">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).</span>

**Bibliografía**

<span style="font-weight: 400;">Barrera, Lizardo (2013). </span>*<span style="font-weight: 400;">Algoritmos y programación para la enseñanza y aprendizaje de la matemática escolar.</span>*<span style="font-weight: 400;"> En SEMUR, Sociedad de Educación Matemática Uruguaya (Ed.), VII Congreso Iberoamericano de Educación Matemática (pp. 6680-6687). Montevideo, Uruguay: SEMUR.</span>

<span style="font-weight: 400;">Bers, M. U. (2017). </span>*<span style="font-weight: 400;">Coding as a playground: Programming and computational thinking in the early childhood classroom.</span>*<span style="font-weight: 400;"> Routledge.</span>

<span style="font-weight: 400;">Bocconi, S., Chioccariello, A., Dettori, G., Ferrari, A., &amp; Engelhardt, K. (2016). </span>*<span style="font-weight: 400;">Developing computational thinking in compulsory education-Implications for policy and practice</span>*<span style="font-weight: 400;"> (No. JRC104188). Joint Research Centre (Seville site).</span>

<span style="font-weight: 400;">Chatley, R., Donaldson, A., &amp; Mycroft, A. (2019). The next 7000 programming languages. </span>*<span style="font-weight: 400;">In Computing and Software Science,</span>*<span style="font-weight: 400;"> 250-282</span>

<span style="font-weight: 400;">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</span>

<span style="font-weight: 400;">Moschovakis, Y. N. (2001). What is an algorithm?. *In Mathematics unlimited—2001 and beyond* (pp. 919-936). Springer, Berlin, Heidelberg.</span>

<span style="font-weight: 400;">Ruiz Reinales, C., &amp; Bustamante, J. C. Pensamiento computacional en educación infantil y primaria: una revisión sistemática.</span>

<span style="font-weight: 400;">Zapata-Ros, M. (2015). Pensamiento computacional: Una nueva alfabetización digital. </span>*<span style="font-weight: 400;">Revista de Educación a Distancia (RED),</span>*<span style="font-weight: 400;"> (46).</span>

{{@5685}}

# 1.2 Pensamiento computacional:  evolución conceptual

<span style="font-weight: 400;">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</span>*<span style="font-weight: 400;">.</span>* <span style="font-weight: 400;">La autora argumenta no sólo lo que es el pensamiento computacional, sino también lo que no es:</span>

1. *<span style="font-weight: 400;">“Conceptualizing, not programming” (conceptualizar, no programar’). </span><span style="font-weight: 400;"> </span>*<span style="font-weight: 400;">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.</span>
2. *<span style="font-weight: 400;">“A way that humans, not computers, think” (‘una manera en que los humanos piensan, no las computadoras’).</span>*<span style="font-weight: 400;"> 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.</span>
3. *<span style="font-weight: 400;">“Fundamental, not rote skill” (habilidad básica, no puramente mecánica). </span>*<span style="font-weight: 400;">Se considera una habilidad básica aquella que cualquier ser humano tiene que poseer para poder desenvolverse en esta sociedad actual.</span>
4. *<span style="font-weight: 400;">“Complements and combines mathematical and engineering thinking” (se complementa y se combina con el pensamiento matemático e ingeniero). </span>*<span style="font-weight: 400;">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.</span>
5. *<span style="font-weight: 400;">“Ideas, not artifacts” (ideas, no artefactos). </span>*<span style="font-weight: 400;">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.</span>
6. *<span style="font-weight: 400;">“For everyone, everywhere” (para cualquiera, en cualquier parte). </span>*<span style="font-weight: 400;">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.</span>

<span style="font-weight: 400;">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).</span>

<span style="font-weight: 400;">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 “</span>*<span style="font-weight: 400;">Computer Science Teachers Association”</span>*<span style="font-weight: 400;"> (CSTA, 2011) y la “</span>*<span style="font-weight: 400;">International Society for Technology in Education</span>*<span style="font-weight: 400;">” (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 &amp; ISTE, 2011).</span>

<span style="font-weight: 400;">En 2012 la</span> <span style="font-weight: 400;">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). </span>

<span style="font-weight: 400;">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:</span>

1. <span style="font-weight: 400;">Abstracción y generalización de patrones (incluyendo modelos y simulaciones)</span>
2. <span style="font-weight: 400;">Procesamiento sistemático de la información</span>
3. <span style="font-weight: 400;">Sistemas de símbolos y representación</span>
4. <span style="font-weight: 400;">Noción algorítmica de control de flujo</span>
5. <span style="font-weight: 400;">Descomposición estructurada de problemas</span>
6. <span style="font-weight: 400;">Pensamiento iterativo, recursivo y paralelo</span>
7. <span style="font-weight: 400;">Lógica condicional</span>
8. <span style="font-weight: 400;">Limitadores de eficiencia y rendimiento</span>
9. <span style="font-weight: 400;">Depuración y detección sistemática de errores</span>

<span style="font-weight: 400;">Kafai y Burke</span> <span style="font-weight: 400;">(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.</span>

<span style="font-weight: 400;">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).</span>

<span style="font-weight: 400;">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).</span>

<span style="font-weight: 400;">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).</span>

**Bibliografía**

<span style="font-weight: 400;">Bers, M. U. (2017). </span>*<span style="font-weight: 400;">Coding as a playground: Programming and computational thinking in the early childhood classroom.</span>*<span style="font-weight: 400;"> Routledge.</span>

<span style="font-weight: 400;">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</span>

<span style="font-weight: 400;">CSTA &amp; 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](dehttp://csta.acm.org/Curriculum/sub/CurrFiles/CompThinkingFlyer.pdf)</span>

<span style="font-weight: 400;">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. </span>*<span style="font-weight: 400;">Research in Education and Learning Innovation Archives (REALIA), (23),</span>*<span style="font-weight: 400;"> 24-40.</span>

<span style="font-weight: 400;">Grover, S., &amp; Pea, R. (2013). Computational thinking in K–12: A review of the state of the field. </span>*<span style="font-weight: 400;">Educational researcher, 42(1),</span>*<span style="font-weight: 400;"> 38-43.</span>

<span style="font-weight: 400;">Kafai, Y. B., &amp; Burke, Q. (2014). </span>*<span style="font-weight: 400;">Connected code: why children need to learn programming.</span>*<span style="font-weight: 400;"> MIT Press.</span>

<span style="font-weight: 400;">Olabe, X. B., Basogain, M. Á. O., &amp; Basogain, J. C. O. (2015). Pensamiento Computacional a través de la Programación: Paradigma de Aprendizaje. </span>*<span style="font-weight: 400;">Revista de Educación a Distancia (RED), </span>*<span style="font-weight: 400;">(46)</span>

<span style="font-weight: 400;">Royal Society (Great Britain). (2012</span>*<span style="font-weight: 400;">). Shut down or restart?: The way forward for computing in UK schools.</span>*<span style="font-weight: 400;"> Royal Society.</span>

<span style="font-weight: 400;">Ruiz Reinales, C., &amp; Bustamante, J. C. Pensamiento computacional en educación infantil y primaria: una revisión sistemática.</span>

<span style="font-weight: 400;">ScratchEd Team \[Portal Web\] (2015). Computational Thinking webinars. Recuperado 2 de Junio de 2015, de </span>[<span style="font-weight: 400;">http://scratched.gse.harvard.edu/content/1488</span>](http://scratched.gse.harvard.edu/content/1488)<span style="font-weight: 400;"> </span>

<span style="font-weight: 400;">Wing, J. M. (2006). Computational thinking. </span>*<span style="font-weight: 400;">Communications of the ACM, 49</span>*<span style="font-weight: 400;">(3), 33-35.</span>

<span style="font-weight: 400;">Wing, J. M. (2008). Computational thinking and thinking about computing. </span>*<span style="font-weight: 400;">Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences, 366</span>*<span style="font-weight: 400;">(1881), 3717-3725.</span>

**<span style="font-weight: 400;">Wing, J. M. (2017). Computational thinking’s influence on research and education for all. </span>*<span style="font-weight: 400;">Italian Journal of Educational Technology, 25</span>*<span style="font-weight: 400;">(2), 7–14.</span>**

<span style="font-weight: 400;">Zhang, L., &amp; Nouri, J. (2019). A systematic review of learning computational thinking through Scratch in K-9. </span>*<span style="font-weight: 400;">Computers &amp; Education,</span>*<span style="font-weight: 400;"> </span>*<span style="font-weight: 400;">141,</span>*<span style="font-weight: 400;"> 103607.</span>

{{@5685}}

# 1.3 Componentes del Pensamiento Computacional 

<span style="font-weight: 400;">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:</span>

1. <span style="font-weight: 400;">**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.</span>
2. <span style="font-weight: 400;">**Algoritmos**: un algoritmo está escrito para ser entendido por humanos y es una secuencia de instrucciones o conjunto de reglas para solucionar un problema. </span>
3. <span style="font-weight: 400;">**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.</span>
4. <span style="font-weight: 400;">**Patrones**: estamos rodeados de patrones. Ser capaces de identificar patrones nos permitirá hacer predicciones, crear reglas y resolver problemas más generales</span>
5. <span style="font-weight: 400;">**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. </span>
6. <span style="font-weight: 400;">**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. </span>

<span style="font-weight: 400;">Y a continuación las aproximaciones:</span>

1. <span style="font-weight: 400;">**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.</span>
2. <span style="font-weight: 400;">**Creación** (‘Creating’): Programar es un proceso creativo que implica tanto originalidad como la generación de un producto final valioso.</span>
3. <span style="font-weight: 400;">**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.</span>
4. <span style="font-weight: 400;">**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. </span>
5. <span style="font-weight: 400;">**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”.</span>

<span style="font-weight: 400;">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</span>***”***<span style="font-weight: 400;">) 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:</span>

1. <span style="font-weight: 400;">Formular problemas de un modo que se haga posible utilizar un ordenador y otras máquinas en su resolución</span>
2. <span style="font-weight: 400;">Automatizar soluciones a través del pensamiento algorítmico (una serie de pasos discretos y ordenados)</span>
3. <span style="font-weight: 400;">Organizar lógicamente y analizar datos</span>
4. <span style="font-weight: 400;">Identificar, analizar e implementar posibles soluciones con el objetivo de lograr la combinación más efectiva y eficiente de pasos y recursos</span>
5. <span style="font-weight: 400;">Representar datos a través de abstracciones tales como modelos y simulaciones</span>
6. <span style="font-weight: 400;">Generalizar y transferir este proceso de solución de problemas a una amplia variedad de situaciones</span>

<span style="font-weight: 400;">Otra aproximación distinta es la que realizó el grupo Google for Education (2014), detallando cuales son los 4 fases de procesos cognitivos</span> <span style="font-weight: 400;">que trabajan como una rueda circular :</span>

1. <span style="font-weight: 400;">Descomposición de un problema o tarea en pasos discretos</span>
2. <span style="font-weight: 400;">Reconocimiento de patrones (regularidades)</span>
3. <span style="font-weight: 400;">Generalización de dichos patrones y abstracción (descubrir las leyes o principios que causan dichos patrones)</span>
4. <span style="font-weight: 400;">Diseño algorítmico (desarrollar instrucciones precisas para resolver el problema y sus análogos)</span>

<span style="font-weight: 400;">En el mismo artículo se argumenta que el pensamiento computacional implica una serie de habilidades, incluyendo:</span>

1. <span style="font-weight: 400;">Formular problemas de una manera que nos permita usar un ordenador y otras herramientas para ayudar a resolverlos</span>
2. <span style="font-weight: 400;">Organizar y analizar de forma lógica un grupo de datos.</span>
3. <span style="font-weight: 400;">Representación de datos a través de abstracciones como modelos y simulaciones</span>
4. <span style="font-weight: 400;">Soluciones automatizadas a través del pensamiento algorítmico (una serie de pasos ordenados)</span>
5. <span style="font-weight: 400;">Identificar, analizar e implementar posibles soluciones con el objetivo de lograr la combinación más eficiente y efectiva de pasos y recursos</span>
6. <span style="font-weight: 400;">Generalizar y transferir este proceso de resolución de problemas a una amplia variedad de problemas</span>

<span style="font-weight: 400;">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:</span>

1. <span style="font-weight: 400;">Confianza al desenvolverse bien en la complejidad</span>
2. <span style="font-weight: 400;">Persistencia al trabajar con problemas difíciles</span>
3. <span style="font-weight: 400;">Ser más tolerante con respecto a la ambigüedad</span>
4. <span style="font-weight: 400;">Capacidad de hacer frente a problemas abiertos (sin una solución concreta y evidente)</span>
5. <span style="font-weight: 400;">Capacidad de comunicarse y trabajar con otros para llegar a una meta-solución común</span>

<span style="font-weight: 400;">Y aún van más allá asegurando que los conceptos de pensamiento computacional no son solo los procesos mentales (por ejemplo, abstracción, diseño de algoritmos, descomposición, reconocimiento de patrones, etc.) sino que también producen resultados tangibles (por ejemplo, automatización, representación de datos, generalización de patrones, etc.) asociados con la resolución de problemas en computación. Estos se definen de la siguiente manera:</span>

1. <span style="font-weight: 400;">Abstracción: identificación y extracción de información relevante para definir las ideas principales</span>
2. <span style="font-weight: 400;">Diseño de algoritmos: creación de una serie ordenada de instrucciones para resolver problemas similares o para realizar una tarea</span>
3. <span style="font-weight: 400;">Automatización: Tener computadoras o máquinas para hacer tareas repetitivas.</span>
4. <span style="font-weight: 400;">Análisis de datos: dar sentido a los datos mediante la búsqueda de patrones o el desarrollo de ideas </span>
5. <span style="font-weight: 400;">Recopilación de datos: Recopilación de información</span>
6. <span style="font-weight: 400;">Representación de datos: representación y organización de datos en gráficos, cuadros, palabras o imágenes apropiados</span>
7. <span style="font-weight: 400;">Descomposición: desglosar datos, procesos o problemas en partes más pequeñas y manejables </span>
8. <span style="font-weight: 400;">Paralelización: procesamiento simultáneo de tareas más pequeñas de una tarea más grande para alcanzar de manera más eficiente un objetivo común</span>
9. <span style="font-weight: 400;">Generalización de patrones: creación de modelos, reglas, principios o teorías de patrones observados para probar los resultados previstos</span>
10. <span style="font-weight: 400;">Reconocimiento de patrones: observación de patrones, tendencias y regularidades en los datos</span>
11. <span style="font-weight: 400;">Simulación: Desarrollando un modelo para imitar procesos del mundo real</span>

<span style="font-weight: 400;">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.</span>

<span style="font-weight: 400;">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:</span>

1. <span style="font-weight: 400;">Reformular un problema a uno parecido que sepamos resolver por reducción, encuadrarlo, transformar, simular</span>
2. <span style="font-weight: 400;">Pensar Recursivamente</span>
3. <span style="font-weight: 400;">Procesar en Paralelo</span>
4. <span style="font-weight: 400;">Interpretar código como datos y datos como código</span>
5. <span style="font-weight: 400;">Generalizar análisis dimensional</span>
6. <span style="font-weight: 400;">Reconocer ventajas y desventajas del solapamiento</span>
7. <span style="font-weight: 400;">Reconocer coste y potencia de tratamiento indirecto y llamada a proceso</span>
8. <span style="font-weight: 400;">Juzgar un programa por simplicidad de diseño</span>
9. <span style="font-weight: 400;">Utilizar Abstracción y descomposición en un problema complejo o diseño de sistemas complejos</span>
10. <span style="font-weight: 400;">Elegir una correcta representación o modelo para hacer tratable el problema</span>
11. <span style="font-weight: 400;">Seguridad en utilizarlo, modificarlo en un problema complejo sin conocer cada detalle</span>
12. <span style="font-weight: 400;">Modularizar ante múltiples usuarios</span>
13. <span style="font-weight: 400;">Prevención, protección, recuperarse de escenario peor caso</span>
14. <span style="font-weight: 400;">Utilizar razonamiento heurístico para encontrar la solución</span>
15. <span style="font-weight: 400;">Planificar y aprender en presencia de incertidumbre</span>
16. <span style="font-weight: 400;">Buscar, buscar y buscar más</span>
17. <span style="font-weight: 400;">Utilizar muchos datos para acelerar la computación</span>
18. <span style="font-weight: 400;">Límite tiempo/espacio y memoria/potencia de procesado</span>

<span style="font-weight: 400;">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. </span>

<span style="font-weight: 400;">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).</span>

**Bibliografía**

<span style="font-weight: 400;">Astrachan, O., &amp; Briggs, A. (2012). The CS principles project. ACM Inroads, 3(2), 38-42.  
</span>

<span style="font-weight: 400;">Bers, M. U. (2017). </span>*<span style="font-weight: 400;">Coding as a playground: Programming and computational thinking in the early childhood classroom.</span>*<span style="font-weight: 400;"> Routledge.</span>

<span style="font-weight: 400;">DFE, U. (2013). National curriculum in England: computing programmes of study. Retrieved July, 16, 2014.</span>

<span style="font-weight: 400;">Google for Education. (2014). Exploring Computational Thinking. Recuperado 15 de octubre de 2018, de Google for Education website: </span>[<span style="font-weight: 400;">https://edu.google.com/resources/programs/exploring-computational-thinking/</span>](https://edu.google.com/resources/programs/exploring-computational-thinking/)<span style="font-weight: 400;"> </span>

<span style="font-weight: 400;">Kong, S. C., Lai, M., &amp; Sun, D. (2020). Teacher development in computational thinking: Design and learning outcomes of programming concepts, practices and pedagogy. </span>*<span style="font-weight: 400;">Computers &amp; Education, 151,</span>*<span style="font-weight: 400;"> 103872.</span>

<span style="font-weight: 400;">Olabe, X. B., Basogain, M. Á. O., &amp; Basogain, J. C. O. (2015). Pensamiento Computacional a través de la Programación: Paradigma de Aprendizaje. </span>*<span style="font-weight: 400;">Revista de Educación a Distancia (RED), </span>*<span style="font-weight: 400;">(46)</span>

<span style="font-weight: 400;">Ruiz Reinales, C., &amp; Bustamante, J. C. Pensamiento computacional en educación infantil y primaria: una revisión sistemática.</span>

<span style="font-weight: 400;">Wing, J. M. (2006). Computational thinking. </span>*<span style="font-weight: 400;">Communications of the ACM, 49</span>*<span style="font-weight: 400;">(3), 33-35.</span>

{{@5685}}

# 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:**

- <span style="font-weight: 400;">Estrategias, técnicas y marcos de resolución de problemas en diferentes contextos y sus fases.</span>
- <span style="font-weight: 400;">Emprendimiento, resiliencia, perseverancia y creatividad para abordar problemas desde una perspectiva interdisciplinar.</span>
- <span style="font-weight: 400;">Algorítmica y diagramas de flujo.</span>

**Relación con las competencias específicas:**

- <span style="font-weight: 400;">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.</span>

**Relación con los criterios de evaluación:**

- <span style="font-weight: 400;">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.</span>

{{@5685}}

# 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](https://libros.catedu.es/books/programacion-y-robotica-en-secundaria/page/13-componentes-del-pensamiento-computacional): **razonamiento lógico, pensamiento algorítmico, descomposición, patrones, abstracción y evaluación sistemática**.

<span style="font-weight: 400;">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:</span>

1. <span style="font-weight: 400;">Interpretación del enunciado </span>
2. <span style="font-weight: 400;">Diagrama de flujo</span>
3. <span style="font-weight: 400;">Codificación en lenguaje de programación</span>

**Enunciado**

*<span style="font-weight: 400;">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. </span>*

*<span style="font-weight: 400;">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.</span>*

**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:

1. Pedir primero número y asegurarnos de que sea un número
2. Pedir segundo número y asegurarnos de que sea un número
3. Pedir una operación y asegurarnos de que sea una de las permitidas
4. Si es una suma, realizo la operación de suma de los dos números y saco resultado por pantalla
5. Si es una resta, realizo la operación de resta de los dos números y saco resultado por pantalla
6. Si es una multiplicación, realizo la operación de multiplicación de los dos números y saco resultado por pantalla
7. 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
8. 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.

{{@5685}}

# 2. Diagramas de Flujo

# 2.1 Qué son y cómo crear diagramas de flujo

{{@6259}}

Esta explicación se ha extraído del curso de Aularagón:[ Fundamentos de programación estructurada con Pseint y Scratch](https://libros.catedu.es/books/fundamentos-de-programacion-estructurada-con-pseint-y-scratch/page/diagramas-de-flujo)

{{@5685}}

# 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.**
    - <span style="font-weight: 400;">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.</span>
    - <span style="font-weight: 400;">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.</span>

**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.

- <span style="font-weight: 400;">Estrategias, técnicas y marcos de resolución de problemas en diferentes contextos y sus fases.</span>
- <span style="font-weight: 400;">Emprendimiento, resiliencia, perseverancia y creatividad para abordar problemas desde una perspectiva interdisciplinar.</span>

**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.

- <span style="font-weight: 400;">Algorítmica y diagramas de flujo.</span>
- <span style="font-weight: 400;">Autoconfianza e iniciativa: el error, la reevaluación y la depuración de errores como parte del proceso de aprendizaje.</span>

{{@5685}}

# Situación de aprendizaje 2 . Pon un diagrama de flujo en tu vida cotidiana

<span style="font-weight: 400;">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.</span>

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](https://docs.google.com/presentation/d/1Oq8aTdyV_x4NdO--9kPqPyxqcPWL9PondHFy9Mv71Zg/edit?usp=sharing)

[![Símbolos básicos con diagramas de flujo - Presentaciones de Google.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/simbolos-basicos-con-diagramas-de-flujo-presentaciones-de-google.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/simbolos-basicos-con-diagramas-de-flujo-presentaciones-de-google.png)

<span style="font-weight: 400;">*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.</span>

<span style="font-weight: 400;">Algunas de las ideas que se pueden facilitar podrían ser</span><span style="font-weight: 400;">: ¿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?</span>

**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.

<span style="font-weight: 400;">[![FLOWCHARTS - COMPUTATIONAL THINKING - Presentaciones de Google.png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/flowcharts-computational-thinking-presentaciones-de-google.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/flowcharts-computational-thinking-presentaciones-de-google.png)</span>

{{@5685}}

# 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 d**e 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.*

<span style="font-weight: 400;">Así como en el siguiente criterio de evaluación:</span>

- **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.*

<span style="font-weight: 400;">Y por último, también lo podemos encontrar en la concreción de los saberes básicos:</span>

- <span style="font-weight: 400;">**Bloque 2. B. Comunicación y difusión de ideas:** h*erramientas digitales para la elaboración, publicación y difusión de documentación técnica e información multimedia relativa a proyectos.*</span>

#### <span style="font-weight: 400;">Enunciado de situación de aprendizaje 3</span>

<span style="font-weight: 400;">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.</span>

<span style="font-weight: 400;">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.</span>

<span style="font-weight: 400;">[![PENSAMIENTO COMPUTACIONAL y LOMLOE - Asociación Psicopedagogía de Aragón - Presentaciones de Google.png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/pensamiento-computacional-y-lomloe-asociacion-psicopedagogia-de-aragon-presentaciones-de-google.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/pensamiento-computacional-y-lomloe-asociacion-psicopedagogia-de-aragon-presentaciones-de-google.png)</span>

{{@5685}}

# Situación de aprendizaje 4. Adivinando el número secreto

<span style="font-weight: 400;">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:</span>

- <span style="font-weight: 400;">Se generará un número aleatorio entre 1 y 100</span>
- <span style="font-weight: 400;">Se preguntará al usuario para que intente acertarlo</span>
- <span style="font-weight: 400;">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</span>
- <span style="font-weight: 400;">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</span>
- Si lo adivina mandar un mensaje de felicitaciones
- Preguntar si quiere volver a jugar, y en tal caso vuelta a empezar

##### **SOLUCIÓN**

[![FLOWCHARTS - COMPUTATIONAL THINKING - Presentaciones de Google (1).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/flowcharts-computational-thinking-presentaciones-de-google-1.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/flowcharts-computational-thinking-presentaciones-de-google-1.png)

{{@5685}}

# 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](https://www.mit.edu/)), 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](https://scratch.mit.edu/) y a partir de aquí tendremos dos opciones:

- [crearnos una cuenta ](https://scratch.mit.edu/join)y crear todos nuestros programas en [la zona de creación que tienen online](https://scratch.mit.edu/projects/editor/). 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](https://scratch.mit.edu/download) 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í](https://libros.catedu.es/link/6261#bkmrk-%C2%BFpor-qu%C3%A9-y-c%C3%B3mo-inst).

[![Scratch - Scratch Offline Editor.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/scratch-scratch-offline-editor.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/scratch-scratch-offline-editor.png)

En la página Web de Scratch hay muchos otros recursos para ayudar a aprender Scratch:

- [proyectos ya realizados](https://scratch.mit.edu/explore/projects/all) que pueden inspirar tus propias ideas
- [tutoriales](https://scratch.mit.edu/ideas) 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](https://libros.catedu.es/books/ensena-pensamiento-computacional-con-scratch) de **CATEDU**

{{@5685}}

# 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:

[![FLOWCHARTS - COMPUTATIONAL THINKING - Presentaciones de Google (2).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/flowcharts-computational-thinking-presentaciones-de-google-2.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/flowcharts-computational-thinking-presentaciones-de-google-2.png)

La experiencia de juego debería ser como la siguiente:

<center id="bkmrk--0"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="402" scrolling="no" src="https://scratch.mit.edu/projects/743853472/embed" width="485"></iframe>

</center>Esta primera resolución del problema tendría un código fuente parecido al siguiente:

[![Situación de aprendizaje 5. Programando la calculadora básica v1 on Scratch.png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/situacion-de-aprendizaje-5-programando-la-calculadora-basica-v1-on-scratch.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/situacion-de-aprendizaje-5-programando-la-calculadora-basica-v1-on-scratch.png)

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:

[![Situación de aprendizaje 5. Programando la calculadora básica v2 on Scratch.png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/situacion-de-aprendizaje-5-programando-la-calculadora-basica-v2-on-scratch.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/situacion-de-aprendizaje-5-programando-la-calculadora-basica-v2-on-scratch.png)

Y la experiencia de juego sería así:

<center id="bkmrk--5"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="402" scrolling="no" src="https://scratch.mit.edu/projects/743866321/embed" width="485"></iframe>

</center>**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:

<center id="bkmrk--10"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="402" scrolling="no" src="https://scratch.mit.edu/projects/743869177/embed" width="485"></iframe>

</center>{{@5685}}

# 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:

1. 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.
2. 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:

[![FLOWCHARTS - COMPUTATIONAL THINKING - Presentaciones de Google (3).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/flowcharts-computational-thinking-presentaciones-de-google-3.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/flowcharts-computational-thinking-presentaciones-de-google-3.png)

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:

1. 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.
2. Programar el requisito de que el número esté comprendido entre 1 y 10, ambos inclusive
3. 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:

[![Situación de aprendizaje 6. Tablas de multiplicar on Scratch (1).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/situacion-de-aprendizaje-6-tablas-de-multiplicar-on-scratch-1.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/situacion-de-aprendizaje-6-tablas-de-multiplicar-on-scratch-1.png)

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:

[![Situación de aprendizaje 6. Tablas de multiplicar on Scratch (1).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/situacion-de-aprendizaje-6-tablas-de-multiplicar-on-scratch-1.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/situacion-de-aprendizaje-6-tablas-de-multiplicar-on-scratch-1.png)

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:

[![Situación de aprendizaje 6. Tablas de multiplicar on Scratch (3).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/situacion-de-aprendizaje-6-tablas-de-multiplicar-on-scratch-3.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/situacion-de-aprendizaje-6-tablas-de-multiplicar-on-scratch-3.png)

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.

[![img4.png (640×480).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/img4-png-640480.png)Fuente: https://www.monografias.com/trabajos104/simplificacion-circuitos-logicos-algebra-conmutacion/img4.png](https://libros.catedu.es/uploads/images/gallery/2022-10/img4-png-640480.png)

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:

<center id="bkmrk--4"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="402" scrolling="no" src="https://scratch.mit.edu/projects/746099667/embed" width="485"></iframe>

</center><center id="bkmrk--5"></center><center id="bkmrk--6"></center><center id="bkmrk-opci%C3%B3n-2.-visualizan">####   


####   


#### 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:

</center><center id="bkmrk--7"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="402" scrolling="no" src="https://scratch.mit.edu/projects/746109344/embed" width="485"></iframe>

</center>{{@5685}}

# 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)

<center id="bkmrk--1">[![Situación de aprendizaje 7. Adivina el número secreto v1 on Scratch (1).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/situacion-de-aprendizaje-7-adivina-el-numero-secreto-v1-on-scratch-1.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/situacion-de-aprendizaje-7-adivina-el-numero-secreto-v1-on-scratch-1.png)[![Situación de aprendizaje 7. Adivina el número secreto v1 on Scratch.png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/situacion-de-aprendizaje-7-adivina-el-numero-secreto-v1-on-scratch.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/situacion-de-aprendizaje-7-adivina-el-numero-secreto-v1-on-scratch.png)</center><center id="bkmrk--2"></center>##### **SOLUCIÓN COMENTADA**

A continuación la solución al programa con una serie de aclaraciones:

1. 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
2. Antes de comenzar a intentar adivinar el número, tendremos que resetear el contador de INTENTOS a 0
3. Instrucción para generar el número aleatorio
4. Resetear la variable ACERTADO a N, ya que la pondremos a S cuando hayamos acertado
5. Comenzamos con los tres IF para preguntar si es mayor, menor o hemos acertado y dar información al usuario
6. Poner a S la variable ACERTADO en caso de acertar, para romper el bucle de seguir intentándolo
7. 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

<center id="bkmrk--3">[![Situación de aprendizaje 7. Adivina el número secreto v1 on Scratch (2).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/situacion-de-aprendizaje-7-adivina-el-numero-secreto-v1-on-scratch-2.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/situacion-de-aprendizaje-7-adivina-el-numero-secreto-v1-on-scratch-2.png)</center>Y a continuación la experiencia del juego:

<center id="bkmrk--4"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="402" scrolling="no" src="https://scratch.mit.edu/projects/747509834/embed" width="485"></iframe>

</center>#### 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

{{@5685}}

# 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:**

[![Situación de aprendizaje 8. Art Coding v1 on Scratch.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/situacion-de-aprendizaje-8-art-coding-v1-on-scratch.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/situacion-de-aprendizaje-8-art-coding-v1-on-scratch.png)

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:

[![Situación de aprendizaje 8. Art Coding v1 on Scratch (1).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/situacion-de-aprendizaje-8-art-coding-v1-on-scratch-1.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/situacion-de-aprendizaje-8-art-coding-v1-on-scratch-1.png)

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:

[![Situación de aprendizaje 8. Art Coding v1 on Scratch (2).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/situacion-de-aprendizaje-8-art-coding-v1-on-scratch-2.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/situacion-de-aprendizaje-8-art-coding-v1-on-scratch-2.png)

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:

[![Situación de aprendizaje 8. Art Coding v1 on Scratch (3).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/situacion-de-aprendizaje-8-art-coding-v1-on-scratch-3.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/situacion-de-aprendizaje-8-art-coding-v1-on-scratch-3.png)

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:

[![Situación de aprendizaje 8. Art Coding v1 on Scratch (5).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/situacion-de-aprendizaje-8-art-coding-v1-on-scratch-5.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/situacion-de-aprendizaje-8-art-coding-v1-on-scratch-5.png)

El programa tendría una ejecución parecido a lo siguiente:

<center id="bkmrk--5"><iframe allowfullscreen="allowfullscreen" frameborder="0" height="402" scrolling="no" src="https://scratch.mit.edu/projects/747122106/embed" width="485"></iframe>

</center>{{@5685}}

# 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”***.

<p class="callout info">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.</p>

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!

{{@5685}}

# 5. Arduino

# Microcontrolador: Arduino

Visitando la [web](https://arduino.cl/que-es-arduino/) 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.

<details id="bkmrk-un-poco-de-historia-"><summary>Un poco de historia</summary>

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.

</details><details id="bkmrk-arduino-desde-la-mir"><summary>Arduino desde la mirada del alumnado</summary>

<table border="1" style="border-collapse: collapse; width: 26.6667%; height: 190px;"><tbody><tr><td style="width: 100%;">[![ArduinoUno.png](https://libros.catedu.es/uploads/images/gallery/2022-06/scaled-1680-/arduinouno.png)](https://libros.catedu.es/uploads/images/gallery/2022-06/arduinouno.png)</td></tr></tbody></table>

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.

</details>Para conocer más sobre Arduino puedes acudir a los siguientes enlaces, pertenecientes al libro [Programa Arduino Mediante Código](https://libros.catedu.es/books/programa-arduino-mediante-codigo) de **CATEDU**

{{@5685}}

# Sensores

<span style="color: #000000;">{{@7009}} </span>

<span style="color: #000000;">Los contenidos de está página están extraídos del curso <span style="color: #3598db;">[Programa Arduino mediante Código](https://libros.catedu.es/books/programa-arduino-mediante-codigo)</span> de Aularagón.</span>

{{@5685}}

# Actuadores

{{@7010}}

Los contenidos de está página están extraídos del curso [Programa Arduino mediante Código](https://libros.catedu.es/books/programa-arduino-mediante-codigo) de Aularagón.

{{@5685}}

# 6. Diseño 2D de circuitos electrónicos: EasyEDA

# Diseño de circuitos electrónicos: EasyEDA

<p class="callout info">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. </p>

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](https://easyeda.com/ "EasyEda"), pulsando sobre **<span style="color: #236fa1;">*Register.* </span>**

**<span style="color: #236fa1;">*[![EasyEDA - Online PCB design & circuit simulator.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyeda-online-pcb-design-circuit-simulator.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyeda-online-pcb-design-circuit-simulator.png)*</span>**

<span style="color: #236fa1;"><span style="color: #000000;">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*, <span style="background-color: #ffffff;">**Standard Online Editor.**</span></span></span>

<span style="color: #236fa1;"><span style="color: #000000;">[![accesoEasyEDA.jpg](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/accesoeasyeda.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-11/accesoeasyeda.jpg)</span></span>

<span style="color: #236fa1;"><span style="color: #000000;">Es el momento de crear un nuevo proyecto (*File--&gt;New--&gt;Project*) donde indicaremos el titulo del proyecto y una breve descripción.</span></span>

<span style="color: #236fa1;"><span style="color: #000000;">[![NewProjectEasyEDA.jpg](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/newprojecteasyeda.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-11/newprojecteasyeda.jpg)</span></span>

<span style="color: #236fa1;"><span style="color: #000000;">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. </span></span>

<span style="color: #236fa1;"><span style="color: #000000;">[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (1).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-1.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-1.png)</span></span>

<span style="color: #236fa1;"><span style="color: #000000;">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. </span></span>

<span style="color: #236fa1;"><span style="color: #000000;">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. </span></span>

<span style="color: #236fa1;"><span style="color: #000000;">[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (2).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-2.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-2.png)</span></span>

<span style="color: #236fa1;"><span style="color: #000000;">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.</span></span>

<span style="color: #236fa1;"><span style="color: #000000;">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. </span></span>

<span style="color: #236fa1;"><span style="color: #000000;">[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (3).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-3.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-3.png)</span></span>

<span style="color: #236fa1;"><span style="color: #000000;">Y por último el Zumbador (buzzer)</span></span>

<span style="color: #236fa1;"><span style="color: #000000;">[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (4).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-4.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-4.png)</span></span>

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:

[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (5).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-5.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-5.png)

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)

{{@5685}}

# 7. ArduinoBlocks

# ¿Qué es Arduino Blocks?

{{@5126}}

Los contenidos de esta página se han extraído del curso[ Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) ](https://libros.catedu.es/books/rover-marciano-con-arduinoblocks-e-internet-de-las-cosas-iot)de Aularagón.

{{@5685}}

# Crear cuenta

{{@5973}}

Los contenidos de esta página se han extraído del curso[ Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) ](https://libros.catedu.es/books/rover-marciano-con-arduinoblocks-e-internet-de-las-cosas-iot)de Aularagón.

{{@5685}}

# Cuentas alumnado

{{@5127}}

Los contenidos de esta página se han extraído del curso[ Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) ](https://libros.catedu.es/books/rover-marciano-con-arduinoblocks-e-internet-de-las-cosas-iot)de Aularagón.

{{@5685}}

# Arduino blocks connector

{{@5128}}

Los contenidos de esta página se han extraído del curso[ Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) ](https://libros.catedu.es/books/rover-marciano-con-arduinoblocks-e-internet-de-las-cosas-iot)de Aularagón.

{{@5685}}

# Empezando un proyecto

{{@5129}}

Los contenidos de esta página se han extraído del curso[ Rover Marciano con Arduinoblocks e Internet de las Cosas (IoT) ](https://libros.catedu.es/books/rover-marciano-con-arduinoblocks-e-internet-de-las-cosas-iot)de Aularagón.

{{@5685}}

# 8. Robótica Educativa

# Objetivos y contenidos

<span style="font-weight: 400;">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…</span>

<span style="font-weight: 400;">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. </span>

{{@5685}}

# Materiales

Para la realización de esta parte del curso, se requieren los siguientes materiales, incluidos en el kit de préstamo de CATEDU.

[![Recibidos (440) - raguado@juandelanuza.org - Correo de Colegio Juan de Lanuza.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/recibidos-440-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/recibidos-440-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)

- 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 <span style="color: #e03e2d;">**5v** </span>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

[![20221119_072027.jpg](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/20221119-072027.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-11/20221119-072027.jpg)

{{@5685}}

# 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.

<details id="bkmrk-saberes-b%C3%A1sicos%2C-com"><summary>Saberes básicos, competencias específicas y criterios de evaluación del bloque de robótica</summary>

**Objetivos didácticos:**

- <span style="font-weight: 400;">Conocer y analizar el funcionamiento de los semáforos, distinguiendo el de peatones y el de coches.</span>
- <span style="font-weight: 400;">Comprender el funcionamiento de los actuadores en los semáforos y los principios existentes en la electrónica que los constituye.</span>
- <span style="font-weight: 400;">Programar mediante software tanto la recogida de datos como el accionamiento de dispositivos físicos de forma que respondan al comportamiento deseado.</span>
- <span style="font-weight: 400;">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.</span>

**Elementos curriculares involucrados (Saberes básicos):**

<span style="font-weight: 400;">Bloque A: Proceso de resolución de problemas.</span>

- <span style="font-weight: 400;">Estrategias de búsqueda crítica de información durante la investigación y definición de problemas planteados.</span>
- <span style="font-weight: 400;">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.</span>

<span style="font-weight: 400;">Bloque B: Comunicación y difusión de ideas.</span>

- <span style="font-weight: 400;">Aplicaciones CAD en dos dimensiones para la representación de esquemas y circuitos electrónicos. (Uso de Tinkercad)</span>

<span style="font-weight: 400;">Bloque C: Pensamiento computacional. Programación y robótica.</span>

- <span style="font-weight: 400;">Algorítmica y diagramas de flujo.</span>
- <span style="font-weight: 400;">Sistemas de control programado. Montaje físico y programación sencilla de dispositivos.</span>
- <span style="font-weight: 400;">Fundamentos de la robótica. Montaje, control programado de robots de manera física.</span>
- <span style="font-weight: 400;">Autoconfianza e iniciativa: el error, la reevaluación y la depuración de errores como parte del proceso de aprendizaje.</span>

<span style="font-weight: 400;">Bloque D: Tecnología sostenible.</span>

- <span style="font-weight: 400;">Desarrollo tecnológico: creatividad, innovación, investigación, obsolescencia e impacto social y ambiental. Ética y aplicaciones de las tecnologías emergentes.</span>

**Relación con las competencias específicas:**

- <span style="font-weight: 400;">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.</span>
- <span style="font-weight: 400;">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.</span>
- <span style="font-weight: 400;">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.</span>
- <span style="font-weight: 400;">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.</span>
- <span style="font-weight: 400;">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.</span>

**Relación con los criterios de evaluación:**

- **CE.E.1.**

<span style="font-weight: 400;">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.</span>

- **CE.E.2.**

<span style="font-weight: 400;">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.</span>

- **CE.E.3.**

<span style="font-weight: 400;">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.</span>

- **CE.E.4.**

<span style="font-weight: 400;">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.</span>

- **CE.E.5.**

<span style="font-weight: 400;">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.</span>

</details>**Situación de aprendizaje 9: [Semáforo adaptado.](https://libros.catedu.es/books/programacion-y-robotica-en-secundaria/page/situacion-de-aprendizaje-9-semaforo-adaptado)**

<span style="font-weight: 400;">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.</span>

**Situación de aprendizaje 10: [Montando un sistema de aparcamiento](https://libros.catedu.es/books/programacion-y-robotica-en-secundaria/page/situacion-de-aprendizaje-10-sistema-de-aparcamiento-para-coches)**

<span style="font-weight: 400;">Programación con Arduino y posterior prototipado de un sistema de aparcamiento por ultrasonidos con avisador visual y sonoro.</span>

**Situación de aprendizaje 11:[ Creando un sistema de alarma](https://libros.catedu.es/books/programacion-y-robotica-en-secundaria/page/situacion-de-aprendizaje-11-sistema-de-alarma-intrusion)**

<span style="font-weight: 400;">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.</span>

**Situación de aprendizaje 12: [Creando un túnel de lavado con sensores](https://libros.catedu.es/books/programacion-y-robotica-en-secundaria/page/ejercicio-final-tunel-de-lavado-con-sensores)**

<span style="font-weight: 400;">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.</span>

<span style="font-weight: 400;">.</span>

{{@5685}}

# Situación de aprendizaje 9: Semáforo adaptado

##### <span style="font-weight: 400;">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.</span>

##### <span style="font-weight: 400;">  
![semaforo.jpg](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/semaforo.jpg)</span>

<table border="1" id="bkmrk-componentes-arduino-" style="border-collapse: collapse; width: 100%; height: 89.3907px;"><tbody><tr style="height: 29.7969px;"><td class="align-center" rowspan="3" style="width: 50.0618%; height: 89.3907px;"><p class="callout info">COMPONENTES</p>

</td><td style="width: 49.9382%; height: 29.7969px;"><p class="callout info">**Arduino Uno**</p>

<p class="callout info"> **[![ArduinoUno.png](https://libros.catedu.es/uploads/images/gallery/2022-06/scaled-1680-/arduinouno.png)](https://libros.catedu.es/uploads/images/gallery/2022-06/arduinouno.png)**</p>

</td></tr><tr style="height: 29.7969px;"><td style="width: 49.9382%; height: 29.7969px;"><p class="callout info">**Tira leds NeoPixel**</p>

<p class="callout info">**[![TIraNeopixel.jpg](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/tiraneopixel.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-11/tiraneopixel.jpg)**</p>

</td></tr><tr style="height: 29.7969px;"><td style="width: 49.9382%; height: 29.7969px;"><p class="callout info">**Zumbador**</p>

<p class="callout info">**r[![Zumbadorrecortado.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/zumbadorrecortado.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/zumbadorrecortado.png)**</p>

</td></tr><tr><td style="width: 50.0618%;">  
</td><td style="width: 49.9382%;"><p class="callout info">**Conectores 5v y Gnd**</p>

<p class="callout info">**[![Recibidos (442) - raguado@juandelanuza.org - Correo de Colegio Juan de Lanuza.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/recibidos-442-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/recibidos-442-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)**</p>

</td></tr></tbody></table>

<p class="callout success">**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: **<span style="color: #e03e2d;">rojo</span>**, **<span style="color: #2dc26b;">verde</span>** y **<span style="color: #f1c40f;">ámbar</span>**. 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 **<span style="color: #e03e2d;">rojo</span>**. </p>

Para todos nuestros prototipos, vamos a utilizar una **herramienta** de **diseño 2D** con la que representaremos nuestro esquema de conexiones.


<details id="bkmrk-dise%C3%B1o-2d-para-todos"><summary>Diseño 2D</summary>

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.

<p class="callout info">Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando [aquí](https://libros.catedu.es/link/7618#bkmrk-page-title "EasyEda").</p>

[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool.png)

Como podemos observar en nuestro esquemático, vamos a conectar dos actuadores a nuestro Arduino. Ambos tienen un pin a **GND** y otro a **<span style="color: #e03e2d;">5V</span>**, 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.

</details>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.

<details id="bkmrk-construcci%C3%B3n-arduino"><summary>Construcción</summary>

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.

[![20221119_074429.jpg](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/20221119-074429.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-11/20221119-074429.jpg)

</details><details id="bkmrk-programaci%C3%B3n-por-blo"><summary>Programación - Inicialización de componentes</summary>

Representamos lo primero de todo un diagrama de flujo que nos ayude a comprender el comportamiento de nuestro proyecto:

[![Bitbloq Robotics - Documento sin título.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/bitbloq-robotics-documento-sin-titulo.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/bitbloq-robotics-documento-sin-titulo.png)

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.

[![ArduinoBlocks.png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks.png)

y haremos lo mismo con la tira led de NeoPixel, que la encontraremos en Visualización, NeoPixel.

[![ArduinoBlocks (1).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks-1.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks-1.png)

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 <span style="color: #e03e2d;">rojo</span>.*
- ***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.

[![ArduinoBlocks (5).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-5.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-5.png)

</details>Para crear funciones, debemos abrir el menú de funciones y arrastrar el bloque al área de trabajo:

[![ArduinoBlocks (5).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks-5.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks-5.png)

<details id="bkmrk-programaci%C3%B3n---funci"><summary>Programación - Funciones</summary>

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 **<span style="color: #2dc26b;">pines 1 y 2 para</span>** encender en color **<span style="color: #2dc26b;">verde</span>**. Los **<span style="background-color: #ffffff; color: #e67e23;">pines 3 y 4 para</span>** el color **<span style="color: #e67e23;">ámbar</span>** y por último, los**<span style="color: #e03e2d;"> pines 5 y 6 para</span>** el color **<span style="color: #e03e2d;">rojo</span>**. 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.*

***[![ArduinoBlocks (6).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks-6.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks-6.png)***

***encender ámbar :*** Esablecemos pixeles de las posiciones 3 y 4 a color ámbar, los mostramos y lo mantenemos así durante 3 segundos.*

***[![ArduinoBlocks (7).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks-7.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks-7.png)***

***encender rojo:*** *Esablecemos pixeles de las posiciones 5 y 6 a color rojo, los mostramos y lo mantenemos así durante 10 segundos.*

[![ArduinoBlocks (8).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks-8.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks-8.png)

***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.*

***[![ArduinoBlocks (10).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks-10.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks-10.png)***

</details>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***

***[![ArduinoBlocks (11).png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks-11.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks-11.png)***

Con esta actualización ya estariamos cumpliendo los requisitos del enunciado, y nuestro programa finalmente quedaría del siguiente modo:

[![ArduinoBlocks (6).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-6.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-6.png)

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/hXE8xaI2WKQ" width="560"></iframe>

{{@5685}}

# 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. 

[![sistema de aparcamiento - Búsqueda de Google.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/sistema-de-aparcamiento-busqueda-de-google.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/sistema-de-aparcamiento-busqueda-de-google.png)

<table border="1" id="bkmrk-componentes-arduino-" style="border-collapse: collapse; width: 100%; background-color: #ffffff; border-color: #ffffff; border-style: none;"><tbody><tr><td style="width: 49.9383%;"><p class="callout info">COMPONENTES</p>

</td><td style="width: 49.9383%;"><p class="callout info">**Arduino Uno**</p>

<p class="callout info">**[![ArduinoUno.png](https://libros.catedu.es/uploads/images/gallery/2022-06/scaled-1680-/arduinouno.png)](https://libros.catedu.es/uploads/images/gallery/2022-06/arduinouno.png)**</p>

</td></tr><tr><td style="width: 49.9383%;">  
</td><td style="width: 49.9383%;"><p class="callout info">**Zumbador**</p>

<p class="callout info">**[![Zumbadorrecortado.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/zumbadorrecortado.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/zumbadorrecortado.png)**</p>

</td></tr><tr><td style="width: 49.9383%;">  
</td><td style="width: 49.9383%;"><p class="callout info">**Sensor Ultrasonidos**</p>

<p class="callout info">**[![ultrasonido.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/ultrasonido.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/ultrasonido.png)**</p>

</td></tr><tr><td style="width: 49.9383%;">  
</td><td style="width: 49.9383%;"><p class="callout info">**Conector 5v**</p>

<p class="callout info">**[![Recibidos (442) - raguado@juandelanuza.org - Correo de Colegio Juan de Lanuza.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/recibidos-442-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/recibidos-442-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)**</p>

</td></tr></tbody></table>

<p class="callout success">**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.   
</p>

<details id="bkmrk-dise%C3%B1o-2d-%C2%A0"><summary>Diseño 2D</summary>

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.

<p class="callout info">Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando [aquí](https://libros.catedu.es/link/7618#bkmrk-page-title "EasyEda").</p>

Incorporamos el Arduino, buzzer y sensor ultrasónico a nuestro proyecto resultando del siguiente modo:

[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (7).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-7.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-7.png)

Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando [aquí](https://libros.catedu.es/link/7618#bkmrk-page-title "EasyEda").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 <span style="color: #e03e2d;">**5V,** <span style="color: #000000;">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.</span></span>

</details>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.

<details id="bkmrk-construcci%C3%B3n-%C2%A0"><summary>Construcción</summary>

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.

[![20221119_084032.jpg](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/20221119-084032.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-11/20221119-084032.jpg)

</details><details id="bkmrk-programaci%C3%B3n---inici"><summary>Programación - Inicialización del puerto serie y asignación de pines</summary>

Como venimos haciendo hasta ahora, representamos un sencillo diagrama de flujo que nos ayude a comprender la ejecución del bucle:

[![Bitbloq Robotics - Documento sin título (1).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/bitbloq-robotics-documento-sin-titulo-1.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/bitbloq-robotics-documento-sin-titulo-1.png)

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".

[![Zumbador.png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks.png)

y haremos lo mismo con el sensor ultrasónico.

[![ArduinoBlocks.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks.png)

. 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.**

**[![ArduinoBlocks (3).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-3.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-3.png)**

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:

<table border="1" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 49.9359%;">[![ArduinoBlocks (2).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-2.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-2.png)</td><td style="width: 49.9359%;"> [![ArduinoBlocks (1).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-1.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-1.png)</td></tr></tbody></table>

</details>Para crear funciones, debemos abrir el menú de funciones y arrastra el bloque al área de trabajo:

[![funciones.png](https://libros.catedu.es/uploads/images/gallery/2022-10/scaled-1680-/arduinoblocks-5.png)](https://libros.catedu.es/uploads/images/gallery/2022-10/arduinoblocks-5.png)

<details id="bkmrk-programaci%C3%B3n-de-las-"><summary>Programación de las funciones</summary>

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:

[![ArduinoBlocks (4).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-4.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-4.png)

</details>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).

[![ArduinoBlocks (17).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-17.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-17.png)

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.

[![ArduinoBlocks (7).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-7.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-7.png)

En estos momentos podemos subir el programa a nuestro Arduino y conectar el puerto serial para ver los resultados del siguiente modo:

[![ArduinoBlocks (8).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-8.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-8.png)

[![ArduinoBlocks (9).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-9.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-9.png)

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--&gt;** entre 0 y 10 centímetros

**cerca--&gt;** de 11 a 30 centímetros

**lejos--&gt;** 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.**

**[![ArduinoBlocks (12).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-12.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-12.png)**

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 d**istancia 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**.

[![ArduinoBlocks (13).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-13.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-13.png)

y finalmente nuestro programa completo quedaría del siguiente modo:

[![ArduinoBlocks (14).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-14.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-14.png)

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/w0Hd0M3owI0" width="560"></iframe>

{{@5685}}

# 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. 

[![alarmaPIr.webp](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/alarmapir.webp)](https://libros.catedu.es/uploads/images/gallery/2022-11/alarmapir.webp)

<table border="1" id="bkmrk-componentes-arduino-" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 49.9383%;"><p class="callout info">COMPONENTES</p>

</td><td style="width: 49.9383%;"><p class="callout info">Arduino Uno</p>

<p class="callout info">[![ArduinoUno.png](https://libros.catedu.es/uploads/images/gallery/2022-06/scaled-1680-/arduinouno.png)](https://libros.catedu.es/uploads/images/gallery/2022-06/arduinouno.png)</p>

</td></tr><tr><td style="width: 49.9383%;">  
</td><td style="width: 49.9383%;"><p class="callout info">Sensor PIR</p>

<p class="callout info">[![PIR.webp](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/pir.webp)](https://libros.catedu.es/uploads/images/gallery/2022-11/pir.webp)</p>

</td></tr><tr><td style="width: 49.9383%;">  
</td><td style="width: 49.9383%;"><p class="callout info">Zumbador</p>

<p class="callout info">[![Zumbadorrecortado.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/zumbadorrecortado.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/zumbadorrecortado.png)</p>

</td></tr><tr><td style="width: 49.9383%;">  
</td><td style="width: 49.9383%;"><p class="callout info">Botón/Pulsador</p>

<p class="callout info">[![pushbutton.webp](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/pushbutton.webp)](https://libros.catedu.es/uploads/images/gallery/2022-11/pushbutton.webp)</p>

</td></tr><tr><td style="width: 49.9383%;">  
</td><td style="width: 49.9383%;"><p class="callout info">Conectores 5v y Gnd</p>

<p class="callout info">[![Recibidos (442) - raguado@juandelanuza.org - Correo de Colegio Juan de Lanuza.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/recibidos-442-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/recibidos-442-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)</p>

</td></tr></tbody></table>

<p class="callout success">**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. </p>

<p class="callout success">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.</p>

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.

<details id="bkmrk-dise%C3%B1o-2d-es-conveni"><summary>Diseño 2D</summary>

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.

<p class="callout info">Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando [aquí](https://libros.catedu.es/link/7618#bkmrk-page-title "EasyEda").</p>

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.

[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (8).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-8.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-8.png)

Como en los ejercicios anteriores, hemos añadido el resto de componentes y una vez cableado queda de la siguiente manera:

[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (9).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-9.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-9.png)

</details>Para la realización de este proyecto vamos a utilizar **Interrupciones**. Tomado de<span style="color: #e03e2d;"> <span style="text-decoration: underline;"><span style="color: #3598db; text-decoration: underline;">[**esta** ](https://www.luisllamas.es/que-son-y-como-usar-interrupciones-en-arduino/)</span></span></span>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.

<details id="bkmrk-construcci%C3%B3n-el-bot%C3%B3"><summary>Construcción</summary>

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.

[![Recibidos (445) - raguado@juandelanuza.org - Correo de Colegio Juan de Lanuza.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/recibidos-445-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/recibidos-445-raguado-at-juandelanuza-org-correo-de-colegio-juan-de-lanuza.png)

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.

</details><details id="bkmrk-programaci%C3%B3n---inici"><summary>Programación - Inicialización de variables e Interrupción</summary>

Una vez más representamos en un diagrama de flujo nuestro reto para simplificar su programación.

<table border="1" style="border-collapse: collapse; width: 100%; height: 29.7969px;"><tbody><tr style="height: 29.7969px;"><td style="width: 49.9359%; height: 29.7969px;">[![Bitbloq Robotics - Documento sin título (2).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/bitbloq-robotics-documento-sin-titulo-2.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/bitbloq-robotics-documento-sin-titulo-2.png)</td><td style="width: 49.9359%; height: 29.7969px;">[![Bitbloq Robotics - Documento sin título (3).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/bitbloq-robotics-documento-sin-titulo-3.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/bitbloq-robotics-documento-sin-titulo-3.png)</td></tr></tbody></table>

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.

[![ArduinoBlocks (15).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-15.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-15.png)

</details>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**.

[![ArduinoBlocks (16).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-16.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-16.png)

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 &lt;condición&gt; 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:

[![ArduinoBlocks (18).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-18.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-18.png)

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.

[![ArduinoBlocks (19).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-19.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-19.png)

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/MYiCP2Xnr5I" width="560"></iframe>

{{@5685}}

# Ejercicio Final: Túnel de lavado con sensores

#### Programación con Arduino y posterior prototipado de un sistema de lavado automático para coches.

[![tunellavado.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/tunellavado.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/tunellavado.png)

<table border="1" id="bkmrk-componentes-arduino-" style="border-collapse: collapse; width: 100%; height: 119.188px;"><tbody><tr style="height: 29.7969px;"><td style="width: 50.0618%; height: 29.7969px;"><p class="callout info">COMPONENTES</p>

</td><td style="width: 50.0618%; height: 29.7969px;"><p class="callout info">Arduino UNO</p>

<p class="callout info">[![image-1668252879858.jpg](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/image-1668252879858.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-11/image-1668252879858.jpg)</p>

</td></tr><tr style="height: 29.7969px;"><td style="width: 50.0618%; height: 29.7969px;">  
</td><td style="width: 50.0618%; height: 29.7969px;"><p class="callout info">Sensor de Ultrasonidos</p>

<p class="callout info">[![ultrasonido.png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/ultrasonido.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/ultrasonido.png)</p>

</td></tr><tr style="height: 29.7969px;"><td style="width: 50.0618%; height: 29.7969px;">  
</td><td style="width: 50.0618%; height: 29.7969px;"><p class="callout info">Tira leds NeoPixel</p>

<p class="callout info">[![zoomNeopixel.jpg](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/zoomneopixel.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-11/zoomneopixel.jpg)</p>

</td></tr><tr style="height: 29.7969px;"><td style="width: 50.0618%; height: 29.7969px;">  
</td><td style="width: 50.0618%; height: 29.7969px;"><p class="callout info">ServoMotor</p>

<p class="callout info">[![servocurso.jpg](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/servocurso.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-11/servocurso.jpg)</p>

</td></tr></tbody></table>

El acceso al túnel estará regulado por un semáforo (2 leds de la tira Neopixel) que permanecerá en <span style="color: #2dc26b;">verde </span>hasta que el vehículo se acerque justo a la posición donde debe parar. En este instante el semáforo cambiará a <span style="color: #e03e2d;">rojo, <span style="color: #000000;">y comenzará el proceso de lavado. </span></span>

<span style="color: #e03e2d;"><span style="color: #000000;">Durante el tiempo de lavado (6 segundos), el resto de leds de la tira, se irán encendiendo en color <span style="color: #3598db;">azul, </span>uno a uno cada segundo, indicando de este modo el progreso del servicio. </span></span>

<span style="color: #e03e2d;"><span style="color: #000000;">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 <span style="color: #2dc26b;">verde</span>.</span></span>

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.

<details id="bkmrk-dise%C3%B1o-2d-es-conveni"><summary>Diseño 2D</summary>

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.

<p class="callout info">Puedes encontrar un tutorial para crear tus diseños con EasyEDA pinchando [aquí](https://libros.catedu.es/link/7618#bkmrk-page-title "EasyEda").</p>

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.

[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (10).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-10.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-10.png)

[![EasyEDA(Standard) - A Simple and Powerful Electronic Circuit Design Tool (11).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-11.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/easyedastandard-a-simple-and-powerful-electronic-circuit-design-tool-11.png)

</details>A continuación vemos como programar el movimiento de un servo con **ArduinoBlocks.**

<details id="bkmrk-programaci%C3%B3n---servo"><summary>Programación - Servomotor</summary>

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.

[![ArduinoBlocks (20).png](https://libros.catedu.es/uploads/images/gallery/2022-11/scaled-1680-/arduinoblocks-20.png)](https://libros.catedu.es/uploads/images/gallery/2022-11/arduinoblocks-20.png)

</details>{{@5685}}

# 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](https://catedu.es/soporte-catedu/)

Los contenidos se distribuyen bajo licencia **Creative Commons** tipo **BY-NC-SA** excepto en los párrafos que se indique lo contrario.

[![image-1648462225402.gif](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648462225402.gif)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648462225402.gif)

[![image-1648462299882.png](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648462299882.png)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648462299882.png)

[![image-1648462361893.png](https://libros.catedu.es/uploads/images/gallery/2022-03/scaled-1680-/image-1648462361893.png)](https://libros.catedu.es/uploads/images/gallery/2022-03/image-1648462361893.png)

<sub>Financiado por el </sub><sub>Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU</sub>

[![logo.png](https://libros.catedu.es/uploads/images/gallery/2023-01/scaled-1680-/logo.png)](https://libros.catedu.es/uploads/images/gallery/2023-01/logo.png)

# Programación, robótica y accesibilidad

#### **<span style="color: #169179;">1.- Introducción</span>**

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.**

**[![opensource.png](https://libros.catedu.es/uploads/images/gallery/2022-12/scaled-1680-/opensource.png)](https://libros.catedu.es/uploads/images/gallery/2022-12/opensource.png)**

<details id="bkmrk-software-libre-cuand"><summary>Software libre</summary>

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](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 ](https://youtu.be/nlDVZ816zoI)para entender mejor el concepto.

<iframe allowfullscreen="allowfullscreen" height="314" src="https://www.youtube.com/embed/nlDVZ816zoI" width="560"></iframe>

</details>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.

#### **<span style="color: #169179;">2.- ARDUINO o LA ROBÓTICA ACCESIBLE</span>**

Arduino es una **plataforma de hardware y software libre**.

<details id="bkmrk-hardware-libre-esto-"><summary>Hardware libre</summary>

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<span style="font-size: 13.5pt; mso-bidi-font-size: 12.0pt; font-family: sans-serif;"> </span>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.

</details>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.

[![arduinosecundaria.png](https://libros.catedu.es/uploads/images/gallery/2022-12/scaled-1680-/arduinosecundaria.png)](https://libros.catedu.es/uploads/images/gallery/2022-12/arduinosecundaria.png)

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](https://dgafprofesorado.catedu.es/2019/09/25/robotiqueamos-experiencia-de-aproximacion-a-la-robotica-en-educacion-especial-cpee-angel-riviere/), 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](http://zaragozacpeeangelriviere.blogspot.com/search/label/ROB%C3%93TICA)

[![blogRobotiqueamos.jpg](https://libros.catedu.es/uploads/images/gallery/2022-12/scaled-1680-/blogrobotiqueamos.jpg)](https://libros.catedu.es/uploads/images/gallery/2022-12/blogrobotiqueamos.jpg)

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.**

<details id="bkmrk-filosof%C3%ADa-del-arduin"><summary>Filosofía del Arduino ver vídeo</summary>

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

<span style="font-weight: 400;">Para entender bien la filosofía de Arduino y el hardware libre, os recomendamos este documental de 30 minutos.[ Arduino the Documentary](http://www.vimeo.com/18390711)</span>

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="360" src="https://player.vimeo.com/video/18390711?h=b5844e7753" width="640"></iframe>

</details><details id="bkmrk-scratch%3A-software-li"><summary>Scratch: software libre para el desarrollo del pensamiento computacional</summary>

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

</details>#### **<span style="color: #169179;">3. BBC micro:bit y la Teoría del Cambio</span>**

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.

[![e74cc3a97963070daee67213f9ccf5268388bd01-790x635.webp](https://libros.catedu.es/uploads/images/gallery/2023-03/scaled-1680-/e74cc3a97963070daee67213f9ccf5268388bd01-790x635.webp)](https://libros.catedu.es/uploads/images/gallery/2023-03/e74cc3a97963070daee67213f9ccf5268388bd01-790x635.webp)*Tarjeta BBC micro:bit V1. Fuente: [https://microbit.org](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](https://archive.microbit.org/es/about/). La fundación basa sus actuaciones en su Teoría del Cambio,

<details id="bkmrk-teor%C3%ADa-del-cambio-y-"><summary>Teoría del cambio y más sobre microbit</summary>

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.

<p class="callout info">Uno de los objetivos de la Micro:bit Educational Foundation es llegar a 100 millones de escolares en todo el mundo.</p>

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](https://makecode.microbit.org/).

[![MakeCode.png](https://libros.catedu.es/uploads/images/gallery/2023-03/scaled-1680-/makecode.png)](https://libros.catedu.es/uploads/images/gallery/2023-03/makecode.png)*Captura de pantalla del editor MakeCode, [https://makecode.microbit.org/#](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](https://python.microbit.org/v/3), creada por Python Software Foundation, otra organización sin ánimo de lucro.

[MicroCode](https://microsoft.github.io/microcode/#H4sIACVEGGQAAwEAAP//AAAAAAAAAAA=) 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.

</details><details id="bkmrk-versiones-y-caracter"><summary>Versiones y características de micro:bit</summary>

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.

</details>#### **<span style="color: #169179;">4.- LA IMPORTANCIA DEL OPEN SOURCE / CÓDIGO ABIERTO EN EDUCACIÓN</span>**

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:

<details id="bkmrk-valores-gnu-%C2%A0compart"><summary>Valores GNU</summary>

##### <span style="font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol; mso-bidi-font-family: OpenSymbol; mso-bidi-font-weight: bold;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**Compartir**

<span style="font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol; mso-bidi-font-family: OpenSymbol;"><span style="mso-list: Ignore;"> </span></span>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**

<span style="font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol; mso-bidi-font-family: OpenSymbol;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';"> </span></span></span>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<span style="mso-spacerun: yes;"> </span>que toma decisiones unilaterales que nadie más puede cambiar.

##### **Independencia**

<span style="font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol; mso-bidi-font-family: OpenSymbol;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';"> </span></span></span>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**

<span style="font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol; mso-bidi-font-family: OpenSymbol;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';"><span style="font-family: OpenSymbol;"> </span></span><span style="font: 7.0pt 'Times New Roman';"> </span></span></span>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**

<span style="font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol; mso-bidi-font-family: OpenSymbol;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';"><span style="font-family: OpenSymbol;"> </span></span><span style="font: 7.0pt 'Times New Roman';"> </span></span></span>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**

<span style="font-family: OpenSymbol; mso-fareast-font-family: OpenSymbol; mso-bidi-font-family: OpenSymbol;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';"><span style="font-family: OpenSymbol;"> </span></span><span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Estable, seguro y fácilmente instalable, el software libre ofrece una amplia gama de soluciones para la educación.

</details><details id="bkmrk-etiqueta-en-los-a%C3%B1os"><summary>Para saber más</summary>

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:

1. 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.
2. **Facilidad en la instalación y el uso** del sistema mediante programas personalizados.
3. 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.
4. **Gestión de equipo y del software de manera remota** y desatendida mediante un servidor Migasfree.
5. **Inventario** de todo el hardware y software del equipo de una forma muy cómoda.
6. Soporte y apoyo de una **comunidad** que crea, comparte e innova constantemente.

</details><sub>Financiado por el </sub><sub>Ministerio de Educación y Formación Profesional y por la Unión Europea - NextGenerationEU</sub>

[![logo.png](https://libros.catedu.es/uploads/images/gallery/2023-01/scaled-1680-/logo.png)](https://libros.catedu.es/uploads/images/gallery/2023-01/logo.png)