Programa Arduino Mediante Codigo Arduino es una plataforma de electrónica abierta para la creación de prototipos basada en software y hardware flexibles y fáciles de usar. En este capítulo ofrecemos una guía de referencia rápida que… Introducción En este curso intenta hacer un barrido por los fundamentos de la electrónica y del Arduino los dos de la mano. El primer tema es una breve descripción del ARDUINO , siempre desde el punto de vista de la enseñanza del pensamiento computacional: su programación, simulación y comparación con otra opciones en robótica educativa. Un primer contacto práctico con las PROPUESTAS MÁS SENCILLAS y siempre sin perder la posibilidad de aprender los fundamentos de la electrónica. Dentro de esta línea entraremos en el mundo de la ELECTRÓNICA ANALÓGICA Un breve contacto con los principios de la ELECTRÓNICA DIGITAL LAS COMUNICACIONES, en especial con un Smartphone, tienen un buen componente innovador y motivador. CONTROL Y ROBÓTICA donde dejaremos la puerta abierta al mundo de posibilidades a los pequeños inventores. En este curso se utiliza una Shield llamada EDUBASICA pero sin esta Shield el curso se puede hacer, aunque con más cableado y electrónica. Se busca una metodología totalmente práctica sin conocimientos previos, pero para simplificar el cableado engorroso de circuitos complejos se utilizará un escudo: la edubásica , aunque se puede prescindir de ella en prácticas sencillas. Un poco de orden... el pensamiento computacional ¿Esto es una moda? No sabemos qué futuro van a encontrar nuestros alumnos, pero sí que sabemos que por ejemplo el Inglés será importante en su entorno futuro. Pues igual con las TIC, no es una moda, hace tiempo que está, y seguirá. El pensamiento computacional es el idioma de los ordenadores. Vale, y ... este curso ¿dónde se encuadra?¿para qué edad es recomendada? Buena pregunta... para enseñar el pensamiento computacional tenemos dos caminos, totalmente compatibles: La programación , que sería como enseñar un nuevo idioma. La robótica que sería como practicar este idioma con un nativo, luego antes hay que saber el idioma. En CATEDU hemos elaborado esta hoja de ruta de herramientas y edades, hay otras herramientas y otros criterios TOTALMENTE VALIDOS, este es el nuestro, lo que hemos elegido en los cursos de Aularagon y que enseñamos a continuación como orientación, pero no se debe de tomar al pie de la letra. Guía orientativa Tenemos un grupo Telegram Robótica Educativa en Aragón , https://t.me/roboticaeducativaaragon Robótica y accesibilidad 1.- Introducción Durante mucho tiempo la robótica fue patrimonio de personas y/o instituciones con alta capacidad económica (podían adquirir las placas con microcontroladores comerciales) y capacidad intelectual (podían entender y programar el funcionamiento de las mismas) siempre dentro de los límites establecidos por las marcas comerciales y lo que pudieran “desvelar” de su funcionamiento, vigilando siempre que la competencia no “robara” sus secretos y “copiara” sus soluciones. Todo esto saltó por los aires en torno a 2005 con la irrupción de un grupo de profesores y estudiantes jóvenes, que decidieron romper con esta dinámica, tratando de poner a disposición de su alumnado microcontroladores económicamente accesibles y que les permitieran conocer su funcionamiento, sus componentes, e incluso replicarlos y mejorarlos. Nacía  Arduino y el concepto de Hardware Open Source . Detrás de este concepto se encuentra la accesibilidad universal. En un proyecto Open Source todo el mundo puede venir, ayudar y contribuir, minimizando barreras económicas e intelectuales. Arduino traslada al hardware un concepto ya muy conocido en el ámbito del software, como es el software open source o software libre. Software libre Cuando los desarrolladores de software terminan su creación, tienen múltiples posibilidades de ponerlo a disposición de las personas, y lo hacen con condiciones específicas especificadas en una licencia. Esta licencia es un contrato entre el creador o propietario de un software y la persona que finalmente acabará utilizando este software. Como usuarios, es nuestro deber conocer las condiciones y permisos con las que el autor ha licenciado su producto, para conocer bajo qué condiciones podemos instalar y utilizar cada programa. Existen muchas posibilidades de licencias: software privativo, comercial, freeware, shareware, etc.. Nos centraremos aquí en la de software libre. GNU ( https://www.gnu.org ) es una organización sin ánimo de lucro que puso una primera definición disponible de lo que es software libre: Software libre significa que los usuarios del software tienen libertad (la cuestión no es el precio). Desarrollaron el sistema operativo GNU para que los usuarios pudiesen tener libertad en sus tareas informáticas. Para GNU, el software libre implica que los usuarios tienen las cuatro libertades esenciales: 1. ejecutar el programa. 2. estudiar y modificar el código fuente del programa. 3. redistribuir copias exactas. 4. distribuir versiones modificadas. En otras palabras, el software libre es un tipo de software que se distribuye bajo una licencia que permite a los usuarios utilizarlo, modificarlo y distribuirlo libremente . Esto significa que los usuarios tienen libertad de ejecutar el software para cualquier propósito, de estudiar cómo funciona el software y de adaptarlo a sus necesidades, de distribuir copias del software a otros usuarios y de mejorar el software y liberar las mejoras al público. El software libre se basa en el principio de la libertad de uso, y no en el principio de la propiedad. Esto significa que los usuarios tienen la libertad de utilizar el software de la manera que deseen, siempre y cuando no violen las condiciones de la licencia. El software libre es diferente del software propietario, que es el software que se distribuye con restricciones en su uso y modificación. El software propietario suele estar protegido por derechos de autor y solo se puede utilizar bajo los términos y condiciones especificados por el propietario del software. Recomendamos la visualización de este video para entender mejor el concepto. Más adelante, entorno a 2015, en Reino Unido, surgiría también la placa BBC Micro:bit , con la misma filosofía de popularizar y hacer accesible en este caso al alumnado de ese país la programación y la robótica. También hablaremos de ella. 2.- ARDUINO o LA ROBÓTICA ACCESIBLE Arduino es una plataforma de hardware y software libre . Hardware libre Esto significa que tanto la placa Arduino como el entorno de desarrollo integrado (IDE) son de código abierto. Arduino permite a los usuarios utilizar, modificar y distribuir tanto el software como el hardware de manera libre y gratuita, siempre y cuando se respeten las condiciones de las licencias correspondientes. El hardware libre es un tipo de hardware cuya documentación y diseño están disponibles de manera gratuita y libre para su modificación y distribución. Esto permite a los usuarios entender cómo funciona el hardware y adaptarlo a sus necesidades, así como también crear sus propias versiones modificadas del hardware. Arduino surge como solución al  elevado precio de los microcontroladores allá por el año 2005. En el ámbito de la educación, los microcontroladores solo se utilizaban en la etapa universitaria, y su coste era tan elevado que muchos proyectos de fin de carrera se quedaban únicamente en prototipos virtuales ya que las universidades no podían proveer a cada estudiante con un microprocesador, contando además que en el propio proceso de experimentación lo más habitual era que una mala conexión hiciera que se rompieran. Otro gran inconveniente era la dificultad de la programación . Cada fabricante entregaba su manual de programación, lo que hacía que de unos a otros no hubiera un lenguaje estándar, y la consecuente dificultad de interpretación. Además, su programación era a bajo nivel en lenguaje máquina. Generar una simple PWM requería una ardua y minuciosa secuenciación que podía llevar varias horas hasta conseguir el resultado deseado. Por este motivo, el enfoque de Arduino desde el principio fue ser Open Source tanto en hardware como en software. El desarrollo del hardware fue la parte más sencilla. Orientado a educación, sufre algunas modificaciones frente a los microprocesadores existentes para hacer más fácil su manejo y accesibilidad a cualquier sensor o actuador. El mayor esfuerzo se entregó en todas las líneas de código que hacían posible que ya no hubiera que programar a bajo nivel gracias al IDE de Arduino que incluía bibliotecas y librerías que estandarizaban los procesos y hacían tremendamente sencillo su manejo. Ahora el alumnado para mover un motor, ya no tenía que modificar las tramas de bits del procesador una a una, sino que bastaba con decir que quería moverlo en tal dirección, a tal velocidad, o a equis grados. Acabábamos de pasar de unos costes muy elevados y una programación muy compleja a tener una  placa accesible, open source y de bajo coste que además hacía muy accesible su programación y entendimiento , características fundamentales para su implantación en educación, hasta tal punto que su uso ya no era exclusivo de universidades, sino que se extiende a la educación secundaria. Este hecho es fundamental para el desarrollo del Pensamiento Computacional en el aula observándose que su accesibilidad y beneficios son tales, que alcanzan a centros con alumnado de toda tipología como la aplicación del pensamiento computacional y robótica en aulas con alumnos de necesidades especiales. Una vez más, aparece el concepto de accesibilidad asociado a esta filosofía Open Source. A este respecto, recomendamos la lectura de este interesante blog , que tiene por título: ROBOTIQUEAMOS...” Experiencia de aproximación a la robótica en Educación Especial (CPEE ÁNGEL RIVIÈRE). También recomendamos los trabajos robótica en Educación Especial (CPEE ÁNGEL RIVIÈRE):  http://zaragozacpeeangelriviere.blogspot.com/search/label/ROB%C3%93TICA Igualmente, la aparición de Arduino supone una gran facilidad para la aplicación de la robótica y la programación en la atención temprana, donde son numerosas sus aplicaciones desde ayudar a mitigar el déficit de atención en jóvenes autistas, hasta ayudar a socializar a los alumnos con dificultades para ello, o ayudar a alumnos de altas capacidades a desarrollar sus ideas. Por otro lado su accesibilidad económica lo ha llevado a popularizarse en países de todo el mundo , especialmente en aquellos cuyos sistemas educativos no disponen en muchas ocasiones de recursos suficientes, lo que supone en la práctica una democratización del conocimiento y superación de brecha digital. Filosofía del Arduino ver vídeo Arduino y su IDE son la primera solución que aparece en educación con todas las ventajas que hemos enumerado, y esto hace que todos los nuevos prototipados y semejantes tengan algo en común, siempre son compatibles con Arduino Para entender bien la filosofía de Arduino y  el hardware libre, os recomendamos este documental de 30 minutos. Arduino the Documentary Scratch: software libre para el desarrollo del pensamiento computacional Scratch es un lenguaje de programación visual desarrollado por el grupo Lifelong Kindergarten del MIT Media Lab. Scratch es un software libre. Esto significa que está disponible gratuitamente para todos y que se distribuye bajo una licencia de software libre, la Licencia Pública General de Massachusetts (MIT License). Esta licencia permite a los usuarios utilizar, modificar y distribuir el software de manera libre, siempre y cuando se respeten ciertas condiciones. Entre otras cosas, la licencia de Scratch permite a los usuarios utilizar el software para cualquier propósito, incluyendo fines comerciales. También permite modificar el software y distribuir las modificaciones, siempre y cuando se incluya una copia de la licencia y se indique que el software ha sido modificado. En resumen, Scratch es un software libre que permite a los usuarios utilizar, modificar y distribuir el software de manera libre y gratuita, siempre y cuando se respeten las condiciones de la licencia. De hecho, gracias a que está licenciado de esta forma, han surgido decenas de variaciones de Scratch para todo tipos de propósitos, eso sí, siempre educativos y relacionados con las enseñanzas de programación y robótica 3. BBC micro:bit y la Teoría del Cambio BBC micro:bit, a veces escrito como Microbit o Micro Bit, es un pequeño ordenador del tamaño de media tarjeta de crédito, creado en 2015 por la BBC con el fin de promover el desarrollo de la robótica y el pensamiento computacional entre la población escolar del Reino Unido. Actualmente su uso está extendido entre 25 millones de escolares de 7 a 16 años de más de 60 países. Tarjeta BBC micro:bit V1. Fuente: https://microbit.org . CC BY-SA 4.0. Aunque el proyecto fue iniciado por la BBC, su desarrollo fue llevado a cabo por 29 socios tecnológicos de primera línea. Por ejemplo, la implementación del Bluetooth integrado en la tarjeta corrió a cargo de la fundación propietaria de la marca, Bluetooth SIG, una asociación privada sin ánimo de lucro. El hardware y el software resultantes son 100% abiertos , y están gestionados por una fundación sin ánimo de lucro que comenzó a funcionar en el año 2016, la Micro:bit Educational Foundation . La fundación basa sus actuaciones en su Teoría del Cambio, Teoría del cambio y más sobre microbit Teoría del cambio puede resumirse en tres principios: El convencimiento de que la capacidad de comprender, participar y trabajar en el mundo digital es de vital importancia para las oportunidades de vida de una persona joven. La necesidad de emocionar y atraer a las personas jóvenes por medio de BBC micro:bit, especialmente a  las que podrían pensar que la tecnología no es para ellas. Diversificar a los estudiantes que eligen las materias STEM a medida que avanzan en la escuela y en sus carreras, para hacer crecer una fuente diversa de talento, impulsando la equidad social y contribuyendo a crear una tecnología mejor. Para desarrollar sus principios, la fundación trabaja en tres líneas de acción: El desarrollo de hardware y software que contribuyan a despertar el entusiasmo en las personas jóvenes hacia la tecnología y hacia las oportunidades que presenta. La creación de recursos educativos gratuitos y fáciles de usar que permitan al profesorado enseñar de forma atractiva y creativa. La colaboración con entidades asociadas que compartan una misma visión para ofrecer programas educativos de alto impacto en todo el mundo. Uno de los objetivos de la Micro:bit Educational Foundation es llegar a 100 millones de escolares en todo el mundo. En correspondencia con las líneas de acción y con los principios expuestos, el sistema resultante es muy económico: tanto las placas como los accesorios producidos por terceras empresas tienen un precio muy contenido. Además, dado el carácter abierto del proyecto, están disponibles algunos clones totalmente compatibles, como Elecrow Mbits o bpi:bit. Estos clones son incluso más potentes y económicos que la placa original. El universo micro:bit destaca por su alta integración de software y hardware : basta un clic de ratón para cargar las librerías necesarias para que funcione cualquier complemento robótico, como sensores, pantallas, tarjetas de Internet de las Cosas, robots, casas domóticas, etc. La programación de la placa se realiza desde un ordenador a través de un navegador cualquiera, estando disponibles 12 lenguajes de programación . De nuevo, por ser un sistema abierto, existen múltiples soluciones de programación, aunque las más común es MakeCode . Captura de pantalla del editor MakeCode, https://makecode.microbit.org/# . El sitio web MakeCode permite programar con bloques y también en Python y en Java, traduciendo de un lenguaje a otro instantáneamente. No se necesita ningún registro en la plataforma para poder programar. Los programas también pueden guardarse descargados en el ordenador compilados en código de máquina. Al subir de nuevo el programa al editor, se realiza una decompilación automática al lenguaje de bloques, Python o Java. Los programas guardados en código de máquina se pueden cargar directamente en micro:bit, que en el escritorio de un ordenador se maneja como una simple unidad de memoria USB. MakeCode contiene además múltiples recursos como tutoriales, vídeos, fichas de programación, cursos para el profesorado, ejemplos y propuestas de proyectos y experimentos, todo ello en varios idiomas y clasificado por edades desde los 7 años. Otra solución muy usada para programar micro:bit es MicroPython , creada por Python Software Foundation, otra organización sin ánimo de lucro. MicroCode permite que los más pequeños, a partir de los 6 años de edad, programen micro:bit mediante un sistema de fichas dispuestas en líneas de acción. Están disponibles un tutorial introductorio en 20 idiomas, una guía del usuario y muchos ejemplos. El proyecto es de código abierto. Micro:bit también es programable en Scratch con sólo añadir una extensión al editor. Todos los entornos de desarrollo descritos disponen de un simulador de micro:bit, por lo que ni siquiera resulta necesario disponer de una tarjeta física para aprender a programar. Una vez realizada la programación, la placa y sus complementos pueden funcionar desconectados del ordenador por medio de un cargador de móvil, una batería externa o un simple par de pilas alcalinas. Versiones y características de micro:bit A pesar de su pequeño tamaño, micro:bit es un sistema potente. Existen dos versiones de la placa. La más moderna, llamada micro:bit V2, tiene las siguientes características: Procesador de 64 MHz. 512 KB de RAM Flash y 128 KB de RAM. Matriz de 5 x 5 LED rojos. Dos pulsadores mecánicos y un tercer pulsador de apagado y reset. Un pulsador táctil. Micrófono y altavoz. Acelerómetro y brújula. Sensores de luz y de temperatura. Comunicación con otras placas por Bluetooth de bajo consumo. Alimentación a 3 V o por USB. 25 pines de entradas y salidas para conectar motorcitos, sensores, placas de Intenet de las Cosas, robots y, en general, cualquier otro tipo de accesorio. 200 mA de intensidad de corriente disponibles en las salidas para alimentar accesorios. 4.- LA IMPORTANCIA DEL OPEN SOURCE / CÓDIGO ABIERTO EN EDUCACIÓN La creación, distribución, modificación y redistribución del hardware y software libre así como su utilización, están asociados a una serie de valores que deberían ser explicados en la escuela a nuestros alumnos para dar una alternativa a la versión mercantilista de que cualquier creación es creada para obtener beneficios económicos. En GNU, pusieron especial énfasis en la difusión del software libre en colegios y universidades, promoviendo una serie de valores fundacionales: Valores GNU   Compartir El código fuente y los métodos del hardware y software libre son parte del conocimiento humano. Al contrario, el hardware software privativo es conocimiento secreto y restringido. El código abierto no es simplemente un asunto técnico, es un asunto ético, social y político. Es una cuestión de derechos humanos que la personas usuarias deben tener. La libertad y la cooperación son valores esenciales del código abierto. El sistema GNU pone en práctica estos valores y el principio del compartir, pues compartir es bueno y útil para el progreso de la humanidad. Las escuelas deben enseñar el valor de compartir dando ejemplo. El hardware y software libre favorece la educación pues permite compartir conocimientos y herramientas. Responsabilidad social       La informática, electrónica, robótica... han pasado a ser una parte esencial de la vida diaria. La tecnología digital está transformando la sociedad muy rápidamente y las escuelas ejercen una influencia decisiva en el futuro de la sociedad. Su misión es preparar al alumnado para que participen en una sociedad digital libre, mediante la enseñanza de habilidades que les permitan tomar el control de sus propias vidas con facilidad. El hardware y el software no debería estar bajo el poder de un desarrollador   que toma decisiones unilaterales que nadie más puede cambiar. Independencia       Las escuelas tienen la responsabilidad ética de enseñar la fortaleza, no la dependencia de un único producto o de una poderosa empresa en particular. Además, al elegir hardware y software libre, la misma escuela gana independencia de cualquier interés comercial y evita permanecer cautiva de un único proveedor. Las licencias de hardware y software libre no expiran Aprendizaje       Con el open source los estudiantes tienen la libertad de examinar cómo funcionan los dispositivos y programas y aprender cómo adaptarlos si fuera necesario. Con el software libre se aprende también la ética del desarrollo de software y la práctica profesional. Ahorro       Esta es una ventaja obvia que percibirán inmediatamente muchos administradores de instituciones educativas, pero se trata de un beneficio marginal. El punto principal de este aspecto es que, por estar autorizadas a distribuir copias de los programas a bajo costo o gratuitamente, las escuelas pueden realmente ayudar a las familias que se encuentran en dificultad económica, con lo cual promueven la equidad y la igualdad de oportunidades de aprendizaje entre los estudiantes, y contribuyen de forma decisiva a ser una escuela inclusiva. Calidad       Estable, seguro y fácilmente instalable, el software libre ofrece una amplia gama de soluciones para la educación. Para saber más En los años 90, era realmente complicado utilizar un sistema operativo Linux y la mayoría de la cuota del mercado de los ordenadores personales estaba dominada por Windows. Encontrar drivers de Linux para el hardware que tenía tu equipo era casi una quimera dado que las principales compañías de hardware y de software no se molestaban en crear software para este sistema operativo, puesto que alimentaba la independencia de los usuarios con respecto a ellas mismas. Afortunadamente, y gracias a la creciente presión de su comunidad de usuarios, estas situaciones pertenecen al pasado, y las compañías fabricantes de hardware han tenido que variar el rumbo. Hoy en día tenemos una gran cantidad de argumentos en los que nos podemos basar para dar el salto hacia cualquier sistema operativo basado en Linux. Tal y como podemos leer en educacionit.com, podemos encontrar las siguientes ventajas: Es seguro y respeta la privacidad de los usuarios: Aunque hay compañías linuxeras, como Oracle, Novell, Canonical, Red Hat o SUSE, el grueso de distribuciones y software Linux está mantenido por usuarios y colectivos sin ánimo de lucro. De esta forma, podemos confiar en que una comunidad que tiene detrás millones de usuarios, pueda validar el código fuente de cualquier de estas distribuciones, asegurándonos la calidad de las mismas, compartir posibles problemas de seguridad, y sobre todo, estar bien tranquilos con la privacidad y seguridad de nuestros datos e información personal, aspecto que debería ser crítico y determinante a la hora de trabajar con los datos de menores de edad en las escuelas y colegios. Es ético y socialmente responsable: La naturaleza de Linux y su filosofía de código abierto y libre hace posible que cualquier usuario con conocimientos pueda crear su propia distribución basada en otras o probar las decenas de versiones que nos podemos encontrar de una distribución Linux. Este es el caso de Ubuntu por ejemplo. Gracias a esta democratización de los sistemas operativos, incluso han podido aparecer en nuestras vidas nuevos dispositivos basados en software y hardware libre como Arduino y Raspberry Pi. Es personalizable: el código abierto permite su estudio, modificación y adaptación a las necesidades de los diferentes usuarios, teniendo así no un único producto sino una multiplicidad de distribuciones que satisfacen las necesidades de los diferentes colectivos a los que se dirijan. Especialmente útiles son las distribuciones educativas libres, que pueden ser adaptadas a las necesidades de las escuelas. Está basado en las necesidades de los usuarios y no en las de los creadores de hardware y software Es gratis. La mayoría de las distribuciones Linux son gratuitas y de libre descarga Es fácil de usar. Una de las barreras que durante años ha evitado a muchos usar Linux es su complejidad. Las distribuciones orientadas al consumo doméstico cumplen los estándares de simplicidad y necesidades que cualquier usuario sin conocimientos de tecnología pueda necesitar. El entorno gráfico es sencillo, intuitivo, e incluso se puede customizar para que se pueda parecer a los más conocidos como Windows y MacOS. Además, vienen con la mayoría de aplicaciones que cualquier usuario puede necesitar: ofimáticas, edición de audio y vídeo y navegación por Internet. Es suficiente. Tiene su propio market de aplicaciones. Como el resto de sistemas operativos ya sea para ordenadores o dispositivos móviles, también podemos encontrar un lugar único donde poder descargar cientos de aplicaciones para todos los gustos y necesidades. Por estas razones, el software libre se ha expandido por toda la comunidad educativa en los últimos años de manera exponencial. Un buen ejemplo de lo que estamos hablando es Bookstack , este sistema de edición de contenidos para cursos que utiliza Aularagón así como el uso de Moodle como plataforma de enseñanza y aprendizaje. En cuanto a sistema operativo para ordenadores, en Aragón disponemos de nuestra propia distribución Linux: Vitalinux EDU. Tal y como podemos leer desde su página web: Vitalinux EDU (DGA) es la distribución Linux elegida por el Gobierno de Aragón para los centros educativos. Está basada en Vitalinux, que se define como un proyecto para llevar el Software Libre a personas y organizaciones facilitando al máximo su instalación, uso y mantenimiento. En concreto Vitalinux EDU (DGA) es una distribución Ubuntu (Lubuntu) personalizada para Educación, "tuneada" por los requisitos y necesidades de los propios usuarios de los centros y adaptada de forma personalizada a cada centro y a la que se ha añadido una aplicación cliente Migasfree. De ésta forma, obtenemos: Un Sistema Ligero. Permite "revivir" equipos obsoletos y "volar" en equipos modernos. Esto garantiza la sostenibilidad de un sistema que no consume recursos de hardware innecesariamente ni obliga a la sustitución del hardware cada poco tiempo en esa espiral de obsolescencia programada en la que se ha convertido el mercado tecnológico. Facilidad en la instalación y el uso del sistema mediante programas personalizados. Un Sistema que se adapta al centro y/o a cada aula o espacio, y no un centro que se adapta a un Sistema Operativo. Gestión de equipo y del software de manera remota y desatendida mediante un servidor Migasfree. Inventario de todo el hardware y software del equipo de una forma muy cómoda. Soporte y apoyo de una comunidad que crea, comparte e innova constantemente. Lenguajes de programación El Arduino se puede programar  Por bloques (mBlock, Echidna, Scratch, SteamMakerblocks, Blocky....) Por código principalmente Arduino IDE  este curso se basa en utilizar Arduino en este lenguaje Guía de los lenguajes de programación para robots Tenemos un grupo Telegram Robótica Educativa en Aragón , https://t.me/roboticaeducativaaragon 1. Fundamentos del Arduino Arduino Arduino es una plataforma de electrónica abierta para la creación de prototipos basada en software y hardware flexibles y fáciles de usar. En este capítulo ofrecemos una guía de referencia rápida que siempre puede ser ampliada accediendo a la página oficial: www.arduino.cc Conozcámoslo ¿Qué es Arduino? Arduino es una tarjeta electrónica que integra básicamente a un microcontrolador y un conjunto de pines de conexión de entradas y salidas que permiten, mediante un determinado programa, interaccionar con el medio físico mediante sensores y actuadores electrónicos. De esta forma podrás crear tus propios proyectos tecnológicos, dotarlos de sensores que detecten magnitudes físicas como luz, calor, fuerza, etc… y en base a esa información, escribiendo un programa, activar otros dispositivos (actuadores) como pequeñas bombillas, ledes, servomotores, pequeños motores DC, relés, etc… Los sensores se conectan a los pines de entrada y los actuadores a los de salida. ¿Sabías que.... ?  Uno de los co-creadores de Arduino es Español, de Zaragoza: David Cuartielles +info ¿Qué es un microcontrolador? Es un circuito integrado que se puede programar, o sea que puede ejecutar las órdenes que tenga almacenadas en su memoria. Tiene las tres funciones principales de un computador: la unidad central de proceso, memoria y entradas y salidas. Arduino utiliza la marca ATMEL, y el modelo de microcontrolador depende del tipo de tarjeta, por ejemplo la tarjeta Arduino Uno utiliza el micro ATMEL MEGA 328P. Si quieres saber las entrañas de esta placa aquí ¿Qué se puede hacer con Arduino? ¿Algún ejemplo? Realmente el límite lo marca tu imaginación pero por dar alguna pista, podrías diseñar un sistema para la apertura y cierre de la puerta de un garaje, hacer un robot móvil que detecte objetos o que siga una línea negra, crear un detector de luz y oscuridad, implementar un termómetro, controlar un cilindro neumático, etc… En este manual tienes múltiples ejemplos de pequeños proyectos para el aula, aunque Arduino es una herramienta que también se utiliza en el ámbito profesional para monitorización de sensores y automatización a pequeña escala por su flexibilidad, fiabilidad y precio. ¿Qué son las entradas y salidas? Mediante los conectores de Arduino correspondientes a las entradas y salidas podemos comunicar nuestros programas con el “mundo exterior”. Si queremos leer el valor de la magnitud física medida por un sensor, por ejemplo una LDR que detecta el nivel de luminosidad, lo tendremos que hacer conectando el sensor a uno de los pines de entrada (en este caso analógicas) de la tarjeta. De esta forma con una simple instrucción de lectura en el programa, podremos obtener el valor de la magnitud física. Si nuestra intención es actuar o “hacer algo” una vez leído el valor del sensor, por ejemplo encender un led si el sensor de luminosidad detecta oscuridad, tendremos que conectar el actuador (en este caso el led) a un pin de salida que proporcionará la corriente necesaria para activarlo. En Arduino las entradas pueden ser analógicas o digitales y las salidas sólo digitales. Cada pin digital tiene doble función entrada o salida. En la zona de configuración del programa hay que indicar explícitamente mediante una instrucción cuál es función desempeña un determinado pin. ¿Dónde se conectan los sensores? ¿A las entradas analógicas o digitales? La mayoría de sensores miden señales analógicas y proporcionan una variación de voltaje dentro de un rango (normalmente de 0 a +5V) dependiendo de lo que varíe la magnitud física medida. Muchos sensores son resistivos a algo (luz, temperatura, humedad,…), es decir que varían su resistencia eléctrica con la magnitud física, pero mediante un sencillo montaje de divisor de tensión conseguimos una variación de voltaje apta para Arduino. Estos montajes los veremos en las prácticas. Veamos este ejemplo: El sensor LDR es una resistencia que cambia según la intensidad de la luz. La estrategia es colocar el LDR en un divisor de tensión con otra resistencia de valor parecido al promedio del que da el LDR (por ej 10k), y el valor del punto de unión proporciona una tensión entre 0 y 5V. Como es una señal analógica, la conectamos a una entrada analógica (en la figura al A6) Una vez realizadas las conexiones, si midieramos la salida del sensor con un voltímetro nos daría un valor decimal, por ejemplo un nivel de luz “intermedio” (rango de 0 a 5V) de un sensor de luz podría dar 3,3 voltios. Este tipo de información el microcontrolador no la entiende tal cual , sólo es capaz de interpretar números binarios (“0” ó “1”) por lo que para traducir los valores analógicos dispone internamente de un conversor analógico – digital que hará la conversión entre los dos sistemas, de forma que podremos tener valores discretos de la medida de los sensores analógicos. En el Arduino las entradas analógicas leen valores analógicos entre 0V y la alimentación (normalmente 5V) y los convierten en números entre 0 y 1023 (porque lo codifica en 10 dígitos binarios proporcionan  2 10 = 1024 combinaciones). Por ejemplo, si la entrada analógica lee un valor de 3,3V y la fuente de alimentación es 5V, la señal analógica que lee Arduino, haciendo una regla de 3, tiene un valor de 3,3 * 1023 / 5 = 675,18 = 675 Mapeo Para convertir estos valores 0 -1023 a valores más legibles, por ejemplo 0 - 100 para representarlo en % o 0-5 para que represente la medida en voltios ... veremos en programación la función mapear La mayoría de los sensores nos lo venden ya preparados montados en una pequeña placa electrónica y con circuitos integrados auxiliares para no tener que estar haciendo divisores de tensión. Pueden tener salida analógica o salida digital , que en este caso lo tenemos que conectar a cualquier entrada digital D0 hasta D13. Veamos el mismo ejemplo del LDR: Podemos comprar este módulo: Estos módulos proporcionan 3 pines: dos que son la alimentación, (0V, GND o - )  y (+5V V+o Vcc) y el pin que proporciona la lectura (Vout o D0 o I/O). En el caso de que sea un sensor que mida una magnitud analógica como en este caso la luz, suelen proporcionar un potenciómetro para determinar qué luminosidad se considera un 0 o un 1. ¿Hay sensores digitales que no estén en una placa electrónica? Las entradas digitales sin una placa electrónica son cuando las señales a leer son valores discretos. Por ejemplo queremos poner un pulsador o un interruptor que encienda un led. Hacemos un montaje que cuando se pulse, entren 5 voltios en el pin digital de entrada y cuando no se pulse que “entren” 0 voltios. De esta manera la lectura del pin digital de entrada será “HIGH” con 5 voltios o “LOW” con 0 voltios. Veremos más adelante que un interruptor no es un simple cable que conectamos a +5V o a 0V pues ¿Qué valor lee Arduino mientras levantamos el cable de un sitio a otro?, para ello veremos configuraciones Pull-up o Pull-down que se repiten en muchos sensores. ¿Qué son las salidas digitales etiquetadas con PWM (~)? Son salidas digitales que simulan una salida analógica . Las siglas significan Modulación por Ancho de Pulso (Pulse Width Modulation) es decir, proporcionan una onda cuadrada con un nivel alto (+5V) de “cierta” duración. Los valores PWM que podemos proporcionar pueden ir desde 0 a 255. Un valor bajo es una señal cuadrada donde el pulso es pequeño comparado con el periodo (ver figura primera señal) por lo tanto el Valor medio es bajo. Un valor mitad, es decir 255/2 = 127 o 128, corresponde a una señal cuadrada perfecta (ver figura segunda señal) por lo que el Valor medio es la mitad, si 5V es la tensión de alimentación, sería 2,5V. Un valor alto es una señal cuadrada donde el pulso es grande comparado con el periodo (ver figura la tercera señal) por lo tanto el Valor medio es alto Un valor 0 corresponde a un 0V analógico y sería una señal sin pulso Un valor 255 corresponde a la máxima tensión (la de alimentación (normalmente 5V).  La frecuencia es de 490Hz para los pines 3, 9, 10, 11 y de 980Hz para los pines 5 y 6 en un Arduino UNO o Nano De esta manera podemos simular señales analógicas, esto es muy útil para activar servomotores y llevarlos a una posición determinada o variar la luminosidad de un led o en los motores de los robots que vayan más deprisa o más despacio ¿Puedo accionar motores DC con Arduino? Si son motores muy, muy pequeños sí sería posible aunque no es recomendable, pueden dañar la placa. Los motores necesitan un consumo alto de corriente, sobre todo si tienen que mover cierta carga, por lo que se recomienda o bien utilizar una tarjeta Shield o extensión de Arduino que dispone de circuitería apta para proporcionar dicha corriente (transistores). En el curso Arduino con código u tiliza una Shield llamada Edubásica que dispone de un transistor y un circuito integrado LM293 para realizar esta función, además de otras ventajas para el aprendizaje de Arduino. En el curso Rover con Arduino utiliza Shield motor para NodeMCU Hardware Placa Arduino Arduino puede tomar información del entorno a través de sus pines de entrada de toda una gama de sensores y puede afectar aquello que le rodea controlando luces, motores y otros actuadores.  Arduino UNO R3 by GmedranoTIC on Sketchfab Entradas y salidas La placa Arduino UNO consta de: DIGITALES : 14 entradas/salidas digitales D0-D13 previamente hay que configurarlas o entradas o salidas. Que operan a 5 ó 0 voltios. Cada pin puede proporcionar o recibir como máximo 40 mA. Los pines D0 y D1 son compartidos por el puerto USB por lo tanto no se pueden utilizar si se está comunicando con el ordenador, están marcados como TX/RX (transmisión y recepción puerto serie). ANALOGICAS 6 entradas analógicas A0 al A5 con una resolución de 10 bits que proporcionan un número entero de 0 a 1023. Por defecto miden de 0 voltios (masa) hasta 5 voltios.  6 salidas pseudo-analógicas, en los pines digitales 3, 5, 6, 8, 10 y 11 son PWM (Pulse Width Modulation) y como hemos visto, pueden proporcionar una salida cuadrada que su valor medio puede estar entre 0 y 5V La intensidad de corriente que pueden proporcionar como salida son 20mA. Pines de la placa Elementos con los que podemos interactuar: (tomando como ejemplo la placa USB). Empezando en el sentido de las agujas del reloj desde el centro de la parte superior: Pin de referencia analógica (naranja). Señal de tierra digital (verde claro). Pines digitales 2-13 (verde). Pines digitales 0-1 / entrada y salida del puerto serie: TX/RX (azul) (estándar de comunicación serie IC2). Botón de reset (negro). Entrada del circuito del programador serie (marrón). Pines de entrada analógica 0-5 (azul oscuro). Pines de alimentación y tierra (naranja y naranja claro). Entrada de la fuente de alimentación externa (9-12V DC) X1 (gris). - Entrada fuente de alimentación externa  SV1: En las placas antiguas existen estos pines para conmutar si la alimentación es por el puerto USB, ahora lo realiza automáticamente un transistor MOSFET Puerto USB (rojo). Las placas: Arduino Diecimila, Arduino Duemilanove o UNO y Arduino Mega están basados en los microcontroladores Atmega168, Atmega 328 y Atmega1280 respectivamente. Trabajan a 16MHz, una velocidad suficiente para proyectos de robótica. Su capacidad de memoria Flash van desde 16k el Atmega168 hasta 128k Atmega1280, suficientes para que quepan nuestros programas de robótica. SHIELDS para Arduino Las llamadas Shields (escudos) para Arduino son tarjetas que se acoplan a la placa Arduino y añaden funciones y potencialidad a la placa Arduino.  Según mi criterio hay dos tipos de Shields: Las educativas y las no educativas Shields educativas Hay muchas Shields Educativas, vamos a ver unos pocos ejemplos La shield de l curso Arduino con código EDUBASICA, que integra algunos sensores y actuadores, pero lo que destaca es que además tiene la opción de conexión de motores o actuadores que requieran potencia, pues la placa Arduino por sí sola no puede proporcionar la suficiente intensidad para alimentar motores, relés o electroválvulas. El límite de intensidad que proporciona cada una de las salidas digitales es de 40 mA. Para poder activar estos dispositivos tendremos que montar un circuito externo adicional con transistores o circuitos integrados específicos para motores, como es el caso del LM293, que entregan la intensidad suficiente. Para facilitarnos la tarea esta placa integra un LM293 y un transistor de potencia, en total 5 salidas de potencia. La shield del curso ECHIDNA   que tiene integrados sensores y actuadores como el acelerómetro, sensor de luz, pulsadores, potenciómetro, altavoz...  y destaca el Joystick con la posibilidades de gamificación que se puede hacer con este elemento. También destaca el modo MAKEY que permite convertir los pines analógicos y los digitales D2 D3 en pines sensibles al tacto, con las mismas posibilidades que la placa MAKEY MAKEY ( ver curso Makey Makey ). Actualmente Echidna ya no fabrica esta Shield sino comercializa la ECHIDNA BLACK que no es una shield sino es autónoma (es decir, NO necesita la placa Arduino, la tiene integrada) . La shield del curso ARDUINO EN EL AULA, la TDR-STEAM   que tiene muchas posibilidades didácticas por su sensores (temperatura, humedad, luz, potenciometro, pulsador, receptor IR). La Shield k5864195 muy sencilla y barata, si lo que se busca son sensores sencillos (pulsadores, potenciómetro) y actuadores sencillos (altavoz, leds y display 7 segmentos). Shield Protoboard que simplemente tiene una placa para hacer los prototipos. Por ejemplo Curso de Domótica con Arduino Shields no educativas Es difícil elegir unos ejemplos de toda la variedad comercial que existe y tanta vitalidad de versiones ( ver lista ), preferimos que en caso de que necesites alguna función extra a tu Arduino, busques en ese momento cual es la mejor Shield que se adapta a tu proyecto. Es importante que sepas que existen Shields para todo, por ejemplo para... Agregar conectividad al Arduino, ya sea por red móvil (3G, 4G), por Wifi, Bluetooth o por cable Ethernet o incluso localización GPS. Agregar potencia a las salidas para conectar por ejemplo motores, como el de Edubásica pero más especializado en esta función y con más salidas pero por ejemplo la L293D ⨤7€ permite 4 motores, motor paso a paso, servo... . Shields con relés para conectar sensores y actuadores con tensión y así no tienes problemas de quemar el Arduino. Shields con batería que en el caso de corte de alimentación, permiten que el Arduino no se apague. Entrada y salida de  imagen con pantalla líquida y cámara Y encima se pueden apilar !! consiguiendo aumentar la capacidad de tu Arduino tanto como necesites (sin pasarte, pues pues alimentación del Arduino es limitada al menos que la Shield tenga su propia alimentación. via GIPHY Alimentación eléctrica de Arduino Uno de los aspectos claves para el buen funcionamiento de proyectos con Arduino, es que no incluyan elementos que consuman una intensidad superior a 200 mA como motores, relés, electroválvulas, etc.. Si los incluyen, entonces todo falla, debido a que no se ha alimentado correctamente la placa. Tenemos dos posibilidades para alimentar Arduino: A .- Mediante el cable USB conectado al ordenador: Cada pin proporciona 40 mA. El límite proporcionado por el USB es de 500 mA en total. Si conectamos demasiada carga, la placa Arduino suele tener un comportamiento anómalo pudiéndose resetear el micro. B .- Utilizando una fuente de alimentación externa conectada al Jack de Arduino (fuente de voltaje, adaptador de corriente, batería o portapilas) : El voltaje recomendado de la fuente externa está entre 7 y 12V. Tiene un diodo de protección para proteger la placa de cambio de polaridad accidental. La intensidad máxima que puede entregar Arduino a los actuadores que queramos controlar (servos, motores, relés,...) es de 1A, aunque una exposición prolongada a esta corriente puede estropear la placa. Lo recomendable son 500 mA. El pin serigrafiado con Vin proporciona directamente el voltaje de la fuente conectada al Jack de Arduino (menos la caída de tensión del diodo de protección) Desde ese pin podemos sacar un cable y alimentar a los actuadores que necesitemos. Por ejemplo, si alimentamos con una pila externa de 9V conectada al jack, en el pin Vin tendremos aproximadamente 9V (hay que restar la caída de tensión del diodo de protección que será de medio voltio). Además en los pines 5V y 3.3V dispondremos también de dichos voltajes aunque la fuente externa sea de 9V. C.- No recomendable: Conectando el positivo (+Vcc) de la fuente externa a Vin y el negativo a GND: Podemos alimentar Arduino externamente si necesidad de conector Jack a través de Vin y GND el problema es que nos saltamos un diodo de protección que evita  que se queme el circuito por un exceso de corriente. CONCLUSIÓN: Si necesitamos hacer funcionar actuadores de bajo consumo (luces, zumbadores, etc...) podremos trabajar directamente con el USB conectado al ordenador o conectado a un PowerBank. Si necesitamos mover cargas, excitar bobinas u otros elementos de mayor consumo lo recomendable es alimentar externamente Arduino desde el Jack con un rango de 9 a 12V. Si vas a utilizar elementos que requieran más de 800mA tienes que usar la alimentación externa del Jack  y alimentar esos elementos por el pin Vin del Arduino. Si esos elementos van a ser alimentados de forma independiente. ES IMPORTANTE UNIR LAS MASAS , En caso contrario, romperás la placa Arduino. En este ejemplo se ha conectado el motor a una tensión externa (la pila) y la placa Arduino al USB fíjate como se han unido las masas Opcionalmente se ha optado por unir el + de la pila con Vin. Eso equivale a conectar la pila al Jack. Esto hace que si quitamos la alimentación USB, la placa Arduino sigue alimentada. Es recomendable unir la fuente externa (pila) al jack y no como se muestra, pues así tienes un diodo de protección que te protege la placa Arduino en el caso de que cambies la polaridad de la pila de forma accidental. ¿Porqué en este circuito no se ha hecho así? Porque en Tinkercad no he encontrado un Jack. Software Las placas electrónicas educativas (Echidna, Micro:bit, Arduino, ESP32 ...)  se programan mediante varias opciones : OPCIÓN LENGUAJE GRÁFICO POR BLOQUES Recomendado para primaria. Tenemos muchas posibilidades de lenguajes gráficos. Destacamos dos: ECHIDNASCRATCH Específico para Echidna e integra la IA CURSO DE ECHIDNA MBLOCK  Basado en Scratch. Aunque es un programa especializado en el robot comercial mBot, (basado en Arduino), el mismo programa está adaptado para programar Arduino. CURSO ARDUINO CON MBLOCK   se utiliza Arduino y placa Protoboard CURSO DE ECHIDNA   se utiliza la Shield Echidnam y EchidnaBlack CURSO DE MBOT  se utiliza el robot mBot STEAMAKERBLOCKS (antes ARDUINOBLOCKS)  se trabaja online, muy visual y muy amigable. Está adaptado tanto para trabajar tanto Arduino como muchas placas controladoras y en el aula. Podemos verlo en los siguientes cursos: CURSO ROVER CON ARDUINO aunque no se utiliza un Arduino, sino un NodeMCU pero la programación es exactamente igual CURSO DE ARDUINO CON ARDUINOBLOCKS donde se utiliza el Arduino con una placa protoboard CURSO ARDUINOBLOCKS EN EL AULA  donde se utiliza la Shield TDR-STEAM CURSO ESP32 EN EL AULA donde también utiliza la Shiedl TDR Steam pero la placa no es un Arduino, sino ESP32, la programación es exactamente igual. Microbloks https://microblocks.fun/   placas: Arduino, Microbit, ESP32, RaspberryPico, .... ver minitutorial Otros softwares para programar con bloques Snap4Arduino  https://snap4arduino.rocks/run/ Online, libre... ver compartiva vs mBlock S4A https://s4a.cat/ EN VIVO ¿Qué es eso?                                                                                                                                                        Existe una posibilidad de utilizar la placa "en vivo" frente a "cargar" el programa en la placa. Es decir, interactuando con el ordenador. El programa está en el PC. En la placa hay un firmware que le dice que este a las órdenes del PC.  De esta manera podemos por ejemplo:      - Enviar órdenes desde el ordenador a la placa.                       Por ejemplo que al pulsar la tecla espacio que se encienda el led D13      - Enviar información desde la placa al ordenador                   Por ejemplo que muestre por pantalla nos muestre la cantidad de luz, que registra el sensor LDR, etc... Que nosotros sepamos, estos programas permiten la programación en vivo :                - mBlock placas: Arduino, Microbit, Raspberry Pi, ... robots de Makeblock: mBot, Cyberpi...                 - EchidnaScratch CURSO DE ECHIDNA                 - Microblocks  VENTAJAS LA PROGRAMACIÓN EN VIVO PERMITE MUCHO JUEGO Y POSIBILIDADES A LA HORA DE ELABORAR PROYECTOS INCONVENIENTES : Necesitas el ordenador encendido y conectado al robot. TAMBIÉN ES EN VIVO PERO .... Hay otros softwares que técnicamente trabajan en vivo, es decir, que el programa se ejecuta desde el ordenador, no se ejecuta en la placa, son : - Snap4Arduino para placas Arduino - Picobriks blocks para Picobrick board Pero no permiten trabajar utilizando los elementos del ordenador (teclado, webcam, pantalla, sprite o objetos,,,) Es importante que entiendas que para trabajar en vivo, la placa tiene que tener cargado un " firmware " para que interactúe con el ordenador. P: ¿Qué es eso de "firmware"? R: No es más que un software que se graba en los chips de la placa. P ¿Y por qué se llama así, y no se llama software o programa y en paz? R: Digamos que como se graba en los chips, es un medio camino entre software y hardware, para diferenciarlo del software habitual. EN CARGA ¿Qué es eso?                                                                                                                                                        Simplemente el programa que estas haciendo  se carga en la placa VENTAJAS: Eres independiente del ordenador, tu robot funciona independiente DESVENTAJAS Pierdes todas las posibilidades de utilizar los recursos de un ordenador, teclado, pantalla, webcam, altavoces... Es  importante que si  cargas tu programa en la placa,  pierdes lo que había antes Es decir, si quieres volver a trabajar EN VIVO tienes que cargar el firmware correspondiente. OPCIÓN LENGUAJE POR CÓDIGO Recomendable a partir de secundaria. LENGUAJE POR CÓDIGO ARDUINO IDE Es un lenguaje basado en Wiring y permite la programación del Arduino en un entorno de desarrollo (basado en Processing). El programa se llama  ARDUINO IDE y se puede descargar desde la página oficial de Arduino: https://www.arduino.cc/en/software . Hay otra posibilidad que es utilizarlo online, con la ventaja de tener tus proyectos "en la nube" y no depender del equipo. OJO, TIENES QUE TENER INSTALADO EL SOFTWARE CREATE AGENT https://create.arduino.cc/getting-started/plugin/welcome En los cursos de CATEDU se ha utilizado el lenguaje por código empezando desde cero en: CURSO ARDUINO CON CÓDIGO   donde se trabaja con el Arduino y con diferentes sensores y actuadores, con o sin placa Shield Edubásica. CURSO DE DOMOTICA CON ARDUINO donde se realiza una maqueta de una casa controlada con domótica. También el curso ofrece la versión de hacer la misma maqueta utilizando lenguaje gráfico por bloques. Recomendamos estas hojas resumen si vas a trabajar con código: En Español: enlaceDrive , enlaceGithub En Inglés: enlaceDrive , enlaceGithub,  enlaceSpakrfun LENGUAJE POR CÓDIGO PYTHON Es un lenguaje más amigable que ArduinoIDE y tiene muchos campos de aplicación aparte de la robótica Arduino tiene su propia versión para trabajar con sus placas compatibles: Arduino Lab for Micropython Ver curso Arduino ALVIK Un compilador universal Thonny Ver curso Pico-briks VENTAJAS E INCONVENIENTES  LENGUAJE GRÁFICO POR BLOQUES vs CÓDIGO El lenguaje gráfico por bloques es un lenguaje  sencillo de utilizar , nos evita tener en cuenta muchas librerías y cálculos. Otra ventaja, es que el lenguaje por bloques es el único que permite programación "en vivo" Por ejemplo, la instrucción leer valor distancia el sensor ultrasonidos, mediante programación por bloques es  mientras que en código es double distancia; double fnc_ultrasonic_distance(int _t, int _e){ unsigned long dur=0; digitalWrite(_t, LOW); delayMicroseconds(5); digitalWrite(_t, HIGH); delayMicroseconds(10); digitalWrite(_t, LOW); dur = pulseIn(_e, HIGH, 18000); // devuelve cuanto tarda el pulso alto en microseg; 18000 es el tiempo a esperar limite if(dur==0)return 999.0; return (dur/57); // la velocidad del sonido es 344m/s = 34400 cm/seg = 0,0344 cm/microseg // como v=e/t luego e = v*t y como cuenta la ida y la vuelta distancia = v*t/2 // luego distancia = 0,0344/2 * dur = dur/57 } void setup() { pinMode(6, OUTPUT); pinMode(5, INPUT); } void loop() { distancia = fnc_ultrasonic_distance(6,5); } Como se puede ver en código , tiene que calcular la distancia haciendo cálculos del tiempo de rebote del eco, mientras que el  gráfico es sumamente sencillo y se centra en el objetivo del algoritmo a crear, no en lo accesorio. Esto hace que un lenguaje gráfico por bloques se puede aplicar desde los 8 años . Por otra parte, el lenguaje código tiene todo el potencial, es decir, no todo está en los lenguajes gráficos. Si se quiere cosas más avanzadas, hay que recurrir al código. Un lenguaje gráfico se convierte en lenguaje código , pero al revés no se puede,  debido a que el código es más depurado y no tiene la información necesaria para volver a su origen en bloques, ya lo has visto con el anterior ejemplo, el código tiene más información. ¿No te lo crees?  Haz la prueba, métete en https://www.tinkercad.com/ crea un programa con bloques, dale a la pestaña de código y te aparecerá una advertencia que perderás el programa con bloques ! no puedes volver atrás ! Curiosamente, tiene una opción bloques+código que traduce cada bloque con un código, es decir, traduce cada bloque sin perder información, sólo de esa manera se puede pasar de bloques a código y viceversa. Hay herramientas para pasar de bloques a código pero no al revés Imagen Federico Coca Notas sobre ESP32 STEAMakers  CC-BY-SA El lenguaje código se traduce en lenguaje máquina (ceros y unos) entendible para el microprocesador, pero al revés no se puede . En este vídeo , en mi opinión se olvida de mBlock, Snap4Arduino, S4A pero puedes ver un vistazo de los diferentes editores OPCIÓN SIMULACIÓN                                  Incluimos dentro del apartado de Software los diferentes programas que hay para simular placas electrónicas como Arduino, ESP32, Micro:bit etc... Tinkercad Esta herramienta https://www.tinkercad.com aparece en el Curso Arduino con código   en la práctica Comunicación entre dos Arduinos , pero también es una plataforma que sirve para hacer los diseños de elementos 3D, ver curso Impresión 3D con Tinkercad Tiene la ventaja que es aplicación online , muy visual y buscan un reflejo de la práctica real, además de estar la herramienta adaptada al aula (gestión de alumnos y proyectos). Como  desventajas podemos decir que no tiene mucha variedad de componentes electrónicos y la simulación es algo lenta. Además permite embeber, pruébalo !!! 😍😍😍 Pulsa Iniciar simulación y luego pulsa el botón A de cualquiera de los dos micro:bits Wokwi Si Tinkercad se queda corto, puedes probar esta plataforma https://wokwi.com/ con muchas posibilidades. Es online y puede trabajar con multitud de placas : ArduinoUno, ESP32, Raspberry,,,, Como única desventaja que encontramos, es que echamos de menos la realidad de Tinkercad, por ejemplo no puedes poner una placa protoboard para realizar las conexiones, pero a cambio se gana simplicidad de cableado. UnoArduSim Es una aplicación local.   UnoArduSim   además es una aplicación portable fácil de instalar y con los elementos de leds, motores servos ya preparados, ideal para ejemplos sencillos y para examinar señales y no depender de Internet, pero no es tan versátil. SIMULIDE En https://simulide.com/ podemos encontrar un programa local de software libre genérico para electrónica, incluido Arduino. En esta captura se puede ver uno de los ejemplos que incorpora el programa: OPCIÓN SÓLO DIBUJAR TinkerCad es un buen programa para dibujar los planos ➕permite también la simulación ➕ permite embeber y compartir ➖  no tiene muchos componentes SimulIDE es software libre. Es un programa portable. ➕ Tiene muchos componentes ➕permite también la simulación ➖  le faltan algunos sensores, pero van incorporando Fritzing  es un clásico. Es un programa portable. ➕ Tiene muchos componentes ➖ no es gratis, hay que pagar 8€ Circuit canvas ➕ puede compartir  por ejemplo ➕ tiene buenos tutoriales sobre electrónica ➖ todo en inglés Sensores Esta sección es una visión rápida de las posibles entradas de los robots.  NO LEAS TODOS SINO LOS QUE TIENE TU ROBOT Un poco de teoría... Cualquier sistema de control podríamos decir que funciona de una manera similar a un ser humano, salvando las distancias. Nosotros recibimos la información del mundo exterior gracias a nuestros sentidos (oído, olfato, gusto, vista y tacto), nuestro cerebro procesa esa información y a través de nuestros músculos o de nuestra voz realizamos diferentes acciones. Pues lo mismo sucede con los sistemas de control, reciben información del exterior gracias a los diferentes  SENSORES , procesan esa información en sus PLACAS CONTROLADORAS (sus cerebros) tales como Arduino y dan una respuesta utilizando sus diferentes ACTUADORES . Un sensor es un objeto capaz de detectar magnitudes físicas o químicas y transformarlas en variables eléctricas. Los sensores o periféricos de entrada nos permiten obtener información del mundo real para utilizarla desde el programa de Arduino. En la actualidad la cantidad de sensores disponibles es tan extensa como las variables que queramos medir, desde sensores de temperatura, humedad, luminosidad,... hasta acelerómetros, giroscopios, GPS,... pasando por detectores de gases, de pulsos cardiacos, sensores de efecto HALL,... Tipos de sensores DIGITAL : un sensor digital sólo tiene dos estados: activado/desactivado, ON/OFF, 1/0, Alto/Bajo, ... En este caso  conectaremos el sensor a una de las entradas digitales de Arduino para leer el estado. Ejemplo: un pulsador es un tipo de sensor sencillo que sólo nos da dos estados, “pulsado o no pulsado”. Conectado a la placa Arduino debe generar 0v en reposo y 5v al pulsarlo. De esta forma desde el programa de Arduino podremos leer el estado del botón. ANALÓGICO : el sensor nos puede dar un rango de valores, normalmente se traduce en un valor de tensión o de  corriente variable en función de la señal captada al sensor. En este caso conectaremos el sensor a una de las entradas analógicas de Arduino (A0,..., A5). El rango de entrada será una tensión entre 0v (GND) y 5v. Ejemplo: Una fotorresistencia es un componente electrónico cuya resistencia disminuye con el aumento de intensidad de luz incidente. Su valor varía entre 0 y 5 v. la cantidad de valores que pueden leer las entradas analógicas de Ardunio son de 10 bits es decir 1024 valores. De tal modo que 0 = 0 v. y 1023 = 5V. DATOS : el sensor ofrece su información a través de una interfaz de comunicación. La forma de comunicación puede ser por sistemas estándar como I2C o SPI o algunos sensores usan su propio protocolo para codificar la información y debemos realizar desde el software la decodificación correcta para interpretar los datos del sensor (normalmente los desarrolladores de este tipo de sensores ofrecen una librería software para Arduino que hace todo el trabajo). Ejemplo: el sensor DHT11. Por un solo pin envía los datos de temperatura y humedad. Sensores modulares. En  la  actualidad  existen  infinidad  de  sensores  que  los  fabricantes  presentan  en  forma modular.  Esto  hace  que  su  conexión  y  utilización  sea  mucho  más  sencilla  que  la  tradicional, olvidándonos de resistencias, polaridades, cableados,… para su correcto funcionamiento. Sensor pulsador Es un sensor digital, que presenta dos estados; cuando se presiona el botón,  emite  una  señal  de  bajo (0V), cuando suelta el botón, emite una señal de bajo alto (5V).  Datasheet Un ejemplo de uso en el robot mClon   Otra manera más "barata" de sustituir este módulo pulsador es poner un pulsador normal y una resistencia (±10k), al pulsar se produce una entrada en el Arduino, hay dos configuraciones, que al pulsar se emita un 0 lógico (configuración  Pull up ) o que al pulsar emita un 1 lógico (configuración  Pull down )  ¿Por qué hay que poner una resistencia? Lo "normal" es que al pulsar se emita un '1' configuración Pull down , pero hay pulsadores que funcionan Pull up y los llaman lógica invertida , por eso en la programación por bloques podemos encontrar esto: Sensor Táctil Capacitivo.  Este  pequeño  sensor  puede  "sentir"  a  las  personas  y  el  tacto  y  la retroalimentación de metales a un nivel de voltaje alto / bajo. Incluso aislado por alguna tela y papel, todavía puede sentir el tacto. Su sensibilidad disminuye a medida que la  capa de aislamiento se hace más gruesa. En nuestra opinión lo preferimos frente al  Sensor pulsador  pues es muy económico, duradero y fiable. Un ejemplo de uso en Disparo láser en Arduino con ArduinoBlocks Apertura de puerta en Domotica con Arduino Potenciómetro y joystick Un potenciómetro es una resistencia variable, es decir, cambia de valor mecánicamente, lo tenemos en multitud de dispositivos. El joystick es internamente dos potenciómetros con un pulsador integrado en un solo mando. Este sensor es analógico , su salida puede ser cualquier valor entre Vcc y GND (si está en divisor de tensión como en la placa Edubásica no llega a esos valores extremos), por lo tanto hay que conectarlo a una entrada analógica de Arduino y como cualquier entrada analógica, proporcionará valores entre 0 y 1023. Ejemplos de uso: Arduino con código: Mapeo del potenciómetro Arduino con código: Regular la luz con potenciómetro Arduinoblocks en el aula En Arduino con Echidna , con joystick Domótica con Arduino con joystick  Sensor Fotocélula LDR.  El  uso  de  fotocélulas  es  muy  común  en  nuestras  vidas,  las  encontramos  en  el  encendido automático de  farolas, apertura de  puertas,…  La  fotocélula  es un  semiconductor. Es  ampliamente utilizado  en  campos  de  interruptores  de  control  automático  como cámaras,  luces  solares  de  jardín,  lámparas  de césped,  detectores  de  dinero,  relojes  de cuarzo, tazas de música, cajas de regalo, mini luces  nocturnas,  interruptores  de  control  de luz y sonido, etc.   Es un sensor analógico dando valores entre 0 y 5V y como entrada analógica de un Arduino se traduce en un rango de 0 a 1023 valores.  Un ejemplos de uso : el interruptor crepuscular del curso Arduino con ArduinoBlocks Medir la luz en Rover con Arduino Medir la oscuridad en Arduino con mBlock Hinchar un balón en Arduino con mBlock Una manera más económica de montar este sensor es utilizar una resistencia y un LDR: El LDR cuando más oscuridad, más resistencia En una configuración PULL DOWN, cuanto más luz, la resistencia del LDR baja, por lo tanto más tensión en A6 Los módulos LDR que se venden suelen esta configuración Pull down, es decir, cuanto más luz,  más tensión: La instrucción con Arduinoblocks ya cuenta con esta configuración Pull downUp de que cuando más luz, más valor tiene la entrada analógica. Hay módulos LDR ya montados,  que tienen componentes activos  es decir, llevan circuitos electrónicos, transistores que amplifican etc... y dan la salida  digital  con un potenciómetro para definir el rango de luz que cambia de estado lógico. Puedes ver en la figura que tiene una salida digital D0 . O hay algunos que tienen 4 pines como en la figura que ofrecen las dos cosas: salida analógica A0 y digital D0 . Nosotros aconsejamos el divisor de tensión por tres razones: más barato, no implica gran circuitería y es visible su funcionamiento frente a estos encapsulados. Sensor de Ultrasonidos. Es un sensor digital de distancias por ultrasonidos capaz de detectar objetos y calcular la distancia a la que se encuentra en un rango de 2 a 350 cm. Su uso es tan sencillo como enviar el pulso de arranque y medir la anchura del pulso de retorno. No es un sensor preciso , con una ligera inclinación de la superficie ya da lecturas erróneas pero es muy barato El más común es el HC-SR04 que tiene 4 pines de conexión:  VCC     Trig (Disparo del ultrasonido)    Echo (Recepción del ultrasonido) y  GND  aunque en algunos modelos como el de Elecfreaks tiene 3 pines. Integra Trig y Echo en uno sólo. La distancia se calcula con esta fórmula: Distancia en cm = {(Tiempo en segundos entre Trig y el Echo) * (V.Sonido 34000 en cm/s)} / 2 Si programas en código, tienes que utilizar la fórmula anterior, previamente tienes que programar el cálculo del tiempo entre una emisión de un pulso en Trg y la respuesta en Echo. Si utilizas la programación en bloques, no es necesario, seguro que hay un bloque que lo hace todo por ti 😍 Ejemplos de uso: Alarma en Domótica con Arduino Piano invisible en Arduino con ArduinoBlocks ,  Sensor parking en Arduino con ArduinoBlocks Piano invisible en Arduino con mBlock Sensor parking en Arduino con mBlock Sensor de distancia de ultrasonidos con Picobricks Sensor DHT11 (Temperatura y Humedad). Este sensor de temperatura y humedad DHT11  nos permite determinar las zonas de confort para un rango de temperaturas entre 0ºC y 50ºC con un error de ± 2ºC y un rango de humedad entre 20 y 90 % ± 5% . Una salida digital para dos variables cómo lo hace? Tiene dentro un pequeño microprocesador que lanza por el bit de datos 40 bits en serie, los 16 primeros son la humedad (en BCD) y los 16 restantes es la temperatura (en BCD) los 8 restantes son de comprobación Checksum (en binario) como la letra del DNI. Por ejemplo 0100 0111 0000 0011 0001 1001 0000 0000 0001 1000   es 0100 0111 0000 0011 = 47.03% de humedad y 0001 1001 0000 0000 = 19.00ºC y la comprobación es la suma de 4+7+0+3+1+9+0+0=24= 11000 Ejemplos de uso: Medir H y T con Blink en Rover con Arduino Estación meteorológica Arduino con Arduinoblocks Arduinoblocks en el aula SMART HOME con Micro:bit No es un sensor con gran sensibilidad, pero para propósitos educativos cumple sus funciones. Por dentro tiene una resistencia NTC que decrementa su resistencia si aumenta la temperatura. Hay otros que van al revés, los PTC. Tanto los NTC como los PTC se llaman  thermistores.  Para la humedad, mide la capacidad de un condensador que es sensible a la humedad, o sea, un  sensor capacitivo. Tenemos dos opciones comerciales: Encapsulado que lo tienes preparado para conectar la alimentación y leer por el pin de datos, o sin encapsular , que hay que colocar una resistencia de aproximadamente 10k entre Vcc y Data Ejemplo de uso de un DHT11 sin encapsular: Fuente Luis LLamas CC-BY-NC-SA https://www.luisllamas.es/arduino-dht11-dht22/ Si queremos mejorar la sensibilidad, podemos utilizar el DHT22 que es igual pero de color blanco y más caro. Si lo que queremos es sólo la temperatura es mejor utilizar el LM35D que tiene un rango de temperaturas desde 0ºC a 100ºC con una sensibilidad de 2mV/ºC Es un sensor bastante mediocre, si necesitas una precisión el doble, te recomendamos el DHT22 que funciona exáctamente igual pero es de color blanco y más caro ⁓3€. Ver https://www.luisllamas.es/arduino-dht11-dht22/ Sensor IR Es un sensor para distancias cortas hasta 2cm y no da la distancia, simplemente si hay o no hay obstáculo, pero son muy baratos, unos 0.30€. Aquí tienes un ejemplo de evita obstáculos en un rover marciano con Raspberry Para saber más te recomendamos esta página de Luis Llamas IR Sensor Module for Arduino Projects | 3D Model by Veer AI on Sketchfab Sensor llama Este sensor de llama se puede utilizar para detectar fuego u otras luces cuya longitud de onda se encuentra entre 760 nm ~ 1100nm. Un ejemplo de su uso: Alarma por fuego en Domótica con Arduino Sensor de Gas (MQ2). Detecta gases inflamables : GLP, I-butano, propano, metano, alcohol, hidrógeno, humo... con más sensibilidad en algunos que en otros. Siempre detecta el conjunto. Son usados en electrónica de consumo y mercados industriales. Sensibilidad Tiene alta sensibilidad y se puede ajustar girando el potenciómetro. Tiempo de respuesta : Internamente posee un calentador para aumentar su temperatura y que estos gases reaccionen con la resistencia interna que tiene, por lo tanto tardan algo en responder la primera vez que se conectan, incluso horas en algunos modelos. Una vez calentados son rápidos en la respuesta. Tipo de salida : Analógico pero si tiene 4 pines como el de la figura, incorpora un pin digital. Ejemplos de uso: Smart Home Microbit Smart Home ESP32 Sensor de humedad de suelo. Un higrómetro de suelo FC-28 es un sensor que mide la humedad del suelo. Son ampliamente empleados en sistemas automáticos de riego para detectar cuando es necesario activar el sistema de bombeo. El FC-28 es un sensor sencillo que mide la humedad del suelo por la variación de su conductividad. No tiene la precisión suficiente para realizar una medición absoluta de la humedad del suelo, pero tampoco es necesario para controlar un sistema de riego.  Los valores obtenidos van desde 0 sumergido en agua, a 1023 en el aire (o en un suelo muy seco). Un suelo ligeramente húmero daría valores típicos de 600-700. Un suelo seco tendrá valores de 800-1023. Luis Llamas CC-NC-BY-SA https://www.luisllamas.es/arduino-humedad-suelo-fc-28/ Se puede utilizar este sensor para hacer un dispositivo de riego automático, puede detectar si las plantas “tienen sed” y evitar que se marchiten .   La corriente de trabajo del sensor es menor de 20mA. El voltaje de salida es de 0V (en el aire) a 2,3V (totalmente sumergido en agua). Smart Agriculture Kit micro:bit Sensor de humedad. Este sensor analógico está diseñado para identificar y detectar la presencia de agua y su cantidad. Puede servir para detectar el nivel de agua, para disparar una alarma en caso de una fuga de agua, también para hacer un limpiapalabrisas automático.... puedes ver un ejemplo de uso en : Curso de Domótica con Arduino Smart Agriculture Kit micro:bit Mide el volumen de agua caída a través de una serie de rastros de cables paralelos expuestos. Sensor de efecto Hall. Este es un sensor de inducción magnética. Detecta los materiales magnéticos dentro de un rango de detección de hasta 3 cm. El  rango de detección y la fuerza del campo magnético son proporcionales. La salida es digital. Sensor Hall.                              Edwin Helber Hall De Desconocido - Popular Science Monthly Volume 64, Dominio público Edwin Helbert Hall  descubrió en 1879 que en presencia de un campo magnético, un conductor que conduzca una corriente se le producía un campo eléctrico porque las cargas eléctricas se desviaban de su trayectoria principal, nuestro sensor simplemente mide ese campo eléctrico: De  Luis Llamas  CC-BY-NC El sensor tiene un led de color rojo que indica que hay una lectura de campo magnético. Un ejemplo de uso lo puedes ver aquí:  medir rocas magnéticas con el Rover con Arduino Sensor inclinación Este sensor funciona al hacerle vibrar, emitiendo una señal digital de todo o nada. El módulo del sensor viene provisto de un potenciómetro para poder regularlo. Sensor de golpe Es un sensor digital que al ser golpeado este sensor envía una señal momentánea. Sensor de pulso cardíaco. Este módulo utiliza un LED infrarrojo (IR) ultrabrillante y un fototransistor para detectar el pulso en el dedo. Principio de funcionamiento: Se debe colocar el dedo entre el LED infrarrojo ultrabrillante (parte superior) mientras que el fototransistor, que queda en el otro lado, recoge la cantidad de luz transmitida. La resistencia del fototransistor variará levemente a medida que la sangre pase a través de su dedo. Sensor de Alcohol. Este sensor de gas analógico MQ-3 es adecuado para detectar alcohol. Se puede usar en un analizador de aliento. También tiene una alta sensibilidad al alcohol y baja sensibilidad a la bencina (éter de petróleo). La sensibilidad se puede ajustar con el potenciómetro. Sensor de CO2 Hay sensores que utilizan el protocolo I2C, este protocolo permite conexiones serie y pueden compartir el mismo cable pues cada elemento tiene una dirección diferente. Esto lo veremos en el Display LCD. Se identifican por los pinen SDA y SCL Resistencia Flex Es una resistencia que cuanto más se dobla más resistencia ofrece, desde 25k hasta 125k Para utilizar esta resistencia haremos un  DIVISOR DE TENSIÓN  que consistirá en poner dos resistencias en serie y repartirá la tensión total entre 0V y 5V en las dos resistencias,  el punto medio  será un punto que tendrá una tensión variable en función de las dos resistencias, como la es variable, esa tensión es variable y ya tenemos la entrada  analógica : Es decir: La resistencia entre masa GND del ARDUINO (cable negro) y un punto en la placa protoboard ese punto medio conectarlo a una entrada analógica, por ejemplo A0 (cable amarillo) Una resistencia de valor parecida a la Flex de decenas de K entre ese punto y +5V (cable rojo en la foto) Este sensor tiene posibilidades para usarlo en "ropa inteligente". Sensor de movimiento  Los sensores infrarrojos pasivos (PIR) son dispositivos para la detección de movimiento. Son baratos, pequeños, de baja potencia, y fáciles de usar. Por esta razón son frecuentemente usados en juguetes, aplicaciones domóticas o sistemas de seguridad.  Los sensores PIR  se basan en la medición de la radiación infrarroja . Todos los cuerpos (vivos o no) emiten una cierta cantidad de energía infrarroja, mayor cuanto mayor es su temperatura. Los dispositivos PIR disponen de un sensor piro eléctrico capaz de captar esta radiación y convertirla en una señal eléctrica. En realidad  cada sensor está dividido en dos campos y se dispone de un circuito eléctrico que compensa ambas mediciones. Si ambos campos reciben la misma cantidad de infrarrojos la señal eléctrica resultante es nula. Por el contrario, si los dos campos realizan una medición diferente, se genera una señal eléctrica. De esta forma, si un objeto atraviesa uno de los campos se genera una señal eléctrica diferencial, que es captada por el sensor, y se emite una señal digital. El otro elemento restante para que todo funcione es  la óptica del sensor . Básicamente es una cúpula de plástico formada por lentes de fresnel, que divide el espacio en zonas, y enfoca la radiación infrarroja a cada uno de los campos del PIR. De esta manera, cada uno de los sensores capta un promedio de la radiación infrarroja del entorno. Cuando un objeto entra en el rango del sensor, alguna de las zonas marcadas por la óptica recibirá una cantidad distinta de radiación, que será captado por uno de los campos del sensor PIR, disparando la alarma. Luis Llamas CC-BY-NC-SA https://www.luisllamas.es/detector-de-movimiento-con-arduino-y-sensor-pir/ Puedes ver ejemplos de uso en robótica en :  Smart Home para Microbit Smart Agriculture Kit para Microbit Más sensibles son los  sensores de microondas . Son un radar que por efecto Doppler pueden captar cualquier objeto en movimiento dentro de un alcance de 5-7 metros en cualquier dirección e independiente de su temperatura. Es un buen sensor para alarmas, activación de luz por presencia..... Para saber más  ver la página de Luis Llamas Su conexión es muy sencilla, es un detector digital que hay que alimentarlo como el resto de sensores.  Curiosamente, la gran ventaja técnica de los de microondas es un gran inconveniente para usarlo en el aula , con cualquier movimiento se dispara, luego para clase es mejor el sensor PIR   Esta página esta adaptada de  este enlace.   José Andrés Echevarría @cantabRobots CC-BY-NC-SA. ACTUADORES y otras salidas Esta página es un repaso rápido de las posibles salidas de los robots NO LEAS TODOS SÓLO LOS QUE TIENE TU ROBOT ¿Qué es un actuador? Un actuador es el nombre genérico que empleamos para cualquier  dispositivo capaz de realizar acciones en el mundo físico y que podremos controlar desde un autómata o procesador como Arduino. En particular, usamos el nombre actuador para los dispositivos que son capaces de generar movimiento.    Luis LLamas CC-BY-NC-SA ACTUADORES                                                                                                    Motores baja potencia Con el Arduino podemos usar motores de corriente continua de juguete como en la figura, aptos para poner un ventilador. Ejemplo de uso Smart Home para microbit Motores con algo de potencia Si quieres usar un motor para mover unas ruedas, ya pide más corriente, no se puede conectar directamente al la placa (Arduino, esp32 etc..). El de la figura es típico en robótica y lleva reductores dentro para bajar la velocidad : Necesita una alimentación extra, como el LM298N y las pilas., o el B6612FNG o una shield específica. CC-BY-NC  Luis Llamas Ejemplos de uso lo puedes ver en  Curso mClon con nanoArduino con el  B6612FNG  Curso Rover con Arduino con la shield L293D ESP-12E para el NODE MCU que internamente tiene el LM298N Curso Arduino con código con LM298N y también con un transistor Los motores pueden (y deben) de estar conectados a  salidas PWM  de tal manera que se pueda regular la potencia y por lo tanto la velocidad. Servos Un  servo convencional  es un motor donde fijamos el ángulo desde 0º a 180º, pero si queremos una rotación, existen  servos rotatorios  que simplemente tienen su velocidad de rotación controlada Ejemplos de uso de servos: Curso Arduino con código Curso brazo robótico del mClon con nanoArduino Apertura de barrera por ultrasonidos en curso Arduino con ArduinoBlocks Tractor entrando en el corral Arduino con EchidnaShield Apertura de puerta Domótica con Arduino Servo con PicoBrick Apertura ventana y puerta en Smarth Home para microbit Smart Agriculture Kit para micro:bit Relés Un relé es un interruptor activado por un electroimán, lo que permite independizar los circuitos. En el dibujo se ve que el circuito rojo de 220V esta separado del verde, de sólo 1.5V. Pero es el circuito verde que al funcionar, hace que el electroimán mueva el interruptor del relé y encienda la bombilla. El objetivo es que he podido encender una bombilla de 220V sin tocar los 220V peligrosos. En el circuito verde, el interruptor puede ser un Arduino. Experiméntalo en este simulador . Un ejemplo con Arduino en  Luis LLamas Un ejemplo de uso en Picobricks Electroimán El electroimán no se puede conectar directamente, utilizaremos una etapa de potencia, por ejemplo el transistor el  IRF520N que amplifique la señal del Arduino, pues las salidas de Arduino no tienen potencia para mover el electroimán. Para dar esa potencia utilizaremos otra fuente externa, unas pilas: Las conexiones son : SIG del IRF520N a una salida digital por ejemplo D13 VCC del IRF5020N al 5V del ARDUINO Los dos GND del IRF520N a GND del ARDUINO V+ y V- del IRF5020N al solenoide, da igual qué cable pues no tiene polaridad. VIN del IRF520N al VIN del ARDUINO (son los voltios de la pilas) Motor paso a paso Igual que el  electroimán , necesitamos un controlador que nos de la potencia necesaria para mover el motor, el ULN2003 Imagen BY-NC-SA de  Luis Llamas También igual que el electroimán, necesitamos una potencia extra con las pilas: Conexión : Cuatro pines digitales del ARDUINO al IN1,IN2,IN3,IN4 del ULN2003 por ejemplo D10,D11,D12,D13 El conector blanco del ULN2003 al motor paso a paso El (+) del ULN2003 al Vin del ARDUINO El (-) del ULN2003 al GND del ARDUINO La configuración más sencilla es la rotación simple en sentido horario (llamada fase1) : Imagen BY-NC-SA de  Luis Llamas Es decir: Paso IN1=D10 IN2=D11 IN3=D12 IN4=D13 Paso 1 ON OFF OFF OFF Paso 2 OFF ON OFF OFF Paso 3 OFF OFF ON OFF Paso 4 OFF OFF OFF ON Si has entendido este ejemplo serás capaz de realizar las configuraciones que desees. OTRAS SALIDAS                                                                                            No son actuadores pues no representan movimiento pero son también  salidas  del Arduino como los actuadores, luego lo vemos en esta página Buzzer activo Reproduce un tono de una frecuencia determinada por el fabricante cuando recibe un '1' digital. Su conexión es muy simple: GND  a GND y  VCC  a 5V (ojo que están a los dos extremos, marcados en rojo y en negro) OUT  o también señalado como I/O a un pin digital, por ejemplo D13 Ejemplos de uso: Domótica con Arduino:  Apertura puerta con mBlock Domótica con Arduino  Apertura puerta con código Buzzer pasivo La diferencia de un buzzer activo con el pasivo es que el pasivo hay que mandar la onda que se tiene que reproducir, como Arduino no puede reproducir onda puras (senoidales analógicas), se le envía ondas cuadradas con la frecuencia que se pretende reproducir. Como se puede ver en la figura, no tiene elementos auxiliares para reproducir un tono, es simplemente un altavoz. Ejemplos de uso Timbre Arduino con Echidna Arduino blocks en el aula LEDS Y OTROS ELEMENTOS VISUALIZADORES                                              Led normal Un diodo es la unión de dos semiconductores P-N que sólo permite la corriente en un sentido. Un diodo LED es un diodo, que al pasar esta corriente emite una luz. Hay de 3mm y de 5mm de grosor, transparentes, traslúcidos y de colores (realmente son traslúcidos tintados) Tenemos pues que respetar su polaridad para que funcione: Fuente Luis LLamas CC-BY-NC  Encender LED con Arduino Si alimentamos el LED con una tensión inferior a su tensión de polarización directa Vd ±1,4V-3,8V el led no luce. si alimentamos con una tensión superior, la corriente que circula se dispara por lo que se rompe. Conclusión: Hay que poner una resistencia limitante. Para calcularla te recomiendo la página de Luis Llamas    Encender LED con Arduino Aquí puedes ver un ejemplo de semáforo  en el curso Arduino con código Se puede conectar directamente pues las salidas de Arduino tienen una limitación interna de 20mA como en este ejemplo  https://www.youtube.com/watch?v=EFFSLvIF9rY Los LEDS igual que los motores pueden se encendidos o todo o nada con salidas digitales 0 y 1 o salidas PWM de esta manera conseguimos luminosidades medias,  en esta práctica con el potenciómetro  se regula la intensidad de la luz de un LED Led RGB Se trata de un encapsulado que integra 3 leds de los tres colores básicos. Cada color básico se puede regular desde 0 a 255 de intensidad, luego tenemos 16 millones de tonalidades diferentes. Un ejemplo de su uso lo puedes ver en Domótica con Arduino, interruptor crepuscular Intermitente RGB en Arduino con ArduinoBlocks Existen LEDS RGB que se comunican unos a otros, ( ver este ejemplo en el curso mClon ) como las tiras de leds RGB que cambian de color todos simultáneamente. Neopixel La cinta LED RGB se basa en el chip controlador WS2812B de Neopixel con el cual podemos tener el control de cada pixel y de cada color, ya sea rojo, verde y azul a través de un solo cable de datos. Los WS2811, WS2812 y WS2812B son LED que disponen de lógica integrada, por lo que es posible variar el color de cada LED de forma individual (a diferencia de las tiras RGB convencionales en las que todos los LED cambian de color de forma simultánea). Están basados en el LED 5050, llamado así porque tiene un tamaño de 5.0 x 5.0 mm. Es un LED de bajo consumo y alto brillo, que incorpora en un único encapsulado los 3 colores RGB. La genial novedad del WS2812B (y resto de familia) es añadir un integrado dentro de cada LED, que permite acceder a cada pixel de forma individual. Por este motivo este tipo de LED se denominan “individual addressable”. Esto abre la puerta a un sinfín de aplicaciones y combinaciones, que van desde dotar de iluminaciones distintas zonas con una única tira, animaciones complejas, o incluso generar pantallas enteras de alta luminosidad....  A los LED WS2812B también se les denomina NeoPixel Luis Llamas CC-BY-NS-SA https://www.luisllamas.es/arduino-led-rgb-ws2812b/  Smart Home para Microbit con 4 leds RGB Neopixel Smart Home para ESP32 Smart Agriculture Kit micro:bit Láser El diodo láser es un elemento motivador, barato y fácil de usar con el Arduino pues se activa digitalmente, si enviamos un 1 emite un rayo láser. Un ejemplo de uso lo puedes ver en la  Alarma por láser en Domótica con Arduino Si quieres saber más de este componente, te recomendamos  esta página de Luis Llamas . Si tienes que comprar uno, es importante que no sea superior a 5mW, pues puede dañar permanentemente la retina del ojo [ +info ]. El modelo que proponemos es de  1mW , no obstante,  EVITA SIEMPRE QUE EL LÁSER APUNTE A LOS OJOS  especialmente con niños. Display LCD Si queremos visualizar datos de forma independiente del ordenador, existen matrices de led que puedes ver en los cursos de mBot o mClon pero lo mejor es una pantalla Liquid Crystal Display y la mejor forma de conectar esta interfaz es en serie utilizando el  protocolo I2C.  Ejemplo de uso : en  Arduino con código Arduinoblocks en el aula Smart Home para Microbit CC-BY-SA  Luis Llamas No confundas Display LCD con  matriz de LEDs , o una OLED Aclarando conceptos: Protocolo I2C                                                                                    Es un protocolo de emitir los datos con sólo dos cables SDA (los datos) y SCL (reloj) y además pueden compartir varios dispositivos SLAVE) para ello la placa Arduino ESP32, microbit... (MASTER) tiene que saber qué dirección tiene cada dispositivo IMPORTANTE : Fuente Luis Llamas ArduinoI2C CC-BY-SA Aclarando conceptos: Lógica invertida                                                                                    Igual que vimos en sensores, con las configuraciones Pull up y Pull down, las salidas de cualquier actuador  PUEDEN SER LÓGICA INVERTIDA,  mira en este NodeMCU (básicamente es un Arduino con wifi, aquí está conectado con el servidor Blynk) como funciona al revés, cuando apretamos, por lo tanto enviamos un uno a la salida,  se apaga la salida  !! Entorno de programación por código Necesitarás el entorno de desarrollo Arduino IDE (IDE, Integrated development environment) (aquí https://www.arduino.cc/en/Main/Software para descargártelo) OJO, existe la versión online del editor https://create.arduino.cc/editor . Es una buena solución si trabajas en varios equipos y quieres que tus proyectos estén disponibles en cualquier equipo. ATENCION para usar la versión online, tienes que instalar en tu ordenador el software AGENT https://create.arduino.cc/getting-started/plugin/welcome En Linux puede salir este mensaje "can't open device "/dev/ttyUSB0": Permission denied" donde 0 puede ser otro número, la solución aquí Está constituido por un editor de texto para escribir el código, un área de mensajes , una barra de herramientas con botones para las funciones comunes, y una serie de menús. Arduino utiliza para escribir el código fuente o programa de aplicación lo que denomina "sketch" (programa). Estos programas son escritos en el editor de texto. Existe la posibilidad de cortar/pegar y buscar/remplazar texto. Permite la conexión, por USB, con el hardware de Arduino para cargar los programas y comunicarse con ellos. Y permite varias placas, tenemos que elegir la nuestra, en el KIT de CATEDU es Arduino UNO pero si tienes otro modelo este curso seguro que puede ser válido: En el área de mensajes se muestra información mientras se cargan los programas y también muestra errores. Lo importante es cuando pinchemos en la flecha de subir nuestro programa, no salga ningún error, sino simplemente "Subido" . ¿Cómo se programa Arduino? Las partes principales de un programa hecho en Arduino son: Bloque de inclusión de módulos y declaración de variables, bloque de configuración void setup() donde se indica el modo de funcionamiento de los pines (entrada y salida), comunicación serie, etc... y bloque de ejecución continua void loop() , en este bloque se incluyen las acciones que queremos que realice el programa. Se ejecutará línea a línea de forma secuencial y continua. Cuando llegue a la última instrucción incluída en la función loop() volverá a ejecutar la primera y continuará en un bucle infinito. ¿Arduino tiene que estar continuamente conectada a un ordenador? Sólo es necesario que esté conectado al ordenador mediante el USB para cargar los programas o para visualizar en tiempo de ejecución datos del programa mediante la consola serie . El ordenador proporciona la energía eléctrica suficiente para que funcionen los programas, pero una vez cargado el programa en la memoria del microcontrolador de Arduino se puede desconectar del USB y alimentar a la tarjeta mediante una fuente externa mediante el jack de alimentación con un margen de (5 a 20 Voltios). El programa cargado en Arduino queda grabado permanentemente aunque cese el suministro eléctrico. Para una mayor información y manejo de la instalación del entorno de programación, lenguaje de programación y librerías se encuentra en la página web de la comunidad Arduino: www.arduino.cc (portal en inglés, más actualizada). www.arduino.es (portal en español). EDUBASICA EDUBASICA es una tarjeta de prototipado rápido para conectar a Arduino. Incluye componentes electrónicos básicos para gran varieda de prácticas y proyectos. Es una tarjeta multipropósito con componentes electrónicos incluidos que puedes usar para fabricar un robot, controlar un sistema de poleas, activar barreras, comunicar dispositivos bluetooth, y todo lo que te puedas imaginar. Como cualquier placa Arduino, también se puede programar fácilmente mediante bloques, con mBlock o ArduinoBlocks ... información, conseguir una, etc.. en https://edubasica.github.io/ Otras Shields ver Echidna +Grande (jpg - 335,78 ) ESQUEMAS Y PCB PARA SU FABRICACIÓN: Disponemos de un repositorio de github para la descarga de los esquemas de Edubásica https://github.com/jorgeroden/edubasica . En él se incluyen las posibles modificaciones de la placa junto a los programas de test. En cualquier caso los esquemas para la última versión, en el momento de redactar este manual, se adjuntan aquí. Esquema Placa PCB Prácticas Proyectos Tweets sobre EdubasicaShield Tweets by EduBasicaShield Kit de préstamo de CATEDU Este es el kit que prestamos para hacer este curso, con la placa de apoyo EDUBASICA. Si no tienes EDUBASICA este curso se puede hacer perfectamente, pero se complica el cableado. POR FAVOR DEVUELVE TODOS LOS COMPONENTES EN BUEN ESTADO, PIENSA EN TU PRÓXIMO COMPAÑERO QUE VA A HACER EL CURSO 2. Montajes básicos con Arduino Montajes básicos con Arduino Antes de empezar a realizar pequeños proyectos, vamos a dar un repaso a la plataforma Arduino, con las prácticas básicas que necesitarás para comprender los conceptos y avanzar en el libro . via GIPHY Conexiones digitales En este apartado aprenderemos el funcionamiento básico de las entradas y salidas digitales de la placa Arduino. Si observamos bien la placa, vemos que hay 13 pines digitales.  En este caso la señal digital no es más que un valor discreto de entre dos posibles, que si en rigor se asocian a tensiones, nosotros por sencillez los asociaremos a dos valores que serán ,apagado o encendido o lo que es lo mismo  LOW ó HIGH. Así si asignamos un 0 al pin digital 4, es lo mismo que decir que ese pin, o mejor dicho, lo que esté conectado a ese pin estará apagado si le asignamos un 1, estamos diciendo que estará encendido. Entonces, ¿Con los 13 pines digitales de Arduino , podríamos actuar para controlar 13 bombillas? . Si, aunque Arduino es aún más potente ya que aún podemos usar los 5 pines analógicos también como salidas digitales. Veamos como. Montaje 1: LED parpadeante sin EDUBASICA Vamos a controlar el encendido y apagado de un led conectado al pin13 de Arduino.  ¿Por qué el pin13 y no otro? Podríamos hacerlo con otro, pero el pin13 tiene asociado un led en la placa justo debajo de el y así nos evitamos tener que montar. Si pusiéramos un pin polarizado correctamente entre el pin13 y GND también funcionaría. El pin13 tiene también una resistencia que hace posible conectarle un led directamente, si hacemos el montaje con otro pin debemos añadir esta resistencia de 10Kohm entre el led y el pin. Acuérdate: La pata más larga del LED es el (+) por lo tanto en el D13 y el corto (-) en GND. https://create.arduino.cc/editor/javierquintana/27aca596-db6d-4a41-a100-faf60cefa56e/preview Todo lo que está entre las llaves de  loop() , se ejecuta indefinidamente. Así vemos un efecto de led parpadeante ya que si analizamos las líneas del código vemos que el proceso es: Encendemos. Esperamos un segundo. Apagamos. Esperamos un segundo.   ¡Atrevámonos y cambiemos los tiempos de parada! Montaje 2: LED EDUBASICA parpadeante Igual que en el caso anterior, pero vamos a utilizar un LED de la shield de Edubásica, tenemos tres opciones: LED VERDE pin 3 LED AMARILLO pin 4 LED ROJO pin 5 El programa es igual que el anterior, pero cambiando el número del pin: https://create.arduino.cc/editor/javierquintana/2c75c843-72c9-4dc4-b01a-410e318f1080/preview Resistencias pull-up y pull-down En los proyectos con dispositivos digitales, caso de la placa Arduino, reciben señales de entradas digitales del exterior. Estas señales externas sirven para activar o desactivar un circuito, recibir información del estado de un sensor,... Las resistencias “pull-up” y “pull-down” son resistencias que se ponen en las entradas digitales para fijar un valor por defecto, nivel alto (“1”) o nivel bajo (“0”), cuando no se detecta ningún valor. Esto ocurre cuando la entrada no está conectada a nada. En el caso de tener que conectar un interruptor a una entrada digital de Arduino necesitamos hacerlo a través de una resistencia de este tipo. Veamos un ejemplo: La resistencia “pull-up” establece un nivel alto (1) en la entrada digital en el estado de reposo del circuito. Un circuito con una entrada “pull-up” sería el siguiente. La resistencia  “pull-down” establece un nivel bajo (0) en la entrada digital en el estado de reposo del circuito. Este tipo de circuito es el más empleado en las entradas digitales para evitar lecturas erróneas debido a ruidos externos y consumo de energía. La resistencia suele ser de 10 kΩ y el circuito con esta configuración sería el siguiente. Un ejemplo de circuito “pull-down” lo tenemos en la placa EduBásica en el pin digital D2, preparado para configurarlo como entrada, tiene conectado un pulsador y una resistencia pull-down. El esquema del circuito es el siguiente El funcionamiento de este circuito que está conectado al pin digital D2 como entrada es detectar si el pulsador está pulsado o no.  Si el pulsador no está pulsado en Pin, que está conectado a D2, tenemos 0V por no pasar corriente entre el pin D2 y masa. Por tanto, corresponde a un nivel bajo o “0” lógico. Si el pulsador esta pulsado en el pin D2 tenemos 5V, que corresponde a un nivel alto o “1” lógico. Si en el anterior circuito no se pone la resistencia de 10KΩ y el pulsador está abierto con el propósito de tener un nivel bajo porque no hay tensión, puede ocurrir y de manera aleatoria que el pin D2 lea un nivel alto por alguna interferencia producida por motores eléctricos, bobinas de un relé u otro dispositivo de nuestro proyecto. Montaje 3: SEMAFORO CON EDUBASICA Montaremos un semáforo con los tres leds de la EduBásica. Aquí es muy fácil, no hay que hacer ningún montaje. Montaje 3: SEMÁFORO SIN EDUBASICA La EduBásica es opcional y podemos montar el circuito correspondiente con una protoboard, pero EduBásica nos ahorra trabajo. Necesitamos añadir una resistencia entre el pin y el led, para evitar que el led se funda. en este caso tienes libertad de utilizar D3 D4 D5 o otros que quieras. Visualización de datos por el puerto serie. Serial.print Queremos enseñarte un nuevo comando: Serial.print . Este comando nos manda un texto al puesto serial por el que nos comunicamos con Arduino. De esta manera podemos depurar un programa sabiendo siempre por que línea está. Para que funcione debemos tener en cuenta que: Hay que inicializar Serial. Esto se hace poniendo Serial.begin(9600) dentro de la rutina de setup(). 9600 se refiere a la velocidad que se comunicará. Serial.print(“xxx”) escribe lo que ponemos entre comillas tal cual. Serial.print(x) escribe el valor que contenga la variable x. Serial.println() es similar a lo anterior pero después añade un salto de línea. Para ver lo que nuestro Arduino nos comunica por Serial, abrimos el monitor Serial que tenemos en el programa Arduino: https://create.arduino.cc/editor/javierquintana/28bf7eaa-441b-46fa-8a1c-7db91075f6ac/preview Montaje 4: Pulsador Hasta ahora hemos visto como programar Arduino para que ejecute repetitivamente acciones, pero este actuaba de manera autónoma y nosotros sólo podíamos observar. Pero podemos interactuar con Arduino, por ejemplo, realizando una acción cuando activamos un pulsador. . En este ejemplo, vamos a encender un led D3 verde cuando actuamos sobre el pulsador.  Montaje 4: Pulsador  sin EDUBASICA Utilizamos por ejemplo el pin 2 corresponde al pulsador y el pin 3 al led verde, solo nos queda cargar el programa y probar.  Montaje 4: Pulsador con EDUBASICA Con la misma estructura (D2 es donde está el pulsador en EDUBASICA y D3 el LED VERDE) no hace falta realizar ningún cableado. Programa 4. Comando digitalRead ... Aparece un comando nuevo “ digitalRead(buttonPin) ” . Retorna el valor del pin que se ha configurado como entrada y al igual que en el caso de los pines que se configuran como salida, puede tener dos valores HIGH y LOW. Si es HIGH significa que este pin está unido a la señal de 5v, si es LOW significa que está unido a 0v. ¿Por qué cuando el pulsador está en OFF D2 está a 0V? Porque está en PULL-DOWN https://create.arduino.cc/editor/javierquintana/911ef749-947b-424b-9f88-36e10e88a877/preview Programa 4. con 3 leds Otra opción es utilizar este programa donde se ve más visual: https://create.arduino.cc/editor/javierquintana/701c5f35-8022-4b66-bca2-c99ffd7bb906/preview Conexiones analógicas Las entradas analógicas se utilizan para leer la información de la magnitud física que nos proporciona los sensores de temperatura, luz, distancia,... La tensión que leemos del sensor nos la proporciona un circuito asociado a dicho sensor en un rango de valores de tensión continua entre 0V y 5V. La placa de Arduino tiene 6 entradas analógicas marcados como “A0”, “A1”,..., “A5” que reciben los valores continuos en un rango de 0V a 5V, pero la placa Arduino trabaja sólo con valores digitales, por lo que es necesario una conversión del valor analógico leído a un valor digital. La conversión la realiza un circuito analógico/digital incorporado en la propia placa. El conversor A/D de la placa tiene 6 canales con una resolución de 10 bits. Estos bits de resolución son los que marcan la precisión en la conversión de la señal analógica a digital, ya que cuantos más bits tenga más se aproxima al valor analógico leído. En el caso de la placa Arduino el rango de los valores analógicos es de 0 a 5 V y con los 10 bits de resolución se puede obtener de 0 a 1023 valores digitales y se corresponde cada valor binario a (5V/1024) 5 mV en el rango analógico. En estas condiciones son suficientes para hacer muchos proyectos tecnológicos. En el caso de necesitar mayor resolución y como no podemos aumentar el número de bits de conversor A/D se puede variar el rango analógico utilizando el voltaje de referencia Vref. Las entradas analógicas tienen también la posible utilización como pines de entrada-salida digitales, siendo su enumeración desde 14 al 19. En este manual dedicamos un capítulo completo a analizar la forma en que Arduino lee magnitudes analógicas. Asimismo veremos numerosos montajes en los que se utilizan estos pines para lectura de sensores. Señales PWM Arduino, ESP32, Micro:bit, PicoW...  tienen entradas analógicas y digitales. Pero salidas sólo digitales. Para  simular una salida analógica entre 0V y 5V  se utilizan señales digitales PWM. En Arduino sólo tiene 6 salidas pseudo-analógicas. En los pines digitales 3, 5, 6, 8, 10 y 11 son PWM ¿Qué es eso de PWM? La señal PWM (Pulse Width Modulation, Modulación de Ancho de Pulso ) es una señal que utiliza el microcontrolador para generar una señal continua sobre el proceso a controlar. Por ejemplo, la variación de la intensidad luminosa de un led, el control de velocidad de un motor de corriente continua,... Para que un dispositivo digital, microcontrolador de la placa Arduino, genere una señal continua lo que hace es emitir una señal cuadrada con pulsos de frecuencia constante y tensión de 5V. A continuación, variando la duración activa del pulso (ciclo de trabajo) se obtiene a la salida una señal continua variable desde 0V a 5V. Veamos gráficamente la señal PWM: Los pines digitales de la placa Arduino que se utilizan como salida de señal PWM generan una señal cuadrada de frecuencia constante (490Hz), sobre esta señal periódica por programación podemos variar la duración del pulso como vemos en estos 3 casos: La duración del pulso es pequeña y la salida va a tener un valor medio de tensión bajo, próximo a 0V. La duración del pulso es casi la mitad del período de la señal, por tanto, la salida va a tener un valor medio de tensión próximo a 2,5V. La duración del pulso se aproxima al tiempo del período y el valor medio de tensión de salida se aproxima a 5V. Ejemplo en código ArduinoIDE y Arduino Para ejecutar una señal PWM, es simplemente  analogWrite(analogOutPin, outputValor);  donde analogOutPin es el número del Pin PWM, acuérdate que sólo puede ser uno de estos 6 :  3, 5, 6, 8, 10 y 11 y outpuValor es el valor de la señal PWM pero ojo desde 0 a 255 es decir si quieres el valor de 0V tienes que poner 0, si quieres el valor de 5V tienes que poner 255 y si quieres poner un valor medio, haz una regla de tres, por ejemplo 2.5V tienes que poner 255/2=127 o 128 da igual Otro ejemplo en Python con Micro:bit pin16.write_analog(brillo) donde brillo puede ir de 0 a 255 Mapeo ¿Qué es eso de "mapeo"? En la jerga robótica, dicho pronto y mal pero para que se entienda, mapear significa hacer un cambio de escala ¿Cuándo se dan esas situaciones? SITUACION A : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 y queremos que se copie en una salida digital PWM de Arduino que va de 0-255 SITUACION B : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 e interpretarlo en sus valores de voltios. Si suponemos que la placa se alimenta a 5V la variable de salida irá desde 0 a 5V SITUACION C : Queremos leer el valor de un LDR, que tapándolo nos da 917 e iluminándolo al máximo es 1023, lo queremos copiar en una salida digital PWM, o sea que la salida va desde 0 a 255 Nota: El mínimo de 917 (puede ser otro número, es un valor experimental) es debido a que los LDR van montados en un divisor de tensión como el de la figura, y la resistencia de abajo, siempre se queda algo de tensión SITUACION D : Queremos según el valor de un joystick conectado a las entradas analógicas de un Arduino (esto pasa en Echidna) se representen en la pantalla de Scratch 2*220 por 2*180, es decir   - Eje X : el potenciómetro (vamos a llamarlo potx ) va de 0 a 1023 y la salida ( ejex ) va de -220 a 220   - Eje Y : el potenciómetro (vamos a llamarlo poty ) va de 0 a 1023 y la salida ( ejey ) va de -180 a 180 SITUACION E: Ídem pero no con el potenciómetro, sino con el acelerómetro (vamos a llamarlo acel ) que va 250 a 500 SITUACION F : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 y queremos que se copie en una salida de un servo, por lo tanto lo que necesita es un ángulo que va de 0-180 SITUACION G : Idem que F pero una raspberry por lo tanto GPI va de 0-65.535 ¿Cómo se consigue mapear? Si programas con código ArduinoIDE, tienes la instrucción map Si no tienes map, por ejemplo, programas con bloques gráficos tipo Scratch, lo tienes que hacer a mano ¿Cómo? Con la ecuación de una recta Para entendernos : X  será el valor de entrada que tiene unos valores límites X 1 e X 2 Y es la variable de salida que queremos y que tiene otros valores límites Y 1  e Y 2 Luego y tiene esta ecuación : donde m es  Gráficamente  ¿Una hoja de cálculo para poder hacer esos cálculos? Sí, claro, en este enlace https://docs.google.com/spreadsheets/d/1qNbaZ2c_H1UCNhtvp2LimfWSbaGvZLVl5gJr9Wu0ifU/edit?usp=sharing dale a descargar Rellena las casillas amarillas, y en las naranjas tienes el resultado de m y n ¿Me lo puedes hacer para cada situación anterior? Si claro: SITUACION A : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 y queremos que se copie en una salida digital PWM de Arduino que va de 0-255 Límites de las variables : X de 0-1023 Y de 0-255 Con la instrucción map : Y = map( X, 0, 1023, 0, 255); Sin la instrucción map Y = 025 * X  pues 255/1023 = 0.25 también podemos escribir Y = X/4 SITUACION B : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 e interpretarlo en sus valores de voltios. Si suponemos que la placa se alimenta a 5V la variable de salida irá desde 0 a 5V Límites de las variables : X de 0-1023 Y de 0-5 Con la instrucción map : Y = map( X, 0, 1023, 0, 5); Sin la instrucción map Y = 0.0048 * X  pues 5/1023 = 0.0048 o también podemos escribir Y = X/204 que queda mejor pues 1023/5=204 aprox. SITUACION C : Queremos leer el valor de un LDR, que tapándolo nos da 917 e iluminándolo al máximo es 1023, lo queremos copiar en una salida digital PWM, o sea que la salida va desde 0 a 255 Límites de las variables : X de 917-1023 Y de 0-255 Con la instrucción map : Y = map( X, 917, 1023, 0, 255); Sin la instrucción map Y = 2.4 * X  pues 255/(1023-917) = 2.4 SITUACION D : Queremos según el valor de un joystick conectado a las entradas analógicas de un Arduino (esto pasa en Echidna) se representen en la pantalla de Scratch 2*220 por 2*180, es decir   - Eje X : el potenciómetro (vamos a llamarlo potx ) va de 0 a 1023 y la salida ( ejex ) va de -220 a 220   - Eje Y : el potenciómetro (vamos a llamarlo poty ) va de 0 a 1023 y la salida ( ejey ) va de -180 a 180 EJEX Límites de las variables : potx de 0-1023 ejex de -220 a +220 Con la instrucción map : ejex = map( potx, 0, 1023, -220, 220); Sin la instrucción map ejex =-220 + 0.43*potx pues (220-(-220))/1023=0.43 EJEY Límites de las variables : poty de 0-1023 ejey de -180 a +180 Con la instrucción map : ejey = map( poty, 0, 1023, -180, 180); Sin la instrucción map ejey =-180 + 0.35*poty pues (180-(-180))/1023=0.35 SITUACION E: Ídem pero no con el potenciómetro, sino con el acelerómetro (vamos a llamarlo acel ) que va 250 a 500 EJEX Límites de las variables : acelerómetro acel de 250-500 ejex de -220 a +220 Con la instrucción map : ejex = map( acel, 250, 500, -220, 220); Sin la instrucción map ejex =-220 + 1.76*(acel-250) pues (220-(-220))/(500-250)=1.76 EJEY Límites de las variables : acelerómetro acel de 250-500 ejey de -180 a +180 Con la instrucción map : ejey = map( acel, 250 500, -180, 180); Sin la instrucción map ejey =-180 + 1.44*(acel-250) pues (180-(-180))/(500-250)=1.44 SITUACION F : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 y queremos que se copie en una salida de un servo, por lo tanto lo que necesita es un ángulo que va de 0-180 Límites de las variables : X de 0-1023 Y de 0-180 Con la instrucción map : Y = map( X, 0, 1023, 0, 180); Sin la instrucción map Y = 0.17* X  pues 180/1023 = 0.17 también podemos escribir Y = X/5.7 pues 1023/180=5.7 SITUACION G : Idem que F pero una raspberry por lo tanto GPI va de 0-65.535 Límites de las variables : X de 0-65535 Y de 0-180 Con la instrucción map : Y = map( X, 0, 65535, 0, 180); Sin la instrucción map Y = 0.00274* X  pues 180/65535 = 0.00274 pero es más cómodo al revés Y = X/364 pues 65535/180=364 3 Entradas y salidas Entradas y Salidas Vamos a profundizar más en el Arduino y veremos como podemos añadir dispositivos de entrada y salida que nos permitirá la interacción más emocionante via GIPHY Si tienes dudas técnicas en este capítulo pon un ticket a http://soporte.catedu.es/ y te ayudaremos: También tienes nuestro whatsapp o telegram en la web www.catedu.es en información (preferible) Intensidad LED Montaje 5: Control de la intensidad de iluminación de un LED Como ejemplo práctico de la señal PWM vamos a realizar un control de iluminación  sobre un diodo led. Montaje 5 Sin EDUBASICA En una protoboard montamos el circuito formado por el potenciómetro conectado a la entrada analógica A0. y también montamos el circuito conectado al pin digital D3, al D4 o al D5 como quieras, utilizado como salida PWM, de esta manera nos va a permitir variar la luminosidad del LED. Aquí en la ilustración puedes ver las conexiones del potenciómetro al A0 y el LED al D5 Montaje 5 CON EDUBÁSICA En este caso ya tiene integrado un potenciómetro conectado a la entrada A0. Y vamos a utilizar de salida el diodo verde conectado a D3 y a una resistencia ya integrado en EDUBASICA (podemos usar también D4 y D5) : No tienes que montar nada, la Edubasica lo tiene ya montado. Un vídeo de cómo queda . Vamos a ver una pequeña demostración: Cargamos el programa ejemplo, en la placa Arduino y teniendo acoplada la placa EduBásica o montados los circuitos en una placa protoboard, podemos ver su funcionamiento. Para ver su funcionamiento activamos el monitor serie del IDE de programación y variamos el potenciómetro. El resultado es una variación de luminosidad y variación de valores en el monitor serie. El siguiente gráfico es una pantalla del monitor serie con los valores leídos y el valor aplicado a la señal PWM para variar la luminosidad. Montaje 5 Programa. Instrucciones analorRead analogWrite y map El valor del potenciómetro lo leerá la instrucción analogRead(pin) que lee valores analógicos cada 100µs y los convierte por el conversor analógico digital en valores de 10 bits por lo tanto de 0 a 1024. Los pines para leer sólo pueden ser los A0 al A5. ( ver+ ) Utilizaremos la instrucción analogWrite(pin,value) para crear la onda PWM en el pin correspondiente, que sólo puede ser en el Arduino Uno el 3, 5, 6, 9, 10, 11. El valor value es un número entre 0 y 255 y es simulado con una onda cuadrada de 490Hz o 980Hz (depende del pin,  ver+ ). Como uno lee 0 a 1024 y el otro necesita valores de 0 a 255 necesitamos un traductor o mapeo con la instrucción map(value, fromLow, fromHigh, toLow, toHigh)  esta instrucción la colocaremos, como suele estar los intérpretes en medio, o sea, entre la instrucción analogRead y la analogWrite Veremos más adelante esta instrucción map https://create.arduino.cc/editor/javierquintana/8bee8469-df52-4b88-a406-9f54fe3e20f8/preview La regulación del potenciómetro provocará una variación de voltaje en el pin de entrada analógico 0 de Arduino. Se realizará una conversión analógica-digital en el que los valores de tensión analógicos entre 0 y 5 V se transforma a un rango discreto de valores de 0 a 1023. Para modificar la intensidad del led D3 rojo le se enviará una señal pseudoanalógica PWM utilizando la salida 5 digital de Arduino. Para ello se enviará un valor de 0 a 255 que marcará el ciclo de trabajo de la onda cuadrada PWM. Previamente habrá que realizar un mapeo (instrucción map) para asignar valores desde el intervalo [0, 1023] al [0, 255]. En este vídeo se ha modificado el mensaje que sale por el puerto serie a Serial.print("valor analógico leído=");  Serial.println(analogRead(A0));  El potenciómetro Montaje 6: Lectura de potenciómetro y regulación de la luz sin map Vamos a realizar un programa para comprobar que al variar el valor de una resistencia mediante un potenciómetro, también variará la cantidad de luz que emite un led. Como se puede ver en el siguiente vídeo, a medida que giramos el potenciómetro el led varía su luminosidad. Perooooo si esto ya lo hemos hecho !! aquí   Cierto, pero ahora SIN LA INSTRUCCIÓN MAP para comprender bien su funcionamiento. Para ello el valor que lee 0-1024 lo convertimos a 0-255 que necesita la señal PWM que enviamos al LED simplemente dividiéndolo entre 4. (1024/4 = 256 aproximadamente 255) Montaje 6 CON EDUBASICA Vamos a aprovechar el A0 que está conectado al potenciómetro y utilizaremos el D3 que está conectado al LED VERDE Montaje 6: SIN EDUBASICA Pues se necesita hacer el cableado correspondiente A0 con el potenciómetro y D3 a un led: Montaje 6: Programa. Regulación LED con potenciómetro sin la instrucción map El programa sería el siguiente https://create.arduino.cc/editor/javierquintana/c0562793-5b64-490a-8dc4-72e4428de59a/preview Montaje 7: Leer valores potenciómetro por el puerto serie sin la instrucción map Vamos ahora leer los valores en voltios que salen del potenciómetro. Pero igual que antes sin la instrucción map. Para ello tenemos que convertir los valores leídos del potenciómetro que tienen un rango de valores de 0-1024 a valores de voltios, que como está alimentado a 5V, serán de 0-5 por lo tanto vamos a dividirlo entre 204.6 pues 1024/204.6 = 5. Montaje 7 SIN EDUBÁSICA Conectamos la salida de un potenciómetro a A0 Montaje 7 CON EDUBASICA No hay que hacer nada, ya está ! Montaje 7 Programa https://create.arduino.cc/editor/javierquintana/e95259e6-9c6f-4079-8c25-fbbbc212ca55/preview El sensor de luz LDR Hasta ahora hemos trabajado con resistencias de valor fijo, pero existen una serie de resistencias que varían según distintos parámetros físicos a las que se les somete como presión, luz y temperatura entre otros. Existe una gran variedad que se utilizan para construir lo que llamamos sensores . Montaje 8 Regular el led con la luz En esta práctica vamos a diseñar un circuito que sea sensible a la luz. El objetivo  será regular la intensidad luminosa de un led con una LDR , una resistencia sensible a la luz. Montaje 8 CON EDUBASICA En este montaje usaremos la resistencia LDR de la placa Edubásica. Como ya hemos comentado, la LDR modifica su resistencia en dependiendo de la cantidad de luz que incida sobre ella. El siguiente programa mostrará por consola (“Monitor Serial”) las variaciones de luminosidad que detecte la LDR simplemente pasando la mano por encima de ella. Valores entre 917 y 1024 La configuración es PULL-UP es decir, cuando el valor LDR aumenta (se acerca al OFF) la resistencia superior "tira = pull" hacia arriba = up. Los voltios suben. Si no hay luz, los voltios se acercan al máximo 5V que equivale a la lectura que el Arduino convierte en digital en 1024. Cuando hay luz, el LDR baja su resistencia, por lo que los voltios bajan. Pero no llega a 0 Ohm, se queda pues en un valor de voltios bastante alto, 4.5V que corresponde más o menos al valor que lee Arduino en digital 917 Montaje 8  SIN EDUBASICA Hay que conectar en formato pull-up el LDR a A1 y un led verde a D3, el valor de la resistencia si quieres utilizar los mismos valores que mostramos 917-1024 tendrá que ser 470 Ohm. Cuánto más alto sea, más bajo serán los valores. Montaje 8 Programa Como vemos en el esquema, el LDR está conectado a la entrada A1 del Arduino, por lo tanto la instrucción de lectura será  analogRead(1) lo mapearemos correctamente a una variable llamada luz y utilizaremos el LED Verde conectado a D3 por lo que la instrucción de salida será  analogWrite(3,luz) Mapearemos con la instrucción map para convertir 917-1024 a valores de PWM 0-255 https://create.arduino.cc/editor/javierquintana/326c66b3-c8b8-4879-980c-f81af7ab65d8/preview Internamente la función map ¿Cómo funciona? ¿Cómo se podría quitar en estos anteriores programas? Vimos en el ejemplo del potenciómetro que los valores a leer eran de 0-1024 y si lo queríamos convertir 0-255 era simplemente dividir por 4 y si es convertirlo de 0-5V se dividía por 204.6 Pero en este caso EL LDR EMPIEZA DESDE 917 NO DESDE 0 como en el potenciómetro. En una lectura previa de lo que nos devuelve el LDR y nos devuelve unos valores mínimo y máximo por ejemplo: 917, 1024 lo llamaremos A1min y A1max y queremos traducir estos valores al rango  0-255 pues es lo que podemos darle a un LED. Que lo llamaremos luxmin y lumax Podemos hallar la pendiente m y el corte con el eje y n de la recta y = mx + n que convierte los valores analógicos 917-1024 a los valores 0-255. En el programa en Arduino si no queremos usar la función map , tenemos que escribir esa ecuación. Aqui tienes una hoja de cálculo para calcular la pendiente y la intersección con el eje  Bobinas-altavoz El altavoz es una simple bobina o electroimán que mueve una membrana, si la membrana se mueve repetidamente puede producir un sonido. Este sonido es audible si está dentro de nuestro rango auditivo, suele ser entre 20Hz y 20kHz ¿Sabías que a medida que creces el margen de agudos (20kHz) baja? via GIPHY Montaje 9 Pitido Vamos a incorporar un altavoz y realizar una sirena. Al ser una bobina, es conveniente utilizar una amplificación por medio de un transistor, por D6 enviaremos la señal cuadrada a la base del transistor. Montaje 9 SIN EDUBASICA Montaje 9 Con EDUBÁSICA Conectaremos el altavoz en el terminal X2 y el interruptor V1 en ON para que esté alimentado Montaje 9: Programa El código es muy sencillo, simplemente es una intermitencia por D6 que en este caso se ha elegido 1mseg ¿Qué pasaría si aumentamos este valor? https://create.arduino.cc/editor/javierquintana/59845f8c-fb1f-4d8e-b04b-845687aad4a3/preview El resultado es : Montaje 9: SIN EDUBÁSICA Y SIN TRANSISTOR A LO BRUTO ! Bueno, vamos a conectarlo DIRECTAMENTE a D6 (el otro extremo a GND) no es muy conveniente pero a ver el resultado (con el mismo código): ¿Cuál suena más? Premio entrada a dinópolis Teruel quien acierte.. via GIPHY Montaje 10 Alarma Teniendo en EDUBASICA los LEDs, el LDR que nos puede servir como sensor y el altavóz amplificado con un transistor, y nosotros que somos expertos programadores, NOS ESTÁ PIDIENDO A GRITOS hacer una alarma: Enunciado: Cuando el LDR esté tapado, tiene que sonar un pitido intermitente de un segundo, con visualización también en los LEDs Montaje 10: SIN EDUBASICA Pues hay que poner el LDR en A1, las luces (por simplicidad uno), el altavoz y el transistor con la conexión en la base por D5: Montaje 10: CON EDUBASICA Se simplifica mucho la conexión sólo el altavoz tal y como está conectado en el montaje 14 Montaje 10: Programa: https://create.arduino.cc/editor/javierquintana/e5766acc-9256-4277-a7a5-464ae1ba2976/preview Montaje 10: Resultado   LCD La pantalla LCD Las pantallas Liquid Cristal Display es la forma más sencilla de poner una interfaz de texto a nuestro Arduino. via GIPHY La pantalla LCD tiene un precio muy bajo, el más común es el Hitachi HD44780 monocromo con configuración 16 caracteres y 2 líneas (16x2) pero también se venden 20×02, 20×04 y 40×02. Su conexión DIRECTA con el Arduino no es recomendable por la cantidad de cables que se necesitan y el código elaborado, pero tiene la ventaja de tener total libertad en creación de caracteres y control. Si quieres ver esta opción puedes ver la página de Luis LLamas Conexión I2C Como hemos dicho en La pantalla LCD no es recomendable su conexión directa con Arduino, para ello está este controlador que permite su conexión utilizando sólo dos cables . Los dos componentes pueden salir por menos de 5€. Su conexión con el LCD tiene que ser tal y como indica la imagen, y soldando los terminales con cuidado: CC-BY-SA Luis Llamas Mejor que el Display, es el OLED, tiene un consumo más bajo, mejor visibilidad en ambientes con luz, y ya estan listas para conectar con Arduino con el protocolo I2C Recomendamos esta página https://www.luisllamas.es/conectar-arduino-a-una-pantalla-oled-de-0-96/ Conexión con el Arduino La conexión tiene serie tiene que ser en los pines A4 y A5 exclusivamente en el Arduino Uno pues son los dedicados para el protocolo serie I2C que veremos más adelante. Para otras placas ve r la página de Luis Llamas . El esquema es muy sencillo: CC-BY-SA Luis Llamas Contraste Tiene un potenciómetro azul para regular el contraste, bastante sensible por cierto (una poca variación hace que nuestro texto no se vea correctamente): Montaje 11 Escaneo El bus I2C está vinculado en el Arduino Uno a los Pines A4 y A5 como hemos visto en la anterior página , el protocolo serie I2C necesita la librería Wire.h (no ejecutar el editor online, no esta wire.h) pero la dirección de dispositivo no lo sabemos PARA ELLO HAY QUE EJECUTAR ESTE CÓDIGO: https://create.arduino.cc/editor/javierquintana/0f2a1666-cec2-43ad-a978-e83c421316a5/preview Extraído de Arduino.cc o también de Luis Llamas Nos tiene que salir lo siguiente: En mi caso como ves la dirección me ha salido 0x3F pero puede ser cualquier otro, por ejemplo otro valor muy típico es 0x27 Librería LiquidCrystal Sólo nos falta incorporar la librería LiquidCrystal_I2C que te lo puedes descargar aquí Una vez descargado, es un fichero comprimido .zip o .rar no lo descomprimas directamente desde el menú del entorno de programación lo incorporas de esta manera : Principales funciones LiquidCrystal_I2C(lcd_Addr, lcd_cols, lcd_rows) Crea una variable (informáticamente un objeto de la clase LiquidCrystal_I2C) para poder utilizar sus funciones, hay que indicar entre paréntesis la dirección, columnas y filas indicadas. Por ejemplo LiquidCrystal_I2C lcd(0x3F,16,2); ¿No sabes la dirección?. Eso es que te has saltado lo que hemos explicado anteriormente. E n mi caso es 0x3F. Después de crear esa variable hay que inicializarlo con lcd. init() lcd es el nombre de la variable, puedes poner el nombre que quieras lcd. clear() Borra la pantalla y posiciona el cursor en la esquina superior izquierda (0,0). lcd. setCursor(columna, fila) Posiciona el cursor del LCD en la posición indicada por columna y fila. lcd. print(" texto ") Escribe el texto lcd. scrollDisplayLeft() Se desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la izquierda. lcd. scrollDisplayRight() Se desplaza el contenido de la pantalla (texto y el cursor) un espacio a la derecha. lcd. backlight() Enciende la Luz del Fondo del LCD lcd. noBacklight(); Apaga la Luz del Fondo del LCD lcd. createChar (num, datos) Crea un carácter personalizado permite crear hasta 8. Para usar esta función ver esta página. Montaje 12 Texto en LCD Vamos a realizar un ejemplo para practicar: El encendido y apagado de la pantalla Visualización de texto Visualización de texto con desplazamiento Practicaremos qué código tiene que estar en el código dentro de setup y qué código dentro de bool : El código es sencillo, la primera parte que sólo lo hace una vez, tiene que estar en setup y en loop sólo la parte de que se desplaza contínuamente. OJO CAMBIA TU DIRECCIÓN 0x3F si no es esa https://create.arduino.cc/editor/javierquintana/8c633ec1-0e2a-4c5f-8fa0-a0a1bb31645c/preview Sensor de ultrasonidos Manejar este tipo de sensores que son muy comunes en las aplicaciones de robótica para medir distancias. Para ello aprenderás a: Realizar las conexiones necesarias sobre el sensor ultrasonidos HC-SR04. Conocer el funcionamiento de un radar. Cómo convertir el tiempo de rebote de un sonido en distancia. Montaje 13: Medición de la distancia Este tipo de sensores también nos permite conocer la distancia a un objeto. Es más preciso que el de infrarrojos visto en la sección anterior y su rango de funcionamiento también es mayor. Funciona desde los 2cm hasta los 3 metros.  Podemos usar un sensor de ultrasonidos para obtener la distancia a un objeto. Este sensor se basa en el envío de una señal acústica y la recepción del eco de dicha señal. Lo que haremos después, al igual que hace un radar , un aparato de ecografías o un murciélago es calcular la distancia en función del tiempo que ha tardado el rebotar el sonido y la velocidad del sonido. Podemos encontrar las especificaciones en la página del fabricante. Uno de los modelos más comunes es el HC-SR04: No es un sensor muy preciso. Si el obstáculo presenta caras oblicuas ya falla en la lectura del eco. Pero por el precio que tiene y la sensibilidad, no esta mal para utilizarla en la robótica educativa. El sensor tiene 2 partes como puedes ver en la figura. Una se encarga de enviar un sonido (a una frecuencia alta que no podemos escuchar), y la otra parte detecta cuando ese sonido vuelve. Este sensor es muy útil en robots móviles para diversas acciones como no chocar o mantenerse a cierta distancia de una pared. El sensor HC-SR04 que usamos en estos ejemplos tiene 4 pines que corresponden (de izquierda a derecha): GND , Vcc (a +5V) Trig: es el que emite el ultrasonido Echo: Es el que recibe el rebote (Algunos modelos solo tienen 3 pines -HCSR05- indicándonos por el tercer pin ya directamente un valor proporcional con la distancia.) No aconsejamos usar la Shield de Edubasica, sino conectar diréctamente , en este caso no nos supone un ahorro de cableado, no como en los motores, leds, ldr, etc...: El programa es: https://create.arduino.cc/editor/javierquintana/e3bac5c7-0bf1-49d9-b267-94b628e04f2e/preview El resultado : Montaje 14 Visualización distancia en el LCD Vamos a repetir el anterior programa pero que lo visualice el LCD Montaje 14 Conexión: Conectar el sensor de Ultrasonidos Y el LCD Montaje 14 programa https://create.arduino.cc/editor/javierquintana/60770327-de2a-41d0-ac11-ddcddb1da0c9/preview Temperatura y humedad Vamos a utilizar dos sensores para medir estas variables:  DHT12 y su hermano pequeño DHT11 . Ya explicamos estos sensores en el capítulo de sensores https://libros.catedu.es/books/programa-arduino-mediante-codigo/page/sensores ¿Cómo se conecta? Para ello tendrás que realizar las conexiones necesarias para poder obtener los datos desde Arduino. Se trata de un sensor digital que utiliza 3 pines: Alimentación +5V, tierra/GND (-) y pin de datos (out) por donde se envían los datos de humedad y temperatura. A veces el sensor viene sobre 4 pines, en este caso uno de ellos no se conecta. Como las medidas de humedad y temperatura van por un solo pin, la información se transmite como un tren de pulsos en serie, por lo tanto, necesitamos un programa que "extraiga" eso dos datos de forma diferenciada. Para ello vamos a usar una librería referenciada por DHT11.h .  A través del monitor serie del IDE de Arduino podremos ver las medidas obtenidas. Esquema DHT11 : Es un modelo "conectar y listo" que ya vienen con los cables preparados, pero si te fijas son en este orden : GND - 5V -NC - D2 donde NC significa NO CONECTADO y D2 son los datos Lo conectamos en el Arduino sin necesidad de placa Protoboard: Para este montaje, la colocación de la placa Edubásica no implica ninguna ventaja. utilizando cables macho-macho Esquema de conexión: Esquema DHT12 Es un sensor que necesita 3.3V pero si trabajas con 5V necesitas hacer este puente con una resistencia de más o menos 10K O con la placa Protoboard Fuente Cactus.io CC BY-NC-SA 3.0 Librería  DHT11.h Para poder utilizar este dispositivo, necesitas esta librería, lo primero que tienes que hacerlo es descargarlo, puedes hacerlo desde https://github.com/adafruit/DHT-sensor-library o este enlace de Drive (zip - 4,29 KB ), o simplemente buscando DHT11 library en Internet. Una vez descargado, tienes que incorporarlo en tu librería, aquí tienes cómo hacerlo Librería  DHT12.h Para poder utilizar este dispositivo, necesitas esta librería, lo primero que tienes que hacerlo es descargarlo, puedes hacerlo desde   https://github.com/adafruit/DHT-sensor-library o simplemente buscando DHT12 library en Internet. Una vez descargado, tienes que incorporarlo en tu librería, aquí tienes cómo hacerlo Montaje 15 Medición T y H por puerto serie  con DHT11: https://create.arduino.cc/editor/javierquintana/57997bda-7323-4f8a-9157-92f9611dbdba/preview El resultado se puede ver en este vídeo, simplemente soplando nuestro vaho pasamos de 20% de humedad y 22ºC a 93% y 24ºC. Si lo hacéis con niños, enseguida se les ocurre ponerlo en el sobaco, menos mal que solo son 5V ;) _ Montaje 16 Medición T y H por puerto serie con DHT12 La librería de este sensor es más potente y nos puede decir la sensación térmica: https://create.arduino.cc/editor/javierquintana/66a222b4-8e95-4693-b8db-df5a1fdb68a3/preview El resultado es: Montaje 17 H y T por LCD Ahora vamos a conectarlo por LCD : Conexiones Si tienes el DHT11 o si tienes el DH12 lo has visto ya Ahora añade el LCD con el I2C Programa En este caso lo hacemos con el DHT12 ya sabes que si utilizas DHT11 no mide la humedad y la sensación térmica https://create.arduino.cc/editor/javierquintana/10dcd8cb-1128-4959-8d78-70464cea939f/preview Processing Es un programa similar al IDE de Arduino que has estado manejando hasta ahora, sólo cambia en un botón de PLAY y en otro de STOP. Es software abierto desarrollado en Java por Ben Fry y Casey Reas a raíz de una reflexiones en un congreso donde se detecto esta necesidad. Te lo puedes descargar de http://processing.org   ¿Para qué sirve? Es muy común tener la necesidad te representar los datos que nos da Arduino en un entorno visual mucho más atractivo que el monitor serie que nos ofrece IDE Arduino. Si quieres saber las instrucciones que tiene y más información consulta esta página . Saber el puerto de conexión Para empezar a utilizar Processing con nuestro Arduino necesitamos saber en qué puerto se conecta, una forma fácil es cargar y ejecutar este código con el Arduino conectado y que liste los puerto, esta instrucción printArray(Serial.list());  nos lo puede decir  Y el resultado puedes ver que sale abajo en la consola [0] "COM4" luego es el 0 en mi caso Montaje 18 Representación gráfica de medidas con Processing. Una vez obtenidos los datos de temperatura y humedad a través del sensor DHT11 desde Arduino, enviamos, a través del puerto serie, estos datos al PC, donde tenemos ejecutando un programa en Processing que está "escuchando" el puerto serie, obteniendo los datos y representándolos en pantalla. Simultáneamente guardamos los datos en un archivo de texto que posteriormente podremos analizar en una hoja de cálculo. Programa a cargar en el ARDUINO Cargamos este programa, fíjate que sólo ponemos un valor de la temperatura, si queremos representar la humedad, quitamos el comentario de la temperatura y ponemos el de la humedad IMPORTANTE : No hay que tener abierto el monitor serie del IDE de Arduino porque ocupa el puerto y, por lo tanto, no deja leer los datos a Processing. Si fuera un DHT12 en vez de un DHT11 poner comentarios a las 4 primeras líneas delante // y quitárselas a las 3 siguientes https://create.arduino.cc/editor/javierquintana/09ac70ea-0d4b-4d26-bce4-4b45bb45d3cb/preview Programa a Cargar en PROCESING Aquí lo tienes (rar - 1,96 KB ), sólo representa un valor, está puesto en el puerto 0 puertoArduino = new Serial(this, Serial.list()[0], 9600); El resultado puedes verlo aquí abajo para la temperatura, el aumento se debe a aplicar vaho al sensor: Otro programa de visualización de datos En este caso no vamos a representar los datos en forma de gráfica, sino por colores, y además vamos a añadir un botón que encienda un LED conectado por simplicidad en el pin 13 Programa a cargar en el ARDUINO El programa lee la temperatura y lo escribe en el puerto serie en forma de byte. También lee el puerto serie para cambiar el estado del led. #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); boolean status=LOW; //Estado del led void setup() { Serial.begin(9600); pinMode(13,OUTPUT); dht.begin(); } void loop() { delay(100); //float h = dht.readHumidity(); int temp = dht.readTemperature(); Serial.write(temp); //Enviamos los datos en forma de byte if(Serial.available()>0)//Si el Arduino recibe datos a través del puerto serie { byte dato = Serial.read(); //Los almacena en la variable "dato" if(dato==65) //Si recibe una "A" (en ASCII "65") { status=!status; //Cambia el estatus del led } digitalWrite(13,status); } } En el Arduino tenemos que poner el sensor de temperatura y humedad tal y como se ha explicado en el Montaje 8 y además un led en el 13 Programa en Processing te lo puedes descargar aquí (rar - 31,02 KB )(recuerda cambiar port = new Serial(this, Serial.list()[0], 9600); por tu puerto ) dweet.io Disponemos del portal web dweet.io que nos ofrece un servicio para enviar y representar datos en la nube sin necesidad, ni si quiera, de registrarnos en la plataforma. Vamos a ver los pasos a seguir: Probamos la plataforma introduciendo un dato, para ello en el navegador tecleamos por ejemplo (cambia  catedu por tu nombre): https://dweet.io/dweet/for/catedu?temperatura=20 Abre otra pestaña del navegador o utiliza un móvil para seguir el dato: https://dweet.io/follow/catedu Prueba añadiendo otra variable, en este caso la humedad:  https://dweet.io/dweet/for/catedu?temperatura=20&humedad=8 Automatizamos el proceso de recogida de datos desde Arduino con un programa en Processing, que enviará datos a través del navegador a dweet.io. IMPORTANTE : No hay que tener abierto el monitor serie del IDE de Arduino porque ocupa el puerto y, por lo tanto, no deja leer los datos a Processing. REPRESENTACIÓN DE DATOS EN EL NAVEGADOR: Dweet.io nos ofrecerá los datos de la siguiente manera: Si queremos algo más vistoso podemos utilizar el servicio freeboard.io  aunque en este caso nos tendremos que registrar en la web. Una vez registrados podemos crear paneles indicadores configurados a nuestro gusto para visualizar la información. Primero habrá que añadir como fuente de datos Dweet.io y nuestro nombre utilizado allí (jorgeroden en el ejemplo). Después creamos un panel indicando que la fuente de datos que queremos utilizar y la variable en cuestión a visualizar.  ¡Y  resultado puede ser de este tipo! Montaje 19 Visualización de datos en la nube. Internet de las cosas. Consejo: Si quieres una visualización más sencilla de los datos que recoge un Arduino y llevarlas a la nube, te recomendamos el curso ESP32 EN EL AULA https://libros.catedu.es/books/esp32-en-el-aula el apartado IoT por ejemplo con Telegram Monitorizar los datos de temperatura y humedad obtenidos del sensor DHT11 en la nube. Para ello disponemos del portal web dweet.io que nos ofrece un servicio para enviar y representar datos en la nube sin necesidad, ni si quiera, de registrarnos en la plataforma. Vamos a ver los pasos a seguir: Probamos la plataforma introduciendo un dato, para ello en el navegador tecleamos por ejemplo (cambia  CATEDU  por tu nombre): https://dweet.io/dweet/for/CATEDU?temperatura=20 Abre otra pestaña del navegador o utiliza un móvil para seguir el dato: https://dweet.io/follow/CATEDU Prueba añadiendo otra variable, en este caso la humedad:  https://dweet.io/dweet/for/CATEDU?temperatura=20&humedad=8 ¿Quieres ver las cosas que ahora mismo se están difundiendo por dweet? Mira https://dweet.io/see Automatizamos el proceso de recogida de datos desde Arduino con un programa en Processing, que enviará datos a través del navegador a dweet.io. IMPORTANTE : No hay que tener abierto el monitor serie del IDE de Arduino porque ocupa el puerto y, por lo tanto, no deja leer los datos a Processing. PROGRAMA A CARGAR EN ARDUINO: Si fuera un DHT12 en vez de un DHT11 poner comentarios a las 4 primeras líneas delante // y quitárselas a las 3 siguientes https://create.arduino.cc/editor/javierquintana/8154af00-c514-4936-81fb-b03fad1963f8/preview PROGRAMA A EJECUTAR EN PROCESSING : // El puerto serie Serial myPort; void setup() { // Lista todos los puertos serie printArray(Serial.list()); // OJO: Elige el puerto donde tengas conectado Arduino. // Cambia el "0" de Serial.list()[0] por el orden que // tu puerto ocupe en la lista (0, 1, 2,...). // Si no lo tienes claro qué puerto ocupa Arduino mira // en el IDE Arduino en "Herramientas" mira el puerto que esté seleccionado. //Fíjate que tenemos la velocidad del puerto a la misma que pusimos en Arduino myPort = new Serial(this, Serial.list()[0], 9600); } void draw() { while (myPort.available() > 0) { String lectura = myPort.readStringUntil(lf); if (lectura != null) { println(lectura); //IMPORTANTE! cambia CATEDU por tu nombre // visualiza los resultados en esta web https://dweet.io/follow/CATEDU loadStrings("https://dweet.io/dweet/for/CATEDU?"+lectura); } } } REPRESENTACIÓN DE DATOS EN EL NAVEGADOR: https://dweet.io/follow/CATEDU nos ofrecería los datos de la siguiente manera: No lo hagas, pues NO LO TENGO CONECTADO !! no sale nada !! por eso pone "nos ofrecería" El resultado es espectacular via GIPHY     Sensor de infrarrojos CNY70 Uno de los sensores más utilizados en robótica, o infinidad de aplicaciones industriales es el CNY-70. Su nombre técnico es optoacoplador. Se basa en la acción conjunta de un diodo que emite una luz infrarroja (que no vemos) y un fototransistor que detecta el rebote de esta cuando incide sobre algún objeto.  Inicialmente es un sensor analógico y nos da un valor de voltaje proporcional a la luz rebotada, pero podemos utilizarlo también de manera digital. El transistor y el diodo hay que alimentarlo a través de una resistencia, el diodo del orden de Ohmios para dar una señal razonable y el transistor del orden de k para que trabaja en la zona activa. Su funcionamiento es sencillo, si el receptor recibe la señal del emisor, el transistor conduce, por lo que recibiremos un '1' lógico en el Arduino: Montaje 20 detección línea blanca El problema del CNY70 es que tiene los pines muy juntos que no se puede poner en medio de la placa protoboard, tenemos pues que utilizar dos opciones: Utilizar cables Dupond macho-hembra Ponerlo inclinado aprovechando que dos extremos de la diagonal tienen que estar conectados a 5V Lo mejor es utilizar cables M-H pero si no se tienen, vamos a utilizar la segunda opción, este es el esquema: Utilizaremos la Edubásica el led rojo, si no tienes, simplemente añade un led al pin 13 El programa a cargar en el Arduino es: https://create.arduino.cc/editor/javierquintana/9b8fc1a0-03fc-42d9-a85c-ca10e9f26588/preview El resultado es: Y en el monitor serie sale: Linea negra Linea negra Linea negra Linea blanca Linea blanca Linea blanca Linea blanca Linea blanca Linea negra Linea negra Linea negra Linea ...   Contador Geiger Este material no esta en el kit, pero se muestra por ser un buen ejemplo del uso obligatorio de las interrupciones Un módulo contador Geiger puede salir por unos 36 €. Lo más importante es el tubo. Ver cuadro de tubos comerciales . Ojo que trabaja con aprox 400V. Si tu tubo es más pequeño, aquí tienes como hacerte un adaptador casero. La conexión es fácil simplemente realiza un impulso y lo puede recoger el pin 2 Imagen de Hisehf Murchinson en https://www.instructables.com/Arduino-DIY-Geiger-Counter/ PERO ¿COMO HACEMOS QUE CUENTE DE FORMA ASINCRONA? es decir, no podemos poner en un bucle tipo loop(){     if (digitalRead(2) == HIIGH){ CNT++;} } Pues si en ese momento NO hay chasquido, no cuenta Esto es debido a que el chasquido puede producirse en cualquier momento, y muy breve Arduino no puede mandar sobre el pin2 sino el pin2 tiene que mandar sobre el Arduino. SOLUCION: LAS INTERRUPCIONES Con la instrucción attachInterrupt , cuando haya un chasquido, atenderá a la función GetEvent (las interrupciones en ArduinoUNO sólo son válidos en los pines 2 y 3, ver+ )  (el tercer parámetro FALLING significa que haga caso en el flanco de bajada, cuando va de 1 a 0) attachInterrupt(digitalPinToInterrupt(2), GetEvent, FALLING); y en GetEvent simplemente ponemos un contador void GetEvent() {  // Get Event from Device   CNT++; } Añadimos al Arduino un Display conectado en serie I2C para evitar el cableado, tal y como lo hemos conectado aquí  https://libros.catedu.es/books/programa-arduino-mediante-codigo/page/lcd por lo tanto, el código completo es el siguiente: Código https://app.arduino.cc/sketches/b1b88357-7588-4b07-9f83-bf32093358e3?view-mode=preview Aquí en este vídeo podemos ver que los conteos por minuto CPM son 10-20 que es la radiactividad natural 2.4mSv año (en teoría 15.6 CPM) pero si le acercamos un resto de  camisa de camping gas (fabricadas antes del 2.000) que tienen Torio radiactivo , sube el CPM a 350, Otra muestra asequible son los detectores de humo que llevan Americio, unos 519CPM.  El detector no es lo suficiente sensible para medir la radiactividad de un plátano (que tiene potasio pero solo 0.036mSv año) 4. Comunicaciones Introducción Las tecnologías de comunicaciones se basan en la transmisión de datos entre puntos distantes. Estos datos, se transmiten en forma de señales eléctricas y pueden ser enviadas através de cables o de manera inalámbrica. En el Arduino trabajamos con dos tipos de comunicaciones: * Alámbrica Comunicación puerto serie: * PC-Arduino : La comunicación vía puerto serie: * Lo vimos por primera vez en el semáforo . * Hay que incializar el puerto serie Serial.begin(9600) * Con la función Serial.print Arduino puede enviar al ordenador los datos que queramos. * Arduino- Arduino * Veremos en esta unidad una forma muy sencilla de comunicarse dos arduinos también por puerto serie. * Inalámbrica : La comunicación vía Bluetooth * En esta unidad vamos a utilizar un nuevo dispositivo JY-MCU * Emparejaremos con nuestro Smartphone (Android) y podremos enviar órdenes de nuestro móvil al Arduino. si tienes dudas técnicas en este capítulo pon un ticket a http://soporte.catedu.es/ o al Telegram Whatsapp en www.catedu.es - información y te ayudaremos: ¿Qué vamos a hacer? Existen módulos adicionales que se pueden conectar a la placa básica Arduino que pueden dotar de una gran funcionalidad a los proyectos que queramos realizar. En esta práctica utilizaremos un módulo Bluetooth que nos permite establecer una comunicación inalámbrica con el entorno, el dispositivo elegido más fácil va a ser un móvil . Conocimiento previo Programación básica Arduino Uso de librerías externas y comunicación serie (para configuración de parámetros). Objetivos Conectar el módulo Bluetooth a Arduino. Realizar programas para comunicar Arduino con el exterior vía Bluetooth. Configurar los parámetros del módulo de Bluetooth (avanzado). Lista de materiales: Arduino UNO. Módulo Bluetooth. Móvil con Android via GIPHY Un poco de teoría Bluetooth ONDAS Una onda es una señal que se propaga por un medio. Por ejemplo el sonido, que es una onda mecánica que viaja usando el aire o cualquier otro material. Pero en el caso de las señales eléctricas pueden ser enviadas por el cable o a través del vacío (no necesitan un medio para transmitirse). Dependen de 3 parámetros principalmente: Amplitud: altura máxima de la onda. Hablando de sonido representaría el volumen. Si nos referimos a una onda eléctrica estaríamos representando normalmente el voltaje. Longitud de onda λ: distancia entre el primer y último punto de un ciclo de la onda (que normalmente se repite en el tiempo). Frecuencia f : Número de veces que la onda repite su ciclo en 1 segundo (se mide en hertzios). Periodo T es simplemente es la inversa de la frecuencia. T=1/f La relación entre ellas es muy fácil pues las ondas electromagnéticas viajan a la velocidad de la luz c y si velocidad es espacio/tiempo luego c = λ/T luego c= λ*f Dentro del espectro electromagnético encontramos diferentes tipos de señales dependiendo de las características de su onda. TRANSMISIÓN INALÁMBRICA: BLUETOOTH.    Hoy en día, este grupo está formado por miles de empresas y se utiliza no sólo para teléfonos sino para cientos de dispositivos. Bluetooth es una red inalámbrica de corto alcance pensada para conectar pares de dispositivos y crear una pequeña red punto a punto, (sólo 2 dispositivos). Utiliza una parte del espectro electromagnético llamado “ Banda ISM ”, reservado para fines no comerciales de la industria, área científica y medicina. Dentro de esta banda también se encuentran todas las redes WIFI que usamos a diario. En concreto funcionan a 2,4GHz. (Un G son 10 9 ) luego entre FM y Microondas. ¿Sabias que? Su curioso nombre viene de un antiguo rey Noruego y Danés, y su símbolo, de las antiguas ruinas que representan ese mismo nombre.  Hay 3 clases de bluetooth que nos indican la máxima potencia a la que emiten y por tanto la distancia máxima que podrán alcanzar: También es muy importante la velocidad a la que pueden enviarse los datos con este protocolo: Mbps : Mega Bits por segundo.       MBps: Mega Bytes por segundo. kb = 1.024 b     M = 1.024 k     G = 1.024 M ¿Te atreves a calcularlo … . ? ¿Cuántos ciclos por segundo tendrán las ondas que están en la Banda ISM?  ¿Cuál es el periodo de esas ondas? Solución  a)  f = 2.4G b) λ=c/f= 12.5cm o sea, las antenas tendrían que ser de esta longitud. Hay muchos trucos para reducirla, una de ellas es la forma de serpiente que puedes ver en el HC-06 ¿Te atreves a calcularlo...? ¿A qué distancia y cuanto tiempo tardarían en enviarse los siguientes archivos por Bluetooth? Un vídeo de 7Mb usando versión 2 clase 2 Una imagen de 2.5Mb usando versión 3 clase 1 Un archivo de texto de 240KB usando versión 1.2 clase 1 Solución  1) 7Mb / 3Mbs = 2.3 seg. 2) 2.5Mb / 24Mbs = 0.1 seg. 3) 240 kB 8b/B = 1.920 kb   1.920 kb  / 1.024 =   1.875 Mb     1.875Mb / 1Mbs  = 1.875 seg.  ¿Bluetooth clásico o Bluetooth Low Energy = BLE ? Es un protocolo similar al clásico Bluetooth pero diseñado a consumir menos potencia manteniendo funcionalidad. Su popularidad ha crecido en multitud de dispositivos En robótica, el clásico device que utiliza BLE es la Micro:bit . Aunque la Micro:bit no tiene Wifi integrada, posee una radiofrecuencia que podemos configurar para Bluetooth (hay que elegir, o utilizar sus comandos de Radio o utilizar comandos de Bluetooth) Por eso a la hora de elegir la APP tienes que tener en cuenta: Si acepta Bluetooth clásico o BLE Que la APP acepte leer datos desde el robot como enviar Nosotros hemos elegido uno sencillo que cumple las dos condiciones (hay muchas APPs) Serial Bluetooth Terminal Módulo HC-06 Vamos a utilizar en estos ejemplos un módulo esclavo de bluetooth JY-MCU o también HC-06 muy común y económico. Es posible usar otros módulos ya que existe un mercado de desarrollo continuo, en cualquier caso el funcionamiento básico es el mismo. Dicho módulo por tratarse de un módulo esclavo , está configurado para conectarse a un maestro y recibir órdenes de él. Inicialmente no necesitas configurarlo, sino que al cargar el código desde el ordenador, conectarás el módulo y este empezará a parpadear indicando que está buscando un master al que conectarse, (por ejemplo tu teléfono o una llave bluetooth usb conectado a un pc... ). Como ya sabrás los dispositivos de este tipo tienen que “emparejarse” y tienen que compartir una contraseña para que los datos puedan intercambiarse. Por defecto, estos módulos tienen la contraseña 1234 , aunque tanto esto como el nombre, pueden ser actualizados mediante unos comandos especiales, llamados AT y que veremos un poco más adelante. Arduino tiene 2 pines que permiten enviar y transmitir datos serie (uno datos tras otro). Lo usamos continuamente cuando enviamos un programa desde nuestro ordenador a Arduino o cuando hacemos una lectura desde el monitor serie (con un Serial.print();**). Arduino tiene definidos estos pines como: pin digital 0: RX <-  (Arduino recibe a través de este pin). pin digital 1: TX -> (Arduino envía a través de este pin). El módulo bluetooth tiene 4 patillas. 2 para la alimentación y 2 para la comunicación. Es MUY IMPORTANTE conectar de manera correcta estos pines con Arduino para la correcta comunicación. La patilla que emite los datos (TX) en el bluetooth debe estar conectada a la que recibe los datos (RX) en Arduino, y viceversa.  Aunque el módulo funciona a 3.3v, normalmente las placas comerciales, (como la que estamos usando), llevan un regulador y las podemos conectar directamente a los 5v de Arduino. Conexión en la shield Edubásica La conexión es muy fácil, ya tiene JP6 para conectarlo diréctamente, con la luz led mirando hacia dentro de la placa: Conexión sin la shield Edubásica Es también simple, utilizando una placa Protoboard pero intercambiando Rx y Tx es decir Rx del HC-06 con Tx del Arduino y Tx del HC-06 con Rx del Arduino. Nota ; No necesariamente hay que conectar Rx y Tx a D0 y D1, pues esto tiene una fuerte desventaja: Ocupas el puerto serie cuando conectas el Bluetooth. Hay que quitar el HC-06 cada vez que te conectes por el puerto serie (es decir cuando te conectas por USB para cargar un programa)  la ventaja que tiene es que no ocupas otros pines de datos. Yo personalmente sin la shield, prefiero conectar HC_06 en otros pines D0 y D1 y así no tengo que ir quitando y poniendo el módulo HC-06. Mira el curso DOMOTICA CON ARDUINO para ver un ejemplo del HC-06 no conectado al D0 D1 https://libros.catedu.es/books/domotica-con-arduino/page/bluetooth https://libros.catedu.es/books/domotica-con-arduino/page/bluetooth-2 Ordenes Si la luz está intermitente, el módulo no está vinculado, si está encendido permanente, ya está vinculado. Una vez vinculado, la orden es sencilla:   dato = Serial.read(); donde dato es tipo byte :  byte dato; Recuerda , si estas usando los 2 mismos pines que Arduino usa para la comunicación USB con el ordenador (D0, D1), no puedes usar el monitor serie ni para cargar un programa ni para visualizar los datos utilizando el Bluetooth. Igualmente la velocidad tiene que ser igual para entenderse, no pueden ser diferentes. APP Arduino Bluetooth Control La APP Arduino Bluetooth Control Esta APP es para comunicación PLACA->APP es decir, el Bluetooth será como receptor de datos nuestra placa electrónica (slave) y el móvil (master) como emisor de datos.  Esta APP permite enviar datos pero de distintas formas Arduino Bluetooth Control Esta APP es muy completa y configurable, aquí para descargarla de Google Play . El código de programa que tenemos que cargar en la placa se basa en escuchar de forma continua el puerto serie. Cuando llegue el dato, se ejecutará la acción que le indiquemos . ¡¡así de sencillo !! Vincular móvil Hay que vincular nuestro móvil y nuestra APP de Android con el Arduino, para ello sigue este sencillo tutorial : Reto: comunicación Bluetooth Montaje 21 Encender LEDs El objetivo de esta práctica es encender los LEDs de EDUBASICA con el móvil: Cuando se pulsa la flecha arriba , la APP lanza el dato U y tiene que encenderse el led ROJO. Cuando se pulsa el botón flecha derecha , la APP lanza el dato R y tiene que encenderse el led  AMARILLO. Cuando se pulsa la  flecha abajo , la APP lanza el dato D y tiene que encenderse el led  VERDE. Cuando se pulsa la  flecha izquierda , la APP lanza el dato L y tienen que apagarse todos. Montaje 21 SIN EDUBASICA No pasa nada, con una placa Protoboard pon 3 leds en D3,D4 y D5 y el módulo Bluetooth. Montaje 21 CON EDUBÁSICA No hay que hacer nada especial, sólo conectar el módulo Bluetooth Montaje 21 RESULTADO El vídeo está realizado con otra APP ya desfasada, pero sirve igual de ejemplo, es increíble, sólo pasó un mes ! Montaje 21 PROGRAMA Este es el programa que tienes que cargar en el Arduino. Súbelo, empareja tu móvil tal y como hemos visto anteriormente y conseguirás que  la APP encienda los leds como en el vídeo. https://create.arduino.cc/editor/javierquintana/1724fd04-6b04-4c26-8cb1-1da9f8779f21/preview Montaje 22 Encender LEDs sin EDUBASICA Este ejemplo es más avanzado, pero no se puede hacer con edubásica: Vamos a ver un ejemplo implementando un mosaico de LEDs : Las conexiones serán las siguientes: El objetivo es que según la tecla que presionemos en la aplicación “Blue Control”, se encenderá el led correspondiente: (arriba, abajo, izquierda, derecha y centro). Además si pulsamos alguno de los botones laterales, los leds deberán realizar una animación de todos los leds: Encendido de los leds en sentido horario. Encendido de los leds en sentido antihorario. Encendido intermitente de los leds exteriores y el interior. Encendido intermitente de todos los leds. INVENTA MÁS ANIMACIONES PARA INCLUIRLAS EN LOS BOTONES QUE SOBRAN EN LA APLICACIÓN Para simplificar el código, hemos creado funciones para ejecutar cada una de las animaciones, estas funciones están al final del programa. La lectura se hace mediante 2 funciones: La función Serial.available() nos indica si hay un dato disponible en el puerto serie (verdadero/falso) Con la función dato = Serial.read(); guardamos el dato en una variable (de typo byte) Con esto tendremos el código ASCII del  caracter enviado por el maestro, por ejemplo si hemos enviado una A tendremos el 65, B = 66, a = 97, b = 98, ... (ascii.cl/es/) Lo único que nos queda es comparar el dato recibido y elegir la acción que tiene que hacer Arduino. https://create.arduino.cc/editor/javierquintana/6d9fd0f4-369a-486f-86ab-10098b3815c0/preview Montaje 23 Configuración no típica: HC-06 no conectado al D0 y D1 y otras configuraciones Si quieres modificar cosas como la velocidad de conexión, el nombre o la contraseña de tu módulo, aquí te dejamos un código para que subas a tu arduino y mediante el monitor serie lo configures. Nota: No se pretende que realices el montaje, pero creemos que es importante que veas que el módulo Bluetooth no es cerrado en su configuración. Para ello hemos creado un nuevo puerto serie para que no interfiera con el USB y podamos usarlo simultáneamente, lo haremos en las patillas 10 y 11. LUEGO NO PUEDES USAR LA SHIELD EDUBÁSICA. Deberás conectar el módulo como ves en la figura, y luego cargar el código. Una vez súbido, abre la consola serie y (EN MAYÚSCULAS) ejecuta los comandos que necesites. Una vez finalizado, puedes desconectar el módulo BT y usarlo con normalidad. https://create.arduino.cc/editor/javierquintana/b175c6e8-9e49-493d-9c79-705a663975df/preview Bluetooth maestro HC-05 El HC-05 puede funcionar como maestro y esclavo. La diferencia con el módulo HC-06 que sólo funciona como esclavo. El HC-05 es por lo tanto un módulo técnicamente superior. Físicamente el HC-05 tiene 6 pines mientras que el HC-06 sólo 4. Esto le permite al HC-05 trabajar con distintos modos de funcionamiento más avanzados, (ver https://fgcoca.github.io/BlueTooth-HC-05-y-HC-06/modulos/) Para acceder a este modo especial en el master lo podemos hacer de 2 formas: Conectando Key a 3.3v y encender el módulo. Así funciona a 38400 baudios. Encendiendo el módulo y después conectando el key a 3.3v. Así funciona a 9600 baudios, (es más sencillo pues es el que usa por defecto). Los comandos AT en HC-05, al contrario que en el HC-06 (esclavo), que es el que tendrá mucha gente , tienen que llevar el símbolo "=", por ejemplo: En HC-06: AT+NAMEnombre En HC-05: AT+NAME=nombre El datasheet indica que por defecto vienen con el modo CMODE=1 (para conectarse a cualquier esclavo disponible), sin embargo hay que comporbarlo (AT+CMODE?) por si tienen el CMODE=0 por lo que se intenta conectar al último emparejado, (en este caso no se emparejaría con ningún esclavo), así que hay que cambiar el CMODE con AT+CMODE=1) El HC-05 tiene 6 pines:       Por último comunicación Arduino-Arduino Podemos conectar dos placas Arduino de distintas maneras: Bluetooth, Xbee, Ethernet, WIFI... Pero la forma más sencilla es aprovechar la conexión para la comunicación serie que ya posee Arduino. Conocimiento previo Programación básica de Arduino. Bucles for, sentencias if-else, switch-case. Objetivos Comunicación serie. Configuración maestro / esclavo. Crear un nuevo puerto serie. Lista de materiales: 2 placas Arduino. SI NO DISPONES DE DOS PLACAS DE ARDUINO, TE PROPONEMOS SIMULARLO Montaje 24: Conectar dos Arduinos El proceso es parecido al bluetooth. Aquí queremos que una Arduino envíe (MAESTRO) y que otra reciba (ESCLAVO), así que cada una correrá un programa distinto. Podemos hacer también que ambas tarjetas envíen y reciban datos, para ello, la modificación sobre lo que expongo aquí serían muy sencillas, (básicamente copiar y pegar los trozos de código intercambiados). Conexiones : Usaremos los pines estándar de comunicación serie de Arduino:  0 : RX (pin por el que RECIBE los datos serie) 1 : TX (pin por el que ENVÍA los datos serie) Para comunicación en 2 direcciones: los 2 pueden enviar / recibir. Las conexiones TX/RX se intercambian (lo que uno envía -TX- tiene que entrar en el otro -RX-). Cualquiera de las 2 puede ser Maestro o Esclavo. IMPORTANTE : Conectar ambas GND de las placas. En el siguiente ejemplo , el maestro, cada 3 segundos envía un carácter al esclavo. Si envía una "r", el esclavo hará parpadear su led (d13) rápido. Si envía una "l", el esclavo hará parpadear su led (d13) lento. El programa para el Arduino MAESTRO es: https://create.arduino.cc/editor/javierquintana/4e485b39-a075-416c-a951-4c7caa4edcc0/preview El programa para el Arduino ESCLAVO es: https://create.arduino.cc/editor/javierquintana/605a2867-7265-4e29-8253-d311696dbe05/preview Si no tienes dos ARDUINOS Puedes hacerlo con una simulación en  https://www.tinkercad.com  en nuestro caso este fue el resultado: Lo tienes aquí https://www.tinkercad.com/things/dMPodSrbw0n-comunicacion-maestro-esclavo/editel?sharecode=FKrzh6UQa4CZ2UL4ma2WfTuJ3aIRTXRyNJtCWJAAvww Y además lo puedes embeber en tu blog, página web... por ejemplo lo tienes aquí, ¡¡pincha en simulación!! Si n lo ves claro, pincha en el vídeo Si tienes dos ARDUINOS Pues a disfrutar de tu "Red particular" : Otras conexiones Si quieres conectar dos Arduinos por comunicación I2C  visita esta página. Para la comunicación en una dirección :   maestro(izquierda) -> esclavo(derecha) sólo necesitamos 1 conexión: NOTA:  Ocurre que esos pines también los usa para comunicarse por USB cuando está conectado al ordenador, de manera que si queremos tener ambas conexiones (USB/trasmisión serie) deberemos crear una nueva conexión serie (en una conexión software). Sólo podemos conectar 2 Arduinos pues sólo hay un puerto de serie en cada uno de ellos. Aunque la conexión es en un sentido, es necesario conectar los dos cables TX-RX y RX-TX En este ejemplo, una de las Arduino la vamos a tener conectada al PC, por tanto, en el MAESTRO vamos a crear la conexión software serie sobre los pines 10(RX), 11(TX).  Lo puedes comprobar en la siguiente imagen: El programa sería el siguiente en el maestro ///// MAESTRO int i=0; //CREAMOS UN NUEVO PUERTO SERIE (RX, TX) SoftwareSerial Serie2(10,11); void setup() { pinMode(13,OUTPUT); Serial.begin(9600); //Inicializa puerto estándar Serie2.begin(9600); //Inicializa nuevo puerto digitalWrite(13,LOW); } void loop() { Serie2.write("r"); delay(3000); Serie2.write("l"); delay(3000); } Y en el esclavo sería el siguiente código : ////////////////////esclavo void setup() { pinMode(13,OUTPUT); Serial.begin(9600); } void loop() { while (Serial.available()) { //Guardamos en la variable dato el valor leido char dato= Serial.read(); //Comprobamos el dato switch(dato) {//Si recibimos una 'r' ... case 'r': {for(int i=0; i<20 i++) digitalWrite(13,HIGH); delay(80); digitalWrite(13,LOW); delay(80);} break; } case 'l': {for(int i=0; i<10 i++) digitalWrite(13,HIGH); delay(200); digitalWrite(13,LOW); delay(200);} break; }}}} 5. Robótica Robótica En esta capítulo vamos a dar movimiento a nuestro Arduino. Si tienes dudas técnicas en este capítulo pon un ticket a http://soporte.catedu.es/ y te ayudaremos: Servomotores Una de las aplicaciones más utilizadas de los sistemas de control por ordenador y en la robótica están asociados con los motores, que permiten accionar o mover otros componentes, como puertas, barreras, válvulas, ruedas, etc. Uno de los tipos que vamos a ver en este capítulo son lo servos, hay de dos tipos: El servomotor o servos convencionales que posee la capacidad de posicionar su eje en un ángulo determinado entre 0 y 180 grados en función de una determinada señal. Servo de rotación continua  Son servos por fuera igual que los anteriores, pero pueden girar 360º y se controlan por tiempo Por defecto cuando se dice servo , es un servomotor o servo convencional Servos de rotación continua Para controlar un servo de rotación continua, las instrucciones a realizar son : Incluyes la librería de servos #include Declaras una variable servo Servo myservo; //puedes poner el nombre que quieras p.e. miservo En setup() tienes que decir a qué pin está conectado myservo.attach(9); //por ejemplo pin 9 Y en loop()   myservo.write(90) ; //significa   servo parado  myservo.write(180); //significa   servo funcionando al 100% en el sentido de las agujas del reloj myservo.write(0); //significa   servo funcionando al 100% en el sentido contrario de las agujas del reloj Mira el vídeo, esta realizado con otra shield ECHIDNA y con bloques mBlock (curso Echidna  https://libros.catedu.es/books/echidna/ ) fíjate como: Los extremos 0º y 180º es a máxima velocidad, pero un sentido u otro. 90º es parado. Un valor intermedio es menos velocidad (se ve el ejemplo 80º y 100º) - Si tiene deriva, (cosa frecuente) tienen un potenciómetro para ajustar. Si quieres saber más sobre servomotores te recomendamos estas paginas del Zaragozano Luis LLamas:  Servomotores convencionales y Servomotores de  rotación continua Servomotores o servos convencionales Los servos son un tipo especial de motor en el que se añade una circuito lógico electrónico que permite un control mucho más preciso que a un motor normal de corriente continua. Esto les permite posicionar el eje en un ángulo determinado.  El hardware interno se compone de un potenciómetro y un circuito integrado que controlan en todo momento los grados que gira el motor. De este modo, en nuestro caso, desde Arduino, usando las salidas digitales PWM podremos controlar fácilmente un servo. Lo ideal es conectarlo a 6V pero trabajan bien en los 5V del Arduino. Hay muchos modelos, en robótica educativa cuestan entre 1-5€, el más común es el SG90, muy barato, pero tiene muy poca fuerza, el MG90S tiene algo más, si queremos algo más, ya tiene que ser el  MG996R pero ya este modelo NO se puede conectar directamente al Arduino o Raspberry, el pico de energía que necesita, provoca el reinicio de la placa. Incluso varios pequeños SG90. Las instrucciones son las mismas que los servos de rotación continua, pero los valores que se proporcionan son los grados que se desean.  Incluyes la librería de servos #include Declaras una variable servo Servo myservo;  //puedes poner el nombre que quieras p.e. miservo En setup () tienes que decir a qué pin está conectado myservo.attach(9); //por ejemplo pin 9 Y en loop ()   myservo.write(90) ; //Posición 90º (posición por defecto) myservo.write(180); //Posición 180º myservo.write(0); // Posición 0º La instrucción myservo.write(angulo) envía por el pin digital declarado en myservo.attach() pulsos cuadrados de 50Hz y de anchura el estado alto proporcional al ángulo que se desea. Un pulso de 0.5-1ms es 0º Un pulso de 1.5 ms es 90º  Un pulso de 2-2.5ms es 180º Si quieres saber más, te recomendamos https://www.luisllamas.es/controlar-un-servo-con-arduino/ Arduino Servomotor by Marco De Simone on Sketchfab Control de servomotores Montaje 25: Testea tu servo (servomotor) En el siguiente programa de testeo  (fuente: forum arduino ) vamos a probar el servo. Conecta el servo al pin 7 Utiliza el puerto serie para teclear el ángulo que quieras con el teclado de tu ordenador. No queremos que entiendas todo el código, pues el puerto serie lee es caracteres ASCII y tiene que convertir el carácter a ángulos. Si tecleas un valor más grande de 500 se le indica al servo no el ángulo que se tiene que mover, sino cuanto tiempo en ms se tiene que mover. Montaje 25: Conexión sin Edubásica La conexión se realiza mediante 3 cables: 2 de alimentación (+5V/GND) y un tercero, conectado por ejemplo el 7 , donde indicaremos los grados que queremos que gire a través de un programa en Arduino. Montaje 25: Conexión con Edubásica En Edubásica tenemos una forma muy sencilla de conectar un servo a la tarjeta. Lo puedes hacer mediante las clavijas identificadas con JP3. De arriba abajo las conexiones son: Señal (pin7) +Vin GND Recuerda que siempre puedes utilizar los pines analógicos como E/S digitales, del pin 14 al 19. Por ejemplo, puedes conectar el servo al pin analógico 5, pero declarado como digital en el 19. Montaje 25: video Por ejemplo en este Servo HD-1440A con el anterior programa se ve que es un servo barato: No puede hacer ángulos de +180º luego es un servo convencional No puede hacer ángulos de menos de 10º no llega a parar, o sea tiene deriva. Si eliges uno un poco más caro como el MG90S no tiene estos problemas en los extremos. Ver Montaje 25: simulación Aquí lo tienes simulado en Tinkercad https://www.tinkercad.com/things/4FQNFOdoS8Z-25testeatuservo Pincha en simulación y luego código , y encontrarás el cuadro monitor seri e donde puedes teclear el ángulo que quieras. Observa al servo cuando pulses Intro Montaje 25: Programa https://create.arduino.cc/editor/javierquintana/1d59ad76-dc4a-4b6d-8238-66ae593ce728/preview Montaje 26 controlando el servo Vamos a jugar un poco, montar este circuito de tal manera que el servo este haciendo este ciclo Un segundo en su posición inicial 90º Un segundo en 180º Un segundo a 45º El programa lo puedes conseguir en el botón Code de la siguiente simulación Montaje 27 controlando el servo Vamos a simular un motor paso a paso. El servo ahora tiene que pasar de 10º a 180º de 10 en 10 parando 1 segundo en cada paso El programa lo puedes conseguir en el botón Code de la siguiente simulación Montaje 28 servo y potenciómetro Podemos probar una aplicación muy importante que está basada en mover el servo según una determinada entrada analógica. Este nos puede ser  muy útil si queremos controlar servos por medio de joysticks por ejemplo o cualquier dispositivo que cuente con potenciómetros para realizar un movimiento. El código está obtenido desde los ejemplos que vienen incluido en la IDE de de Arduino (Knob) que encontrarás en:  Archivo->Ejemplos->Servo, sólo hemos cambiado esta línea: myservo.attach(7) ;   Lo que hace este programa es variar la posición del servo enfunción de la posición del potenciómetro que leemos de manera analógica. Sólo nos queda mapear la lectura para que se mueva de 0 a 180º. En la siguiente simulación, puedes mover el potenciómetro y ver el resultado Motores DC Arduino (UNO) no proporciona corriente suficiente para hacer funcionar, en condiciones "dignas", un motor de corriente continua de los que solemos usar en el aula-taller de Tecnologías (motor DC). Conviene alimentar Arduino con una fuente externa (7 -12 V) para poder proporcionar intensidad necesaria para el par motor requerido en los proyectos. Existen "shields" o tarjetas que se encajan sobre Arduino y le añaden funciones específicas como mover motores DC. Alimentación Como vimos en la sección de Alimentación eléctrica de Arduino (ver https://libros.catedu.es/books/programa-arduino-mediante-codigo/page/hardware) no es recomendable alimentar Arduino, cuando se trabaja con elementos de "alto" consumo como pueden ser los motores DC, con el cable USB. Tenemos la posibilidad de proporcionar más corriente (mA) a través de la conexión jack de Arduino. En el pin Vin tendremos una salida del voltaje que apliquemos por el jack que servirá para alimentar a los motores. Si el motor es pequeño y trabaja sin carga, sí que se puede conectar diréctamente al Arduino. Recomendamos las siguientes páginas de Luis Llamas:    Tipo de motores y Motores paso a paso Montajes que vamos a realizar Vamos a controlar los motores de 4 formas: Montaje 29 motor con transistor con/sin la shield Edubásica Montaje 30 circuito integrado L293 con/sin la shield Edubásica Montaje 31 un coche loco con/sin la shield Edubásica Montaje 32 un coche teledirigido con el móvil con/sin la shield Edubásica  Montaje 33 un coche teledirigido con la voz con/sin la shield Edubásica  Montaje 29 motor con transistor El transistor es un componente analógico con infinidad de aplicaciones. Como se observa en la imagen, es un dispositivo con tres pines llamados emisor (E), colector (C) y base (B). El funcionamiento a groso modo es sencillo: Si suministramos "cierta" cantidad de corriente al terminal llamado base, entre los terminales emisor y colector circulará una corriente proporcional a la que entra por la base. Puede ser unas 100 veces mayor (este valor dependerá del transistor y se llama ganancia), por lo tanto, lo que tenemos es un amplificador de corriente, o sea, que con una intensidad pequeña podemos obtener una más grande entre los terminales emisor y colector. Si a estos dos terminales conectamos un motor DC conseguiremos hacerlo girar con garantías. Cuando no hay corriente en la base (o es muy pequeña) el colector y emisor están desconectados y no circulará corriente entre ellos. Nuestra propuesta es que  realices un montaje de mover un motor a través de un transistor. Que funcione 1 segundo, luego 1 segundo parado y así sucesivamente. Montaje 29 Programa motor con transistor Este es el programa que te proponemos: https://create.arduino.cc/editor/javierquintana/c2d6681b-76d7-4231-9f8b-d0110348b7d4/preview Montaje 29 Esquema de montaje motor con transistor con Edubásica La shield de Edubásica ya tiene incorporado el transistor y los diodos de protección para funcionar el motor, para ello tenemos que hacer: Poner el interruptor en ON Conectar el motor en la salida del transistor y Vin Utilizar D6 como pin de control del motor Montaje 29 Esquema de montaje motor con transistor sin Edubásica Desde Arduino (salida digital) actuamos sobre la base si enviamos un HIGH al pin digital donde la conectemos (pin 6 en el esquema). El transistor tiene que tener suficiente ganancia. Se conecta un diodo de protección en antiparalelo (1N004). Cuando el motor se para las bobinas se desmagnetizan y se descargan de energía eléctrica. El diodo proporciona un camino para su descarga (la energía se disipa en forma de calor en el diodo) y así se evita que sufra el transistor. Es decir, sería esta vista : Importante: NO CONECTES EL MOTOR DIRÉCTAMENTE AL ARDUINO, PODRÍAS DAÑARLO Montaje 29 Simulación de montaje motor con transistor sin Edubásica En el momento de realizar este circuito, Tinkercad no tiene un Jack de conexión, luego hemos conectado directamente la pila al Vin ¿Te atreves? Otra posibilidad que protege el transistor es, en vez de conectar directamente el motor al colector del transistor, ubicar un relé en esa posición y accionar el motor con alimentación independiente con la conmutación del relé. ¿Te atreves a montar un montaje que active el motor DC mediante un relé conectado al colector del transistor.? Montaje 30 motor con Circuito L293 El circuito integrado L293 permite controlar motores DC de pequeña potencia, pero en general bobinas, o sea cualquier elemento que precise pico de potencia, como los relés, etc.. Para utilizarlo hay que hacer un montaje externo a Arduino, en una placa de pruebas, y alimentar a los motores a través de este circuito integrado. El CI L293 tiene las siguientes características: Se pueden controlar hasta 2 motores. Proporciona 1A a los motores (en total)  y permite cambiar el sentido de giro. Utiliza un puente en H que funciona según se observa en las figuras (internamente utiliza transistores para conmutar*) : Modos de operación para invertir el sentido de giro: " H bridge operating " by Cyril BUTTAY - own work, made using inkscape. Licensed under CC BY-SA 3.0 via Wikimedia Commons . Nuestra propuesta es que montes el motor utilizando el CI L293 que realice el siguiente ciclo : - Giro en un sentido durante 1seg. - Paro durante 0.5seg. - Giro en sentido contrario durante 1 seg - Paro durante 0.5seg. Montaje 30 motor con Circuito L293 con Edubásica Edubásica es una tarjeta diseñada para facilitar la tarea en el aula. Elimina gran parte de cableado y conexiones en la placa de pruebas lo que evita muchos errores en las prácticas.  En esta placa disponemos de las dos opciones vistas anteriormente. Edubásica lleva montados, entre otros componentes, un circuito integrado L293 y un transistor. Por lo tanto podemos activar motores usando ambas opciones , aunque lo recomendable es utilizar el L293 que permite el cambio de sentido de giro y regular la velocidad actuando con una señal PWM sobre los dos pines de habilitación (dependiendo de la hoja de datos viene como ENABLE o CHIP INHIBIT)  del circuito L293. Los pines de Arduino que pueden regular la velocidad por PWM correspondientes a esas patillas de habilitación serán: D10 para el motor A y D11 para el motor B. Para hacer funcionar dos motores DC con Edubásica sólo tenemos que conectar en las clemas indicadas (serigrafiados en la placa como Motor A y Motor B) los dos cables de cada motor. Según se observa en la imagen, tenemos 4 conexiones para los dos motores. Desde Arduino y con la  tabla de verdad  del CI L293 indicada en la sección anterior,  podemos regular el sentido de giro y velocidad de cada motor. Edubásica lleva un interruptor que permite tomar el voltaje de la salida Vin de Arduino (alimentación externa), necesaria para dar la corriente suficiente para accionar los motores. Cuando el piloto Vin está encendido significa que la alimentación de Edubásica viene de Vin de Arduino, o bien, directamente desde una fuente externa conectada a la clema Vin de Edubásica de la regleta de alimentación (en la imagen la regleta de la parte inferior). Es muy fácil, podemos conectar hasta dos motores en los pines dispuestos para ello, y utilizaremos: Para el motor A el control de velocidad por el pin 10 y las direcciones por 8 y 9 Para el motor B el control de velocidad por el pin 11 y las direcciones por 12 y 13. Interruptor en ON Conectando los dos terminales del motor a la clema del transistor de Edubásica, también podríamos hacerlo funcionar enviando un nivel HIGH al pin digital 6 de Arduino.  Este pin (D6) está conectado directamente a la base del transistor de Edubásica. La desventaja respecto al CI L293 es que, en este caso, no podríamos cambiar el sentido de giro. Montaje 30 motor con Circuito L293 sin Edubásica Vamos a ver de qué manera se pueden activar los motores DC para hacer una secuencia sencilla de giro. Primero de todo vamos a ver cómo se conecta todo. Las conexiones del circuito integrado según podemos ver en la hoja de datos del fabricante son las siguientes: Vcc2(VC), pin 8 del L293:  El voltaje que se introduzca aquí alimentará a los motores (Vin de Arduino). Vcc1(VSS), pin 18 del L293: El voltaje que se introduzca aquí alimentará al propio circuito integrado (+5V de Arduino). Las conexiones del circuito con Arduino las podemos ver en el siguiente esquema: Para saber la orientación del sentido de giro disponemos de la siguiente tabla de verdad: Simulación 30 motor con Circuito L293 sin Edubásica Montaje 31 Coche loco Vamos a darle un poco de emoción via GIPHY Te proponemos que realices unos movimientos locos en el coche (los que quieras) Montaje 31 chasis coche Puedes ver en esta página de Luis Llamas cómo hacer un coche teledirigido puede salir por menos de 20€, nosotros como ya tenemos el L298N integrado en Edubasica , sólo hemos comprado el chasis por 7€ y no vamos a poner sensor ultrasonidos y sensor de línea: Si quieres hacerlo todo terreno Luis Llamas te explica cómo hacerlo con cadenas . Montaje 31 coche loco con Edubásica: Conexiones Las conexiones son muy sencillas: Pines motor A al conector pines motor A de Edubásica Pines motor B al conector pines motor B de Edubásica Cables de las pilas a Vin y GND NOTA: Si funciona pero ves que las ordenes están cambiadas (es decir que queremos que gire a la izquierda y va hacia delante, queremos que vaya hacia delante y gira a la izquierda...) es debido a que tenemos los cables rojo y negro de un motor intercambiados. Ordenes Estos son los pines que hay que activar: Orden Motor A Motor B Velocidad 10 11 Dirección 1 8 12 Dirección 2 9 13 La tabla de verdad es muy fácil: MOTOR A Pin 10 Pin 8 Pin 9 Motor A HIGH HIGH LOW giro HIGH LOW HIGH giro contrario LOW X X STOP MOTOR B Pin 11 Pin 12 Pin 13 Motor B HIGH HIGH LOW giro HIGH LOW HIGH giro contrario LOW X X STOP Ampliaciones posibles Recuerda que en el transistor aún puedes poner otro motor. Respecto a terminales digitales, te quedan pines para poner servos, sensor de ultrasonidos, sensor de líneas... Montaje 31 coche loco sin Edubásica: Conexiones Tenemos que comprar el chasis anterior y además un L298N, recomendamos ver esta página de Luis Llamas La circuitería se complica, pues necesitamos cablear los pines de control: Recuerda: Siempre pon en común las masas GND. En caso contrario puedes romper la placa Arduino y también el L298 Ordenes Para respetar los mismos programas que Luis Llamas, estos son los pines que hay que activar: Orden MotorA MotorB Velocidad 6 11 Dirección 1 7 9 Dirección 2 8 10 La tabla de verdad es muy fácil: MOTOR A Pin 6 Pin 7 Pin 8 MotorA HIGH HIGH LOW giro HIGH LOW HIGH giro contrario LOW X X STOP MOTOR B Pin 11 Pin 9 Pin 10 MotorB HIGH HIGH LOW giro HIGH LOW HIGH giro contrario LOW X X STOP Montaje 31 coche loco con Edubásica : Código El código es sencillo pero engorroso. Sólo hemos utilizado la función inicial SETUP de tal manera que sólo lo ejecuta una vez. LOOP lo hemos dejado vacío https://create.arduino.cc/editor/javierquintana/761d52b7-9cef-4af9-9061-8c405888da7d/preview Montaje 31 coche loco sin Edubásica : Código Cambia el principio de la cabecera, y omitiendo los LEDs: ////////////// SIN EDUBASICA //////////////// #define ENABLEA 6 #define DIR1A 7 #define DIR2A 8 #define ENABLEB 11 #define DIR1B 9 #define DIR2B 10 https://create.arduino.cc/editor/javierquintana/af7ee63f-e189-4ca2-85e7-09fa3c9abfdc/preview Reto : ¿Qué tal si en vez de activarse con el botón, que simplemente cuando este oscuro (utiliza el valor del pin analógico 2 = LDR), se ponga a bailar? Montaje 32 Coche teledirigido Sé que lo estabas pensando... ponerle el Bluetooth , vamos allá: Realizar un coche teledirigido por Bluetooth con las siguientes órdenes - U = Up hacia delante - D = Down hacia atrás - L = Left giro a la izquierda - R = Right giro a la derecha - S = Stop paro OJO, para realizar este ejercicio tienes que vincular el HC-06 con la APP, vincularlo, poner el HC-06 pero quitarlo cuando se carga el programa... etc. ¿no te acuerdas? : A repasar lo anterior. Las conexiones son las mismas que el montaje 31 Montaje 32 Coche teledirigido código con Edubásica https://create.arduino.cc/editor/javierquintana/d89d0168-fd8a-42ff-ad5f-f0c9e0da9266/preview Montaje 32 Coche teledirigido código sin Edubásica Cambia el principio de la cabecera, y omite los LEDs: https://create.arduino.cc/editor/javierquintana/38a32560-c6ea-499f-8579-87edf60ddd55/preview via GIPHY via GIPHY Coche teledirigido con voz ¿Y si ahora lo controlamos por voz? Solución ¡¡ Es el mismo código que el anterior !!! Lo que pasa es en la aplicación Arduino Blue Control utilizamos en vez del mando con flechas, el control de voz. Easy-peasy !! Y previamente hemos configurado los comandos de voz: Orden de voz Comando a enviar adelante U atrás D derecha R izquierda L stop S Total 5 comandos de voz a configurar: Barrera Vamos ahora a realizar UN PROYECTO donde englobamos varios de los elementos que hemos visto en este curso, algo que visualmente tenga un sentido práctico y motivador en el alumnado Utilizaremos: Placa Shield de Edubásica (optativo) por facilitar las conexiones Servo motor Dos sensores de ultrasonidos Módulo Bluetooth Imaginación y maña Montaje 33 Barrera por Bluetooth Retp 33 El propósito es que cuando se pulse la flecha arriba de la APP DEL MOVIL la barrera suba y se enciende la luz verde, y cuando se pulsa la flecha abajo, baje la barrera y se enciende la luz roja, esta es una manera eficaz de que nadie entre en el recinto si no está autorizado, y que mejor que con una aplicación móvil. Montaje 33 Barrera por Bluetooth sin  Edubásica Hay que utilizar el esquema del servo y el esquema del Bluetooth a la vez Montaje 33 Barrera por Bluetooth con Edubásica Nos simplifica el cableado, conectando el módulo Bluetooth en el zócalo correspondiente tal y como vimos Con piezas de lego fijamos el servo y le añadimos un cartón que simule una barrera. El pin del servo lo conectaremos en el 7 de Edubásica , el Vcc y G a Vin y masa. La configuración de los ángulos de abierto y cerrado depende en qué posición atornillamos la barrera, luego lo mejor es probarlo con el MONTAJE 25 TESTEA TU SERVO  y en nuestro caso nos sale que 40º es abierto y 140º es cerrado. Montaje 33 Barrera por Bluetooth VIDEO No hagas caso de los sensores de ultrasonidos por ahora, corresponde al siguiente montaje No desmontes las conexiones, te servirán para el siguiente montaje. Montaje 33 Barrera por Bluetooth CODIGO El programa en el Arduino es el siguiente: https://create.arduino.cc/editor/javierquintana/e8bdf8fc-b5b8-4e27-8207-07ab3ccf6222/preview Montaje 34 Barrera por sensores ultrasonidos Ahora le añadimos (esperamos que no hayas desmontado el montaje anterior) dos sensores de ultrasonidos, si detecta el coche a la entrada de la barrera, se enciende la luz amarilla en espera que el coche pueda abrir con el móvil. Reto 34 -Una vez recibido el código de abrir barrera, se abre y se enciende la luz verde. Una vez cruzado el coche, lo detecta el ultrasonido de la salida que cerrará la barrera poniendo el semáforo en rojo otra vez. La configuración de pines de los ultrasonidos que hemos elegido: (se omite la alimentación +5V y GND por simplificar la ilustración) ULTRASONIDOS DE ENTRADA Trig = 4 echo = 2 ULTRASONIDOS DE SALIDA Trig = 6 echo = 5 Servo Pin = 7 Los sensores de ultrasonidos ocupan algunos pines de los semáforos, pero no hay problemas, si te fijas en el código, en un momento dado se manda un pulso y en otro momento se recoge, se calcula la distancia y se visualiza el semáforo, sin entrar en contradicción. El programa por supuesto es mejorable (tiene fallos a ver si los adivinas). https://create.arduino.cc/editor/javierquintana/5e4fd64c-bbbc-4878-bbcf-8acb61871040/preview FINNNN Esperamos que este curso, no sólo te has formado, sino que has disfrutado. Cualquier sugerencia, cambio, propuesta, fallos... puedes hacerlo en www.catedu.es en la sección de SOPORTE o INFORMACÓN ¡¡gracias!!! Fuera del curso Dejamos este capítulo para temas que ya son fuera del curso pero que puede servir al docente para explicar conceptos teóricos con el Arduino Electrónica analógica La electrónica es la ciencia que estudia y diseña dispositivos relacionados con el comportamiento de los electrones en la materia. En nuestro caso estudiaremos los componentes básicos utilizados en estos circuitos de bajo voltaje y usaremos Arduino, y la placa EduBásica, para practicar y entender mejor su funcionamiento. Resistencias Los componentes electrónicos llamados resistencias se utilizan en los circuitos para variar los valores de intensidad y voltaje. A veces tenemos que alimentar un dispositivo y sólo disponemos de una fuente de voltaje que puede dañarlo si se conecta directamente, como ocurre por ejemplo con los ledes. Al conectarlos directamente a un pin digital de Arduino (+5V), la corriente que circula es demasiado alta para el led y una exposición prolongada puede provocar que se queme. Para evitar esto conectamos en serie con el led una resistencia eléctrica (220 ohmios por ejemplo) que hace que el valor de la intensidad sea menor. El led lucirá algo menos que si lo conectamos directamente pero alargará su vida útil. El valor de una resistencia se suele identificar mediante unas bandas de colores impresas en su superficie. La interpretación del código de colores la puedes obtener en   http://es.wikipedia.org/wiki/Resistor  aunque suele ser recomendable, a la hora de realizar prácticas con circuitos electrónicos, utilizar un polímero que nos permitirá, entre otras cosas, medir la resistencia eléctrica en ohmios de estos componentes. Divisor de tensión Muchas veces necesitamos sacar una tensión que no es la máxima de la alimentación (en este caso 5V) el truco es hacerlo por resistencias, en forma de divisor de tensión: Si aplicamos la ley de Ohm podemos deducir la siguiente fórmula: [ aquí si quiere ver la demostración ] En este caso utilizaremos el divisor de tensión para demostrar que modificando la R2 por resistencias en serie o paralelo, se modifica la tensión Vout que el Arduino lo leerá y lo visualizará en un LED Montaje 1: Resistencias en serie Elige cuatro resistencias de cualquier valor para los montajes en serie pero procura que sean de valores muy distintos. Para ello utiliza la tabla con los códigos de colores o bien mide los valores directamente con un polímetro (medida de ohmios). Con EDUBÁSICA Monta el siguiente circuito divisor de tensión: El cable rojo es la Vin (5V) y el negro GND. El cable azul es la salida Vout que la lee A2 por eso está conectado al A2 de EDUBASICA Usa la protoboard para intercalar, entre los extremos del cable azul y negro, las resistencias que elegiste y prueba distintas combinaciones en serie quitando y poniendo resistencias. Debes observar que la luminosidad del led varía. SIN EDUBÁSICA Igual, simplemente que A2, Vin y GND lo tienes en el mismo ARDUINO Continuamos... El programa que hay que ejecutar en el arduino es este //Conectaremos resistencias en serie entre Vout=A2 y GND void setup() { // Pin 3 tiene el LED verde pinMode(3, OUTPUT); } void loop() { analogWrite(3,analogRead(2)/4); //Dividimos el valor entre 4 para adecuar la salida a 255 } Reflexión ¿Cómo afecta el valor de las resistencias en serie en la luminosidad del LED? Solución Según la fórmula del divisor de tensión CUANTO MÁS RESISTENCIA HAYA ABAJO (R2 en la fórmula) MÁS TENSIÓN HAY por lo tanto más se ilumina el led que visualiza lo que entra por A2). Montaje 2: Resistencias en paralelo. Este ejercicio es similar al anterior, puedes usar las mismas resistencias y el mismo programa. Une ahora uno de los extremos de las resistencias conectadas en paralelo al pin 2 analógico y el otro extremo a GND. Prueba a quitar alguna de las resistencias y obtén conclusiones de lo que ocurre. CON EDUBASICA SIN EDUBASICA Diodos Seguro que has oído hablar de los diodos LED (Light-Emitting Diode) pues están muy de moda. Un diodo led no es más que un diodo que emite luz cuando está polarizado correctamente. Un diodo (del griego "dos caminos") es un dispositivo semiconductor que permite el paso de la corriente eléctrica en una única dirección con características similares a un interruptor. De forma simplificada, la curva característica de un diodo (I-V) consta de dos regiones: por debajo de cierta diferencia de potencial, se comporta como un circuito abierto (no conduce), y por encima de ella se comporta como un cortocircuito con muy baja resistencia eléctrica. Veamos si sabes como polarizar un diodo... Un diodo se dice polarizado directamente cuando su cátodo está a un potencial inferior al ánodo. Los diodos por tanto deben especificar cual es el ánodo y el cátodo. En la foto puedes ver como un diodo led identifica su cátodo con una patilla recortada. En otro tipo de diodos se puede identificar el cátodo gracias a una raya dibujada sobre el componente. CURVA CARACTERÍSTICA DE UN DIODO: Vamos a estudiar la curva I-V de un diodo de tal manera que comprobaremos que al aplicar un cierto voltaje el diodo conduce y no conduce (estado en corte) si estamos por debajo de ese voltaje o diferencia de potencial. En el caso específico de un diodo la diferencia de potencial a superar es de 0,7 V; si es un diodo LED es más del doble. A partir de ese valor conduce la corriente eléctrica y si es un LED, empieza a iluminarse. Montaje 7 Estudio de la tensión umbral de un LED Objetivo: Medir la tensión del diodo con Arduino con una entrada analógica, A0 (por ejemplo) para detectar la tensión umbral. El diodo lo alimentaremos con un potenciómetro para ir subiendo los valores CON EDUBÁSICA Vamos a realizar el siguiente esquema: Para conectar un cable con A0 tenemos que localizar el orificio (señalado en esta imagen) y para la masa utilizamos el segundo tornillo Montamos: ![](img/2017-09-08_12_37_40-TRANSISTOR-CORTE-SAT.fzz__- Fritzing - [Vista_de_Protoboard (placa_de_Prototipos.png) Carga este código en tu placa Arduino: float val = 0; void setup(){ Serial.begin(9600); } void loop(){ val = analogRead(A0); //leemos el potenciómetro (0-1024) val = val/204,6; //mapeamos los valores para que sean de 0 a 5V Serial.print (val); Serial.print ("V"); //vemos por pantalla el valor en Voltios Serial.println(); delay(1000); } Abre el Monitor serial de Arduino (ctrl+may+M) y verás el voltaje que está ofreciendo Arduino al montaje que has hecho. Mueve el potenciómetro y verás que el valor va cambiando. Intenta averiguar cual es la tensión umbral a partir de la cual tu led empieza a emitir luz. Nota: inicialmente la corriente puede ser muy baja por lo que debes fijarte bien cuando empieza a iluminarse. Verás que alrededor de 2.5V el led empieza a iluminarse TRUCO Se puede hacer sin ningún circuito exterior , utilizando la resistencia R5 y el diodo de VIN , para ello bastaría: Desconectar el interruptor que une V1 con Vin Unir con un cable V1 con A0 Poner interruptor en OFF y unir el cable uniendo V1 con A0 (dibujado en morado) : SIN EDUBASICA Igual, simplemente que tienes que hacer el circuito del potenciómetro exteriormente Condensadores Dos conductores cualesquiera separados por un aislante constituye un condensador. Este tipo de dispositivos eléctricos tienen gran variedad de usos como filtrar señales, eliminar ruido eléctrico o almacenar carga eléctrica entre otros. En casi todas las aplicaciones prácticas cada conductor se encuentra inicialmente descargado y al conectarlos a una batería, mediante transferencia de carga de la batería a los conductores, van adquiriendo una cierta carga (dicho proceso se denomina carga del condensador). En todo momento, ambos conductores tienen igual carga pero de signo opuesto de tal forma que entre ambos conductores existe un campo eléctrico y por tanto una diferencia de potencial que se opone a la externa responsable de su carga. El proceso de carga del condensador se detiene cuando la diferencia de potencial entre los conductores del mismo se iguala a la de la batería.  Hay que resaltar que aunque cada placa se encuentra cargada, la carga neta del condensador sigue siendo nula, puesto que la carga de cada conductor es igual a la del otro pero con signo contrario. Es por ello que cuando se dice que un conductor tiene una carga Q realmente lo que se está diciendo es que tiene una carga +Q en el conductor que se encuentra a mayor potencial y una carga – Q en el conductor a menor potencial (supuesto Q positiva). Montaje 8: Carga de un condensador El objetivo de esta práctica es visualizar la carga de un condensador aprovechando que Arduino puede leer los valores y podemos transmitirlo al ordenador por el puerto serie, usaremos el Arduino como una capturadora de datos y así de forma pedagógica enseñamos cómo es la carga. SIN EDUBÁSICA Hacemos una carga del condensador moviendo el cable rojo curvo desde masa a la alimentación. La unión entre resistencia y condensador lo conectamos a A5. OJO : LA PATA (-) DEL CONDENSADOR TIENE QUE IR A GND (peligro de explosión si el condensador es electrolítico y si es muy grande) El cable amarillo inicialmente lo conectamos a GND y luego procederemos a cargar el condensador soltandolo de GND y conectándolo a 5V El cable rojo mide la tensión del condensador y lo mapearemos por A5 del Arduino. CON EDUCASICA (realmente la EDUBASICA en esta práctica no simplifica el cableado) Continuamos .... Y ejecutamos el siguiente código: float sensorPin = A5; float sensorValue = 0; void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(sensorPin); sensorValue = sensorValue/204.6; //lo mapeamos a Voltios Serial.println(sensorValue); delay(100); } Por el monitor serie se van visualizando los valores, ver el vídeo: La ventaja de utilizar el Arduino, y no el polímetro, es que podemos copiar los valores y pegarlos en una hoja de cálculo, y así visualizar la curva de carga del condensador: En este caso, se ha utilizado una resistencia de 100k y un condensador de 10uF por lo tanto el tiempo de carga es T= 5RC = 5 seg que es lo que aproximadamente refleja la gráfica. En tu kit de robótica para hacer este curso tienes unos valores parecidos. Nota con los valores X: Como la instrucción delay se ha puesto el valor delay(100) por lo tanto hay 0.1segundo entre número y numero, por lo tanto los valores de la X tienen que ser 0, 0.1, 0.2, 0.3 ... en la hoja de cálculo, en la casilla A3 es = A2+0.1 y A1 tiene el valor inicial 0 segundos. Nota con los valores Y: Si se pega los valores en una hoja de cálculo, no interpreta el caracter "." como una "," por lo que se aconseja utilizar una columna que convierta estos valores con la función en Excell, por ejemplo el valor en B2 puede ser : =VALOR(REEMPLAZAR(C2;2;1;",")) donde C es la columna donde se pegan los valores del monitor serie. La hoja Excell que se ha utilizado te lo puedes descargar aquí Montaje 9: Descarga del condensador Si has hecho el montaje anterior , terminarás con el condensador totalmente cargado , procede con el mismo programa que va leyendo A5 a desconectar el cable amarillo de 5V y conectarlo a GND entonces el condensador se irá descargando a masa. SIN EDUBASICA CON EDUBÁSICA Continuamos ... Por el monitor serie se van leyendo los valores, puedes copiarlos y pegarlos en la misma hoja excell y verás la gráfica de descarga del condensador, que con el misma fórmula T=5RC nos sale aproximadamente 5 segundos de prácticamente el tiempo de descarga: Transistores Ciertos dispositivos tecnológicos necesitan una corriente eléctrica mayor que la que proporciona la placa EduBásica y para ello se utiliza el transistor. El transistor es sin duda el componente electrónico más importante. Está formado por 3 capas de material semiconductor, cada una con un terminal metálico para poder conectarlo a los circuitos. Los materiales semiconductores se pueden comportar como aislantes o conductores según la energía que reciban, de ahí su versatilidad en el campo de la electrónica. Los 3 terminales de los transistores son: Colector: Entrada de corriente. Base: Entrada de corriente. Regula el funcionamiento. Emisor: Salida de corriente. Según la forma en la que conectemos los terminales del transistor a resistencias externas éste puede funcionar de 3 formas: El funcionamiento típico en circuitos de señales ANALÓGICAS  Como funcionamiento en zona “activa” : La resistencia conectada a la base del transistor tiene un valor que permite circular corriente a través de ella. De esta manera hay circulación de corriente entre el colector y emisor cuyo valor será proporcional a la corriente que circula por la base. Normalmente mucho mayor  con lo que producirá el efecto de amplificación.  En resumen: El transistor actúa como un  *amplificador de corriente   * La ganancia de corriente β también llamado hfe , se calcula dividiendo la corriente de colector con la corriente de base, Los funcionamientos típicos de circuitos DIGITALES Como interruptor abierto o en “corte” : Si la corriente que circula por la base es nula, normalmente debido a que se conecta a ella una resistencia de un valor muy elevado, el transistor no permite el paso de corriente entre colector y emisor. Como interruptor cerrado en zona de “saturación” : Si se va aumentando la intensidad que circula por la base llega un momento que la intensidad entre colector y emisor ya no aumenta más; es decir, se satura. CONEXIONES Vamos a definir las conexiones para los siguientes montajes del transistor, utilizaremos tenemos un TIP121 o TP120 es un transistor NPN tipo "Darlington" es decir, está integrado por dos transistores interiormente. SIN EDUBASICA Realizaremos el siguiente esquema,conectando la base al D6 y dejando el colector abierto para los experimentos: por lo tanto: CON EDUBASICA En la shield ya tenemos el siguiente esquema: Los conectores X2-2 y X2-1 son los de abajo a la izquierda. X2-2 es el colecto r del transistor y X2-1 es V1 (aunque en la foto pone Vin): V1 y Vin está conectado por el interruptor según este esquema: Luego es mejor que el interruptor esté conectado en ON para unir V1 con Vin y cortar el diodo D1, en caso contrario se nos va la corriente de la resistencia de colector por D1 a R5 y al led engañando la medida. Vin son aproximadamente 5V de potencia de entrada al arduino que se utilizan si no lo alimentamos por el USB.  Montaje 10: saturación y corte Podemos jugar con el transistor en los estados saturación y corte, para ello vamos a crear una variable n que es un contador (en estado inicial n=1 y en los sucesivos se incrementa una unidad n++), si el contador es par ( el resto de n/2 = 0 o sea n%2==0) la intensidad de la corriente base sea 0 y en caso contrario que sea máxima. Pondremos un retardo de 3 segundos para visualizar bien los valores que medimos. El programa sería: int ledPin = 6; int potenPin = A0; int intensity, valor_poten; int n; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); n=1; } void loop() { if (n%2==0) intensity = 0; else intensity = 255; analogWrite(ledPin,intensity); //Envia una onda PWM especificado en la varible: intensity. Serial.print("n="); Serial.print(String(n)); Serial.print("\tintensity = "); Serial.print(String(intensity)); Serial.print("\n"); n++; delay (3000); } El programa es un poco "tremendo" ¿hay alguna manera de simplificarlo? CON EDUBASICA Pondremos una resistencia de colector de 1k para forzar una corriente de saturación, pero como desde el conector X2-2 hasta V+ hay mucha distancia para conectar los dos extremos de la resistencia, utilizaremos la placa Protoboard: Mediremos entre colector y masa, y vemos que alternativamente pasa de los estado corte (casi 5V) a saturación (casi 0V). SIN EDUBASICA RESULTADO Si medimos la tensión en la base, vemos que pasa de 0V a 1.28V : Montaje 11: zona activa En esta práctica el transistor va a actuar como amplificador de corriente, dentro de la zona activa para ello se va a realizar el siguiente montaje: SIN EDUBASICA Ponemos una resistencia en el colector y un potenciómetro en A0: CON EDUBASICA Continuamos... El funcionamiento de este circuito es el siguiente: a partir de potenciómetro que tenemos en la placa EduBásica controlamos la salida PWM del pin D6 variando la tensión aplicada a la resistencia de base Rb que en Edubásica es R6: Y sin edubásica mediremos en la resistencia conectada en la base. Utilizaremos el siguiente código: int ledPin = 6; int potenPin = A0; int intensity, valor_poten; int n; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); n=1; } void loop() { valor_poten=analogRead(potenPin); intensity = map(valor_poten, 0, 1024, 0, 255); analogWrite(ledPin,intensity); Serial.print("valor analógico leído="); Serial.println(analogRead(valor_poten)); delay (1000); } El resultado es que podemos tener el transistor dentro de la zona activa manejando el potenciómetro, en el siguiente vídeo se muestra el polímetro que mide la tensión del colector y como varía de corte (casi 5V) a saturación (casi 0V) pasando por la zona activa :  Montaje 12: Con un diodo se ve bien Podemos insertar un diodo en el colector y se visualiza bien las zonas: SIN EDUBASICA CON EDUBASICA Continuamos El programa es el mismo que el anterior y se puede ver en el vídeo las tras formas de funcionamiento del transistor. Se trata de ir variando el valor del potenciómetro R1, con el fin de conseguir que el diodo led pase de estar apagado (corte), a encendido en diferentes grados de luminosidad, llegando finalmente hasta su máxima luminosidad (saturación). La mayor o menor intensidad del diodo led nos indicará la mayor o menor corriente que fluye por el colector (IC) al variar la corriente de base (IB). Resultados Mediante un polímetro se pueden medir los valores de tensión. Para medir estas corrientes recurriremos, como en otras ocasiones, al polímetro en forma de voltímetro y aplicar la ley de Ohm. A nosotros nos ha salido resultados (xlsx - 15,87 KB ) Montaje 13: cálculo de hfe Con el mismo circuito anterior , se mide la tensión en los terminales de Rb (que está en la placa) y Rc (la que hay que montar en un protoboard) completando la siguiente tabla: Se varía el potenciómetro, progresivamente para conseguir las tensiones en la resistencia de base que figuran en la tabla Una vez obtenidos todos los valores, calcular la Intensidad de colector y la intensidad de la base con estas fórmulas que en el caso de Edubásica Rb es R6 y son 10k Creemos que la mejor forma de leer Vrb es desde los extremos de la base del transistor y D6: Podemos llevarlos a una gráfica y trazar la curva característica Ic= f(Ib) La ganancia de corriente β se calcula:  Según la  DataSheet  de este transistor te tiene que salir alrededor de 1.000, nosotros hemos realizado la práctica y nos sale 13 ¡no lo entendemos! :( [ resultados (xlsx - 15,87 KB )] Recta de carga de un transistor Se trata de comprobar de forma práctica el efecto de amplificación de corriente de un transistor, así como de determinar su punto de trabajo para un determinada corriente de base y la recta de carga. El circuito es el mismo que la práctica anterior. La siguiente expresión se corresponde con la ecuación de la recta de carga:  Para dibujar esta recta sobre la curva característica determinaremos primero sus extremos (IC = 0 y VCE = 0): Te proponemos realizar los cálculos teóricos y dibujar la recta de carga en una gráfica Ic (eje y) y Vce (eje x) y sobre esta gráfica representar los puntos Ic Vce que has medido experimentalmente, utilizando las fórmulas Te puede salir una cosa así: Electrónica digital Entendemos por electrónica digital, la que se encarga de sistemas electrónicos en los que sólo existen 2 valores o estados: verdadero/falso, "0" ó "1".  En este capítulo trabajaremos los conceptos principales del Álgebra de Boole y de las puertas lógicas que utilizaremos para diseñar circuitos. Utilizaremos Arduino y la placa EduBásica. Conocimiento previo Programación básica de Arduino. Objetivos Conocer las propiedades del Álgebra de Boole. Operar con variables binarias. Lista de materiales: Placa Arduino. Álgebra de Boole - Magnitudes analógicas: Tienen un número infinito de valores, por ejemplo, todas las magnitudes físicas como temperatura, velocidad, electricidad, tiempo, etc … - Magnitudes digitales: Consideraremos señales digitales binarias que son las que sólo toman dos valores discretos: el uno o el cero. Representarán estados “activados” o “desactivados” Por ejemplo una bombilla puede estar encendida  o apagada. Para poder trabajar con datos binarios, el matemático inglés George Boole (1815-1864) creó una estructura algebraica que consta únicamente de 2 elementos (bits). Una álgebra que seguro conoces y utilizas a diario es el álgebra elemental, basado en la aritmética decimal que consta de 10 elementos (números), operaciones (suma, resta, ....) y propiedades (conmutativa...). Toda álgebra consta de esos 3 apartados: elementos, operaciones y propiedades. El álgebra de boole comprende: Elementos: 0 y 1.  Operaciones: multiplicación, suma, negación. Propiedades: conmutativa, asociativa, distributiva, elemento negado. A los elementos de un circuito eléctrico se pueden asociar estados de “1” ó “0” si están encendidos o apagados y cerrados (conectados) o abiertos (desconectados) respectivamente. Montaje 1 AND sin EDUBASICA PULSADORES: Vamos a simular dos entradas lógicas (“1” ó “0”) con dos pulsadores, (pueden ser conmutadores). En este ejemplo usaremos la función AND de manera que, según el estado de las 2 entradas, obtendremos una señal de salida (“1” ó “0”) conforme a la tabla de verdad de la operación. Si te animas puedes montar el circuito tú mismo en una protoboard siguiendo este esquema: Las entradas están en los pines digitales 1 y 2. Y la salida del sistema es un led (en pin 5) que estará encendido/apagado según el resultado de aplicar la función AND a las 2 variables de entrada. PROGRAMA: ```cpp / Boole Función AND con 2 variables / int var1 = 7; //Pin de entrada del pulsador 1 int var2 = 2; //Pin de entrada del pulsador 1 int led = 5; //Pin de salida para el led(rojo) int estado1 = 0; //Para almacenar el estado de la variable1 int estado2 = 0; //Para almacenar el estado de la variable2 int resultado = 0; //Para almacenar el resultado void setup() { pinMode(var1, INPUT); //Iniciliza el pin de entrada 1 como salida pinMode(var2, INPUT); //Iniciliza el pin de entrada 2 como salida pinMode(led, OUTPUT); //Iniciliza el pin del led como salida } void loop(){ estado1 = digitalRead(var1); //Lee el estado del botón y lo almacena estado2 = digitalRead(var2); //Lee el estado del botón y lo almacena resultado = (estado1 && estado2); //Función AND con los dos estados digitalWrite(led, resultado); //Escribimos el resultado en el led } ``` Montaje 1bis AND con EDUBASICA En este caso, para ahorrar cableado, vamos a utilizar: Como variable 1 de entrada el pin D2 que ya tiene el pulsador , y lo visualizaremos en el pin D4 que tiene el LED VERDE . Como variable 2 de entrada el pin D5 que lo conectaremos con un cable a V1 que tiene el interruptor y ya se visualiza en el LED AMARILLO . Como variable de salida el pin D3 que es el LED ROJO . El esquema sería el siguiente: Y el esquema de conexiones es muy fácil, conectar V1 con el agujero D5 de JP6: Aquí teneis el detalle de dónde está el agujero D5 El código sería: /* Boole Función AND con 2 variables */ //////////////////// entradas /////////////////////////////////////////////////////////////////////////// int var1 = 2; //Pin D2 de entrada del pulsador 1 int var2 = 5; //Pin D5 de entrada del pulsador 1 y led(rojo), conectamos V1 con D5 con un cable int ledvar1 = 4; //Pin D4 de salida para el var1 led(amarillo) //////////////////// salidas ///////////////////////////////////////////////////////////////////////// int ledsalida = 3; //Pin de salida para el led(verde) //////////////////////////////////////////////////////////////////////////////////////////////////// int estado1 = 0; //Para almacenar el estado de la variable1 int estado2 = 0; //Para almacenar el estado de la variable2 int resultado = 0; //Para almacenar el resultado void setup() { pinMode(var1, INPUT); //Iniciliza el pin de entrada 1 como salida pinMode(var2, INPUT); //Iniciliza el pin de entrada 2 como salida pinMode(ledvar1, OUTPUT); //Inicialliza led de var1 como salida ///////////////////////////////// no hace falta inicializar D5 como salida, pues estará con un cable visualizando V1 pinMode(ledsalida, OUTPUT); //Iniciliza el pin del led como salida } void loop(){ estado1 = digitalRead(var1); //Lee el estado del botón y lo almacena digitalWrite(ledvar1, estado1); //Se visualiza en el led amarillo la entrada var1 estado2 = digitalRead(var2); //Lee el estado del botón y lo almacena resultado = (estado1 && estado2); //Función AND con los dos estados digitalWrite(ledsalida, resultado); //Escribimos el resultado en el led } Y el resultado es : Montaje 2 ELEVADOR sin EDUBASICA FUNCIONES LÓGICAS: Tenemos un elevador neumático que se puede controlar desde 2 habitaciones contiguas del taller. Para que el elevador funcione debe estar accionado cualquiera de los 2 pulsadores existentes, pero por seguridad no funcionará si dos operarios la accionan simultáneamente. Identificar las variables de entrada y función de salida: Entradas : A: un pulsador B: un pulsador Salida o valor de la función: Motor que acciona el compresor del elevador TABLA DE VERDAD: Función Canónica: M(FC1) = NOT(A) * B + A * NOT(B) Puertas Lógicas: 2 puertas NOT 2 puertas AND 1 puerta OR (Es decir, una función XOR ) PROGRAMA: ```cpp / Implementación de Función lógica / int var1 = 1; //Pin de entrada del pulsador 1 int var2 = 2; //Pin de entrada del pulsador 1 int led = 5; //Pin de salida para el led(rojo) int A = 0; //Para almacenar el estado de la variable1 int B = 0; //Para almacenar el estado de la variable2 int resultado = 0; //Para almacenar el resultado void setup() { pinMode(var1, INPUT); //Init pin de entrada 1 como salida pinMode(var2, INPUT); //Init pin de entrada 2 como salida pinMode(led, OUTPUT); //Iniciliza el pin del led como salida } void loop(){ A = digitalRead(var1); //Lee el estado 1 y lo almacena B = digitalRead(var2); //Lee el estado 2 y lo almacena //Función Lógica ------ R=(â b)+(a ^b) resultado = (!A && B) || (A && !B); digitalWrite(led, resultado); //Escribimos el resultado en el led } ``` Montaje 2bis ELEVADOR con EDUBASICA Con EDUBASICA es utilizar el mismo esquema que AND con EDUBASICA pero cambiando la función AND por la XOR /* Boole Función XOR con 2 variables */ //////////////////// entradas /////////////////////////////////////////////////////////////////////////// int var1 = 2; //Pin D2 de entrada del pulsador 1 int var2 = 5; //Pin D5 de entrada del pulsador 1 y led(rojo), conectamos V1 con D5 con un cable int ledvar1 = 4; //Pin D4 de salida para el var1 led(amarillo) //////////////////// salidas ///////////////////////////////////////////////////////////////////////// int ledsalida = 3; //Pin de salida para el led(verde) //////////////////////////////////////////////////////////////////////////////////////////////////// int A = 0; //Para almacenar el estado de la variable1 int B = 0; //Para almacenar el estado de la variable2 int resultado = 0; //Para almacenar el resultado void setup() { pinMode(var1, INPUT); //Iniciliza el pin de entrada 1 como salida pinMode(var2, INPUT); //Iniciliza el pin de entrada 2 como salida pinMode(ledvar1, OUTPUT); //Inicialliza led de var1 como salida ///////////////////////////////// no hace falta inicializar D5 como salida, pues estará con un cable visualizando V1 pinMode(ledsalida, OUTPUT); //Iniciliza el pin del led como salida } void loop(){ A = digitalRead(var1); //Lee el estado del botón y lo almacena digitalWrite(ledvar1, A); //Se visualiza en el led amarillo la entrada var1 B = digitalRead(var2); //Lee el estado del botón y lo almacena resultado = (!A && B) || (A && !B); digitalWrite(ledsalida, resultado); //Escribimos el resultado en el led } El resultado es: Montaje 3 ALARMA EN VIVIENDA con EDUBASICA Gracias a la lógica programable podemos programar alarmas muy complejas y mucho más eficientes que las alarmas convencionales. Las alarmas convencionales usan finales de carrera y, en definitiva, interruptores que activan una alarma. En nuestro caso vamos a dotar a la alarma de cierta lógica que nos proporcione mejores y más cómodos resultados. Las posibilidades son ilimitadas y depende de tu imaginación . En esta práctica y sólo como ejemplo vamos a suponer algunas cosas que, si bien no tienen por qué ajustarse a la realidad, si que sirven como ejemplo para mostrar y dar a entender las posibilidades de la alarma. puerta, encender la luz y cerrar la puerta. Partimos de las siguientes premisas : El ladrón puede entrar sólo por la ventana o por la puerta. Fíjate en las puertas y ventanas de los comercios de tu localidad. Seguro que has visto más de uno. Como la ventana de la casa da a una calle principal muy transitada el ladrón no intentará entrar nunca por la ventana cuando sea de día. La entrada de nuestra casa es oscura y no tiene ventanas al exterior, por lo tanto nuestro comportamiento habitual es abrir la puerta, encender la luz y cerrar la puerta. Sólo abrimos las ventanas de día, nunca por la noche. Ten en cuenta que los interruptores podrían sustituirse en un caso real con relé un Reed conocido también como interruptor magnético. Son elementos económicos y de muy fácil instalación. Con EDUBASICA: Como detector de apertura de puerta vamos a usar el pulsador de la PLACA EDUBASICA ( D2 ) Como detector de la ventana vamos a usar un pulsador que montaremos sobre la protoboard que lo conectaremos a la clema D7 . Sabremos si es de día o de noche gracias al LDR de la EduBásica. Uitlizaremos el interruptor V1 como RESET por lo tanto lo conectaremos a A2 para leerlo El esquema sería el siguiente SIN EDUBASICA Este sería el programa: int ventana, puerta, luz, reset;//definimos variables bool alarma; void setup() { pinMode(7, INPUT); pinMode(5,OUTPUT); //led rojo pinMode(2,INPUT); Serial.begin(9600); reset=0; alarma =false; } void loop() { ventana=digitalRead(7); //guardamos el estado de la ventana Serial.print( " VENTANA "); Serial.print(ventana); puerta=digitalRead(2); //guardamos estado de puerta Serial.print( " PUERTA "); Serial.print(puerta); luz=analogRead(1); //guardamos estado de LUZ Serial.print( " LUZ "); Serial.print(luz); reset= analogRead(2); Serial.print(" RESET="); Serial.println(reset); } Abre el “monitor serial” y prueba a activar los pulsadores. Verás que cuando están activos el valor obtenido es 1 y cuando están desactivados su valor es 0. Comprueba qué interruptor se corresponde con la ventana y cual con la puerta. Tapa ahora el LDR y observa el valor que obtienes cuando no recibe luz (será el mismo valor que si es de noche). A nosotros nos ha salido: VENTANA 0 PUERTA 0 LUZ 920 RESET=356 <---- estado normal VENTANA 0 PUERTA 1 LUZ 917 RESET=356 <---- apretando el pulsador de la placa Edubásica VENTANA 0 PUERTA 0 LUZ 1011 RESET=356 <---- tapando el LDR VENTANA 0 PUERTA 0 LUZ 1016 RESET=875 <---- activando el interruptor de Edubasica VENTANA 0 PUERTA 0 LUZ 884 RESET=356 <---- quitando el interruptor (estado normal) Atendiendo a los supuestos anteriores carga este programa y observa su funcionamiento. Si el led rojo se enciende es que la alarma se ha disparado. int ventana, puerta, luz, reset;//definimos variables bool alarma; void setup() { pinMode(7, INPUT); pinMode(5,OUTPUT); //led rojo pinMode(2,INPUT); Serial.begin(9600); reset=0; alarma =false; } void loop() { ventana=digitalRead(7); //guardamos el estado de la ventana Serial.print( " VENTANA "); Serial.print(ventana); puerta=digitalRead(2); //guardamos estado de puerta Serial.print( " PUERTA "); Serial.print(puerta); luz=analogRead(1); //guardamos estado de LUZ Serial.print( " LUZ "); Serial.print(luz); //implementamos la logica de la puerta if (puerta==1) {//la puerta esta abierta delay(3000); //esperamos hasta que encienda la luz if (luz > 1000) alarma=true; //no han encendido la luz } //implementamos logica de ventana if (ventana==1 && luz < 1000) alarma=true; if (alarma){ digitalWrite(5,HIGH); Serial.print( " ¡¡¡¡ ##### ALARMA ##### !!!!! "); }else{ digitalWrite(5,LOW); } reset= analogRead(2); if (reset>800) { alarma=false; Serial.print( " ¡¡¡¡ ##### RESET ##### !!!!! "); } Serial.print(" RESET="); Serial.println(reset); } El resultado es : Actividad Ampliación: Pon el transistor y el altavoz ¡¡que suene!! Actividad Como comprobarás una vez que la alarma se activa permanece en ese estado. Para desactivarla debes de activar el interruptor. Piensa en otra solución para poder desactivar la alarma, por ejemplo abriendo la ventana y la puerta a la vez. Actividad Ampliación: Usamos EduBásica porque dispone de elementos hardware ya instalados, como led y pulsador, pero piensa que sin EduBásica tu Arduino dispone de 13 entradas digitales y 6 analógicas. Piensa en un sistema más completo de alarma en el que puedas conectar sensores de humo o de movimiento (PIR). Actividad Proyecto propuesto: Realiza todo el proceso para implementar, mediante funciones lógicas, el siguiente sistema: Se trata de una máquina de control de una cinta transportadora. Tenemos un sensor de temperatura basado en un termistor que nos dirá si se ha producido un sobrecalentamiento en la máquina. También hay un sensor de presión que detecta la presencia de un objeto sobre la cinta transportadora. Por último, la cinta transportadora sólo estará en funcionamiento si el operario mantiene apretado un pulsador. Tendremos un led que avisará si hay sobrecalientamiento y detendrá la cinta si está en movimiento. Un zumbador avisará cuando la cinta esté en movimiento. Muro https://padlet.com/CATEDU/muro-de-arduino-aveh0chckc8l Créditos 2017 Adaptado por Javier Quintana de  https://edubasica.github.io/ autores Manuel Hidalgo Díaz. Jorge Muñoz Rodenas. Pablo Evaristo García Palacios. Jorge Luis Loza Luis. 2024 revisado y ampliado por Javier Quintana Peiró CATEDU Los vídeos que aparecen en este manual son de elaboración propia de los autores así como las fotografías de los montajes y esquemas eléctricos. Otras imágenes, principalmente las que ilustran las portadas de los capítulos se han descargado desde repositorios de imágenes libres. El manual se distribuye bajo licencia Creative Commons tipo by-sa El recurso  de https://edubasica.github.io/ ha sido subvencionado por el Ministerio de Educación, Cultura y Deporte a través de la convocatoria de ayudas para la elaboración de recursos didácticos para su incorporación a las plataformas de acceso público 2014. Todas las actuaciones descritas en este recurso comprometen exclusivamente a los autores del mismo.