{"id":144,"date":"2025-11-28T12:09:01","date_gmt":"2025-11-28T12:09:01","guid":{"rendered":"https:\/\/www.artinteractivo.com\/?page_id=144"},"modified":"2026-02-24T11:46:12","modified_gmt":"2026-02-24T11:46:12","slug":"tutorial-arduino","status":"publish","type":"page","link":"http:\/\/www.artinteractivo.com\/fr\/tutorial-arduino\/","title":{"rendered":"Tutorial Arduino"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><a class=\"logo-img\" href=\"https:\/\/www.arduineando.com\/\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2018\/02\/logo2.png\" alt=\"arduineando\"\/><\/a><\/figure>\n\n\n\n<ul id=\"menu-tutoriales_arduino\" class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.arduineando.com\/\">Tutoriales<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\">Proyectos<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.artinteractivo.com\/\">Art interactivo<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.andresduarte.com\/\">Contacto<\/a><\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading wp-embed-aspect-4-3 wp-has-aspect-ratio\">Tutoriales-Arduino<\/h1>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-prise-en-charge-des-contenus-embarqu-s wp-block-embed-prise-en-charge-des-contenus-embarqu-s wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Arduino y Midi para controlar Logic, Garageband, Main stage\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/Ju6_oQpOZ9Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading wp-embed-aspect-4-3 wp-has-aspect-ratio\">Tutorial de Arduino:<\/h1>\n\n\n\n<p class=\"wp-embed-aspect-4-3 wp-has-aspect-ratio wp-block-paragraph\"><strong>Arduino<\/strong>&nbsp;es una plataforma de&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Hardware_libre\">hardware libre<\/a>, basada en una&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Circuito_impreso\">placa<\/a>&nbsp;con un&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Microcontrolador\">microcontrolador<\/a>&nbsp;y un&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Entorno_de_desarrollo\">entorno de desarrollo<\/a>, dise\u00f1ada para facilitar el uso de la electr\u00f3nica en proyectos multidisciplinares.<\/p>\n\n\n\n<p class=\"wp-embed-aspect-4-3 wp-has-aspect-ratio wp-block-paragraph\">El&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Hardware\">hardware<\/a>&nbsp;consiste en una placa con un microcontrolador&nbsp;<a href=\"http:\/\/es.wikipedia.org\/w\/index.php?title=Atmel_AVR&amp;action=edit&amp;redlink=1\">Atmel AVR<\/a>&nbsp;y puertos de&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Entrada\/salida\">entrada\/salida<\/a>. Los microcontroladores m\u00e1s usados son el&nbsp;<a href=\"http:\/\/es.wikipedia.org\/w\/index.php?title=Atmega168&amp;action=edit&amp;redlink=1\">Atmega168<\/a>,&nbsp;<a href=\"http:\/\/es.wikipedia.org\/w\/index.php?title=Atmega328&amp;action=edit&amp;redlink=1\">Atmega328<\/a>,&nbsp;<a href=\"http:\/\/es.wikipedia.org\/w\/index.php?title=Atmega1280&amp;action=edit&amp;redlink=1\">Atmega1280<\/a>,&nbsp;<a href=\"http:\/\/es.wikipedia.org\/w\/index.php?title=ATmega8&amp;action=edit&amp;redlink=1\">ATmega8<\/a>&nbsp;por su sencillez y bajo coste que permiten el desarrollo de m\u00faltiples dise\u00f1os. Por otro lado el software consiste en un entorno de desarrollo que implementa el&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Lenguaje_de_programaci%C3%B3n\">lenguaje de programaci\u00f3n<\/a>&nbsp;Processing\/Wiring y el&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Cargador_de_arranque\">cargador de arranque<\/a>&nbsp;(<em>boot loader<\/em>) que corre en la placa.<\/p>\n\n\n\n<p class=\"wp-embed-aspect-4-3 wp-has-aspect-ratio wp-block-paragraph\">Arduino se puede utilizar para desarrollar objetos interactivos aut\u00f3nomos o puede ser conectado a software del ordenador (por ejemplo:&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Macromedia_Flash\">Macromedia Flash<\/a>,&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Processing\">Processing<\/a>,&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Max\/MSP\">Max\/MSP<\/a>,&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Pure_Data\">Pure Data<\/a>). Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente.<\/p>\n\n\n\n<p class=\"wp-embed-aspect-4-3 wp-has-aspect-ratio wp-block-paragraph\">Al ser open-hardware, tanto su dise\u00f1o como su distribuci\u00f3n es libre. Es decir, puede utilizarse libremente para el desarrollo de cualquier tipo de proyecto sin haber adquirido ninguna licencia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Arduino recibi\u00f3 una Menci\u00f3n Honor\u00edfica en la secci\u00f3n&nbsp;<em>Digital Communities<\/em>&nbsp;de la edici\u00f3n del 2006 del&nbsp;<em>Ars Electronica Prix<\/em>. El equipo Arduino (Arduino team) es: Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, y David Mellis.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/arduino_explained.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/arduino_explained-300x215.jpg\" alt=\"\" class=\"wp-image-162\" title=\"arduino_explained\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La placa Arduino Standard tiene 14 pines con entradas\/salidas digitales (6 de las cuales pueden ser usadas como salidas PWM), 6 entradas anal\u00f3gicas, un cristal oscilador a 16Mhz, conexi\u00f3n USB, entrada de alimentaci\u00f3n, una cabecera ISCP, y un bot\u00f3n de reset.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los programas hechos con Arduino se dividen en tres partes principales: estructura, valores (variables y constantes), y funciones. El Lenguaje de programaci\u00f3n Arduino se basa en C\/C++.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><a href=\"http:\/\/arduino.cc\/es\/Reference\/HomePage\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/arduino.cc\/es\/Reference\/HomePage<\/a><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Existen varios tipos de Placas Arduino por ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/arduino.cc\/es\/Guide\/ArduinoNano\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino Nano<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/arduino.cc\/es\/Guide\/ArduinoMini\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino Mini<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/arduino.cc\/es\/Guide\/ArduinoBT\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino BT<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/arduino.cc\/es\/Guide\/ArduinoLilyPad\" target=\"_blank\" rel=\"noreferrer noopener\">LilyPad Arduino<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/arduino.cc\/es\/Main\/ArduinoBoardFioProgramming\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino Fio<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/arduino.cc\/es\/Guide\/ArduinoPro\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino Pro<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/arduino.cc\/es\/Guide\/ArduinoProMini\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino Pro Mini<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/arduino.cc\/es\/Guide\/ArduinoXbeeShield\" target=\"_blank\" rel=\"noreferrer noopener\">Xbee shield<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/arduino.cc\/es\/Guide\/ArduinoEthernetShield\" target=\"_blank\" rel=\"noreferrer noopener\">Ethernet shield<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduino.cc\/en\/Main\/arduinoBoardUno\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino UNO<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduino.cc\/en\/Main\/ArduinoBoardMega2560\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino&nbsp;Mega<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Al ser un entorno Open hardware y ser una gran comunidad, se han dise\u00f1ado muchos tipos de placas Arduino distintas aparte de las mencionadas anteriormente. Como todas est\u00e1n basadas en la misma base de programaci\u00f3n vamos a centrarnos en la Placa Arduino UNO que es una placa standard y nos permite hacer pruebas de una manera sencilla.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Entradas y Salidas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cada uno de los&nbsp;<strong>14 pines digitales<\/strong>&nbsp;del Arduino puede ser usado como entrada o salida digital, usando las funciones :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>-pinMode()<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>-digitalWrite()&nbsp;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>-digitalRead()<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Operan a 5 voltios. Cada pin puede proporcionar o recibir un m\u00e1ximo de 40 mA y tiene una resistencia interna \u201cpull-up\u201d (desconectada por defecto) de 20-50 KOhms. Adem\u00e1s, algunos pines tienen funciones especiales:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pines serie Rx y Tx<\/strong>&nbsp;: Sirven para recibir transmitir datos (TTL), est\u00e1n conectados al chip FTDI, el cual hace conversi\u00f3n de USB a serie- TTL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Interruptores externos:<\/strong>&nbsp;2 y 3. Estos pines pueden ser configurados para disparar un interruptor en un valor bajo, un margen creciente o decreciente, o un cambio de valor. Con la funci\u00f3n:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>-attachInterrupt().<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PWM:<\/strong>&nbsp;3, 5, 6, 9, 10 y 11. Proporcionan salida PWM de&nbsp;<em><strong>8 bits<\/strong><\/em>&nbsp;con la funci\u00f3n:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2013&nbsp;<em>analogWrite()<\/em>&nbsp;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>I \u00b2C: 4 (SDA) y 5 (SCL):&nbsp;<\/strong>El software Arduino incluye una librer\u00eda Wire para simplifcar el uso del bus I \u00b2C. Son buses para comunicarse con otros dispositivos. Soportan comunicaci\u00f3n con libreria Wire. Esta libreria se utiliza para comunicarse con elementos TWI (Two Wire Interfaces) que tienen mas velocidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SPI:<\/strong>&nbsp;10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines soportan comunicaci\u00f3n SPI, la cual, aunque proporcionada por el hardware subyacente, no est\u00e1 actualmente incluida en el lenguaje Arduino.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>LED: 13<\/strong>. Hay un LED empotrado conectado al pin digital 13. Cuando el pin est\u00e1 a valor HIGH, el LED est\u00e1 encendido, cuando el pin est\u00e1 a LOW, est\u00e1 apagado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tiene&nbsp;<strong>6 entradas anal\u00f3gicas<\/strong>, cada una de las cuales proporciona&nbsp;<em><strong>10 bits<\/strong><\/em>&nbsp;de resoluci\u00f3n (por ejemplo 1024 valores diferentes). Por defecto miden 5 voltios desde tierra, aunque es posible cambiar el valor m\u00e1s alto de su rango usando el pin AREF y alg\u00fan c\u00f3digo de bajo nivel. Para programar y leer la entrada de estos pines anal\u00f3gicos utilizamos la funci\u00f3n:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>-analogRead()<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s, algunos pines tienen funcionalidad especializada:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>AREF<\/strong>: Voltaje de referencia para las entradas anal\u00f3gicas. Usado con<em>&nbsp;analogReference().&nbsp;<\/em>Es para entradas anal\u00f3gicas. Nos permite dar a la placa un voltaje de referencia al suministrarle una alimentaci\u00f3n externa. si queremos medir el voltaje con un rango m\u00e1ximo de 3,3v, alimentar\u00edamos 3,3v en el pin AREF con un regulador de voltaje IC. entonces el ADC representar\u00eda 3,22 mV.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Reset.<\/strong>&nbsp;Pone esta linea a LOW para resetear el microcontrolador. T\u00edpicamente usada para a\u00f1adir un bot\u00f3n de reset a dispositivos que bloquean a la placa principal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Comunicaci\u00f3n<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Serial:<\/strong>&nbsp;Arduino tiene un numero de infraestructuras para comunicarse con un ordenador, otro Arduino, u otros microcontroladores. Los microcontroladores mas populares actualmente son los ATmega que utiliza proveen comunicaci\u00f3n serie UART TTL (5 V), la cual est\u00e1 disponible en los&nbsp;<strong>pines digitales 0 (Rx) y 1 (Tx).<\/strong>&nbsp;Usados para recibir (Rx) y transmitir (Tx) datos TTL en serie. Estos pines estan conectados a los pines correspondientes del chip&nbsp;<strong>FTDI<\/strong>&nbsp;USB-a-TTL Serie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo: Las placas Arduino&nbsp;<em><strong>Diecimila<\/strong><\/em>&nbsp;y<em><strong>&nbsp;Duemilanove<\/strong><\/em>&nbsp;utilizan chip&nbsp;<strong>FTDI&nbsp;<\/strong><strong>FT232RL<\/strong>&nbsp;como conversor USB-Serial. La Arduino UNO utiliza un chip<strong>&nbsp;Atmega16U2<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un&nbsp;<strong>FTDI&nbsp;<\/strong>en la placa canaliza esta comunicaci\u00f3n serie al USB y los drivers FTDI (incluidos con el software Arduino) proporcionan un puerto de comunicaci\u00f3n virtual al software del ordenador. El software Arduino incluye un monitor serie que permite a datos de texto simple ser enviados a y desde la placa Arduino.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una librer\u00eda SoftwareSerial permite comunicaci\u00f3n serie en cualquiera de los pines digitales de Arduino.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Programaci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El Arduino puede ser programado con el software Arduino.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El ATmega del Arduino vienen con un bootloader pregrabado que permite subirle nuevo c\u00f3digo sin usar un programador hardware externo. Se comunica usando el protocolo original STK500. Tambi\u00e9n puedes saltar el bootloader y programar el ATmega a trav\u00e9s de la cabecera<strong>&nbsp;ICSP<\/strong>&nbsp;(In-Circuit Serial Programming).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Alimentaci\u00f3n<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puede ser alimentado v\u00eda la&nbsp;<strong>conexi\u00f3n USB<\/strong>&nbsp;o con una fuente de alimentaci\u00f3n externa. El origen de la alimentaci\u00f3n se selecciona autom\u00e1ticamente. Las fuentes de alimentaci\u00f3n externas (no-USB) pueden ser tanto un transformador o una bater\u00eda. El&nbsp;<strong>transformador<\/strong>&nbsp;se puede conectar usando un&nbsp;<strong>conector jack macho de 2.1mm<\/strong>&nbsp;con centro positivo en el conector hembra de la placa. Los cables de la&nbsp;<strong>bater\u00eda<\/strong>&nbsp;puede conectarse a los pines&nbsp;<strong>Gnd<\/strong>&nbsp;y<strong>&nbsp;Vin<\/strong>&nbsp;en los conectores de alimentaci\u00f3n (POWER).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em><strong>Los pines de alimentaci\u00f3n son los siguientes:<\/strong><\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>-VIN.<\/strong>&nbsp;La entrada de voltaje a la placa Arduino cuando se esta usando una fuente externa de alimentaci\u00f3n (en opuesto a los 5 voltios de la conexi\u00f3n USB). Se puede proporcionar voltaje a trav\u00e9s de este pin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>-5V.<\/strong>&nbsp;La fuente de voltaje estabilizado usado para alimentar el microcontrolador y otros componentes de la placa. Esta puede provenir de VIN a trav\u00e9s de un regulador integrado en la placa, o proporcionada directamente por el&nbsp;<strong>USB<\/strong>&nbsp;o otra fuente estabilizada de&nbsp;<strong>5V.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>-3V3.<\/strong>&nbsp;Una fuente de voltaje a 3.3 voltios generada en el chip FTDI integrado en la placa. La corriente m\u00e1xima soportada 50mA.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>-GND.<\/strong>&nbsp;Pines de toma de tierra.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Arduino UNO<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La Placa Arduino UNO tiene un micro controlador ATMEGA16U2-MU que utiliza como conversor USB en vez del chip FTDI que utilizaban las antiguas placas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ademas tiene un procesador micocontrolador Atemega328, siendo mas r\u00e1pida y optima que las antiguas Arduino Duemilanove y la Diecimila con microcontrolador Atemega168.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/Unosmall.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/Unosmall-300x216.jpg\" alt=\"\" class=\"wp-image-165\" title=\"Unosmall\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">IOREF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En el bloque de alimentaci\u00f3n se han a\u00f1adido 2 pines, uno marcado como IOref servir\u00e1 para que la placa reconozca el tipo de alimentaci\u00f3n que requieren los shieds (3.3v \u00f3 5v) y al otro se le dar\u00e1 uso en futuras versiones.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Instalaci\u00f3n del Software Arduino<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">En Mac:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Descargar la ultima version del IDE de Arduino &nbsp;en el siguiente link:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/arduino.cc\/hu\/Main\/Software\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/arduino.cc\/hu\/Main\/Software<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">En Windows:<\/h2>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.arduineando.com\/instalar-arduino-en-windows\/\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Drivers FTDI:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/www.ftdichip.com\/Drivers\/VCP.htm\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.ftdichip.com\/Drivers\/VCP.htm<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Download puredata:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/puredata.info\/downloads\/pd-extended\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/puredata.info\/downloads\/pd-extended<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entorno de Desarrollo para Arduino (Arduino Software)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El entorno de Desarrollo Arduino est\u00e1 constituido por un editor de texto para escribir el c\u00f3digo, un \u00e1rea de mensajes, una consola de texto, una barra de herramientas con botones para las funciones comunes, y una serie de men\u00fas. Permite la conexi\u00f3n con el hardware de Arduino para cargar los programas y comunicarse con ellos.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/the_Arduino_IDE-2.png\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/the_Arduino_IDE-2.png\" alt=\"the_Arduino_IDE-2\" class=\"wp-image-547\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Circuitos Basicos<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Divisor de voltaje<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un divisor de voltaje o de Tensi\u00f3n consta de al menos dos resistencias en serie con una fuente de voltaje. Para dos resistencias el voltaje se divide de acuerdo con: V1 = V R1 \/ (R1 + R2) y V2 = V R2 \/ (R1 + R2)<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/32.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/32-300x95.jpg\" alt=\"\" title=\"divisor de tensi\u00f3n\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El voltaje Vs(t) se divide en los voltajes que caen en las resistencias R1 y R2.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.slideshare.net\/slideshow\/embed_code\/5260835\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.slideshare.net\/slideshow\/embed_code\/1547234\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sensor de Luz con un LDR y Arduino<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En arduino vamos a construir un Divisor de Voltaje para controlar el pulso de apagado y encendido de un LED con un sensor LDR.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un sensor de luz se compone de un LDR como parte de un divisor de tensi\u00f3n resistivo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ejemplo:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.doctronics.co.uk\/images\/sens01.gif\" alt=\"\" title=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Vout=((Rbotton\/(Rbottom+Rtop))*Vin Si el LDR es usado como R<sub>top<\/sub>, como en el primer circuito, da tensi\u00f3n alta (HIGH) en la salida cuando el LDR est\u00e1 en la luz, y una tensi\u00f3n baja (LOW) en la salida cuando el LDR est\u00e1 en la sombra. La acci\u00f3n del divisor de voltaje es inversa cuando la LDR es usada como R<sub>bottom<\/sub>&nbsp;en lugar de R<sub>top<\/sub>, como en el segundo circuito. El circuito da tensi\u00f3n Baja (LOW) en la salida cuando la LDR est\u00e1 en la luz, y una tensi\u00f3n alta (HIGH) en la salida cuando la LDR est\u00e1 en la sombra. El circuito divisor de tensi\u00f3n dar\u00e1 una tensi\u00f3n de la salida que cambia con la iluminaci\u00f3n, de forma inversamente proporcional a la cantidad de luz que reciba (sensor de oscuridad).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Componentes:<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1 LDR<\/li>\n\n\n\n<li>1 Resistencia de 1k\u03a9<\/li>\n\n\n\n<li>Un par de cables<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Circuito:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/scheme_LDR.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/scheme_LDR-300x197.jpg\" alt=\"\" class=\"wp-image-170\" title=\"scheme_LDR\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El LDR se conecta a un pin anal\u00f3gico, como otros sensores que miden cantidades f\u00edsicas de tipo anal\u00f3gico. El Montaje es un Puente Resistivo (o Divisor de Voltaje) que consta de dos resistencias, una a Tierra y otra a 5 V. En este circuito se mide el cambio en la intensidad de corriente al variar la resistencia del sensor, en este caso el LDR que var\u00eda seg\u00fan la luz. \u00c9sta va conectada a 5 Voltios (o Vdd) y la otra resistencia conectada a Tierra ser\u00e1 de 1 K Ohms. El pin Anal\u00f3gico leer\u00e1 el cambio de voltaje.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Circuitos:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para saber que resistencia usar en determinado momento, hay que tener en cuenta la ley de ohm: V = I X R donde V= voltaje, I= corriente y R= resistencia. En \u00e9ste ejemplo tenemos:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-1 resistencia de 1kohm.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-1 LDR que funciona como una resistencia variable entre 50ohm y 1kohm.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Estas dos resistencias estaban conectadas en serie a un circuito de 5v con una corriente de 2,5mA, medida con el multimetro. En una conexi\u00f3n en serie la resistencia total es la suma de todas las resistencias, es decir: Rt = R1 + R2 entonces: Rt = 1kohm + 1kohm = 2kohm Si aplicamos la ley de ohm: V = I x R, entonces: 5v = 2,5mA x 2kohm<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Pulso de un LED controlado por un LDR con Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/hRuyrNbLcrs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Para comprobar los datos, podemos hacer un Debug por el Serial imprimiendo el valor recibido en el monitor. La velocidad para comunicarnos con el Monitor serial es 9600 Baudios. Con otros dispositivos puede ser otra, por ejemplo el protocolo MIDI ser\u00eda a 31250 Baudios.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Estructura de Programaci\u00f3n<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Por lo general un programa en Arduino constar\u00e1 de 3 partes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Declaraci\u00f3n de variables.<\/li>\n\n\n\n<li>Funci\u00f3n de inicializaci\u00f3n. (setup)<\/li>\n\n\n\n<li>Funci\u00f3n de Loop. (Programa)<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Declaraci\u00f3n de Variables<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las variables son expresiones que almacenan valores, como las capturas o lecturas de los valores de entrada de un pin anal\u00f3gico o sensor. Inicializas o das valor a una variable, haci\u00e9ndola igual al valor que quieres almacenar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Declaraci\u00f3n de funciones<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las funciones te permiten crear piezas modulares de c\u00f3digo, de forma que se puedan realizar ciertas rutinas y retornar al \u00e1rea de c\u00f3digo desde donde se realiz\u00f3 la llamada a la funci\u00f3n. Cuando Arduino ejecuta esta l\u00ednea, busca la declaraci\u00f3n de dicha funci\u00f3n en alg\u00fan lugar del c\u00f3digo, y le pasa el valor de la variable \u201cvalue\u201d como un argumento (contenido entre los par\u00e9ntesis) a la funci\u00f3n. De forma que una funci\u00f3n se define por el tipo de valor que devuelve (enlace a declaraci\u00f3n de variables), por su nombre, por la lista de argumentos o par\u00e1metros que le son pasados (expresi\u00f3n entre par\u00e9ntesis) y el bloque de c\u00f3digo que se ejecuta cuando se realiza la llamada.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Funci\u00f3n de inicializaci\u00f3n.<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>void setup():&nbsp;<\/strong>La funci\u00f3n setup() es llamada justo en el momento en que el programa comienza. Se utiliza para inicializar variables, definir los modos de entrada o salida de los pines, indicar librer\u00edas, etc.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Funci\u00f3n de Loop. (Programa)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>void loop():&nbsp;<\/strong>Despu\u00e9s de crear la secci\u00f3n setup(), que inicializa y asigna los valores iniciales, la secci\u00f3n loop() hace precisamente lo que su nombre indica en ingl\u00e9s(bucle), y se repite continuamente, permitiendo que tu programa mute y responda. Se usa para controlar de forma activa la tarjeta Arduino. El tiempo del bucle, var\u00eda seg\u00fan el n\u00famero de instrucciones que contenga. Y se puede conocer y controlar con las funciones de temporizaci\u00f3n (millis(), delay(), etc).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Retomando el ejemplo:<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En la Variable Val se almacenan los valores del LDR que al ser una \u201ccantidad anal\u00f3gica\u201d ser\u00e1n de o a 1023.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La Programaci\u00f3n en Arduino es la siguiente:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/Analog Read_LDR_Print<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int LightPin = 3; \/\/ selecciona el pin de entrada para el sensor de luz\n\nint ledPin = 13; \/\/ selecciona el pin para el LED\n\nint val = 0; \/\/ variable para almacenar el valor capturado desde el sensor\n\nvoid setup() {\n\n  pinMode(ledPin, OUTPUT);  \/\/ declara el ledPin en modo salida\n Serial.begin(9600); \/\/ abre el puerto serie a 9600 bps\n}\n\nvoid loop() {\n\n  val = analogRead(LightPin);    \/\/ read the value from the sensor\n  digitalWrite(ledPin, HIGH);  \/\/ enciende el LED\n  delay(val);                  \/\/ detiene el programa por un tiempo\n  digitalWrite(ledPin, LOW);   \/\/ apaga el LED\n  delay(val);                  \/\/ detiene el programa por un tiempo\n  int sensorValue = analogRead(A3); \/\/ lee el pin analogo 3\n  Serial.println(sensorValue); \/\/ imprime valores entre 0 y 1023 que recibe del pin analogo 3\n\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><em><strong>Funciones de Programaci\u00f3n:<\/strong><\/em><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Pines digitales:<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>pinMode(pin, mode)<\/strong>: Configura el pin especificado para que se comporte como una entrada (input) o una salida (output).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>digitalWrite(pin, value)<\/strong>: Asigna el valor de salida HIGH o LOW al pin especificado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>digitalRead(pin):&nbsp;<\/strong>Lee o captura el valor de entrada del pin especificado, dar\u00e1 valores HIGH o LOW. Devuelve un valor de tipo entero HIGH(1) o LOW (0).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Pines anal\u00f3gicos:<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>analogRead:&nbsp;<\/strong>Lee o captura el valor de entrada del especificado pin anal\u00f3gico, la tarjeta Arduino realiza una conversi\u00f3n anal\u00f3gica a digital de 10 bits. Esto quiere decir que mapear\u00e1 los valores de voltaje de entrada, entre 0 y 5 voltios, a valores enteros comprendidos entre 0 y 1023.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La placa Arduino posee 6 canales conectados a un conversor anal\u00f3gico digital de 10 bits. Esto proporciona una resoluci\u00f3n en la lectura de: 5 voltios \/ 1024 unidades, es decir, 0.0049 voltios (4.9 mV)por unidad. El rango de entrada puede ser cambiado usando la funci\u00f3n analogReference().<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los pines anal\u00f3gicos son solo de entrada por lo tanto no necesitan ser declarados como modo INPUT (entrada) o OUTPUT (salida).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Informaci\u00f3n Serial:<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Arduino se comunica por el puerto serial v\u00eda USB con nuestro ordenador a trav\u00e9s del chip FTDI o ATMEGA16U2-MU. La comunicaci\u00f3n serial se puede utilizar para hacer un debugging (saber lo que est\u00e1 pasando en nuestro programa) o para comunicarnos con otros programas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed&nbsp;lo utilizaremos para leer los valores anal\u00f3gicos. Lo primero que hay que hacer es abrir el puerto y definir la velocidad con la que se nos vamos a comunicar con en Arduino:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void setup() {<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"> Serial.begin(9600); \/\/ Velocidad de la transmisi\u00f3n y apertura del puerto<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"> }<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La velocidad para comunicarnos con el Monitor serial es 9600 Baudios. Con otros dispositivos puede ser otra, por ejemplo el protocolo MIDI ser\u00eda a 31250 Baudios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Intrucciones Seriales:<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Serial.begin(speed) \/\/define el baudrate de la comunicaci\u00f3n serie<\/li>\n\n\n\n<li>Serial.print(data) \/\/ env\u00eda data como dato serial<\/li>\n\n\n\n<li>Serial.println(data) \/\/ env\u00eda data como dato serial con un cambio de linea y retorno de carro<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Ejemplo:<\/strong><strong>Hello World!<\/strong><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/arduino_ide.jpg\"><\/a><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch Hello world:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Compila el programa y s\u00fabelo a Arduino.\n\/\/Haz click sobre el icono de monitor serial\n\nvoid setup() {\n\nSerial.begin(9600); \/\/ Velocidad de la transmisi\u00f3n y apertura del puerto\n\n}\n\nvoid loop() {\n\nSerial.println(\"Hello World!\"); \/\/ imprime Hello world en el Monitor serial\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch Segundero:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Compila el programa y s\u00fabelo a Arduino.\n\/\/Haz click sobre el icono de monitor serial<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">int cont= 0;<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void setup() {<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Serial.begin(9600); \/\/ Velocidad de la transmisi\u00f3n y apertura del puerto<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void loop() {<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Serial.println(cont); \/\/ imprime Hello world en el Monitor serial\ndelay(1000);\n cont = cont +1;\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Multiled y potenciometro con Arduino<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una barra de 10 leds conectados en Serie. Creamos un divisor de voltaje y controlamos el encendido y apagado de los leds con una resistencia variable de 10k.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Multiled y potenciometro con Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/ZtbIdRYewi8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Circuito:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/BarGraph2_schem.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/BarGraph2_schem-300x291.png\" alt=\"\" class=\"wp-image-180\" title=\"BarGraph2_schem\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La programaci\u00f3n en el sketch de Arduino es:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/Mi multiled potenciometro:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \/\/ estas son costantes:\nconst int analogPin = A0;   \/\/ el pin al que el potenciometro esta conectado\nconst int ledCount = 10;    \/\/ el numero de leds en la barra\nint ledPins[] = {\n  2, 3, 4, 5, 6, 7,8,9,10,11 };   \/\/describe el orden de los numeros de pines donde conectamos los leds\nvoid setup() {\n  \/\/ hace un conteo en bucle sobre todos los pines enviandolos todos a salida\n  for (int thisLed = 0; thisLed &lt; ledCount; thisLed++) {\n    pinMode(ledPins[thisLed], OUTPUT);\n  }\n}\n\nvoid loop() {\n  \/\/ lee el potenciometro:\n  int sensorReading = analogRead(analogPin);\n  \/\/ mapea el resultado de rango desde 0 hasta el numero de leds:\n  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);\n\n  \/\/ Hace un conteo en bucle sobre todos los leds:\n  for (int thisLed = 0; thisLed &lt; ledCount; thisLed++) {\n    \/\/ si la cantidad de elementos es menor que el nivel,\n    \/\/ encienda el pin para estos elementos:\n    if (thisLed &lt; ledLevel) {\n      digitalWrite(ledPins[thisLed], HIGH);\n    }\n    \/\/ apague todos los pines mayores al ledlevel:\n    else {\n      digitalWrite(ledPins[thisLed], LOW);\n    }\n  }\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><em><strong>Funciones de Programaci\u00f3n<\/strong>:<\/em><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Control del Flujo de Programa, Condicionales<\/strong><strong>If<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando se quiere que el microcontrolador haga algo dependiendo de alguna condici\u00f3n se utilizara la instrucci\u00f3n If. La instrucci\u00f3n If verifica la condici\u00f3n del enunciado escrito entre par\u00e9ntesis y si esta condici\u00f3n es verdadera har\u00e1 las acciones que est\u00e9n entre las claves.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If (expresi\u00f3n)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{ Hacer esto ; y esto tambi\u00e9n ; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Donde la expresi\u00f3n puede ser evaluada por cualquiera de estas opciones:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a == b (a es igual a b)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a != b (a no es igual a b)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a &lt; b (a es menor que b)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a &gt; b (a es mayor que b)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a &lt;= b (a es menor que o igual a b)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">a &gt;= b (a es mayor que o igual a b)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If-Else-If.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">if (A &lt; 500)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{ \/\/ Hacer esto }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">else if (B &gt;= 1000)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{ \/\/ Haz lo otro }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">else { \/\/ Haz lo que te parezca }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Map<\/strong>: Re-mapea un n\u00famero desde un rango hacia otro. \u00c9sto significa que, un valor (<em>value<\/em>) con respecto al rango&nbsp;<em>fromLow-fromHight<\/em>&nbsp;ser\u00e1 mapeado al rango&nbsp;<em>toLow-toHigh<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Estructuras de repetici\u00f3n FOR<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las instrucci\u00f3n FOR ejecuta en un loop varias instrucciones de c\u00f3digo, y lo hacen un determinado n\u00famero de veces, el n\u00famero de veces que se realizan depende de el n\u00famero de ciclos que determinemos en el encabezado de la instrucci\u00f3n. En el siguiente ejemplo las instrucciones instrucc1, 2, 3,4,5 se ejecutar\u00e1n 10 veces, despu\u00e9s de la d\u00e9cima seguir\u00e1 el flujo del programa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FOR (i=1; 1 &lt;= 10; i ++)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{ instrucc 1 ; instrucc 2 ; instrucc 3 ; instrucc 4 ; instrucc 5 ; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Declaraci\u00f3n FOR:<\/strong>&nbsp;La declaraci\u00f3n&nbsp;<strong>for<\/strong>&nbsp;es usada para repetir un bloque encerrado entre llaves. El bucle&nbsp;<strong>for<\/strong>&nbsp;tiene tres partes o argumentos en su inicializaci\u00f3n:&nbsp;<code><strong>for<\/strong>&nbsp;(<strong>initialization<\/strong>;<strong>&nbsp;condition<\/strong>;<strong>&nbsp;increment<\/strong>) {<\/code><code>&nbsp;\/\/funci\u00f3n(es);<\/code><code>}<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/arduino.cc\/es\/uploads\/Reference\/ForLoopIllustrated.png\" alt=\"\" title=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Realiza el control sobre una secuencia de repetici\u00f3n. Se compone de tres partes: init (inicializado de la variable local), test (condici\u00f3n) , y update (actualizaci\u00f3n del valor la variable local), cada parte debe ser separada por punto y coma \u201c;\u201d. El bucle continua hasta que la condici\u00f3n establecida se cumple (es verdad) o no (falsa). Es \u00fatil cuando se usa en combinaci\u00f3n con vectores y operar sobre grupo de datos\/pines.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Otro ejemplo:<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">El coche fantastico<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">\/* Coche fant\u00e1tico 1*\/\n\nint pinArray[] = {2, 3, 4, 5, 6, 7,8,9};\nint count = 0;\nint timer = 70;\n\nvoid setup(){\nfor (count=0;count&lt;8;count++) {\npinMode(pinArray[count], OUTPUT);\n}\n}\n\nvoid loop() {\nfor (count=0;count&lt;8;count++) {\ndigitalWrite(pinArray[count], HIGH);\ndelay(timer);\ndigitalWrite(pinArray[count], LOW);\ndelay(timer);\n}\nfor (count=7;count&gt;=0;count--) {\ndigitalWrite(pinArray[count], HIGH);\ndelay(timer);\ndigitalWrite(pinArray[count], LOW);\ndelay(timer);\n}\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Sistema Binario<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El&nbsp;<strong>sistema binario<\/strong>, en&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Matem%C3%A1ticas\">matem\u00e1ticas<\/a>&nbsp;e&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Inform%C3%A1tica\">inform\u00e1tica<\/a>, es un&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Sistema_de_numeraci%C3%B3n\">sistema de numeraci\u00f3n<\/a>&nbsp;en el que los&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/N%C3%BAmero\">n\u00fameros<\/a>&nbsp;se representan utilizando solamente las&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Cifra_(Matem%C3%A1ticas)\">cifras<\/a><a href=\"http:\/\/es.wikipedia.org\/wiki\/Cero\">cero<\/a>&nbsp;y&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Uno\">uno<\/a>&nbsp;(<em>0<\/em>&nbsp;y&nbsp;<em>1<\/em>). Es el que se utiliza en los ordenadores, debido a que trabajan internamente con dos niveles de&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Voltaje\">voltaje<\/a>, por lo cual su sistema de numeraci\u00f3n natural es el sistema binario (encendido&nbsp;<em>1<\/em>, apagado&nbsp;<em>0<\/em>).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/binario1.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/binario1-277x300.png\" alt=\"\" title=\"binario\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/platea.pntic.mec.es\/~lgonzale\/tic\/binarios\/numeracion.html\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/platea.pntic.mec.es\/~lgonzale\/tic\/binarios\/numeracion.html<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Byte:<\/strong>&nbsp;es una palabra inglesa, que es equivalente a&nbsp;<strong><a href=\"http:\/\/es.wikipedia.org\/wiki\/Octeto\">octeto<\/a><\/strong>&nbsp;(es decir a ocho&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Bit\">bits<\/a>), para fines correctos, un byte debe ser considerado como una secuencia de&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Bit\">bits<\/a>&nbsp;contiguos, cuyo tama\u00f1o depende del&nbsp;<a href=\"http:\/\/es.wikipedia.org\/w\/index.php?title=C%C3%B3digo_de_informaci%C3%B3n&amp;action=edit&amp;redlink=1\">c\u00f3digo de informaci\u00f3n<\/a>&nbsp;o&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/C%C3%B3digo_de_caracteres\">c\u00f3digo de caracteres<\/a>&nbsp;en que sea definido.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">PWM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La&nbsp;<strong>modulaci\u00f3n por ancho de pulsos<\/strong>&nbsp;(tambi\u00e9n conocida como&nbsp;<strong>PWM<\/strong>, siglas en ingl\u00e9s de&nbsp;<em>pulse-width modulation<\/em>) de una se\u00f1al o fuente de energ\u00eda es una t\u00e9cnica en la que se modifica el ciclo de trabajo de una se\u00f1al peri\u00f3dica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em><strong>PWM tiene diferentes usos:<\/strong><\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Atenuaci\u00f3n de un LED.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Disponer de una salida anal\u00f3gica; si la salida digital est\u00e1 filtrada, esto proveer\u00e1 de un voltaje entre el 0% y el 100%.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Generar se\u00f1ales de audio.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Proveer de un control de velocidad variable para motores.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Generar una se\u00f1al modulada, por ejemplo para utilizar un LED infrarojo para control remoto.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Control paso a paso de Motores servo con una resolucion de 8 bits.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si prendemos y apagamos la se\u00f1al de alimentaci\u00f3n de la carga (led o motor) lo suficientemente r\u00e1pido como para que el parpadeo no se note, podr\u00edamos \u201csimular\u201d la variaci\u00f3n de luminosidad de un led o el cambio en la velocidad del motor:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/pwm.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/pwm-300x139.png\" alt=\"\" class=\"wp-image-171\" title=\"pwm\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Esto funciona siempre y cuando no hagamos este \u201cswitcheo\u201d m\u00e1s lento de 30 veces por segundo. A partir de ah\u00ed el \u201cblink\u201d del led se empezar\u00e1 a notar y el ojo humano captar\u00e1 ese parpadeo. En el caso de un motor, \u00e9ste se mover\u00e1 en una forma pulsante. Lo que se hace con PWM es variar din\u00e1micamente el \u201cduty cycle\u201d de manera que el tiempo de alta disminuya o aumente y en proporci\u00f3n inversa, el de baja aumente o disminuya dependiendo de si queremos una led m\u00e1s atenuado o m\u00e1s brillante, o un motor m\u00e1s lento o m\u00e1s r\u00e1pido, respectivamente. Esto lo podemos ver en un ejemplo pr\u00e1ctico con Arduino, un led y una resistencia de 220 ohms.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Variar la intensidad de un LED usando un salida PWM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El circuito es el siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/simplefade_pin9_schem.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/simplefade_pin9_schem-248x300.png\" alt=\"\" class=\"wp-image-166\" title=\"simplefade_pin9_schem\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El LED est\u00e1 conectado al pin digital del Arduino con una resistencia de&nbsp;<strong>220 Ohms<\/strong>. La pata corta siempre a tierra y la positiva, m\u00e1s larga del lado de la resistencia. La resistencia se coloca con el fin de proteger el led. Enviamos valores entre 0 y 255. Arduino lee estos Bytes y los representa como luminocidad del led a trav\u00e9s de pulsos PWM. Los valores ir\u00e1n gradualmente de 0 a 255, ya que PWM es una \u201csimulaci\u00f3n\u201d de anal\u00f3gico, en la que 0 = 0 Voltios y 255 = 5Voltios. Lo que hace el PWM es ir de estado alto (5 V) a estado bajo (0 V.) en una determinada frecuencia, esa frecuencia determina una media que el LED interpreta como anal\u00f3gica. Para programar en arduino el control de dimmerizado del Led es necesario utilizar un pin que gen\u00e9re PWM, en este ejemplo utilizamos el pin 9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sketck Arduino:<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Dimmer auto LED\n\nint contador = 0; \/\/ variable\nint pin = 9; \/\/ pin 9 que puede generar PWM\n\nvoid setup()\n{ \/\/ No tenemos que declarar que es una salida anal\u00f3gica\n}\nvoid loop() { for(contador = 0 ; contador &lt;= 255; contador ++) \/\/ ciclo para ir subiendo el voltaje desde 0 a 5 voltios\n{\nanalogWrite(pin, contador); \/\/ PWM\ndelay(15);\n}\ndelay(600);\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><em><strong>Funciones de Programaci\u00f3n:<\/strong><\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Analogwrite()<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Escribe un valor anal\u00f3gico (PWM) en un pin. Puede ser usado para controlar la luminosidad de un LED o la velocidad de un motor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de llamar a la funci\u00f3n&nbsp;<strong>analogWrite()<\/strong>, el pin generar\u00e1 una onda cuadrada estable con el ciclo de trabajo especificado hasta que se vuelva a llamar a la funci\u00f3n&nbsp;<strong>analogWrite()<\/strong>&nbsp;(o una llamada a las funciones&nbsp;<strong>digitalRead()<\/strong>&nbsp;o&nbsp;<strong>digitalWrite()<\/strong>&nbsp;en el mismo pin). La frecuencia de la se\u00f1al PWM sera de aproximadamente 490 Hz.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Dimmer auto LED Up and Down\n\nint contador = 0; \/\/ variable\n\nint pin = 9; \/\/ pin 9 que puede generar PWM\n\nvoid setup()\n\n{ \/\/ No tenemos que declarar que es una salida anal\u00f3gica\n\n}\n\nvoid loop() { for(contador = 0 ; contador &lt;= 255; contador ++) \/\/ ciclo para ir subiendo el voltaje desde 0 a 5 voltios\n\n{\n\nanalogWrite(pin, contador); \/\/ PWM\n\ndelay(15);\n\n}\n\nfor(contador = 255 ; contador &gt;= 0; contador --) \/\/ ciclo para ir bajando el voltaje desde 5 a 0 voltios\n\n{\n\nanalogWrite(pin, contador); \/\/ PWM\n\ndelay(15);\n\n}\n\ndelay(600);\n\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Led dimerizado con Arduino y Puredata<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n Podemos controlar el PWM con un programa que se comunique con arduino a trav\u00e9s del puerto serial del ordenador. El puerto serial se comunica con el sistema binario en palabras de 8 bits (bytes).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sabiendo esto, para enviar informaci\u00f3n a trav\u00e9s del puerto serial, debemos convertir nuestra informaci\u00f3n ASCII a informaci\u00f3n binaria, y para eso utilizamos la funci\u00f3n&nbsp;<strong>byte<\/strong>. Un byte representa valores desde 0 hasta 255. Por eso, los datos que enviamos desde un programa externo a trav\u00e9s del serial en este caso Puredata, son valores comprendidos en este rango.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este caso Progamamos en Arduino:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Dimmer LED y Puredata\n\nconst int ledPin = 9;      \/\/ El pin al que el LED est\u00e1 conectado\n\nvoid setup()\n{\n  \/\/ Inicializamos puerto serie a 9600 bps:\n  Serial.begin(9600);\n  \/\/ inicializamos el ledPin como salida:\n  pinMode(ledPin, OUTPUT);\n}\n\nvoid loop() {\n  byte brightness;\n\n  \/\/ chequeamos que los datos hayan sido enviados por el ordenador:\n  if (Serial.available()) {\n    \/\/ Lee el byte mas reciente (debe ser entre 0 y 255):\n    brightness = Serial.read();\n    \/\/ Determina la luminocidad del LED:\n    analogWrite(ledPin, brightness);\n  }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h2 class=\"wp-block-heading\"><em>Funciones de programaci\u00f3n<\/em><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>byte:&nbsp;<\/strong>Un byte almacena un n\u00famero sin signo de 8-bit, desde 0 hasta 255.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Ejemplo:<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">byte b = B10010; \/\/ \u201cB\u201d es el formateador binario (B10010 = 18 decimal)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Serial:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>read():&nbsp;<\/strong>Lee los datos entrantes del puerto serie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>available():&nbsp;<\/strong>Devuelve el n\u00famero de bytes (caracteres) disponibles para ser leidos por el puerto serie. Se refiere a datos ya recibidos y disponibles en el buffer de recepci\u00f3n del puerto (que tiene una capacidad de 128 bytes).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Programamos en el Patch de Puredata:<\/em><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/PD-y-Arduino-dimmer.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/PD-y-Arduino-dimmer-300x292.jpg\" alt=\"\" class=\"wp-image-167\" title=\"PD y Arduino dimmer\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Para obtener este patch de PD debes copiar el siguiente codigo (cmd-c):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>C\u00f3digo text de PD:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#N canvas 702 82 390 360 10;\n#X msg 150 152 close;\n#X msg 52 152 open \\$1;\n#X msg 20 111 4;\n#X msg 55 111 3;\n#X obj 52 248 comport 3 9600;\n#X obj 291 55 vsl 15 128 0 225 0 0 empty empty empty 0 -9 0 10 -262144\n-1 -1 0 1;\n#X floatatom 292 213 5 0 0 0 - - -;\n#X text 0 16 El patch envia un numero binario entre 0 255 por el puerto\nserial al arduino;\n#X connect 0 0 4 0;\n#X connect 1 0 4 0;\n#X connect 2 0 1 0;\n#X connect 3 0 1 0;\n#X connect 5 0 6 0;\n#X connect 6 0 4 0;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lo pegas (cmd-v) en un archivo de texto del programa \u201cText Edit\u201d y en la barra de herramientas buscas:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Formato\/Convertir en texto normal.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/textedit-300x295.png\" alt=\"\" class=\"wp-image-184\" title=\"textedit\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Despues de convertirlo a texto normal le das un nombre y lo guardas en formato .pd.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/textapd.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/textapd-300x290.png\" alt=\"\" class=\"wp-image-185\" title=\"textapd\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora puedes abrir tu Patch con Puredata!!!<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Arduino Dimmer Led\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/HFdRHvoLzrc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Nota: En el ejemplo del video tengo un fader con valores de 0 a 1, estos valores son Mapeados a valores de 0 a 255 cuando los enviamos a Arduino por el serial. El Patch que esta en el c\u00f3digo y en la foto, tiene los valores reales que se env\u00edan: 0 a 255.<\/em><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Materiales<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>LED<\/strong>:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/www.kpsec.freeuk.com\/components\/led.htm\">LED&nbsp;<\/a>significa \u201cLight Emiting Diode\u201d. Son diodos que se iluminan cuando pasa la electricidad.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/creaciodigital.upf.edu\/%7Em2917\/imgwiki\/LED_001.jpg\" alt=\"\" title=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tienen dos \u201cpatas\u201d, una positiva m\u00e1s larga (\u00e1nodo) y otra negativa (c\u00e1todo).Se conectan a Arduino por medio de una resistencia para proteger el LED y el microcontrolador. Las resistencia que utilizaremos son de 220 Ohms.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Resistencias<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La&nbsp;<strong>resistencia el\u00e9ctrica<\/strong>&nbsp;de un objeto es una medida de su oposici\u00f3n al paso de&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Corriente_el%C3%A9ctrica\">corriente<\/a>. Una resistencia ideal es un elemento pasivo que disipa energ\u00eda en forma de calor seg\u00fan la&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Ley_de_Joule\">ley de Joule<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/Resistencia-3.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/Resistencia-3-300x300.jpg\" alt=\"\" class=\"wp-image-168\" title=\"Resistencia-3\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n establece una relaci\u00f3n de proporcionalidad entre la intensidad de corriente que la atraviesa y la tensi\u00f3n medible entre sus extremos, relaci\u00f3n conocida como&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Ley_de_Ohm\">ley de Ohm<\/a>. De acuerdo con la&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Ley_de_Ohm\">ley de Ohm<\/a>&nbsp;la resistencia de un material puede definirse como la raz\u00f3n entre la ca\u00edda de tensi\u00f3n y la corriente en dicha resistencia, as\u00ed: R = V \/ I Donde: R = Resistencia V = Voltaje I= Corriente<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Como leer el valor de una resistencia<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En una resistencia tenemos generalmente 4 l\u00edneas de colores, aunque podemos encontrar algunas que contenga 5 l\u00edneas (4 de colores y 1 que indica tolerancia). Vamos a tomar como ejemplo la m\u00e1s general, las de 4 l\u00edneas. Leemos las primeras 3 y dejamos aparte la tolerancia que es plateada (\u00b110%) o dorada (\u00b15%).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La primera l\u00ednea representa el d\u00edgito de las decenas.<\/li>\n\n\n\n<li>La segunda l\u00ednea representa el d\u00edgito de las unidades.<\/li>\n\n\n\n<li>La tercera l\u00ednea representa la potencia de 10 por la cual se multiplica el n\u00famero.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Registramos el valor de la primera l\u00ednea (verde): 5<\/li>\n\n\n\n<li>Registramos el valor de la segunda l\u00ednea (amarillo): 4<\/li>\n\n\n\n<li>Registramos el valor de la tercera l\u00ednea (rojo): 10<sup>2<\/sup>&nbsp;o 100<\/li>\n\n\n\n<li>Unimos los valores de las primeras dos l\u00edneas y multiplicamos por el valor de la tercera<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">54 X 10<sup>2<\/sup>&nbsp;= 5400\u03a9 o 5,4 k\u03a9 y este es el valor de la resistencia expresada en Ohmios<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/codigo_colores_resistores.gif\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/codigo_colores_resistores-300x207.gif\" alt=\"\" title=\"codigo_colores_resistores\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed puedes encontrar una aplicaci\u00f3n que te calcula el valor de la resistencia:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/www.pagaelpato.com\/tecno\/resistencias\/resistencia.htm\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.pagaelpato.com\/tecno\/resistencias\/resistencia.htm<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sensor de Luz o LDR (Light Dependent Resistor):<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un LDR es una resistencia variable, que varia su valor dependiendo de la cantidad de luz que incide sobre su superficie. Cuanta mas intensidad de luz incide en la superficie de la LDR menor ser\u00e1 su resistencia y cuanto menos luz incide mayor ser\u00e1 la resistencia. Suelen ser utilizados como sensores de luz ambiental o como una fotoc\u00e9lula que activa un determinado proceso en ausencia o presencia de luz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/en\/2\/2d\/Ldr.gif\" alt=\"\" title=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Los valores que puede tomar una LDR en total oscuridad y a plena luz puede variar un poco de un modelo a otro, en general oscilan entre unos 50 a 1000 ohmios (1K) cuando est\u00e1n iluminadas (por ejemplo, con luz solar) y valores comprendidos entre 50K (50,000 Ohms) y varios megohmios (millones de ohms) cuando est\u00e1 a oscuras.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/images.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/images-300x162.jpg\" alt=\"\" class=\"wp-image-169\" title=\"images\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Placas de Prueba, Protoboard \u00f3 BreadBoard<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El protoboard o breadbord: Es una especie de tablero con orificios, en la cual se pueden insertar componentes electr\u00f3nicos y cables para armar circuitos. Los orificios estan interconectados entre si por columnas como lo vemos en la foto. En algunas placas tambien hay filas interconectando los orificios, estas se encuentran en los bordes de la placa, como lo muestra la segunda foto.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/breadboards_flow.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/breadboards_flow-265x300.jpg\" alt=\"\" title=\"breadboards_flow\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Corriente AC y DC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La coriente AC quiere decir corriente alterna mientras que la DC es corriente directa o continua. La diferencia es que la alterna hace ciclos es decir es positiva y negativa por ciclos de sesenta picos por segundo es decir graficamente sube y baja (es positiva y negativa) 60 veces en un segundo o en pocas palabras su polaridad cambia de + a \u2013 .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por Eso un tomacorriente no tiene indicador de positivo o negativo. En la corriente AC los estados de fase y neutro cambian de posicion con cada ciclo. En cambio, la continua o DC: como su nombre lo dice es continua o suministra una misma polaridad siempre, como las baterias que tienen polos positivo y negativo. Cuando trabajamos con informaci\u00f3n digital, siempre trabajamos con corriente directa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Motor DC, velocidad controlada con PWM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con este mismo patch de Puredata y este mismo sketch de Arduino podemos controlar la velocidad de un motor DC. Con la capacidad de Arduino, vemos que se pueden controlar dispositivos de bajo consumo, como los LEDs. Sin embargo, cuando tratamos de mayores consumos, sobre todo, con cargas con inducciones, como un motor de corriente continua, rel\u00e9s, etc; por precauci\u00f3n, se necesita utilizar al menos, un transistor externo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La velocidad del motor DC depende del voltaje. Los valores de Arduino varian entre 0 y 255, estos valores determinan el PWM que enviamos al motor. El motor lo interpreta como un voltaje que varia entre 0 y 5v. Para cambiar la direcci\u00f3n solo hay que cambiar su polaridad. Para este circuito necesitamos m\u00e1s componentes: un trasistor de potencia, una resistencia de 1 kohm y un Diodo.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><\/h4>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Transistor<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">El&nbsp;<strong>transistor<\/strong>&nbsp;es un dispositivo electr\u00f3nico semiconductor que cumple funciones de amplificador, oscilador, conmutador o rectificador. Tiene 3 patas: base, colector y emisor. Ser\u00e1 un interruptor electr\u00f3nico, (no mec\u00e1nicos) que abrir\u00e1 y cerrar\u00e1 el \u201cinterruptor\u201d de nuestro circuito.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/creaciodigital.upf.edu\/%7Em2917\/imgwiki\/trans.jpg\" alt=\"\" title=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con un transistor se controla una mayor cantidad de corriente con la peque\u00f1a aportaci\u00f3n de la se\u00f1al procedente de Arduino. Cuando a un transistor, se le conecta la carga al colector y el emisor a tierra, de modo que aplicamos a la base, la salida de Arduino del pin elegido, podemos mover el motor que girar\u00e1 en proporci\u00f3n a la se\u00f1al que le entrega el pin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hay diferentes tipos de transistores, pero en este curso s\u00f3lo estudiaremos los&nbsp;<strong>bipolares<\/strong>. Dentro de ellos, seg\u00fan como sea la conexi\u00f3n de sus componentes,&nbsp;<strong>hay dos tipos, los NPN y los PNP<\/strong>.&nbsp;Se simbolizan de la siguiente manera:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/4q4_co14.gif\"><img decoding=\"async\" src=\"https:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/4q4_co14.gif\" alt=\"4q4_co14\" class=\"wp-image-547\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/4q4_co15.gif\"><img decoding=\"async\" src=\"https:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/4q4_co15.gif\" alt=\"4q4_co15\" class=\"wp-image-548\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El de la izquierda es un transistor NPN y el de la derecha un transistor PNP. En el NPN la flecha que indica el sentido de la corriente sale hacia fuera (la corriente ir\u00e1 de colector a emisor) mientras que en el PNP la flecha entra (la corriente ir\u00e1 de emisor a colector).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Transistor BC547B<\/strong><\/h2>\n\n\n\n<h4 class=\"wp-block-heading\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/transistor-bc547.jpg\"><\/a><\/h4>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Transistor PNP 2N3906<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/pnp-2n3906.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/pnp-2n3906.png\" alt=\"pnp 2n3906\" class=\"wp-image-432\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Diodo<\/strong><\/h4>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/creaciodigital.upf.edu\/%7Em2917\/imgwiki\/diodo.jpg\" alt=\"\" title=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El diodo es un semiconductor. La funci\u00f3n de los diodos es dejar pasar la corriente en un solo sentido. Tiene polaridad, la banda oscura indica el c\u00e1todo(-). Tambi\u00e9n se utliza una resistencia de 1 kohm para protegerlo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Circuito<\/strong>:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Con Transistor BD 135, BD 137 o BD 139.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para este circuito necesitaremos usar un Transistor NPN.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/motor-DC-Transistor.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/motor-DC-Transistor.png\" alt=\"\" class=\"wp-image-194\" title=\"motor DC Transistor\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/creaciodigital.upf.edu\/%7Em2917\/imgwiki\/eskmotor.gif\" alt=\"\" title=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Necesitamos una fuente de alimentaci\u00f3n externa, en este caso una pila de 9 Voltios. El diodo nos sirve de protecci\u00f3n para el Arduino, el cual se alimenta con 5 Voltios, dejando que la corriente de 9 Voltios s\u00f3lo circule para alimentar al motor. En cambio la Tierra si debe estar conectada a la Tierra del Arduino, pues si no el circuito se desestabiliza. Esto es una regla en todos los circuitos que hagamos con DC:&nbsp;<strong>las tierras o masas deben estar siempre conectadas.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Arduino y Motor DC, velocidad controlada por PWM\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/nC49QGvsoHI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n podemos programar el Arduino para que haga una variaci\u00f3n predeterminada de velocidad al motor sin necesidad de utilizar Puredata. La programaci\u00f3n ser\u00eda la siguiente:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Motor DC PWM\n\nint pulso = 0; \/\/ variable donde almacenamos el valor del pulso\nint pinMotor = 10; \/\/ Pin 10 que puede generar PWM\n\nvoid setup()\n{ \/\/ No tenemos que declarar que es una salida anal\u00f3gica\n}\nvoid loop()\n{\nfor(pulso = 0 ; pulso &lt;= 255; pulso ++) \/\/ ciclo para ir subiendo el voltaje desde 0 a 5 voltios\n{\nanalogWrite(pinMotor, pulso); \/\/ enviamos el pulso al motor via PWM\ndelay(15);\n}\ndelay(600);\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Motor DC control de encendido y apagado con arduino<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es una manera mas sencilla de programar el encendido y apagado de nuestro motor DC, utilizando delays. Arrancamos el motor, esperamos un tiempo, despu\u00e9s apagamos el motor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">https:\/\/www.youtube.com\/embed\/_QJTKVRK-SE<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">int motorPin = 9;\nint onTime = 2500;\nint offTime = 1000;\n\nvoid setup()\n{\npinMode(motorPin, OUTPUT);\n}\n\nvoid loop()\n{\ndigitalWrite(motorPin, HIGH); \/\/ Enciende\ndelay (onTime); \/\/ Espera tiempo onTime\ndigitalWrite(motorPin, LOW); \/\/ Apaga\ndelay (offTime); \/\/ Espera tiempo offTime\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Motor DC Control de velocidad con Arduino<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al igual que antes cambiamos la iluminaci\u00f3n del led, ahora podemos&nbsp;<strong>controlar la velocidad del motor<\/strong>&nbsp;con la funci\u00f3n&nbsp;<strong>analogWrite(pin, valor).<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Motor DC control de la velocidad con Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/V4pdWvBxPKw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">int motorPin = 9;\nint onSpeed = 200;\nint onTime = 2500;\nint offSpeed = 50; \/\/Un numero entre 0 (Para) y 255 (maxima velocidad)\nint offTime = 1000; \/\/el numero en milisegundos para que el motor se apague\n\nvoid setup()\n{\npinMode(motorPin, OUTPUT);\n}\n\nvoid loop()\n{\n\nanalogWrite(motorPin, onSpeed); \/\/ enciende el motor\ndelay(onTime); \/\/ espera los milisegundos que especificamos onTime\nanalogWrite(motorPin, offSpeed); \/\/ apaga el motor\ndelay(offTime); \/\/ espera el tiempo offTime para apagar el motor\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Motor DC Control de Aceleraci\u00f3n con Arduino<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Aceleramos y desaceleramos el motor<\/strong>: ahora usamos un bucle para acelerar y frenar el motor, usando del mismo modo la funci\u00f3n<strong>&nbsp;analogWrite()<\/strong>, que en el caso anterior.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Arduino Motor DC Aceleraci\u00f3n\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/PuCrGOKgq1M?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">int motorPin = 9;\nvoid setup()\n{\npinMode(motorPin, OUTPUT);\n}\n\nvoid loop()\n{\nint delayTime = 50;\nfor(int i = 0; i &lt; 256; i++){ \/\/aceleramos\nanalogWrite(motorPin, i);\ndelay(delayTime);\n}\n\nfor(int i = 255; i &gt;= 0; i--){ \/\/frenamos\nanalogWrite(motorPin, i);\ndelay(delayTime);\n}\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed vemos que las variables que no necesitamos inicializar las podemos tambi\u00e9n declarar en nuestro programa en la funci\u00f3n loop.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Motor DC Controlado con un potenciometro<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Usamos ahora un<strong>&nbsp;potenci\u00f3metro&nbsp;<\/strong>para variar la velocidad del motor. El potenci\u00f3metro se conecta de la siguiente forma:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Extremos: (VCC 5V) y (GND) respectivamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se\u00f1al: al pin 0 de las entradas an\u00e1logicas de Arduino.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/potenciometro.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/potenciometro.png\" alt=\"\" title=\"potenciometro\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Motor DC controlado con un Potenciometro a trav\u00e9s de Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/PHuhyIY50Lw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">int motorPin = 9;\nint potPin=0;\nint potValue;\n\nvoid setup()\n{\npinMode(motorPin, OUTPUT);\n}\n\nvoid loop()\n{\npotValue = analogRead(potPin) \/ 4;\nanalogWrite(motorPin, potValue);\n\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Arduino dispone de 6 entradas&nbsp;<strong>anal\u00f3gicas<\/strong>, que tienen un voltaje de&nbsp;<strong>0 a 5voltios<\/strong>&nbsp;que convertidas a se\u00f1ales digitales tendr\u00edamos de<strong>&nbsp;0 a 1023<\/strong>, esto es&nbsp;<strong>10 bits<\/strong>&nbsp;de resoluci\u00f3n.&nbsp;<strong>Dividimos por 4 analogRead()<\/strong>&nbsp;porque esta funci\u00f3n devuelve un valor comprendido entre&nbsp;<strong>0 y 1023 (10 bits)<\/strong>&nbsp;y la funci\u00f3n&nbsp;<strong>analogWrite ()<\/strong>&nbsp;toma valores comprendidos entre&nbsp;<strong>0 y 255 (8 bits).<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h1 class=\"wp-block-heading\">Motor Servo<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Un motor servo es un dispositivo actuador que tiene la capacidad de ubicarse en cualquier posici\u00f3n dentro de su rango de operaci\u00f3n, y de mantenerse estable en dicha posici\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/Servo.gif\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/Servo-300x265.gif\" alt=\"\" class=\"wp-image-173\" title=\"Servo\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Consta de un motor de corriente continua, con una caja reductora y un circuito de control, para su posicionamiento.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo-interior1.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo-interior1.png\" alt=\"\" class=\"wp-image-192\" title=\"servo interior\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Los servos estandar llevan 3 cables : tensi\u00f3n, tierra y control. Se mueven en funci\u00f3n de pulsos que le enviamos a traves del cable de control y estos pulsos que le enviamos son los que establecen la posici\u00f3n del servo. El servo espera pulsos cada 20 milisegundos para tener una idea correcta de la posici\u00f3n que ha de tener. En general los servos giran unos 180 grados, aunque hay algunos que giran m\u00e1s. Tienen una amplitud de pulsos de entre 0.5 y 2.5 milisegundos para establecer la posici\u00f3n. Los servomotores hacen uso de la modulaci\u00f3n por ancho de pulsos (PWM) para controlar la direcci\u00f3n o posici\u00f3n de los motores de corriente continua. La mayor\u00eda trabaja en la frecuencia de 50 hercios, as\u00ed las se\u00f1ales PWM tendr\u00e1n un periodo de veinte milisegundos. La electr\u00f3nica dentro del servomotor responder\u00e1 al ancho de la se\u00f1al modulada. Si los circuitos dentro del servomotor reciben una se\u00f1al de entre 0,5 a 1,4 milisegundos, este se mover\u00e1 en sentido horario; entre 1,6 a 2 milisegundos mover\u00e1 el servomotor en sentido antihorario; 1,5 milisegundos representa un estado neutro para los servomotores est\u00e1ndares.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">PPM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PPM o -Pulse Position Modulation es un c\u00f3digo implementado en la lbrer\u00eda de servos. Es como un PWM pero con un duty cycle muy bajo, para servos utiliza 50Hz en vez de 490Hz. Esto permite utilizar varios servos a la vez. Funciona de la siguiente manera: El tiempo de duraci\u00f3n del pulso es: 2ms, en el cual se determina la posici\u00f3n del servo. Esta secuencia es repetida 50 veces por segundo. El punto limite de la izquierda 1 ms, punto medio 1.5 ms y punto limite de la derecha 2 ms. Servo #1: Far Left Command: Time ON = 1 + 0.0 ms = 1.0 ms Servo #2: Neutral Command: Time ON = 1 + 0.5 ms = 1.5 ms Servo #3: Far Right Command: Time ON = 1 + 1.0 ms= 2.0 ms.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo-pulse.jpeg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo-pulse.jpeg\" alt=\"\" class=\"wp-image-210\" title=\"servo-pulse\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En los siguientes tutoriales podemos encontrar una alternativa sencilla de conectar el motor servo a la placa Arduino:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/arduino.cc\/es\/Tutorial\/Sweep\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/arduino.cc\/es\/Tutorial\/Sweep<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/blog.bricogeek.com\/noticias\/tutoriales\/tutorial-control-de-servomotores\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/blog.bricogeek.com\/noticias\/tutoriales\/tutorial-control-de-servomotores\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En estos tutoriales vemos que el motor es conectado directamente a los 5 v y GND de la placa arduino. Esto funciona muy bien con mini-motores o en el caso en que hagamos movimientos ocacionales y sutiles. En el caso en que queramos hacer movimientos rapidos en bucle, es preferible conectar el motor a una fuente el\u00e9ctrica DC externa de 5v ya que el motor podria pedir mas corriente de la que la placa Arduino le pueda dar. Los pines de salida de Arduino pueden entregar hasta 40 mA, sin embargo, los motores pueden tener peaks de alrededor de 700mA.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Circuito:<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Conexi\u00f3n Motor servo:<\/strong>&nbsp;Cable negro \u00f3 marron al (-) de la fuente el\u00e9ctrica externa y a GND de Arduino. Cable Rojo al (+) de la fuente el\u00e9ctrica externa. Cable Blanco \u00f3 Amarillo al Pin PWM de Arduino.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo-300x215.png\" alt=\"\" class=\"wp-image-175\" title=\"servo\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Controlando un Motor Servo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo el motor Servo gira 180 grados gracias al Sketch de Arduino. El motor es conectado a una fuente de poder externa y la se\u00f1al de control es enviada por el pin digital 9.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Motor Servo giro 180 grados porgramado con Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/_6rDcnF8-l0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"> #include &lt;Servo.h&gt;\n\nServo myservo; \/\/ creamos un objeto servo para controlar nuestro servo\n\nint pos = 0; \/\/ variable para almacenar la posici\u00f3n del servo\n\nvoid setup()\n{\nmyservo.attach(9); \/\/ atribuye al pin 9 el objeto servo\n}\n\nvoid loop()\n{\nfor(pos = 0; pos &lt; 180; pos += 1) \/\/ avanza de 0 a 180 grados\n{ \/\/ en saltos de un grado\nmyservo.write(pos); \/\/ mueve a la posici\u00f3n de la variable 'pos'\ndelay(20); \/\/ espera 20ms\n}\nfor(pos = 180; pos&gt;=1; pos-=1) \/\/ va de 180 a 0 grados\n{\nmyservo.write(pos);\ndelay(20);\n}\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><em>Funciones de Programaci\u00f3n<\/em><\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Existe una libreria para porgramar motores servo que tenemos que llamar al iniciar nuestro sketch. Con esta libreria podemos controlar multiples servo. 1 servo por cada pin digital.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>#define:&nbsp;<\/strong>Un define es un componente \u00fatil en el lenguaje de prograci\u00f3n C, que permite dar un nombre a un valor antes de que el programa sea compilado. Puedes definir n\u00fameros en Arduino, para que no ocupen espacio de memoria de programa en el chip. La definici\u00f3n en Arduino tiene la misma sintaxis que la definici\u00f3n en C: #define constantName value #include.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para utilizarlas, s\u00f3lo es necesario a\u00f1adir la correspondiente declaraci\u00f3n #include al comienzo de tu c\u00f3digo o proyecto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Metodos Standard de la libreria Servo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>attach(int):&nbsp;<\/strong>Convierte el pin en un servo driver. Este remplaza al pinMode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>detach():&nbsp;<\/strong>Libera un pin del servo driving.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>write(int):&nbsp;<\/strong>Da el angulo del servo en grados, 0 a 180.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>read():&nbsp;<\/strong>Devuelve el valor al ultimo write().<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>attached():&nbsp;<\/strong>Devuelve 1 si el servo est\u00e1 conectado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Controlando un Motor Servo con una Camara a trav\u00e9s de Arduino y Puredata<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con el objeto blob de Puredata podemos determinar la posici\u00f3n de un objeto capturado con una c\u00e1mara. Su posici\u00f3n esta determinada por el porcentaje de luminosidad que capte la c\u00e1mara en una regi\u00f3n de pixeles determinada. La informaci\u00f3n captada por Puredata la enviamos a Arduino y de esta forma podemos controlar la posici\u00f3n de un motor Servo con la posici\u00f3n de nuestra mano en el espacio.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Motor Servo controlado con una Camara Puredata y Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/GaCmYzoqTx0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;Servo.h&gt; \/\/ Libreria muy buena de servos\n\nServo myservo; \/\/ variable servo\nbyte puredata=0; \/\/ almacena el valor binario enviado desde puredata\n\nvoid setup(){\n\nSerial.begin(9600);\nmyservo.attach(9); \/\/ define el pin al que esta conectado el servo \n\n}\n\nvoid loop () {\n\nif (Serial.available() &gt; 0) { \/\/ si hay algun dato entrado por el serial procede\npuredata=Serial.read(); \/\/ lee los datos binarios del puerto serie\nmyservo.write(puredata); \/\/ Da el angulo del servo en grados, 0 a 180.\nSerial.println(puredata); \/\/ Imprimimos los datos en el monitor serial\n}\n\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Patch Puredata:<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo_camara2.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo_camara2.png\" alt=\"\" class=\"wp-image-190\" title=\"servo_camara\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>C\u00f3digio text de Pd:<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#N canvas 208 22 925 661 10;\n#X floatatom 459 312 5 0 0 0 - - -;\n#X obj 545 -13 gemwin;\n#X msg 545 -99 create;\n#X msg 597 -31 destroy;\n#X msg 577 -74 1;\n#X msg 579 -53 0;\n#X obj 438 276 pix_blob 4;\n#X obj 545 26 gemhead;\n#X obj 538 213 pix_texture;\n#X obj 537 351 square 4;\n#X obj 430 427 gemhead;\n#X obj 430 453 translateXYZ;\n#X floatatom 685 110 3 0 100 2 threshold - -;\n#X obj 545 148 pix_movement 0.5;\n#X obj 679 133 \/ 100;\n#X obj 545 171 alpha;\n#X obj 517 142 tgl 15 1 empty empty empty 0 -6 0 8 -262144 -1 -1 1\n1;\n#X floatatom 553 77 5 0 1 1 pass - -;\n#X obj 545 101 pix_threshold;\n#X msg 631 76 0.6 0.1 0.8;\n#X obj 537 253 separator;\n#X floatatom 570 271 5 0 0 0 - - -;\n#X floatatom 603 294 5 0 0 0 - - -;\n#X floatatom 641 305 5 0 0 0 - - -;\n#X obj 537 324 rotateXYZ 0 0 0;\n#X obj 454 387 * -1;\n#X msg 630 254 180;\n#X obj 430 480 sphere 0.2;\n#X obj 460 361 - 4;\n#X obj 460 338 * 8;\n#X obj 740 -18 t b b b;\n#X msg 717 64 80;\n#X msg 651 17 dialog;\n#X obj 545 52 pix_video;\n#X obj 738 -70 loadbang;\n#X obj 132 51 line 0 1;\n#X obj 133 19 pack f 200;\n#X obj 61 270 comport 1 9600;\n#X msg 63 190 open 3;\n#X obj 131 97 vsl 15 128 0 180 0 0 empty empty empty 0 -9 0 10 -262144\n-1 -1 9935 1;\n#X floatatom 139 240 5 0 0 0 - - -;\n#X obj 130 -15 * 180;\n#X text 20 -75 Enviamos el Angulo de giro de motor Servo. Valores entre\n0 y 180 grados.;\n#X connect 0 0 29 0;\n#X connect 0 0 41 0;\n#X connect 2 0 1 0;\n#X connect 3 0 1 0;\n#X connect 4 0 1 0;\n#X connect 5 0 1 0;\n#X connect 6 1 0 0;\n#X connect 7 0 33 0;\n#X connect 8 0 6 0;\n#X connect 8 0 20 0;\n#X connect 10 0 11 0;\n#X connect 11 0 27 0;\n#X connect 12 0 14 0;\n#X connect 13 0 15 0;\n#X connect 14 0 13 1;\n#X connect 15 0 8 0;\n#X connect 16 0 15 0;\n#X connect 17 0 18 1;\n#X connect 18 0 13 0;\n#X connect 19 0 18 2;\n#X connect 20 0 24 0;\n#X connect 21 0 24 1;\n#X connect 22 0 24 2;\n#X connect 23 0 24 3;\n#X connect 24 0 9 0;\n#X connect 25 0 11 1;\n#X connect 26 0 22 0;\n#X connect 28 0 25 0;\n#X connect 29 0 28 0;\n#X connect 30 0 19 0;\n#X connect 30 1 31 0;\n#X connect 30 2 26 0;\n#X connect 31 0 12 0;\n#X connect 32 0 33 0;\n#X connect 33 0 18 0;\n#X connect 34 0 30 0;\n#X connect 35 0 39 0;\n#X connect 36 0 35 0;\n#X connect 38 0 37 0;\n#X connect 39 0 37 0;\n#X connect 39 0 40 0;\n#X connect 41 0 36 0;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo Standard Firmata y pduino con fuente de alimentaci\u00f3n externa<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed hay un ejemplo con el \u201cStandard-firmata\u201d de Arduino y el \u201carduino-test\u201d de Pduino. Aqu\u00ed podemos apreciar como se conecta el motor a una fuente de poder externa.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Motor Servo alimentado con DC externa.\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/smQXBRd7uqE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo180.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/servo180-300x107.png\" alt=\"\" class=\"wp-image-186\" title=\"servo180\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hay que recordar que la tierra (GND) debe ser la misma para la fuente de poder externa, el motor y la placa Arduino, por lo tanto deben estar interconectadas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Motor Servo controlado con un potenciometro<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejercicio controlamos la posici\u00f3n del motor servo con una entrada analoga de un potenciometro de 10 kohm. Conservamos las conexiones del motor servo a la fuente de poder externa de 5v del ejemplo anterior. A\u00f1adimos un Potenciometro de 10 kohm al circuito.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">Potenciometro<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un Potenciometro es una resistenia variable, la cual se puede ajustar manualmente.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/potenciometro.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/potenciometro.png\" alt=\"\" title=\"potenciometro\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Para nuestro circuito conectamos el potenciometro al pin de 5v de Arduino, a GND y la se\u00f1al al Pin analogo 0. El Motor lo alimentamos con una fuente de poder externa de 5v, la tierra la compartimos con Arduino y el cable de se\u00f1al lo conectamos al pin PWM digital 9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Circuito:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/circuito-servo.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/circuito-servo-298x300.jpg\" alt=\"\" title=\"circuito servo\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Motor servo controlado con un potenciometro y Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/4fV4nepNp14?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;Servo.h&gt;\n\nServo myservo;  \/\/ crea un objeto servo de control\n\nint potpin = 0;  \/\/ el pin de entrada analoga del potenciometro\nint val;    \/\/ variable para leer el valor del pin analogo\n\nvoid setup()\n{\nmyservo.attach(9);  \/\/ conecta el servo del pin 9 al objeto servo\n}\n\nvoid loop()\n{\nval = analogRead(potpin);            \/\/ lee el valor del potenciometro (valores entre 0 y 1023)\nval = map(val, 0, 1023, 0, 179);     \/\/ lo escala para usarlo con servo (valores entre 0 y 180)\nmyservo.write(val);                  \/\/ le da la posicion al sevo deacuerdo al valor de la escala\ndelay(20);                           \/\/ espera a que servo llegue al valor de escala\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Desconectando Arduino del Ordenador y Alimentandolo con una Fuente de poder externa<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ya teniendo guardada la informaci\u00f3n en el microcontrolador de Arduino, podemos desconectar la placa Arduino del USB del ordenador y alimentarla con nuestra fuente de poder externa de 5v. Entonces conectamos el&nbsp;<strong>(+)<\/strong>&nbsp;a&nbsp;<strong>VIN<\/strong>&nbsp;y a Nuestro motor Servo. De esta manera, alimentamos la placa Arduino y el motor con nuestra bateria sin necesidad de depender del Ordenador.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Motor servo controlado con arduino y un Potenciometro sin Ordenador\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/92wXbSg-80c?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Control de 2 servos con MIDI.<\/h2>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Controlando 2 servos simultaneos via MIDI con Arduino y Puredata\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/WqLNBFUvK4s?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Funciones de programaci\u00f3n:<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Bucles while<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los bucles&nbsp;<strong>while<\/strong>&nbsp;se ejecutan continuamente, hasta que la expresi\u00f3n de dentro del par\u00e9ntesis, (), pasa a ser falsa. Algo debe modificar la variable comprobada, el bucle&nbsp;<strong>while<\/strong>&nbsp;nunca terminar\u00e1. Lo que modifique la variable puede estar en el c\u00f3digo, como una variable que se incrementa, o ser una condici\u00f3n externa, como el valor que da un sensor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">while(expresion){<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/\/ sentencia(s) }<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch Arduino:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;Servo.h&gt; \/\/ Libreria muy buena de servos\n\nServo myservo1; \/\/ variable servo1\nServo myservo2; \/\/ variable servo2\nbyte puredata=0; \/\/ almacena el valor binario enviado desde puredata\nint myVar1 = 0;\nint myVar2 = 0;\n\nvoid setup(){\n\nSerial.begin(9600);\nmyservo1.attach(9); \/\/ define el pin al que esta conectado el servo1\nmyservo2.attach(10); \/\/ define el pin al que esta conectado el servo2\n}\n\nvoid loop () {\n  if (Serial.available() &gt; 0) { \/\/ si hay algun dato entrado por el serial procede\n  puredata = Serial.read(); \/\/ lee los datos binarios del puerto serie\n  myservo1.write(puredata); \/\/ Da el angulo del servo1 en grados, 0 a 180.\n  myservo2.write(puredata); \/\/ Da el angulo del servo2 en grados, 0 a 180.\n  Serial.println(puredata); \/\/ Imprimimos los datos en el monitor serial\n    if(puredata == 0) {\n      while(Serial.available()&lt;=0) {\n      }\n      puredata = Serial.read(); \/\/ lee serial A\n      myservo1.write(puredata); \/\/ Da el angulo del servo1 en grados, 0 a 180.\n      Serial.println(puredata); \/\/ imprime para referencia\n      while(Serial.available()&lt;=0) {\n      }\n      puredata = Serial.read(); \/\/ lee serial B\n      myservo2.write(puredata); \/\/ Da el angulo del servo2 en grados, 0 a 180.\n      Serial.println(puredata); \/\/ imprime para referencia\n    }\n }\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Patch PD:<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/2servimidipd.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/2servimidipd.png\" alt=\"\" class=\"wp-image-244\" title=\"2servimidipd\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Text PD:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#N canvas 507 161 725 587 10;\n#X msg 125 400 devices;\n#X msg 58 390 close;\n#X floatatom 242 250 5 0 0 0 - - -;\n#X floatatom 284 251 5 0 0 0 - - -;\n#X obj 198 346 unpack 0 0 0;\n#X obj 241 31 vsl 15 128 180 0 0 0 empty empty empty 0 -8 0 8 -262144\n-1 -1 5700 1;\n#X obj 285 171 int;\n#X obj 241 172 int;\n#X floatatom 192 405 5 0 0 0 - - -;\n#X floatatom 231 405 5 0 0 0 - - -;\n#X floatatom 288 410 5 0 0 0 - - -;\n#X obj 125 482 print;\n#X obj 198 274 pack 0 0 0;\n#X obj 93 232 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1\n-1;\n#X floatatom 198 250 5 0 0 0 - - -;\n#X obj 93 258 t b b;\n#X msg 198 218 0;\n#X msg 93 164 1;\n#X msg 93 183 0;\n#X obj 324 170 loadbang;\n#X obj 288 146 hsl 128 15 180 0 0 0 empty empty empty -2 -6 0 8 -262144\n-1 -1 4600 1;\n#X msg 242 218 50;\n#X msg 284 218 50;\n#X obj 323 200 t b b b b b b b;\n#X text 58 143 ON\/OFF Enviar a arduino;\n#X text 6 365 ON\/OFF conexion PD-arduino;\n#X obj 125 450 comport 4 9600;\n#X msg 8 390 open 3;\n#N canvas 0 22 475 382 midi 1;\n#X obj 24 -399 ctlin;\n#X floatatom 24 -373 5 0 0 0 - - -;\n#X floatatom 38 -353 5 0 0 0 - - -;\n#X floatatom 54 -335 5 0 0 0 - - -;\n#X floatatom -5 -197 5 0 0 0 - - -;\n#X floatatom 63 -197 5 0 0 0 - - -;\n#X obj -29 -170 spigot;\n#X floatatom -32 -141 5 0 0 0 - - -;\n#X obj -7 -265 r control;\n#X obj 38 -313 s control;\n#X obj -8 -315 s data;\n#X obj -51 -224 r data;\n#X floatatom 249 -186 5 0 0 0 - - -;\n#X floatatom 317 -186 5 0 0 0 - - -;\n#X obj 225 -159 spigot;\n#X floatatom 222 -130 5 0 0 0 - - -;\n#X obj 247 -254 r control;\n#X obj 203 -213 r data;\n#X obj 221 -100 s number;\n#X obj 249 -225 expr $f1 \\; if ($f1 == 39 \\, 1 \\, 0) \\;;\n#X obj -5 -236 expr $f1 \\; if ($f1 == 36 \\, 1 \\, 0) \\;;\n#X obj -33 -111 s number2;\n#X connect 0 0 1 0;\n#X connect 0 1 2 0;\n#X connect 0 2 3 0;\n#X connect 1 0 10 0;\n#X connect 2 0 9 0;\n#X connect 5 0 6 1;\n#X connect 6 0 7 0;\n#X connect 7 0 21 0;\n#X connect 8 0 20 0;\n#X connect 11 0 6 0;\n#X connect 13 0 14 1;\n#X connect 14 0 15 0;\n#X connect 15 0 18 0;\n#X connect 16 0 19 0;\n#X connect 17 0 14 0;\n#X connect 19 0 12 0;\n#X connect 19 1 13 0;\n#X connect 20 0 4 0;\n#X connect 20 1 5 0;\n#X restore 63 62 pd midi;\n#X obj 238 -17 r number;\n#X obj 283 90 r number2;\n#X obj 227 428 pipe 2;\n#X obj 289 428 pipe 4;\n#X obj 92 210 metro 50;\n#X text 140 464 Envia coordenadas a arduino;\n#X text 17 -51;\n#X obj 241 7 * 1.4;\n#X obj 285 116 * 1.4;\n#X connect 0 0 26 0;\n#X connect 1 0 26 0;\n#X connect 2 0 12 1;\n#X connect 3 0 12 2;\n#X connect 4 0 8 0;\n#X connect 4 1 9 0;\n#X connect 4 2 10 0;\n#X connect 5 0 7 0;\n#X connect 6 0 3 0;\n#X connect 7 0 2 0;\n#X connect 8 0 26 0;\n#X connect 9 0 31 0;\n#X connect 10 0 32 0;\n#X connect 12 0 4 0;\n#X connect 13 0 15 0;\n#X connect 14 0 12 0;\n#X connect 15 0 12 0;\n#X connect 15 1 4 0;\n#X connect 16 0 14 0;\n#X connect 17 0 33 0;\n#X connect 18 0 33 0;\n#X connect 19 0 23 0;\n#X connect 20 0 6 0;\n#X connect 21 0 2 0;\n#X connect 22 0 3 0;\n#X connect 23 3 16 0;\n#X connect 23 4 21 0;\n#X connect 23 5 22 0;\n#X connect 26 0 11 0;\n#X connect 27 0 26 0;\n#X connect 29 0 36 0;\n#X connect 30 0 37 0;\n#X connect 31 0 26 0;\n#X connect 32 0 26 0;\n#X connect 33 0 13 0;\n#X connect 36 0 5 0;\n#X connect 37 0 20 0;<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">MOTORES SERVO CONTROLADOS CON MIDI A TRAVES DE PD Y<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ARDUINO<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Controlando motores servo con un teclado MIDI a trav\u00e9s de Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/Y4fileBcOMI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h1 class=\"wp-block-heading\">Motor Servo vs. Iphone<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es una manera de utilizar comunicaci\u00f3n wireless via IP, para controlar motores Servo. Este programa esta hecho con Arduino, Puredata, y Fantastick.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1. Bajas la aplicacion Fantastick en tu Iphone.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2. Te conectas a la misma red wifi en tu ordenador y en tu iphone, o simplemente creas una red local.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/red.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/red.png\" alt=\"\" class=\"wp-image-245\" title=\"red\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">3. Te conectas a la red que creaste con tu iphone y en las preferencias de Fantastick escribes el numero de IP de tu red.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/ip.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/ip.jpg\" alt=\"\" class=\"wp-image-246\" title=\"ip\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">4. Bajas el patch Fantastick de PD en&nbsp;<a href=\"http:\/\/pinktwins.com\/fantastick\/\">http:\/\/pinktwins.com\/fantastick\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">o creas tu patch de red y lo conectas al puerto UDP 6661 especificado en tu iphone.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/coneccion-fantastick1.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/coneccion-fantastick1.png\" alt=\"\" class=\"wp-image-248\" title=\"coneccion fantastick\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora ya puedes interactuar con tu iphone y Puredata!!!<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Control de Motores Servo con Iphone, Arduino, PD y Fantastick\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/kQvpScuEFkY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h1 class=\"wp-block-heading\">Aceler\u00f3metro y objeto 3D<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Un&nbsp;<strong>aceler\u00f3metro<\/strong>&nbsp;es un dispositivo transductor que detecta el movimiento o el giro, es decir, es capaz de responder con una se\u00f1al el\u00e9ctrica ante una perturbaci\u00f3n inducida por la aplicaci\u00f3n de una fuerza o la gravedad.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Memsic 2125<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo vamos a usar un aceler\u00f3metro Memsic 2125. Este es un aceler\u00f3metro de dos ejes capaz de medir la aceleraci\u00f3n hasta m\u00e1s\/menos 2g ( g = campo gravitatorio). Posee una simple conexi\u00f3n digital: dos pines (uno para cada eje) emiten pulsos cuya duraci\u00f3n corresponde con la aceleraci\u00f3n de cada eje. A la hora de realizar mediciones muy precisas, el sensor cuenta con un pin de temperatura que puede ser utilizado para compensar posibles errores.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/foto5.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/foto5.jpg\" alt=\"\" class=\"wp-image-217\" title=\"foto\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Funcionamiento<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El circuito integrado MX2125 que confoma el sensor dispone de una c\u00e1mara de gas calentado y cuatro sensores de temperatura alrdedor de su eje. Cuando el aceler\u00f3metro est\u00e1 en horizontal, todos los sensores de temperatura miden la misma temperatura. Al inclinarlo, el gas caliente se acerca m\u00e1s a uno de los sensores de manera que comparando las temperaturas se puede detectar tanto la aceleraci\u00f3n est\u00e1tica como din\u00e1mica.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/conveccion_memsic2125_efecto_bus.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/conveccion_memsic2125_efecto_bus.png\" alt=\"\" class=\"wp-image-219\" title=\"conveccion_memsic2125_efecto_bus\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El CI MX2125 se encarga de convertir las medidas de temperatura en pulsos PWM, recibidos por el arduino. Si se mantiene quieto sobre la mesa vas a obtener 1G en algun eje, y si lo golpeas es la suma vectorial de 1G (la gravedad de la tierra) mas la componente vectorial del golpe.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Lectura con arduino<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para leer el aceler\u00f3metro con el arduino se utilizar\u00e1 la funci\u00f3n pulseIn() que est\u00e1 inclu\u00edda por defecto en arduino. La funci\u00f3n pulseIn() devuelve un&nbsp;<em>unsigned long<\/em>&nbsp;indicando el n\u00famero de microsegundos que dura un pulso positivo en un&nbsp;<em>pin<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para convertir la lectura del pulso en un valor entre -1000 y 1000, la funci\u00f3n es la siguiente: f(x) = ((x \/ 10) \u2013 500) * 8<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Funciones de Programaci\u00f3n:<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">pulseIn()<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Lee un pulso (ya sea HIGH \u2014alto\u2014 o LOW \u2014bajo\u2014) en un pin. Por ejemplo, si&nbsp;<strong>value<\/strong>&nbsp;es&nbsp;<strong>HIGH<\/strong>,&nbsp;<strong>pulseIn()<\/strong>&nbsp;espera a que el pin sea&nbsp;<strong>HIGH<\/strong>, empieza a cronometrar, espera a que el pin sea&nbsp;<strong>LOW<\/strong>&nbsp;y entonces detiene la medida de tiempo. Devuelve la anchura del pulso en microsegundos. Interrumpe la medida y devuelve 0 si el pulso no ha comenzado en un tiempo especificado. La medida del tiempo en esta funci\u00f3n ha sido determinada de forma emp\u00edrica y est\u00e1 sujeta a errores en pulsos largos. Funciona correctamente en pulsos con una anchura de 10 microsegundos a tres minutos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">unsigned long<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las variable long sin firmar (unsigned long) son variables extendidas para almacenar n\u00fameros, y almacenar 32 bits (4 bytes). Por el contrario que las variables long est\u00e1ndar, las unsigned long no almacenan n\u00fameros negativos, haciendo que su rango sea de 0 a 4,294,967,295 (2^32 \u2013 1).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">circuito:<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/memsic_schem.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/memsic_schem.png\" alt=\"\" class=\"wp-image-211\" title=\"memsic_schem\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Los pines de 5V y GND (Tierra) de Arduino est\u00e1n conectados a los pines 5V y GND del Memsic 2125; el pin digital 2 de Arduino est\u00e1 conectado al pin de salida X del Memsic 2125 y el pin digital 3 est\u00e1 conectado al pin de salida Y.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Acelerometro controlando Objeto 3D con Arduino y Puredata\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/NRGt22f6Vvw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch Arduino:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*   Memsic2125\n\n   Lee el Memsic 2125, acelerometro de dos ejes. Convierte los pulsos de salida\n   del Memsic en milli-g's (1\/1000 de la gravedad de la tierra) y lo imprime en\n   el serial del ordenador.\n\n   El circuito:\n    * Salida X del acelerometro al pin digital 2\n    * Salida Y del acelerometro al pin digital 3\n    * +V del acelerometro a +5V\n    * GND del acelerometro a ground\n\n *\/\n\n\/\/ constantes\nconst int xPin = 2;     \/\/ salida X del acelerometro\nconst int yPin = 3;     \/\/ salida Y del acelerometro\n\nvoid setup() {\n  \/\/ inicializamos la comunicacion serial:\n  Serial.begin(9600);\n  \/\/inicializamos los pines digitales conectados\n  \/\/ como entradas:\n  pinMode(xPin, INPUT);\n  pinMode(yPin, INPUT);\n}\n\nvoid loop() {\n  \/\/ variables para leer el ancho de pulso:\n  int pulsoX, pulsoY;\n  \/\/variables que contienen la aceleracion\n  int aceleracionX, aceleracionY;\n\n  \/\/ lee los pulsos de los eje X, Y:\n  pulsoX = pulseIn(xPin,HIGH);\n  pulsoY = pulseIn(yPin,HIGH);\n\n  \/\/ convierte el ancho de pulso en aceleracion\n  \/\/ las aceleraciones X, Y estan en milli-g's:\n  \/\/ la gravedad de la tierra es 1000 milli-g's, o 1g.\n  aceleracionX = ((pulsoX \/ 10) - 500) * 8;\n  aceleracionY = ((pulsoY \/ 10) - 500) * 8;\n\n  \/\/imprime la aceleracion:\n  Serial.print(\"X\");\n  Serial.println(pulsoX);\n  Serial.print(\"Y\");\n  Serial.println(pulsoY);\n\n  Serial.print(\"x\");\n  Serial.println(aceleracionX);\n  Serial.print(\"y\");\n  Serial.println(aceleracionY);\n\n  delay(50);\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Vista del Patch PD:<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/acelerometro-model3D2.png\"><\/a><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Patch Puredata Memsic 2125:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#N canvas 515 22 611 704 10;\n#X declare -lib moocow;\n#X msg 186 107 close;\n#X msg 54 72 open \\$1;\n#X msg 160 84 devices;\n#X msg 146 60 info;\n#X obj 53 167 sel 10 13;\n#X obj 54 299 bytes2any 0 0;\n#X obj 20 385 import moocow;\n#X obj 165 297 bytes2any 0 0;\n#X floatatom 54 323 5 0 0 0 - - -;\n#X floatatom 165 322 5 0 0 0 - - -;\n#X text 18 323 X_raw;\n#X text 130 322 Y_raw;\n#X obj 54 247 route 88 89 120 121;\n#X obj 298 297 bytes2any 0 0;\n#X floatatom 298 322 5 0 0 0 - - -;\n#X obj 433 299 bytes2any 0 0;\n#X floatatom 433 324 5 0 0 0 - - -;\n#X text 263 322 X-acc;\n#X text 398 324 Y-acc;\n#X obj 53 197 zl group 5;\n#X msg 57 31 3;\n#X obj 52 139 comport 3 9600;\n#X obj 365 139 vsl 15 128 -1000 1000 0 0 empty empty empty 0 -9 0 10\n-262144 -1 -1 6655 1;\n#X obj 404 258 hsl 128 15 -1000 1000 0 0 empty empty empty -2 -8 0\n10 -262144 -1 -1 5944 1;\n#X obj 298 345 s x;\n#X obj 435 354 s y;\n#X floatatom 333 462 0 0 0 0 - - -;\n#X obj 309 491 translate;\n#X msg 376 443 0 0 1;\n#X obj 87 580 gemwin;\n#X obj 309 401 gemhead;\n#X msg 147 451 create;\n#X msg 148 480 destroy;\n#X msg 145 393 1;\n#X msg 146 423 0;\n#X floatatom 327 589 0 0 0 0 - - -;\n#X msg 152 545 lighting 1;\n#X obj 80 615 gemhead 1;\n#X obj 80 653 world_light;\n#X obj 310 663 model venus.obj;\n#X obj 152 511 loadbang;\n#X obj 377 417 loadbang;\n#X obj 310 629 rotateXYZ;\n#X floatatom 369 587 0 0 0 0 - - -;\n#X obj 326 538 r x;\n#X obj 369 537 r y;\n#X obj 325 567 * 0.1;\n#X obj 368 566 * 0.1;\n#X msg 332 440 2;\n#X msg 22 31 2;\n#X connect 0 0 21 0;\n#X connect 1 0 21 0;\n#X connect 2 0 21 0;\n#X connect 3 0 21 0;\n#X connect 4 0 19 0;\n#X connect 4 2 19 0;\n#X connect 5 0 8 0;\n#X connect 7 0 9 0;\n#X connect 12 0 5 0;\n#X connect 12 1 7 0;\n#X connect 12 2 13 0;\n#X connect 12 3 15 0;\n#X connect 13 0 14 0;\n#X connect 14 0 22 0;\n#X connect 14 0 24 0;\n#X connect 15 0 16 0;\n#X connect 16 0 23 0;\n#X connect 16 0 25 0;\n#X connect 19 0 12 0;\n#X connect 20 0 1 0;\n#X connect 21 0 4 0;\n#X connect 26 0 27 1;\n#X connect 27 0 42 0;\n#X connect 28 0 27 2;\n#X connect 30 0 27 0;\n#X connect 31 0 29 0;\n#X connect 32 0 29 0;\n#X connect 33 0 29 0;\n#X connect 34 0 29 0;\n#X connect 35 0 42 1;\n#X connect 36 0 29 0;\n#X connect 37 0 38 0;\n#X connect 40 0 36 0;\n#X connect 41 0 28 0;\n#X connect 41 0 48 0;\n#X connect 42 0 39 0;\n#X connect 43 0 42 2;\n#X connect 44 0 46 0;\n#X connect 45 0 47 0;\n#X connect 46 0 35 0;\n#X connect 47 0 43 0;\n#X connect 48 0 26 0;\n#X connect 49 0 1 0;<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Acelerometro ADXL 335<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Lee el acelerometro de tres ejes ADXL 335.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La forma de conectarlo a la placa Arduino es la siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/adxl335.png\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/adxl335.png\" alt=\"adxl335\" class=\"wp-image-576\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em><strong>Nota: Es importante que tengamos en cuenta que el acelerometro ADXL 335 trabaja con un voltaje de 3,3v a diferencia del Memsic 2125 que trabaja con 5v.<\/strong><\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el ejemplo siguiente conectaremos los ejes X y Y a los pines an\u00e1logos x=0, y=1\u2026 el eje Z no lo utilizaremos:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>El circuito:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">* Salida X del acelerometro al pin analogico 0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">* Salida Y del acelerometro al pin analogico 1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">* +V del acelerometro a +3,3V<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">* GND del acelerometro a ground<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/ADXL335.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/ADXL335-300x225.jpg\" alt=\"\" class=\"wp-image-310\" title=\"ADXL335\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sketch ADXL 335:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*\n   ADXL 335\n\n   Lee el ADXL 335, acelerometro de tres ejes. \n\n   El circuito:\n    * Salida X del acelerometro al pin analogico 0 \n    * Salida Y del acelerometro al pin analogico 1\n    * +V del acelerometro a +3,3V\n    * GND del acelerometro a ground\n\n *\/\nconst int xPin = 0;                  \/\/ eje x del acelerometro\nconst int yPin = 1;                  \/\/ eje y del acelerometro\nint valox = 0; \/\/ variable para almacenar el valor x capturado desde el sensor\nint valoy = 1; \/\/ variable para almacenar el valor y capturado desde el sensor\n\nvoid setup()\n{\n  \/\/ incializa comunicacion:\n  Serial.begin(9600);\n\n}\n\nvoid loop() {\n\nvalox = analogRead(xPin);    \/\/ lee el valor x sensor\nvaloy = analogRead(yPin);    \/\/ lee el valor y sensor\n\n int sensorValueX = analogRead(0);\n int sensorValueY = analogRead(1);\n\n  \/\/imprime los valores:\n  Serial.print(\"X\");\n  Serial.println(sensorValueX);\n  Serial.print(\"Y\");\n  Serial.println(sensorValueY);\n\n  delay(50);\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Patch Puredata ADXL 335:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#N canvas 476 22 792 735 10;\n#X declare -lib moocow;\n#X msg 186 107 close;\n#X msg 54 72 open \\$1;\n#X msg 160 84 devices;\n#X msg 146 60 info;\n#X obj 53 167 sel 10 13;\n#X obj 54 299 bytes2any 0 0;\n#X msg 22 31 4;\n#X obj 409 41 import moocow;\n#X obj 52 139 comport 4 9600;\n#X obj 165 297 bytes2any 0 0;\n#X floatatom 54 323 5 0 0 0 - - -;\n#X floatatom 165 322 5 0 0 0 - - -;\n#X text 18 323 X_raw;\n#X text 130 322 Y_raw;\n#X obj 54 247 route 88 89 120 121;\n#X text 89 32 Edit this to open the correct serial port;\n#X obj 53 197 zl group 5;\n#X msg 58 32 3;\n#X floatatom 374 415 0 0 0 0 - - -;\n#X obj 477 509 gemwin;\n#X obj 307 352 gemhead;\n#X msg 554 414 create;\n#X msg 555 443 destroy;\n#X msg 552 356 1;\n#X msg 553 386 0;\n#X floatatom 325 540 0 0 0 0 - - -;\n#X msg 559 508 lighting 1;\n#X obj 470 544 gemhead 1;\n#X obj 470 582 world_light;\n#X obj 308 614 model venus.obj;\n#X obj 559 474 loadbang;\n#X obj 375 368 loadbang;\n#X obj 308 580 rotateXYZ;\n#X floatatom 367 538 0 0 0 0 - - -;\n#X obj 324 489 r x;\n#X obj 367 488 r y;\n#X obj 323 518 * 0.1;\n#X obj 366 517 * 0.1;\n#X msg 373 393 2;\n#X obj 307 442 translateXYZ;\n#X obj 75 422 s x;\n#X obj 375 149 vsl 15 128 -1000 1000 0 0 empty empty empty 0 -9 0 10\n-262144 -1 -1 6706 1;\n#X obj 414 268 hsl 128 15 -1000 1000 0 0 empty empty empty -2 -8 0\n10 -262144 -1 -1 4839 1;\n#X floatatom 75 398 5 0 0 0 - - -;\n#X obj 75 354 * 14;\n#X floatatom 139 391 5 0 0 0 - - -;\n#X obj 139 347 * 14;\n#X obj 140 415 s y;\n#X obj 75 374 - 4606;\n#X obj 139 367 - 4704;\n#X connect 0 0 8 0;\n#X connect 1 0 8 0;\n#X connect 2 0 8 0;\n#X connect 3 0 8 0;\n#X connect 4 0 16 0;\n#X connect 4 2 16 0;\n#X connect 5 0 10 0;\n#X connect 6 0 1 0;\n#X connect 8 0 4 0;\n#X connect 9 0 11 0;\n#X connect 10 0 44 0;\n#X connect 11 0 46 0;\n#X connect 14 0 5 0;\n#X connect 14 1 9 0;\n#X connect 16 0 14 0;\n#X connect 17 0 1 0;\n#X connect 18 0 39 3;\n#X connect 20 0 39 0;\n#X connect 21 0 19 0;\n#X connect 22 0 19 0;\n#X connect 23 0 19 0;\n#X connect 24 0 19 0;\n#X connect 25 0 32 1;\n#X connect 26 0 19 0;\n#X connect 27 0 28 0;\n#X connect 30 0 26 0;\n#X connect 31 0 38 0;\n#X connect 32 0 29 0;\n#X connect 33 0 32 2;\n#X connect 34 0 36 0;\n#X connect 35 0 37 0;\n#X connect 36 0 25 0;\n#X connect 37 0 33 0;\n#X connect 38 0 18 0;\n#X connect 39 0 32 0;\n#X connect 43 0 40 0;\n#X connect 43 0 41 0;\n#X connect 44 0 48 0;\n#X connect 45 0 47 0;\n#X connect 45 0 42 0;\n#X connect 46 0 49 0;\n#X connect 48 0 43 0;\n#X connect 49 0 45 0;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">&nbsp;Video demostrativo:<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Tracking de Acelerometro ADXL 335 y 345 con Arduino y entorno 3D en Puredata\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/xT3mG6Siy6o?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Acelerometro ADXL 345<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Para conectar este acelerometro a diferencia del ADXL 335, vamos a comunicarnos atraves del protocolo de bus I2C.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I2C (Inter-Integrated Circuit) es un bus de comunicaci\u00f3n muy utilizado para comunicar circuitos integrados, uno de sus usos mas comunes es la comunicaci\u00f3n entre un microcontrolador y sensores&nbsp;perif\u00e9ricos. El I2C es un bus multi-maestro es decir permite que haya&nbsp;m\u00faltiples&nbsp;maestros y&nbsp;m\u00faltiples&nbsp;esclavos en el mismo bus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I2c fue dise\u00f1ado por phillips, pero se puede usar sin ning\u00fan tipo de problema legal puesto que la patente ya ha expirado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El bus I2C cuenta con dos lineas SDA(datos) y SCL(clock) ademas de masa. Para programarlo vamos a usar la libreria Wire.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Arudiuno_i2c_pins.png\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Arudiuno_i2c_pins.png\" alt=\"Arudiuno_i2c_pins\" class=\"wp-image-570\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>El circuito:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el ejemplo siguiente conectaremos SCL al pin analogico 5 y SDA al pin analogico 4. Tambien conectamos GND y para alimentar el acelerometro a 3,3v como vemos en la imagen:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/adxl345-arduino.png\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/adxl345-arduino-1024x640.png\" alt=\"adxl345-arduino\" class=\"wp-image-568\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em><strong>Nota: Es importante que tengamos en cuenta que el acelerometro ADXL 345 trabaja con un voltaje de 3,3v a diferencia del Memsic 2125 que trabaja con 5v.<\/strong><\/em><br><strong>&nbsp;<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/2015-08-14-13.01.36.jpg\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/2015-08-14-13.01.36-1024x765.jpg\" alt=\"2015-08-14 13.01.36\" class=\"wp-image-571\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sketch ADXL 345:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*\n&nbsp;&nbsp; ADXL 345\n\n\n&nbsp;&nbsp; El circuito:\n&nbsp;&nbsp;&nbsp; * Salida SCL del acelerometro al pin analogico 4 \n&nbsp;&nbsp;&nbsp; * Salida SDA del acelerometro al pin analogico 5\n&nbsp;&nbsp;&nbsp; * +V del acelerometro a +3,3V\n&nbsp;&nbsp;&nbsp; * GND del acelerometro a ground\n\n&nbsp;*\/\n\n#include &lt;Wire.h&gt;\n#include \"binary_const.h\" \/\/ with this we can use something B8(01010101) that it will convert to 85 at compile time\n\/\/ the above cames really handy and readable when doing per bit configuration in the ADXL345 registers\n\n#define DEVICE (0x53)&nbsp;&nbsp;&nbsp; \/\/ADXL345 device address (with SDO tied to ground)\n#define TO_READ (6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/num of bytes we are going to read each time (two bytes for each axis)\n\n#define INTERRUPTPIN 2&nbsp;&nbsp; \/\/ Arduino pin which is connected to INT1 from the ADXL345\n\n\n\/\/ Register map: see ADXL345 datasheet page 14\nconst int R_DEVID = 0;\nconst int R_THRESH_TAP = 29;\nconst int R_OFSX = 30;\nconst int R_OFSY = 31;\nconst int R_OFSZ = 32;\nconst int R_DUR = 33;\nconst int R_LATENT = 34;\nconst int R_WINDOW = 35;\nconst int R_THRESH_ACT = 36;\nconst int R_THRESH_INACT = 37;\nconst int R_TIME_INACT = 38;\nconst int R_ACT_INACT_CTL = 39;\nconst int R_THRESH_FF = 40;\nconst int R_TIME_FF = 41;\nconst int R_TAP_AXES = 42;\nconst int R_ACT_TAP_STATUS = 43;\nconst int R_BW_RATE = 44;\nconst int R_POWER_CTL = 45;\nconst int R_INT_ENABLE = 46;\nconst int R_INT_MAP = 47;\nconst int R_INT_SOURCE = 48;\nconst int R_DATA_FORMAT = 49;\nconst int R_DATAX0 = 50;\nconst int R_DATAX1 = 51;\nconst int R_DATAY0 = 52;\nconst int R_DATAY1 = 53;\nconst int R_DATAZ0 = 54;\nconst int R_DATAZ1 = 55;\nconst int R_FIFO_CTL = 56;\nconst int R_FIFO_STATUS = 57;\n\n\nbyte buff[TO_READ];&nbsp;&nbsp;&nbsp; \/\/6 bytes buffer for saving data read from the device\nchar str[512];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/string buffer to transform data before sending it to the serial port\nboolean inspected = 0;\n\n\nvoid setup()\n{\n&nbsp; Wire.begin();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ join i2c bus (address optional for master)\n&nbsp; Serial.begin(9600);&nbsp; \/\/ start serial for output\n&nbsp; \n&nbsp; pinMode(INTERRUPTPIN, INPUT); \n&nbsp; \n&nbsp; \n&nbsp; \/\/ interrupts setup\n&nbsp; writeTo(DEVICE, R_INT_MAP, 0); \/\/ send all interrupts to ADXL345's INT1 pin\n&nbsp; writeTo(DEVICE, R_INT_ENABLE, B8(1111100)); \/\/ enable signle and double tap, activity, inactivity and free fall detection\n&nbsp; \n&nbsp; \n&nbsp; \/\/ free fall configuration\n&nbsp; writeTo(DEVICE, R_TIME_FF, 0x14); \/\/ set free fall time\n&nbsp; writeTo(DEVICE, R_THRESH_FF, 0x05); \/\/ set free fall threshold\n&nbsp; \n&nbsp; \/\/ single tap configuration\n&nbsp; writeTo(DEVICE, R_DUR, 0x1F); \/\/ 625us\/LSB\n&nbsp; writeTo(DEVICE, R_THRESH_TAP, 48); \/\/ 62.5mg\/LSB&nbsp; &lt;==&gt; 3000mg\/62.5mg = 48 LSB as datasheet suggestion\n&nbsp; writeTo(DEVICE, R_TAP_AXES, B8(111)); \/\/ enable tap detection on x,y,z axes\n\n&nbsp; \/\/ double tap configuration\n&nbsp; writeTo(DEVICE, R_LATENT, 0x10);\n&nbsp; writeTo(DEVICE, R_WINDOW, 0xFF);\n&nbsp; \n&nbsp; \/\/ inactivity configuration\n&nbsp; writeTo(DEVICE, R_TIME_INACT, 10); \/\/ 1s \/ LSB\n&nbsp; writeTo(DEVICE, R_THRESH_INACT, 3); \/\/ 62.5mg \/ LSB\n&nbsp; \/\/ also working good with high movements: R_TIME_INACT=5, R_THRESH_INACT=16, R_ACT_INACT_CTL=B8(00000111)\n&nbsp; \/\/ but unusable for a quite slow movements\n&nbsp; \n&nbsp; \/\/ activity configuration\n&nbsp; writeTo(DEVICE, R_THRESH_ACT, 8); \/\/ 62.5mg \/ LSB\n&nbsp; \n&nbsp; \/\/ activity and inctivity control\n&nbsp; writeTo(DEVICE, R_ACT_INACT_CTL, B8(11111111)); \/\/ enable activity and inactivity detection on x,y,z using ac\n&nbsp; \n&nbsp; \/\/ set the ADXL345 in measurement and sleep Mode: this will save power while while we will still be able to detect activity\n&nbsp; \/\/ set the Link bit to 1 so that the activity and inactivity functions aren't concurrent but alternatively activated\n&nbsp; \/\/ set the AUTO_SLEEP bit to 1 so that the device automatically goes to sleep when it detects inactivity\n&nbsp; writeTo(DEVICE, R_POWER_CTL, B8(111100));\n\n}\n\n\/*\nPrints out the state of all registers\nvoid inspectRegisters() {\n&nbsp; int regCount = R_FIFO_STATUS - R_THRESH_TAP + 1;\n&nbsp; byte regBuff[regCount];\n&nbsp; readFrom(DEVICE, R_THRESH_TAP, regCount, regBuff);\n&nbsp; for(int i=0; i&lt;regCount; i++) {\n&nbsp;&nbsp;&nbsp; Serial.println(R_THRESH_TAP + i);\n&nbsp;&nbsp;&nbsp; Serial.println(regBuff[i], BIN);\n&nbsp; }\n}\n*\/\n\nvoid loop()\n{\n&nbsp; \/*\n&nbsp; if(inspected == 0) {\n&nbsp;&nbsp;&nbsp; \/\/delay(1000); \n&nbsp;&nbsp;&nbsp; Serial.println(\"inspecting registers\");\n&nbsp;&nbsp;&nbsp; inspectRegisters();\n&nbsp;&nbsp;&nbsp; delay(1000);\n&nbsp;&nbsp;&nbsp; inspected = 1;\n&nbsp; }\n&nbsp; *\/\n&nbsp; \n&nbsp; \/\/ we use a digitalRead instead of attachInterrupt so that we can use delay()\n&nbsp; if(digitalRead(INTERRUPTPIN)) {\n&nbsp;&nbsp;&nbsp; int interruptSource = readByte(DEVICE, R_INT_SOURCE);\n&nbsp;&nbsp;&nbsp; \/\/Serial.print(\"### \");\n&nbsp;&nbsp;&nbsp; \/\/Serial.println(interruptSource, BIN);\n&nbsp;&nbsp; &nbsp;\n&nbsp;&nbsp; &nbsp;\n&nbsp;&nbsp;&nbsp; if(interruptSource &amp; B8(100)) {\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(\"### FREE_FALL\");\n&nbsp;&nbsp;&nbsp; }\n&nbsp;&nbsp;&nbsp; if(interruptSource &amp; B8(1000)) {\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(\"### Inactivity\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ we don't need to put the device in sleep because we set the AUTO_SLEEP bit to 1 in R_POWER_CTL\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ set the LOW_POWER bit to 1 in R_BW_RATE: with this we get worst measurements but we save power\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int bwRate = readByte(DEVICE, R_BW_RATE);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeTo(DEVICE, R_BW_RATE, bwRate | B8(10000));\n&nbsp;&nbsp;&nbsp; }\n&nbsp;&nbsp;&nbsp; if(interruptSource &amp; B8(10000)) {\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(\"### Activity\");\n&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ get current power mode\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int powerCTL = readByte(DEVICE, R_POWER_CTL);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ set the device back in measurement mode\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ as suggested on the datasheet, we put it in standby then in measurement mode\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ we do this using a bitwise and (&amp;) so that we keep the current R_POWER_CTL configuration\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeTo(DEVICE, R_POWER_CTL, powerCTL &amp; B8(11110011));\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay(10); \/\/ let's give it some time (not sure if this is needed)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeTo(DEVICE, R_POWER_CTL, powerCTL &amp; B8(11111011));\n&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ set the LOW_POWER bit to 0 in R_BW_RATE: get back to full accuracy measurement (we will consume more power)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int bwRate = readByte(DEVICE, R_BW_RATE);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeTo(DEVICE, R_BW_RATE, bwRate &amp; B8(01111));\n&nbsp;&nbsp;&nbsp; }\n&nbsp;&nbsp;&nbsp; if(interruptSource &amp; B8(100000)) {\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print(\"### DOUBLE_TAP Axes: \");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printTapAxes();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(\"\"); \/\/ closing Axes line\n&nbsp;&nbsp;&nbsp; }\n&nbsp;&nbsp;&nbsp; else if(interruptSource &amp; B8(1000000)) { \/\/ when a double tap is detected also a signle tap is deteced. we use an else here so that we only print the double tap\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.print(\"### SINGLE_TAP Axes: \");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printTapAxes();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serial.println(\"\"); \/\/ closing Axes line\n&nbsp;&nbsp;&nbsp; }\n&nbsp;&nbsp;&nbsp; delay(150);\n&nbsp; }\n&nbsp; \n&nbsp; int regAddress = 0x32;&nbsp;&nbsp;&nbsp; \/\/first axis-acceleration-data register on the ADXL345\n&nbsp; int x, y, z;\n&nbsp; \n&nbsp; readFrom(DEVICE, regAddress, TO_READ, buff); \/\/read the acceleration data from the ADXL345\n&nbsp; \n&nbsp;&nbsp; \/\/each axis reading comes in 10 bit resolution, ie 2 bytes.&nbsp; Least Significat Byte first!!\n&nbsp;&nbsp; \/\/thus we are converting both bytes in to one int\n&nbsp; x = (((int)buff[1]) &lt;&lt; 8) | buff[0];&nbsp; &nbsp;\n&nbsp; y = (((int)buff[3])&lt;&lt; 8) | buff[2];\n&nbsp; z = (((int)buff[5]) &lt;&lt; 8) | buff[4];\n&nbsp; \n&nbsp; \/\/we send the x y z values as a string to the serial port\n&nbsp; sprintf(str, \"X%d\", x); &nbsp;\n&nbsp; Serial.println(str);\n&nbsp; sprintf(str, \"Y%d\", y); &nbsp;\n&nbsp; Serial.println(str);\n&nbsp; sprintf(str, \"Z%d\", z); &nbsp;\n&nbsp; Serial.println(str);\n&nbsp; Serial.write(byte(10));\n&nbsp; \n&nbsp; \/\/It appears that delay is needed in order not to clog the port\n&nbsp; delay(150);\n}\n\n\nvoid printTapAxes() {\n&nbsp; int tapStatus = readByte(DEVICE, R_ACT_TAP_STATUS);\n&nbsp; if(tapStatus &amp; B8(100)) {\n&nbsp;&nbsp;&nbsp; Serial.print(\"x \");\n&nbsp; }\n&nbsp; if(tapStatus &amp; B8(10)) {\n&nbsp;&nbsp;&nbsp; Serial.print(\"y \");\n&nbsp; }\n&nbsp; if(tapStatus &amp; B8(1)) {\n&nbsp;&nbsp;&nbsp; Serial.print(\"z \");\n&nbsp; }\n}\n\n\/\/---------------- Functions\n\/\/Writes val to address register on device\nvoid writeTo(int device, byte address, byte val) {\n&nbsp;&nbsp; Wire.beginTransmission(device); \/\/start transmission to device \n&nbsp;&nbsp; Wire.write(address);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ send register address\n&nbsp;&nbsp; Wire.write(val);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ send value to write\n&nbsp;&nbsp; Wire.endTransmission(); \/\/end transmission\n}\n\n\n\/\/reads num bytes starting from address register on device in to buff array\nvoid readFrom(int device, byte address, int num, byte buff[]) {\n&nbsp; Wire.beginTransmission(device); \/\/start transmission to device \n&nbsp; Wire.write(address);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/sends address to read from\n&nbsp; Wire.endTransmission(); \/\/end transmission\n&nbsp; \n&nbsp; Wire.beginTransmission(device); \/\/start transmission to device\n&nbsp; Wire.requestFrom(device, num);&nbsp;&nbsp;&nbsp; \/\/ request 6 bytes from device\n&nbsp; \n&nbsp; int i = 0;\n&nbsp; while(Wire.available())&nbsp;&nbsp;&nbsp; \/\/device may send less than requested (abnormal)\n&nbsp; { \n&nbsp;&nbsp;&nbsp; buff[i] = Wire.read(); \/\/ receive a byte\n&nbsp;&nbsp;&nbsp; i++;\n&nbsp; }\n&nbsp; Wire.endTransmission(); \/\/end transmission\n}\n\n\n\/\/ read a single bite and returns the readed value\nbyte readByte(int device, byte address) {\n&nbsp; Wire.beginTransmission(device); \/\/start transmission to device \n&nbsp; Wire.write(address);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/sends address to read from\n&nbsp; Wire.endTransmission(); \/\/end transmission\n&nbsp; \n&nbsp; Wire.beginTransmission(device); \/\/start transmission to device\n&nbsp; Wire.requestFrom(device, 1);&nbsp;&nbsp;&nbsp; \/\/ request 1 byte from device\n&nbsp; \n&nbsp; int readed = 0;\n&nbsp; if(Wire.available())\n&nbsp; { \n&nbsp;&nbsp;&nbsp; readed = Wire.read(); \/\/ receive a byte\n&nbsp; }\n&nbsp; Wire.endTransmission(); \/\/end transmission\n&nbsp; return readed;\n}\n\n\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">&nbsp;Libreria Binary Constant<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tambien tenemos que adjuntar la libreria&nbsp; Binary Constant en una nueva&nbsp;<strong>pesta\u00f1a<\/strong>&nbsp;y nombrala como&nbsp;<strong>binary_const.h<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/* \nBinary constant generator macro\nBy Tom Torfs - donated to the public domain\n\nFrom http:\/\/bytes.com\/topic\/c\/answers\/216333-binary-constant-macros\n*\/\n\n\/* All macro's evaluate to compile-time constants *\/\n\n\/* *** helper macros *** \/\n\n\/* turn a numeric literal into a hex constant\n(avoids problems with leading zeroes)\n8-bit constants max value 0x11111111, always fits in unsigned long\n*\/\n#define HEX__(n) 0x##n##LU\n\n\/* 8-bit conversion function *\/\n#define B8__(x) ((x&amp;0x0000000FLU)?1:0) \\\n+((x&amp;0x000000F0LU)?2:0) \\\n+((x&amp;0x00000F00LU)?4:0) \\\n+((x&amp;0x0000F000LU)?8:0) \\\n+((x&amp;0x000F0000LU)?16:0) \\\n+((x&amp;0x00F00000LU)?32:0) \\\n+((x&amp;0x0F000000LU)?64:0) \\\n+((x&amp;0xF0000000LU)?128:0)\n\n\/* *** user macros *** \/\n\n\/* for upto 8-bit binary constants *\/\n#define B8(d) ((unsigned char)B8__(HEX__(d)))\n\n\/* for upto 16-bit binary constants, MSB first *\/\n#define B16(dmsb,dlsb) (((unsigned short)B8(dmsb)&lt;&lt;8) \\\n+ B8(dlsb))\n\n\/* for upto 32-bit binary constants, MSB first *\/\n#define B32(dmsb,db2,db3,dlsb) (((unsigned long)B8(dmsb)&lt;&lt;24) \\\n+ ((unsigned long)B8(db2)&lt;&lt;16) \\\n+ ((unsigned long)B8(db3)&lt;&lt;8) \\\n+ B8(dlsb))\n\n\/* Sample usage:\nB8(01010101) = 85\nB16(10101010,01010101) = 43605\nB32(10000000,11111111,10101010,01010101) = 2164238933\n*\/<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Patch Puredata ADXL 345:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#N canvas 476 22 792 735 10;\n#X declare -lib moocow;\n#X msg 186 107 close;\n#X msg 54 72 open \\$1;\n#X msg 160 84 devices;\n#X msg 146 60 info;\n#X obj 53 167 sel 10 13;\n#X obj 54 299 bytes2any 0 0;\n#X msg 22 31 4;\n#X obj 409 41 import moocow;\n#X obj 52 139 comport 4 9600;\n#X obj 165 297 bytes2any 0 0;\n#X floatatom 54 323 5 0 0 0 - - -;\n#X floatatom 165 322 5 0 0 0 - - -;\n#X text 18 323 X_raw;\n#X text 130 322 Y_raw;\n#X obj 54 247 route 88 89 120 121;\n#X text 89 32 Edit this to open the correct serial port;\n#X obj 53 197 zl group 5;\n#X msg 58 32 3;\n#X floatatom 374 415 0 0 0 0 - - -;\n#X obj 477 509 gemwin;\n#X obj 307 352 gemhead;\n#X msg 554 414 create;\n#X msg 555 443 destroy;\n#X msg 552 356 1;\n#X msg 553 386 0;\n#X floatatom 325 540 0 0 0 0 - - -;\n#X msg 559 508 lighting 1;\n#X obj 470 544 gemhead 1;\n#X obj 470 582 world_light;\n#X obj 308 614 model venus.obj;\n#X obj 559 474 loadbang;\n#X obj 375 368 loadbang;\n#X obj 308 580 rotateXYZ;\n#X floatatom 367 538 0 0 0 0 - - -;\n#X obj 324 489 r x;\n#X obj 367 488 r y;\n#X obj 323 518 * 0.1;\n#X obj 366 517 * 0.1;\n#X msg 373 393 2;\n#X obj 307 442 translateXYZ;\n#X obj 54 409 s x;\n#X obj 375 149 vsl 15 128 -1000 1000 0 0 empty empty empty 0 -9 0 10\n-262144 -1 -1 5702 1;\n#X obj 414 268 hsl 128 15 -1000 1000 0 0 empty empty empty -2 -8 0\n10 -262144 -1 -1 6998 1;\n#X floatatom 54 385 5 0 0 0 - - -;\n#X floatatom 165 377 5 0 0 0 - - -;\n#X obj 166 401 s y;\n#X obj 54 352 * 3;\n#X obj 165 348 * 3;\n#X connect 0 0 8 0;\n#X connect 1 0 8 0;\n#X connect 2 0 8 0;\n#X connect 3 0 8 0;\n#X connect 4 0 16 0;\n#X connect 4 2 16 0;\n#X connect 5 0 10 0;\n#X connect 6 0 1 0;\n#X connect 8 0 4 0;\n#X connect 9 0 11 0;\n#X connect 10 0 46 0;\n#X connect 11 0 47 0;\n#X connect 14 0 5 0;\n#X connect 14 1 9 0;\n#X connect 16 0 14 0;\n#X connect 17 0 1 0;\n#X connect 18 0 39 3;\n#X connect 20 0 39 0;\n#X connect 21 0 19 0;\n#X connect 22 0 19 0;\n#X connect 23 0 19 0;\n#X connect 24 0 19 0;\n#X connect 25 0 32 1;\n#X connect 26 0 19 0;\n#X connect 27 0 28 0;\n#X connect 30 0 26 0;\n#X connect 31 0 38 0;\n#X connect 32 0 29 0;\n#X connect 33 0 32 2;\n#X connect 34 0 36 0;\n#X connect 35 0 37 0;\n#X connect 36 0 25 0;\n#X connect 37 0 33 0;\n#X connect 38 0 18 0;\n#X connect 39 0 32 0;\n#X connect 43 0 40 0;\n#X connect 43 0 41 0;\n#X connect 44 0 45 0;\n#X connect 44 0 42 0;\n#X connect 46 0 43 0;\n#X connect 47 0 44 0;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Ejemplo Acelerometro MP3<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En este proyecto hemos hakeado un MP3 para controlarlo con un acelerometro. Su lista reproducci\u00f3n esta determinada con la inclinaci\u00f3n del acelerometro.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/acelerometro-mp3.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/acelerometro-mp3-300x225.jpg\" alt=\"\" class=\"wp-image-313\" title=\"acelerometro-mp3\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sketch:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ constantes\nconst int xPin = 2;     \/\/ salida X del acelerometro\nconst int yPin = 3;     \/\/ salida Y del acelerometro\nint back = 12;\nint next = 13;\n\nvoid setup() {\n  \/\/ inicializamos la comunicacion serial:\n  Serial.begin(9600);\n  \/\/inicializamos los pines digitales conectados\n  \/\/ como entradas:\n  pinMode(xPin, INPUT);\n  pinMode(yPin, INPUT);\n  pinMode(back, OUTPUT);\n  pinMode(next, OUTPUT);\n}\n\nvoid loop() {\n  \/\/ variables para leer el ancho de pulso:\n  int pulsoX, pulsoY;\n  \/\/variables que contienen la aceleracion\n  int aceleracionX, aceleracionY;\n\n  \/\/ lee los pulsos de los eje X, Y:\n  pulsoX = pulseIn(xPin,HIGH);\n  pulsoY = pulseIn(yPin,HIGH);\n\n  \/\/ convierte el ancho de pulso en aceleracion\n  \/\/ las aceleraciones X, Y estan en milli-g's:\n  \/\/ la gravedad de la tierra es 1000 milli-g's, o 1g.\n  aceleracionX = ((pulsoX \/ 10) - 500) * 8;\n  aceleracionY = ((pulsoY \/ 10) - 500) * 8;\n\n  if (aceleracionX &lt; -600)\n{\n\n  digitalWrite(next, LOW);\n  digitalWrite(back, HIGH);  \/\/ ejecutar A\n  delay(100);\n  digitalWrite(back, LOW);\n}\n  else if (aceleracionX &gt; 600)\n{\n   digitalWrite(back, LOW);\n   digitalWrite(next, HIGH); \/\/ ejecutar B\n   delay(100);\n   digitalWrite(next, LOW);\n}\n\n  \/\/imprime la aceleracion:\n  Serial.print(\"X\");\n  Serial.println(pulsoX);\n  Serial.print(\"Y\");\n  Serial.println(pulsoY);\n\n  Serial.print(\"x\");\n  Serial.println(aceleracionX);\n  Serial.print(\"y\");\n  Serial.println(aceleracionY);\n\n  delay(50);\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h1 class=\"wp-block-heading\">Interacci\u00f3n de Arduino en el mundo del sonido.<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Generador de notas usando la funci\u00f3n tone()<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Este ejemplo muestra como usar la funci\u00f3n tone() para generar notas.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Generando Mario Bros con Arduino y un altavoz\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/iJ0wQXwH_BI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/speaker_bb.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/speaker_bb.png\" alt=\"\" class=\"wp-image-249\" title=\"speaker_bb\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/speaker_schem.png\"><\/a><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sketch: tone_mario_bros<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*\n Melodias 8 bits\n Mario Bros \n\n circuito:\n * 1 Altavoz de 8-ohm conectado al pin digital 8 con una resistencia de 220 ohm\n *\/\n #include \"pitches.h\"\n\n\/\/ Escribe la melodia en notas:\nint melody[] = {\n NOTE_E4, NOTE_E4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_G4, NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A4, NOTE_B4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3, NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A4, NOTE_B4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3, NOTE_G4, NOTE_FS4, NOTE_F4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_G4, NOTE_FS4, NOTE_F4, NOTE_DS4, NOTE_E4, NOTE_C5, NOTE_C5, NOTE_C5, NOTE_G4, NOTE_FS4, NOTE_F4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_DS4, NOTE_D4, NOTE_C4, NOTE_G4, NOTE_FS4, NOTE_F4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_G4, NOTE_FS4, NOTE_F4, NOTE_DS4, NOTE_E4, NOTE_C5, NOTE_C5, NOTE_C5, NOTE_G4, NOTE_FS4, NOTE_F4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_DS4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_G4, NOTE_G3};\n\n\/\/ duracion de notas: 4 = corchea, 8 = semicorchea, etc.:\nint noteDurations[] = {\n  8, 4, 4, 8, 4, 2, 2, 3, 3, 4, 4, 8, 4, 4, 4, 4, 4, 8, 4, 4, 8, 8, 3, 3, 3, 3, 4, 4, 8, 4, 4, 4, 4, 4, 8, 4, 4, 8, 8, 1, 8, 8, 8, 4, 4, 8, 8, 4, 8, 8, 3, 8, 8, 8, 4, 4, 4, 8, 1, 8, 8, 8, 4, 4, 8, 8, 4, 8, 8, 3, 3, 3, 1,  8, 8, 8, 4, 4, 8, 8, 4, 8, 8, 3, 8, 8, 8, 4, 4, 4, 8, 1, 8, 8, 8, 4, 4, 8, 8, 4, 8, 8, 3, 3, 3, 1, 8, 4, 4, 8, 4, 8, 4, 8, 2, 8, 4, 4, 8, 4, 1, 8, 4, 4, 8, 4, 8, 4, 8, 2, 8, 4, 4, 8, 8, 4, 8, 1 };\n\nvoid setup() {\n  \/\/ Punto de lectura de notas en la melodia:\n  for (int thisNote = 0; thisNote &lt; 140; thisNote++) {\n\n    \/\/ para calcular la duracion de las notas, se divide un segundo\n    \/\/ en el typo de nota.\n    \/\/corchea = 1000 \/ 4, semicorchea = 1000 \/ 8, etc.\n    int noteDuration = 1000\/noteDurations[thisNote];\n    tone(8, melody[thisNote],noteDuration);\n\n    \/\/ para distinguir la nota, se da un minimo de tiempo entre ellas.\n    \/\/la duracion de las notas + 30% suena bien:\n    int pauseBetweenNotes = noteDuration * 1.30;\n    delay(pauseBetweenNotes);\n    \/\/ para el tono que esta tocando:\n    noTone(8);\n  }\n}\n\nvoid loop() {\n  \/\/ no es necesario repetir la melodia.\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Libreria Pitches:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para nuestro sketch es necesario llamar la libreria Pitches con #include \u201cpitches.h\u201d, para que la reconozca se hace una pesta\u00f1a en el sketch con nombre \u201cpitches.h\u201d, la cual tendra la libreria pitches la cual define las notas y sus alturas en frecuencia.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*************************************************\n * Public Constants\n *************************************************\/\n\n#define NOTE_B0  31\n#define NOTE_C1  33\n#define NOTE_CS1 35\n#define NOTE_D1  37\n#define NOTE_DS1 39\n#define NOTE_E1  41\n#define NOTE_F1  44\n#define NOTE_FS1 46\n#define NOTE_G1  49\n#define NOTE_GS1 52\n#define NOTE_A1  55\n#define NOTE_AS1 58\n#define NOTE_B1  62\n#define NOTE_C2  65\n#define NOTE_CS2 69\n#define NOTE_D2  73\n#define NOTE_DS2 78\n#define NOTE_E2  82\n#define NOTE_F2  87\n#define NOTE_FS2 93\n#define NOTE_G2  98\n#define NOTE_GS2 104\n#define NOTE_A2  110\n#define NOTE_AS2 117\n#define NOTE_B2  123\n#define NOTE_C3  131\n#define NOTE_CS3 139\n#define NOTE_D3  147\n#define NOTE_DS3 156\n#define NOTE_E3  165\n#define NOTE_F3  175\n#define NOTE_FS3 185\n#define NOTE_G3  196\n#define NOTE_GS3 208\n#define NOTE_A3  220\n#define NOTE_AS3 233\n#define NOTE_B3  247\n#define NOTE_C4  262\n#define NOTE_CS4 277\n#define NOTE_D4  294\n#define NOTE_DS4 311\n#define NOTE_E4  330\n#define NOTE_F4  349\n#define NOTE_FS4 370\n#define NOTE_G4  392\n#define NOTE_GS4 415\n#define NOTE_A4  440\n#define NOTE_AS4 466\n#define NOTE_B4  494\n#define NOTE_C5  523\n#define NOTE_CS5 554\n#define NOTE_D5  587\n#define NOTE_DS5 622\n#define NOTE_E5  659\n#define NOTE_F5  698\n#define NOTE_FS5 740\n#define NOTE_G5  784\n#define NOTE_GS5 831\n#define NOTE_A5  880\n#define NOTE_AS5 932\n#define NOTE_B5  988\n#define NOTE_C6  1047\n#define NOTE_CS6 1109\n#define NOTE_D6  1175\n#define NOTE_DS6 1245\n#define NOTE_E6  1319\n#define NOTE_F6  1397\n#define NOTE_FS6 1480\n#define NOTE_G6  1568\n#define NOTE_GS6 1661\n#define NOTE_A6  1760\n#define NOTE_AS6 1865\n#define NOTE_B6  1976\n#define NOTE_C7  2093\n#define NOTE_CS7 2217\n#define NOTE_D7  2349\n#define NOTE_DS7 2489\n#define NOTE_E7  2637\n#define NOTE_F7  2794\n#define NOTE_FS7 2960\n#define NOTE_G7  3136\n#define NOTE_GS7 3322\n#define NOTE_A7  3520\n#define NOTE_AS7 3729\n#define NOTE_B7  3951\n#define NOTE_C8  4186\n#define NOTE_CS8 4435\n#define NOTE_D8  4699\n#define NOTE_DS8 4978<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Funciones de programaci\u00f3n<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">tone()<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Genera una onda cuadrada de la frecuencia especificada (y un 50% de ciclo de trabajo) en un pin. La duraci\u00f3n puede ser especificada, en caso contrario la onda continua hasta que haya una llamada a noTone(). El pin puede conectarse a un zumbador piezoel\u00e9ctrico u otro altavoz que haga sonar los tonos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">sint\u00e1xis:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">tone(pin, frecuencia, duracion)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">noTone()<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Detiene la generaci\u00f3n de la se\u00f1al cuadrada que se activa al hacer uso de la funci\u00f3n tone(). No tiene efecto si no se est\u00e1 generando ning\u00fan tono.&nbsp;<strong>NOTA:<\/strong>&nbsp;si quieres generar tonos diferentes en m\u00faltiples pines , necesitas usar la funci\u00f3n noTone() en el pin antes de llamar a la funci\u00f3n tone() en el siguiente pin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Controlando la activaci\u00f3n de la melodia con un sensor LDR<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/la-foto.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/la-foto.jpg\" alt=\"\" class=\"wp-image-251\" title=\"la foto\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Activando melodia de 8 bits con sensor LDR y Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/XKy29xLjecU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Generador de frequencias y escalas que se transponen: Freq_out<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Conservamos la misma conexi\u00f3n de Mario Bros\u2026<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/speaker_bb1.png\"><\/a>\n\nEn este ejemplo generamos escalas que se van transponiendo:<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">https:\/\/www.youtube.com\/embed\/J_5L6mcjhaE<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>sketch:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*  freqout(freq, t)  \/\/ freq en hz, t en ms\n*   un generador de funcion de tono\n*   genera ondas cuadradas con una frquencia y una duracion determinada\n*   el programa incluye una tabla para subir octavas &amp; una funcion de transposicion\n*\/\n\n#include &lt;math.h&gt;  \/\/ requiere minimo un chip Atmega168\n\n#define outpin 8   \/\/ Pin de salida al altavoz\nint ptime;\nint   k,  x, dur, freq, t;\nint i, j;\n\nfloat ps;         \/\/ variable para rutina de potencias para el cambio de pitch \"pitchShift\"\n\nfloat noteval;\n\n\/\/ valores de notas para escalas de 2 octavas\n\/\/ las divide en potencia de dos para generar otras octavas\nfloat A     = 14080;\nfloat AS    = 14917.2;\nfloat B     = 15804.3;\nfloat C     = 16744;\nfloat CS    = 17739.7;\nfloat D     = 18794.5;\nfloat DS    = 19912.1;\nfloat E     = 21096.2;\nfloat F     = 22350.6;\nfloat FS    = 23679.6;\nfloat G     = 25087.7;\nfloat GS    = 26579.5;\nfloat A2S   = 29834.5;\nfloat B2    = 31608.5;\nfloat C2    = 33488.1;\nfloat C2S   = 35479.4;\nfloat D2    = 37589.1;\nfloat D2S   = 39824.3;\nfloat E2    = 42192.3;\nfloat F2    = 44701.2;\nfloat F2S   = 47359.3;\nfloat G2    = 50175.4;\nfloat G2S   = 53159;\n\n\/\/octavas  - octavas correspondientes al piano\nfloat oct8 = 4;\nfloat oct7 = 8;\nfloat oct6 = 16;\nfloat oct5 = 32;\nfloat oct4 = 64;\nfloat oct3 = 128;\nfloat oct2 = 256;\nfloat oct1 = 512;\nfloat oct0 = 1024;\n\n\/\/valores ritmicos\nint wh = 1024;\nint h  = 512;\nint dq = 448;\nint q = 256;\nint qt = 170;\nint de = 192;\nint e = 128;\nint et = 85;\nint dsx = 96;\nint sx = 64;\nint thx = 32;\n\n\/\/ escala mayor de A editable\n\nfloat majScale[] = {\n  A,  B,  CS,  D,  E,  FS,  GS,  A2,   B2,  C2S,  D2,  E2,  F2S,  G2S,  A3};\n\nvoid setup() {\n  Serial.begin(9600);\n} \n\nvoid loop(){\n for(i= 0; i&lt;=11; i++){\n    ps = (float)i \/ 12;         \/\/ escoge un intervalo de transposicion nuevo en cada nuevo loop\n    for(x= 0; x&lt;=15; x++){                      \n      noteval = (majScale[x] \/ oct4) * pow(2,ps);    \/\/ transpone la escala en 12 tonos\n\/\/ funcion de potencia que genera transposicion de octavas\n\/\/ elimina \" * pow(2,ps) \" para detener la funcion de transposicion\n\n      dur = 100;\n      freqout((int)noteval, dur);\n\n      delay(10);\n    }\n  }\n} \n\nvoid freqout(int freq, int t)  \/\/ freq en hz, t en ms\n{\n  int hperiod;                               \/\/calcula 1\/2 periodo en us\n  long cycles, i;\n  pinMode(outpin, OUTPUT);                   \/\/ enciende el pin de salida \n\n  hperiod = (500000 \/ freq) - 7;             \/\/ resta 7 us para enviarlo a digitalWrite \n\n  cycles = ((long)freq * (long)t) \/ 1000;    \/\/ calcula los ciclos\n \/\/ Serial.print(freq);\n \/\/ Serial.print((char)9);                   \/\/ ascii 9 is tab - debes coaccionarlo a un char para trabajar\n \/\/ Serial.print(hperiod);\n \/\/ Serial.print((char)9);\n \/\/ Serial.println(cycles);\n\n  for (i=0; i&lt;= cycles; i++){              \/\/ toca una nota t ms\n    digitalWrite(outpin, HIGH);\n    delayMicroseconds(hperiod);\n    digitalWrite(outpin, LOW);\n    delayMicroseconds(hperiod - 1);     \/\/ - 1 para preparar el digitaWrite\n  }\npinMode(outpin, INPUT);                \/\/apaga el pin para evitar ruido de otras operaciones\n\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Generando multiples tonos por distintas salidas de Arduino<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-prise-en-charge-des-contenus-embarqu-s wp-block-embed-prise-en-charge-des-contenus-embarqu-s wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Generando multiples tonos por distintas salidas de Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/wUxwIbgEsu0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Este ejemplo muestra como usar el comando tone() para reproducir diferentes notas en m\u00faltiples salidas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Funci\u00f3n: \u201cTone\u201d y \u201cnoTone\u201d:<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El comando tono() usando uno de los temporizadores internos del ATmega, configur\u00e1ndolo con la frecuencia que deseas, y usando el temporizador para enviar pulsos a trav\u00e9s del pin de salida. Como solo usa un temporizador, solo puedes reproducir una nota a la vez. Sin embargo, puedes producir tonos en m\u00faltiples pines secuencialmente. Para hacerlo, necesitas apagar el temporizador en un pin para moverlo al siguiente.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/arduino_3_speakers_bb.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/arduino_3_speakers_bb.png\" alt=\"\" class=\"wp-image-252\" title=\"arduino_3_speakers_bb\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/arduino_3_speakers_schem.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/arduino_3_speakers_schem-300x276.png\" alt=\"\" class=\"wp-image-253\" title=\"arduino_3_speakers_schem\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch: Ton0Multiple<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*\n Reproductor de Multiples tonos \n\nReproduce multiples tonos por distintas salidas en secuencia\n\n circuito:\n * Altavoz de 8-ohm conectado a los pines digitales 6, 7, y 11\n *\/\n\nvoid setup() {\n\n}\n\nvoid loop() {\n   \/\/ apaga la funcion tone para el pin 11:\n   noTone(11);            \n  \/\/ Reproduce la nota A4 en el pin 6 a los 200 ms:\n  tone(6, 440, 200);\n  delay(200);\n\n  \/\/ Apaga la funcion tone para el pin 6:\n  noTone(6);\n  \/\/ Reproduce la nota B4 en el pin 7 a los 500 ms:\n  tone(7, 494, 500);\n  delay(500);\n\n  \/\/ Apaga la funcion tone para el pin 7:\n  noTone(7);  \n  \/\/ Reproduce la nota C5 en el pin 11 a los 300 ms:\n  tone(11, 523, 300);\n  delay(300);\n\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Variando la frecuencia del tono con una entrada anal\u00f3gica<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Este ejemplo muestra como usar la funci\u00f3n tone() para generar un tono que sigue los valores de una entrada anal\u00f3gica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Variando la frecuencia con un Sensor LDR<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"seguidor de frecuencia con un fotoresistor y Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/zn_LYip9Lqo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lee una entrada anal\u00f3gica y la convierte en un valor en un rango comprendido en el rango de frecuencia audible. Los humanos podemos o\u00edr frecuencias entre 20 y 20.000 Hz, pero 100 \u2013 1000 funciona bien para este programa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hay que encontrar el rango de variaci\u00f3n de la entrada anal\u00f3gica para poder hacer la conversi\u00f3n. En el circuito que se muestra el rango de la entrada anal\u00f3gica va desde 400 hasta aproximadamente 1000.Cambia los valores en la funci\u00f3n map() para que se ajusten al rango de tu sensor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sketch: seguidor_de_frecuencia<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*\n  seguidor de frecuencia\n\nReproduce una altura de frecuencia que depende de una entrada analoga\n\n circuito:\n * Altavoz de 8-ohm conectado al pin digital 8\n * Fotoresistor LDR conectado al pin analogo 0. va de 0 a 5V\n * Resistencia de 1K a GND  del pin analogo 0\n *\/\n\nvoid setup() {\n  \/\/ inicializamos la comunicacion serial (para ver la respuesta del sensor):\n  Serial.begin(9600);\n}\n\nvoid loop() {\n  \/\/ lee la salida del sensor:\n  int sensorReading = analogRead(A0);\n  \/\/ imprime los datos de respuesta del sensor\n  Serial.println(sensorReading);\n  \/\/ mapea la frecuencia al rango de la entrada del sensor.\n  \/\/ se pueden ajustar los valores minimos y maximos\n  \/\/ dependiendo de los rangos que da el sensor:\n  int thisPitch = map(sensorReading, 400, 1000, 100, 1000);\n\n  \/\/ reproduce el pitch:\n  tone(8, thisPitch, 10);\n\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Variando la frecuencia con un potenciometro<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Pitch Follower con un Potenciometro y Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/nWYmdJU0-kQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Creando un teclado virtual con sensores, Keyboard sensor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Este es un teclado virtual creado con 6 sensores LDR, los cuales est\u00e1n programados a trav\u00e9s de arduino para que cada uno de una nota especifica.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/keyboard.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/keyboard-300x225.jpg\" alt=\"\" class=\"wp-image-254\" title=\"keyboard\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En este caso hago una escala Blues\u2026<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Teclado creado con sensores LDR y Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/Nfc1rCbFhjA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch: keyboard_sensor<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*\n  Teclado con sensores\n\n Reproduce notas que cambianon en base a una entrada analogica\n\n circuito:\n * 6 fotoresistores conectados a +5V y a una entrada analogica, entradas de 0 a 5\n * 6 resistencias de 1K conectadas a la entradas analogicas y a tierra GND.\n * 1 altavoz de 8-ohm conectado al pin digital 8 con una resistencia de 220-ohm\n *\/\n\n#include \"pitches.h\"\n\nconst int threshold = 200;    \/\/ el minimo que lee el sensor para generar una nota\n\n\/\/ notas que reproduce, correspondientes a 6 sensores:\nint notes[] = {\n  NOTE_D4, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_AS4, NOTE_B4};\n\nvoid setup() {\n\n}\n\nvoid loop() {\n  for (int thisSensor = 0; thisSensor &lt;= 5; thisSensor++) {\n    \/\/ lee uno de los sensores:\n    int sensorReading = analogRead(thisSensor);\n\n    \/\/ si el sensor logra el nivel de threshold:\n    if (sensorReading &lt; threshold) {\n      \/\/reproduce la nota correspondiente a este sensor:\n      tone(8, notes[thisSensor], 20);\n    }\n  }\n  Serial.println();\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Nota: En este caso necesitariamos tambien cargar la libreria \u201cpitches.h\u201d en otra pesta\u00f1a.<\/em><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creando un Sintetizador Granular con Arduino.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Este es un sintetizador granular con arduino y 6 potenciometros conectados a las entradas an\u00e1logicas y un jack pelado conectado al altavoz y al pin 3 digital.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/synth.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/synth-300x225.jpg\" alt=\"\" class=\"wp-image-255\" title=\"synth\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"sintetizador granular con arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/PA1L8Ih60cA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">sketch: Synth_granular<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Sintetizador granular\n\/\/\n\/\/ Analog in 0: Grano 1 altura\n\/\/ Analog in 1: Grano 2 caida\n\/\/ Analog in 2: Grano 1 caida\n\/\/ Analog in 3: Grano 2 altura\n\/\/ Analog in 4: Grano frecuencia de repeticion\n\/\/\n\/\/ Digital 3: Salida de Audio (Digital 11 en ATmega8)\n\n#include &lt;avr\/io.h&gt;\n#include &lt;avr\/interrupt.h&gt;\n\nuint16_t syncPhaseAcc;\nuint16_t syncPhaseInc;\nuint16_t grainPhaseAcc;\nuint16_t grainPhaseInc;\nuint16_t grainAmp;\nuint8_t grainDecay;\nuint16_t grain2PhaseAcc;\nuint16_t grain2PhaseInc;\nuint16_t grain2Amp;\nuint8_t grain2Decay;\n\n\/\/ Mapea los pines analogos\n#define SYNC_CONTROL         (4)\n#define GRAIN_FREQ_CONTROL   (0)\n#define GRAIN_DECAY_CONTROL  (2)\n#define GRAIN2_FREQ_CONTROL  (3)\n#define GRAIN2_DECAY_CONTROL (1)\n\n\/\/ Al cambiar esto hay que volver a cablear el audio()\n\n#if defined(__AVR_ATmega8__)\n\/\/\n\/\/ En antiguas placas ATmega8.\n\/\/   la salida es en el pin 11\n\/\/\n#define LED_PIN       13\n#define LED_PORT      PORTB\n#define LED_BIT       5\n#define PWM_PIN       11\n#define PWM_VALUE     OCR2\n#define PWM_INTERRUPT TIMER2_OVF_vect\n#elif defined(__AVR_ATmega1280__)\n\/\/\n\/\/ En la Arduino Mega\n\/\/ La salida es en el pin 3\n\/\/\n#define LED_PIN       13\n#define LED_PORT      PORTB\n#define LED_BIT       7\n#define PWM_PIN       3\n#define PWM_VALUE     OCR3C\n#define PWM_INTERRUPT TIMER3_OVF_vect\n#else\n\/\/\n\/\/ Para las ultimas placas ATmega168 y ATmega328\n\/\/ La salida es en el pin 3\n\/\/\n#define PWM_PIN       3\n#define PWM_VALUE     OCR2B\n#define LED_PIN       13\n#define LED_PORT      PORTB\n#define LED_BIT       5\n#define PWM_INTERRUPT TIMER2_OVF_vect\n#endif\n\n\/\/ mapeado logaritmico\n\/\/\nuint16_t antilogTable[] = {\n  64830,64132,63441,62757,62081,61413,60751,60097,59449,58809,58176,57549,56929,56316,55709,55109,\n  54515,53928,53347,52773,52204,51642,51085,50535,49991,49452,48920,48393,47871,47356,46846,46341,\n  45842,45348,44859,44376,43898,43425,42958,42495,42037,41584,41136,40693,40255,39821,39392,38968,\n  38548,38133,37722,37316,36914,36516,36123,35734,35349,34968,34591,34219,33850,33486,33125,32768\n};\nuint16_t mapPhaseInc(uint16_t input) {\n  return (antilogTable[input &amp; 0x3f]) &gt;&gt; (input &gt;&gt; 6);\n}\n\n\/\/ mappeado de paso cromatico\n\/\/\nuint16_t midiTable[] = {\n  17,18,19,20,22,23,24,26,27,29,31,32,34,36,38,41,43,46,48,51,54,58,61,65,69,73,\n  77,82,86,92,97,103,109,115,122,129,137,145,154,163,173,183,194,206,218,231,\n  244,259,274,291,308,326,346,366,388,411,435,461,489,518,549,581,616,652,691,\n  732,776,822,871,923,978,1036,1097,1163,1232,1305,1383,1465,1552,1644,1742,\n  1845,1955,2071,2195,2325,2463,2610,2765,2930,3104,3288,3484,3691,3910,4143,\n  4389,4650,4927,5220,5530,5859,6207,6577,6968,7382,7821,8286,8779,9301,9854,\n  10440,11060,11718,12415,13153,13935,14764,15642,16572,17557,18601,19708,20879,\n  22121,23436,24830,26306\n};\nuint16_t mapMidi(uint16_t input) {\n  return (midiTable[(1023-input) &gt;&gt; 3]);\n}\n\n\/\/ mapeado de paso pentatonico\n\/\/\nuint16_t pentatonicTable[54] = {\n  0,19,22,26,29,32,38,43,51,58,65,77,86,103,115,129,154,173,206,231,259,308,346,\n  411,461,518,616,691,822,923,1036,1232,1383,1644,1845,2071,2463,2765,3288,\n  3691,4143,4927,5530,6577,7382,8286,9854,11060,13153,14764,16572,19708,22121,26306\n};\n\nuint16_t mapPentatonic(uint16_t input) {\n  uint8_t value = (1023-input) \/ (1024\/53);\n  return (pentatonicTable[value]);\n}\n\nvoid audioOn() {\n#if defined(__AVR_ATmega8__)\n  \/\/ ATmega8 tiene registros distintos\n  TCCR2 = _BV(WGM20) | _BV(COM21) | _BV(CS20);\n  TIMSK = _BV(TOIE2);\n#elif defined(__AVR_ATmega1280__)\n  TCCR3A = _BV(COM3C1) | _BV(WGM30);\n  TCCR3B = _BV(CS30);\n  TIMSK3 = _BV(TOIE3);\n#else\n  \/\/ Se programa el PWM a 31.25kHz, fase justa\n  TCCR2A = _BV(COM2B1) | _BV(WGM20);\n  TCCR2B = _BV(CS20);\n  TIMSK2 = _BV(TOIE2);\n#endif\n}\n\nvoid setup() {\n  pinMode(PWM_PIN,OUTPUT);\n  audioOn();\n  pinMode(LED_PIN,OUTPUT);\n}\n\nvoid loop() {\n  \/\/ En loop se programan los parametros de un oscilador.\n  \/\/\n  \/\/Evitar funciones que hagan muchas interrupciones de encendido y apagado.\n  \/\/ causan clicks en el audio.\n\n  \/\/ Mapeo de frecuencia\n  syncPhaseInc = mapPhaseInc(analogRead(SYNC_CONTROL)) \/ 4;\n\n  \/\/ Mapeo de paso a notas MIDI: C, Db, D, Eb, E, F...\n  \/\/syncPhaseInc = mapMidi(analogRead(SYNC_CONTROL));\n\n  \/\/ Mapeo de paso pentatonico: D, E, G, A, B\n  \/\/syncPhaseInc = mapPentatonic(analogRead(SYNC_CONTROL));\n\n  grainPhaseInc  = mapPhaseInc(analogRead(GRAIN_FREQ_CONTROL)) \/ 2;\n  grainDecay     = analogRead(GRAIN_DECAY_CONTROL) \/ 8;\n  grain2PhaseInc = mapPhaseInc(analogRead(GRAIN2_FREQ_CONTROL)) \/ 2;\n  grain2Decay    = analogRead(GRAIN2_DECAY_CONTROL) \/ 4;\n}\n\nSIGNAL(PWM_INTERRUPT)\n{\n  uint8_t value;\n  uint16_t output;\n\n  syncPhaseAcc += syncPhaseInc;\n  if (syncPhaseAcc &lt; syncPhaseInc) {\n    \/\/ Tiempo para comenzar siguente grano\n    grainPhaseAcc = 0;\n    grainAmp = 0x7fff;\n    grain2PhaseAcc = 0;\n    grain2Amp = 0x7fff;\n    LED_PORT ^= 1 &lt;&lt; LED_BIT; \/\/ Mas rapido que usando digitalwrite\n  }\n\n  \/\/ Incremento de fase de los osciladores de grano\n  grainPhaseAcc += grainPhaseInc;\n  grain2PhaseAcc += grain2PhaseInc;\n\n  \/\/ convierte la fase en una onda triangular\n  value = (grainPhaseAcc &gt;&gt; 7) &amp; 0xff;\n  if (grainPhaseAcc &amp; 0x8000) value = ~value;\n  \/\/Multiplica por la amplitud del grano para tomar el sample\n  output = value * (grainAmp &gt;&gt; 8);\n\n  \/\/ Repeticion del grano en segundos\n  value = (grain2PhaseAcc &gt;&gt; 7) &amp; 0xff;\n  if (grain2PhaseAcc &amp; 0x8000) value = ~value;\n  output += value * (grain2Amp &gt;&gt; 8);\n\n  \/\/ Hace que la amplitud del grano caiga por un factor cada sample (caida exponencial)\n  grainAmp -= (grainAmp &gt;&gt; 8 ) * grainDecay;\n  grain2Amp -= (grain2Amp &gt;&gt; 8 ) * grain2Decay;\n\n  \/\/ Escala la salida al rango que tenemos, hace clipping si es necesario\n  output &gt;&gt;= 9;\n  if (output &gt; 255) output = 255;\n\n  \/\/ Salida a PWM (es mas rapido que usando analogWrite)  \n  PWM_VALUE = output;\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Teclado con sensores LDR para hacer S\u00edntesis Aditiva:<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Usando Standard Firmata y pduino (arduino-test)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Este es un instrumento creado para tocar con una mano el teclado del ordenador simulando un teclado tradicional, y con la otra mano un teclado virtual creado con sensores LDR y una lampara. La idea es hacer sombra con el dedo sobre el fotoresistor y de esta forma bajar un arm\u00f3nico de la nota tocada\u2026 en este instrumento controlo los primeros cuatro arm\u00f3nicos de cada nota con cuatro dedos de la mano.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/kd-ldr-synth-add.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/kd-ldr-synth-add-300x181.png\" alt=\"\" class=\"wp-image-258\" title=\"kd ldr synth add\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Teclado con sensores LDR, Arduino y S\u00edntesis Aditiva en Puredata\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/-d6CnGIxnQQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sintesis de voz humana<\/h2>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Sintesis de Voz con Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/7s_QB-xiNTE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch: speech_daisybel<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Conectamos el altavoz al Pin digital 3 y cargamos el siguiente sketck:\n#include &lt;avr\/io.h&gt;\n#include &lt;avr\/interrupt.h&gt;\n#include &lt;avr\/pgmspace.h&gt;\n\nuint16_t pitchPhase, form1Phase,form2Phase,form3Phase;\nuint16_t pitchPhaseInc,form1PhaseInc,form2PhaseInc,form3PhaseInc;\nuint8_t form1Amp,form2Amp,form3Amp;\nuint8_t noiseMod=10;\n\nint8_t sinCalc[256] PROGMEM = {\n  \/* Esta tabla lee varias funciones de velocidad al mismo tiempo\n     extrayendo la fase y la amplitud del paquete nibble haciendo un \n     calculo siusoidal y mapeando la amplitud exponencial escalandola \n     al rango apropiado.\n\n     Nibble o Cuado es el conjunto de cuatro d\u00edgitos binarios (bits) \n     o medio octeto.\n\n     ROUND(\n       FLOOR(a\/16,1)\n       *SIN(\n         2\n         * PI()\n         * IF(\n           MOD(a,16),\n           EXP(0.18*MOD(a,16)),\n           0\n         ) \/16\n       )*127\n     ,0)\n  *\/\n  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n  0,2,2,3,3,4,5,6,7,8,10,12,14,17,20,24,\n  0,4,4,5,6,7,9,11,13,15,18,22,26,31,37,45,\n  0,5,6,7,8,10,12,14,17,20,24,28,34,41,49,58,\n  0,5,6,7,9,10,12,15,18,21,26,31,37,44,53,63,\n  0,5,6,7,8,10,12,14,17,20,24,28,34,41,49,58,\n  0,4,4,5,6,7,9,11,13,15,18,22,26,31,37,45,\n  0,2,2,3,3,4,5,6,7,8,10,12,14,17,20,24,\n  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n  0,-2,-2,-3,-3,-4,-5,-6,-7,-8,-10,-12,-14,-17,-20,-24,\n  0,-4,-4,-5,-6,-7,-9,-11,-13,-15,-18,-22,-26,-31,-37,-45,\n  0,-5,-6,-7,-8,-10,-12,-14,-17,-20,-24,-28,-34,-41,-49,-58,\n  0,-5,-6,-7,-9,-10,-12,-15,-18,-21,-26,-31,-37,-44,-53,-63,\n  0,-5,-6,-7,-8,-10,-12,-14,-17,-20,-24,-28,-34,-41,-49,-58,\n  0,-4,-4,-5,-6,-7,-9,-11,-13,-15,-18,-22,-26,-31,-37,-45,\n  0,-2,-2,-3,-3,-4,-5,-6,-7,-8,-10,-12,-14,-17,-20,-24\n};\n\nint8_t sqrCalc[256] PROGMEM ={\n  0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,\n  0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,\n  0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,\n  0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,\n  0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,\n  0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,\n  0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,\n  0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,\n  0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,\n  0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,\n  0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,\n  0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,\n  0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,\n  0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,\n  0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,\n  0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16\n};\n\n\/\/ Cambiar estos valores requiere tambien reescribir audioOn()\n\n#if defined(__AVR_ATmega8__)\n#define LED_PIN   13\n#define LED_PORT  PORTB\n#define LED_BIT   5\n\/\/ En la Antigua placa ATmega8,la salida es por el pin 11\n#define PWM_PIN       11\n#define PWM_VALUE     OCR2\n#define PWM_INTERRUPT TIMER2_OVF_vect\n#elif defined(__AVR_ATmega1280__)\n#define LED_PIN   13\n#define LED_PORT  PORTB\n#define LED_BIT   7\n#define PWM_PIN       3\n#define PWM_VALUE     OCR3C\n#define PWM_INTERRUPT TIMER3_OVF_vect\n#else\n#define LED_PIN   13\n#define LED_PORT  PORTB\n#define LED_BIT   5\n\/\/ Para la placa ATmega168, la salida es en el pin 3\n#define PWM_PIN       3\n#define PWM_VALUE     OCR2B\n#define PWM_INTERRUPT TIMER2_OVF_vect\n#endif\n\nvoid audioOn() {\n#if defined(__AVR_ATmega8__)\n  \/\/ ATmega8 tiene diferentes registros\n  TCCR2 = _BV(WGM20) | _BV(COM21) | _BV(CS20);\n  TIMSK = _BV(TOIE2);\n#elif defined(__AVR_ATmega1280__)\n  TCCR3A = _BV(COM3C1) | _BV(WGM30);\n  TCCR3B = _BV(CS30);\n  TIMSK3 = _BV(TOIE3);\n#else\n  \/\/ Ajustar el PWM a 31.25kHz, de fase justa\n  TCCR2A = _BV(COM2B1) | _BV(WGM20);\n  TCCR2B = _BV(CS20);\n  TIMSK2 = _BV(TOIE2);\n#endif\n}\n\nvoid setup() {\n  pinMode(PWM_PIN,OUTPUT);\n  audioOn();\n  pinMode(LED_PIN,OUTPUT);\n}\n\n#define FORMANT_SZ 7\n\nenum {\n  _SP,_DOT,_QM,_COM,_HYP,_IY,_IH,_EH,_AE,_AA,\n  _AH,_AO,_UH,_AX,_IX,_ER,_UX,_OH,_RX,_LX,\n  _WX,_YX,_WH,_R,_L,_W,_Y,_M,_N,_NX,\n  _DX,_Q,_S,_SH,_F,_TH,__H,__X,_Z,_ZH,\n  _V,_DH,_CHa,_CHb,_Ja,_Jb,_Jc,_Jd,_EY,_AY,\n  _OY,_AW,_OW,_UW,_Ba,_Bb,_Bc,_Da,_Db,_Dc,\n  _Ga,_Gb,_Gc,_GXa,_GXb,_GXc,_Pa,_Pb,_Pc,_Ta,\n  _Tb,_Tc,_Ka,_Kb,_Kc,_KXa,_KXb,_KXc\n};\n\nuint8_t formantTable[] PROGMEM = {\n   0x0, 0x0, 0x0,0x0,0x0,0x0,0x0,\/*00 space*\/ 0x13,0x43,0x5b,0x0,0x0,0x0,0x0,\/*01 .*\/\n  0x13,0x43,0x5b,0x0,0x0,0x0,0x0,\/*02 ?*\/     0x13,0x43,0x5b,0x0,0x0,0x0,0x0,\/*03 ,*\/\n  0x13,0x43,0x5b,0x0,0x0,0x0,0x0,\/*04 -*\/      0xa,0x54,0x6e,0xd,0xa,0x8,0x0,\/*05 IY*\/\n   0xe,0x49,0x5d,0xd,0x8,0x7,0x0,\/*06 IH*\/    0x13,0x43,0x5b,0xe,0xd,0x8,0x0,\/*07 EH*\/\n  0x18,0x3f,0x58,0xf,0xe,0x8,0x0,\/*08 AE*\/    0x1b,0x28,0x59,0xf,0xd,0x1,0x0,\/*09 AA*\/\n  0x17,0x2c,0x57,0xf,0xc,0x1,0x0,\/*10 AH*\/    0x15,0x1f,0x58,0xf,0xc,0x0,0x0,\/*11 AO*\/\n  0x10,0x25,0x52,0xf,0xb,0x1,0x0,\/*12 UH*\/    0x14,0x2c,0x57,0xe,0xb,0x0,0x0,\/*13 AX*\/\n   0xe,0x49,0x5d,0xd,0xb,0x7,0x0,\/*14 IX*\/    0x12,0x31,0x3e,0xc,0xb,0x5,0x0,\/*15 ER*\/\n   0xe,0x24,0x52,0xf,0xc,0x1,0x0,\/*16 UX*\/    0x12,0x1e,0x58,0xf,0xc,0x0,0x0,\/*17 OH*\/\n  0x12,0x33,0x3e,0xd,0xc,0x6,0x0,\/*18 RX*\/    0x10,0x25,0x6e,0xd,0x8,0x1,0x0,\/*19 LX*\/\n   0xd,0x1d,0x50,0xd,0x8,0x0,0x0,\/*20 WX*\/     0xf,0x45,0x5d,0xe,0xc,0x7,0x0,\/*21 YX*\/\n   0xb,0x18,0x5a,0xd,0x8,0x0,0x0,\/*22 WH*\/    0x12,0x32,0x3c,0xc,0xa,0x5,0x0,\/*23 R*\/\n   0xe,0x1e,0x6e,0xd,0x8,0x1,0x0,\/*24 L*\/      0xb,0x18,0x5a,0xd,0x8,0x0,0x0,\/*25 W*\/\n   0x9,0x53,0x6e,0xd,0xa,0x8,0x0,\/*26 Y*\/      0x6,0x2e,0x51,0xc,0x3,0x0,0x0,\/*27 M*\/\n   0x6,0x36,0x79,0x9,0x9,0x0,0x0,\/*28 N*\/      0x6,0x56,0x65,0x9,0x6,0x3,0x0,\/*29 NX*\/\n   0x6,0x36,0x79,0x0,0x0,0x0,0x0,\/*30 DX*\/    0x11,0x43,0x5b,0x0,0x0,0x0,0x0,\/*31 Q*\/\n   0x6,0x49,0x63,0x7,0xa,0xd,0xf,\/*32 S*\/      0x6,0x4f,0x6a,0x0,0x0,0x0,0x0,\/*33 SH*\/\n   0x6,0x1a,0x51,0x3,0x3,0x3,0xf,\/*34 F*\/      0x6,0x42,0x79,0x0,0x0,0x0,0x0,\/*35 TH*\/\n   0xe,0x49,0x5d,0x0,0x0,0x0,0x0,\/*36 \/H*\/    0x10,0x25,0x52,0x0,0x0,0x0,0x0,\/*37 \/X*\/\n   0x9,0x33,0x5d,0xf,0x3,0x0,0x3,\/*38 Z*\/      0xa,0x42,0x67,0xb,0x5,0x1,0x0,\/*39 ZH*\/\n   0x8,0x28,0x4c,0xb,0x3,0x0,0x0,\/*40 V*\/      0xa,0x2f,0x5d,0xb,0x4,0x0,0x0,\/*41 DH*\/\n   0x6,0x4f,0x65,0x0,0x0,0x0,0x0,\/*42 CHa*\/    0x6,0x4f,0x65,0x0,0x0,0x0,0x0,\/*43 CHb*\/\n   0x6,0x42,0x79,0x1,0x0,0x0,0x0,\/*44 Ja*\/     0x5,0x42,0x79,0x1,0x0,0x0,0x0,\/*45 Jb*\/\n   0x6,0x6e,0x79,0x0,0xa,0xe,0x0,\/*46 Jc*\/     0x0, 0x0, 0x0,0x2,0x2,0x1,0x0,\/*47 Jd*\/\n  0x13,0x48,0x5a,0xe,0xe,0x9,0x0,\/*48 EY*\/    0x1b,0x27,0x58,0xf,0xd,0x1,0x0,\/*49 AY*\/\n  0x15,0x1f,0x58,0xf,0xc,0x0,0x0,\/*50 OY*\/    0x1b,0x2b,0x58,0xf,0xd,0x1,0x0,\/*51 AW*\/\n  0x12,0x1e,0x58,0xf,0xc,0x0,0x0,\/*52 OW*\/     0xd,0x22,0x52,0xd,0x8,0x0,0x0,\/*53 UW*\/\n   0x6,0x1a,0x51,0x2,0x0,0x0,0x0,\/*54 Ba*\/     0x6,0x1a,0x51,0x4,0x1,0x0,0xf,\/*55 Bb*\/\n   0x6,0x1a,0x51,0x0,0x0,0x0,0x0,\/*56 Bc*\/     0x6,0x42,0x79,0x2,0x0,0x0,0x0,\/*57 Da*\/\n   0x6,0x42,0x79,0x4,0x1,0x0,0xf,\/*58 Db*\/     0x6,0x42,0x79,0x0,0x0,0x0,0x0,\/*59 Dc*\/\n   0x6,0x6e,0x70,0x1,0x0,0x0,0x0,\/*60 Ga*\/     0x6,0x6e,0x6e,0x4,0x1,0x0,0xf,\/*61 Gb*\/\n   0x6,0x6e,0x6e,0x0,0x0,0x0,0x0,\/*62 Gc*\/     0x6,0x54,0x5e,0x1,0x0,0x0,0x0,\/*63 GXa*\/\n   0x6,0x54,0x5e,0x4,0x1,0x0,0xf,\/*64 GXb*\/    0x6,0x54,0x5e,0x0,0x0,0x0,0x0,\/*65 GXc*\/\n   0x6,0x1a,0x51,0x0,0x0,0x0,0x0,\/*66 Pa*\/     0x6,0x1a,0x51,0x0,0x0,0x0,0x0,\/*67 Pb*\/\n   0x6,0x1a,0x51,0x0,0x0,0x0,0x0,\/*68 Pc*\/     0x6,0x42,0x79,0x0,0x0,0x0,0x0,\/*69 Ta*\/\n   0x6,0x42,0x79,0x0,0x0,0x0,0x0,\/*70 Tb*\/     0x6,0x42,0x79,0x0,0x0,0x0,0x0,\/*71 Tc*\/\n   0x6,0x6d,0x65,0x0,0x0,0x0,0x0,\/*72 Ka*\/     0xa,0x56,0x65,0xc,0xa,0x7,0x0,\/*73 Kb*\/\n   0xa,0x6d,0x70,0x0,0x0,0x0,0x0,\/*74 Kc*\/     0x6,0x54,0x5e,0x0,0x0,0x0,0x0,\/*75 KXa*\/\n   0x6,0x54,0x5e,0x0,0xa,0x5,0x0,\/*76 KXb*\/    0x6,0x54,0x5e,0x0,0x0,0x0,0x0 \/*77 KXc*\/\n};\n\nuint16_t pitchTable[64] = {\n  \/\/cubre desde A1 hasta C7\n  58,61,65,69,73,77,82,86,92,97,\n  103,109,115,122,129,137,145,154,163,173,\n  183,194,206,218,231,244,259,274,291,308,\n  326,346,366,388,411,435,461,489,518,549,\n  581,616,652,691,732,776,822,871,923,978,\n  1036,1097,1163,1232,1305,1383,1465,1552,1644,1742,\n  1845,1955,2071,2195\n};\n\nuint8_t frameList[] PROGMEM = {\n#if 1\n  _Da,3,0,39,_Db,1,0,39,_Dc,1,3,39,_EY,8,6,39,_YX,20,3,39, \/\/ Dai..\n  _Z,10,0,36,_IY,35,3,36, \/\/ ..sy\n  _Da,3,0,32,_Db,1,0,32,_Dc,1,3,32,_EY,8,6,32,_YX,20,3,32, \/\/ Dai..\n  _Z,10,0,27,_IY,35,3,27, \/\/ ..sy\n  _Ga,2,0,29,_Gb,2,0,29,_Gc,2,0,29,_IH,10,3,29,_V,5,0,29, \/\/ Give\n  _M,2,0,31,_IY,10,3,31, \/\/ me\n  _YX,5,0,32,_AO,10,0,32,_RX,5,0,32, \/\/ your\n  _AH,25,0,29,_NX,5,0,29, \/\/ an..\n  _S,2,0,32,_ER,10,0,32,_RX,3,0,32, \/\/ ..swer\n  _Da,3,0,27,_Db,1,0,27,_Dc,1,3,27,_UX,80,3,27,_WX,5,0,27, \/\/ do\n  _AY,5,20,34,_YX,10,0,34,_M,8,0,34, \/\/ I'm\n  __H,5,0,39,_AX,30,0,39,_F,10,0,39, \/\/ half\n  _Ka,3,0,36,_Kb,3,0,36,_Kc,4,0,36,_R,5,0,36,_EY,30,0,36, \/\/ cra..\n  _Z,5,0,32,_IY,40,0,32, \/\/ ..zy\n  _AO,10,0,29,_LX,5,0,29, \/\/ all\n  _F,5,0,31,_AO,10,0,31, \/\/ for\n  _DH,5,0,32,_AH,10,0,32, \/\/ the\n  _L,5,0,34,_AH,20,0,34,_V,5,0,34,\/\/ love\n  _AA,10,0,36,_V,5,0,36,\/\/ of\n  _Y,10,0,34,_UX,80,0,34, \/\/ you\n  _IH,10,0,36,_Ta,2,0,36,_Tb,1,0,36,_Tc,2,0,36,\/\/ It\n  _W,2,0,37,_OH,10,0,37,_N,1,0,37,_Ta,1,0,37,_Tb,1,0,37,_Tc,1,0,37,\/\/ won't\n  _Ba,2,0,36,_Bb,1,0,36,_Bc,2,0,36,_IY,10,0,36,\/\/ be\n  _AH,15,0,34,\/\/ a\n  _S,2,0,39,_Ta,2,0,39,_Tb,2,0,39,_Tc,2,0,39,_AY,1,10,39,_YX,10,0,39,\/\/ sty..\n  _L,3,0,36,_IH,10,0,36,_SH,2,0,36,\/\/ ..lish\n  _M,5,0,34,_AE,10,0,34,\/\/ ma..\n  _R,5,0,32,_IH,60,0,32,_Ja,2,0,32,_Jb,2,0,32,_Jc,2,0,32,\/\/ ..rriage\n  _AY,5,10,34,_YX,5,0,34,\/\/ I\n  _Ka,2,0,36,_Kb,2,0,36,_Kc,2,0,36,_AH,20,0,36,_N,2,0,36,_Ta,2,0,36,_Tb,2,0,26,_Tc,2,0,36,\/\/ can't\n  _AX,15,0,32,\/\/ a..\n  _F,5,0,29,_AO,20,0,29,_R,2,0,29,_Da,1,0,29,_Db,1,0,29,_Dc,1,0,29,\/\/ ..fford\n  _AX,15,0,32,\/\/ a\n  _Ka,1,0,29,_Kb,1,0,29,_Kc,1,0,29,_AE,12,0,29,\/\/ ca..\n  _R,5,0,27,_IH,45,0,27,_Ja,2,0,27,_Jb,2,0,27,_Jc,2,0,27,\/\/ ..rriage\n  _Ba,1,0,27,_Bb,1,0,27,_Bc,1,0,27,_AH,10,0,27,_Ta,1,0,27,_Tb,1,0,27,_Tc,1,0,27,\/\/ but\n  _Y,5,0,32,_UH,10,10,32,_L,5,0,32,\/\/ you'll\n  _L,3,0,36,_UH,10,0,36,_Ka,1,0,36,_Kb,1,0,36,_Kc,1,0,36,\/\/ look\n  _S,2,0,34,_W,2,0,34,_IY,20,0,34,_Ta,2,0,34,_Tb,2,0,34,_Tc,2,0,34,\/\/ sweet\n  _AX,15,0,27,\/\/ a..\n  _Ka,2,0,32,_Kb,2,0,32,_Kc,2,0,32,_R,2,0,32,_AA,20,0,32,_S,5,0,32,\/\/ ..cross\n  _DH,5,0,36,_AH,10,0,36,\/\/ the\n  _S,2,0,34,_IY,10,0,34,_Ta,2,0,34,_Tb,2,0,34,_Tc,2,0,34,\/\/ seat\n  _AA,10,0,36,_V,5,0,36,\/\/ of\n  _AE,15,0,37,\/\/ a\n  _Ba,2,0,39,_Bb,2,0,39,_Bc,2,0,39,_AY,5,5,39,_YX,5,0,39,\/\/ bi..\n  _S,5,0,36,_IH,10,0,36,\/\/ ..cy..\n  _Ka,2,0,32,_Kb,2,0,32,_Kc,2,0,32,_L,9,0,32,\/\/ ..cle\n  _M,2,0,34,_EY,5,10,34,_YX,10,0,34,_Da,2,0,34,_Db,2,0,34,_Dc,2,0,34,\/\/ made\n  _F,5,0,27,_OY,1,5,27,_RX,5,0,27,\/\/ for\n  _Ta,2,0,32,_Tb,2,0,32,_Tc,2,0,32,_UX,50,0,32,\/\/ two\n  #endif\n  _Ta,0,0,61\n};\n\nint frameTime = 15; \/\/ ms\nuint16_t basePitch;\nint formantScale;\n\nvoid loop() {\n  formantScale = 54;\/\/random(20,80);\/\/54;\n  uint8_t *framePos = frameList;\n  while(1) {\n    int n;\n    uint8_t startFormant,staticFrames,tweenFrames;\n    uint16_t startPitch,nextPitch;\n    uint8_t nextFormant;\n    int16_t startForm1PhaseInc,startForm2PhaseInc,startForm3PhaseInc;\n    uint8_t startForm1Amp,startForm2Amp,startForm3Amp;\n    uint8_t startMod;\n    uint8_t *formantPos;\n\n    \/\/ Lee el siguiente elemento en la lista de frame\n    startFormant = pgm_read_byte(framePos++);\n    staticFrames = pgm_read_byte(framePos++);\n\n    if (!staticFrames) break; \/\/ Fin de frase\n\n    tweenFrames = pgm_read_byte(framePos++);\n\n    startPitch = pitchTable[pgm_read_byte(framePos++)];\n    nextFormant = pgm_read_byte(framePos);\n    nextPitch = pitchTable[pgm_read_byte(framePos+3)];\n    pitchPhaseInc = startPitch;\n    formantPos = formantTable + startFormant * FORMANT_SZ;\n    form1PhaseInc = startForm1PhaseInc = pgm_read_byte(formantPos++)*formantScale;\n    form2PhaseInc = startForm2PhaseInc = pgm_read_byte(formantPos++)*formantScale;\n    form3PhaseInc = startForm3PhaseInc = pgm_read_byte(formantPos++)*formantScale;\n    form1Amp = startForm1Amp = pgm_read_byte(formantPos++);\n    form2Amp = startForm2Amp = pgm_read_byte(formantPos++);\n    form3Amp = startForm3Amp = pgm_read_byte(formantPos++);\n    noiseMod = startMod = pgm_read_byte(formantPos++);\n\n    for (;staticFrames--;) delay(frameTime);\n    if (tweenFrames) {\n      uint8_t* formantPos;\n      int16_t deltaForm1PhaseInc,deltaForm2PhaseInc,deltaForm3PhaseInc;\n      int8_t deltaForm1Amp,deltaForm2Amp,deltaForm3Amp;\n      int8_t deltaMod;\n      uint8_t nextMod;\n      int16_t deltaPitch;\n      tweenFrames--;\n      formantPos = formantTable + nextFormant * FORMANT_SZ;\n      deltaForm1PhaseInc = pgm_read_byte(formantPos++)*formantScale - startForm1PhaseInc;\n      deltaForm2PhaseInc = pgm_read_byte(formantPos++)*formantScale - startForm2PhaseInc;\n      deltaForm3PhaseInc = pgm_read_byte(formantPos++)*formantScale - startForm3PhaseInc;\n      deltaForm1Amp = pgm_read_byte(formantPos++) - startForm1Amp;\n      deltaForm2Amp = pgm_read_byte(formantPos++) - startForm2Amp;\n      deltaForm3Amp = pgm_read_byte(formantPos++) - startForm3Amp;\n      deltaMod = pgm_read_byte(formantPos++) - startMod;\n      deltaPitch = nextPitch - startPitch;\n      deltaMod = nextMod - startMod;\n      for (int i=1; i&lt;=tweenFrames; i++) {\n        form1PhaseInc = startForm1PhaseInc + (i*deltaForm1PhaseInc)\/tweenFrames;\n        form2PhaseInc = startForm2PhaseInc + (i*deltaForm2PhaseInc)\/tweenFrames;\n        form3PhaseInc = startForm3PhaseInc + (i*deltaForm3PhaseInc)\/tweenFrames;\n        form1Amp = startForm1Amp + (i*deltaForm1Amp)\/tweenFrames;\n        form2Amp = startForm2Amp + (i*deltaForm2Amp)\/tweenFrames;\n        form3Amp = startForm3Amp + (i*deltaForm3Amp)\/tweenFrames;\n        pitchPhaseInc = startPitch + (i*deltaPitch)\/tweenFrames;\n        noiseMod = startMod + (i*deltaMod)\/tweenFrames;\n        delay(frameTime);\n      }\n    }\n  }\n  delay(300);\n}\n\nSIGNAL(PWM_INTERRUPT)\n{\n  int8_t value;\n  static int8_t noise;\n  int16_t phaseNoise = noise * noiseMod;\n  noise += noise&lt;&lt;2; noise++;  \/\/ noise' = 5*noise+1\n\n  form1Phase += form1PhaseInc;\n  value = pgm_read_byte(sinCalc+(((form1Phase&gt;&gt;8) &amp; 0xf0) | form1Amp));\n  form2Phase += form2PhaseInc;\n  value += pgm_read_byte(sinCalc+(((form2Phase&gt;&gt;8) &amp; 0xf0) | form2Amp));\n  form3Phase += form3PhaseInc;\n  value += pgm_read_byte(sqrCalc+(((form3Phase&gt;&gt;8) &amp; 0xf0) | form3Amp));\n\n  value = (value * (0xff^(pitchPhase&gt;&gt;8)))&gt;&gt;8;\n  pitchPhase += pitchPhaseInc;\n  if ((pitchPhase+phaseNoise) &lt; pitchPhaseInc) {\n    form1Phase = 0;\n    form2Phase = 0;\n    form3Phase = 0;\n  }\n  PWM_VALUE = value + 0x80;\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Importando objetos 3D a Puredata<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El entorno Grafico con el cual trabajamos en Puredata es GEM y para objetos 3D utilizamos openGL. Para que nuestro programa reconozca un modelo 3D necesitamos importarlo con formato .obj. En el siguiente link tenemos modelos 3D ya dise\u00f1ados en formato obj:&nbsp;<a href=\"http:\/\/graphics.im.ntu.edu.tw\/~robin\/courses\/cg03\/model\/\">http:\/\/graphics.im.ntu.edu.tw\/~robin\/courses\/cg03\/model\/<\/a>&nbsp;En Puredata usamos el objeto \u201cmodel\u201d y llamamos al archivo .obj que queremos declarandolo en el objeto. Es importante que el modelo .obj que queramos llamar se encuentre en la misma carpeta que nuestro patch de PD, de esta manera Puredata lo podra encontrar.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/3D-y-obj4.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/3D-y-obj4.png\" alt=\"\" class=\"wp-image-228\" title=\"3D y obj\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Medidor de Distancias por Ultrasonidos Ping<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">El Ping es un medidor de distancias por ultrasonidos de Parallax. Detecta la distancia que hay con el objeto m\u00e1s cercano que hay en frente del sensor (hasta 3 metros). Funciona enviando una r\u00e1faga de ultrasonido y esperando a escuchar el eco que se produce cuando esta rebota con el objeto. La placa Arduino env\u00eda un pulso corto para disparar la detecci\u00f3n y espera por un pulso en el mismo pin. La duraci\u00f3n de este segundo pulso es el tiempo que ha tardado el ultrasonido en ir entre el sensor y el objeto y de vuelta al sensor. Conociendo la velocidad del sonido, ese tiempo se puede convertir en distancia.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">Circuito<\/h4>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/ping_bb.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/ping_bb.png\" alt=\"\" class=\"wp-image-212\" title=\"ping_bb\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>El pin de 5V de el PING))) se conecta al pin de 5V de la placa Arduino, el pin de masa, se conecta al pin de masa del Arduino y el pin SIG (se\u00f1al) se conecta al pin digital 7 en el Arduino.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketck Arduino:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Ping pd theremin.\n\n\/\/ constante pin 7\nconst int pingPin = 7;\n\nvoid setup() {\n  \/\/ inicializa la comunicacion serial:\n  Serial.begin(9600);\n}\n\nvoid loop()\n{\n  \/\/establece unas variables para la duracion del ping,\n  \/\/ y el resultado lo expresa en cm:\n  long duration, cm;\n\n  \/\/ PING es activado con un pulso HIGH de 2 o mas microsegundos.\n  \/\/ Entrega un pulso LOW antes para asegurar que el pulso HIGH sea limpio:\n  pinMode(pingPin, OUTPUT);\n  digitalWrite(pingPin, LOW);\n  delayMicroseconds(2);\n  digitalWrite(pingPin, HIGH);\n  delayMicroseconds(5);\n  digitalWrite(pingPin, LOW);\n\n  \/\/ El mismo pin es usado para leer la se\u00f1al del Ping: El pulso HIGH\n  \/\/ Su tiempo de duracion se expresa en microsegundos y es el tiempo que pasa\n  \/\/ ente la se\u00f1al enviada por el Ping y la recepcion de su eco reflectado en un objeto.\n  pinMode(pingPin, INPUT);\n  duration = pulseIn(pingPin, HIGH);\n\n  \/\/ convierte el tiempo en distancia\n\n  cm = microsecondsToCentimeters(duration);\n\n  Serial.print(cm);\n  Serial.println();\n\n  delay(100);\n}\n\nlong microsecondsToCentimeters(long microseconds)\n{\n  \/\/ La velocidad del sonido es de 340 m\/s o 29 microsegundos por centimetro.\n  \/\/ El sonido viaja de ida y vuelta, entonces para obtener la distancia del\n  \/\/ objeto tomamos la mitad de la distancia recorrida.\n  return microseconds \/ 29 \/ 2;\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Funciones de Programaci\u00f3n<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">long<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las variables de tipo Long son variables de tama\u00f1o extendido para almacenamiento de n\u00fameros, y 32 bits (4 bytes), desde -2,147,483,648 hasta 2,147,483,647.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">delayMicroseconds()<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Detiene brevemente el programa por la cantidad en tiempo (en microsegundos) especificada como par\u00e1metro. Existen mil microsegundos en un milisegundo, y un millon de microsegundos en un segundo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">return<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Termina una funci\u00f3n y devuelve un valor a la funci\u00f3n que la llama. Puede no devolver nada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">return valor;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00f3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">return;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ejemplo:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una funci\u00f3n que compara la entrada de un sensor a un umbral:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> int comprobarSensor(){\n    if (analogRead(0) &gt; 400) {\n        return 1;\n    else{\n        return 0;\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La palabra clave&nbsp;<em>return<\/em>&nbsp;es \u00fatil para depurar una secci\u00f3n de c\u00f3digo sin tener que comentar una gran cantidad de l\u00edneas de c\u00f3digo posiblemente incorrecto.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void loop(){\n\n\/\/ c\u00f3digo magn\u00edfico a comprobar aqu\u00ed\n\nreturn;\n\n\/\/ el resto del programa del que se desconf\u00eda\n\/\/ que nunca ser\u00e1 ejecutado por estar detr\u00e1s de return\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Theremin con un sensor de ultrasonido Ping<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, utilizamos la informaci\u00f3n enviada por arduino al puerto serie, para controlar la lectura de la frequencia de un oscilador de frequencia con la distancia reconocida por el sensor de ultrasonido Ping con respecto a un objeto, en este caso, mi mano.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">https:\/\/www.youtube.com\/embed\/JCb-cZvZRdI<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Theremin y objeto 3D con Ping<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora podemos a\u00f1adir un objeto 3D a nuestro sensor Ping y controlamos la cercania del objeto a nosotros con respecto a la cercania de mi mano al sensor. Esto gracias a Puredata, GEM y openGL, que nos permiten controlar el objeto en un espacio 3D con la informaci\u00f3n recibida por el puerto serial enviada por Arduino y el sensor de ultrasonido Ping.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Patch PD:<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/ping-theremin-3D1.png\"><\/a><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Text PD:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#N canvas 478 22 764 688 10;\n#X declare -lib moocow;\n#X msg 186 91 close;\n#X msg 54 72 open \\$1;\n#X msg 160 68 devices;\n#X msg 146 44 info;\n#X msg 57 31 2;\n#X obj 53 167 sel 10 13;\n#X obj 53 220 bytes2any 0 0;\n#X obj 54 244 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10\n-262144 -1 -1 0 256;\n#X obj 215 19 import moocow;\n#X obj 53 195 zl group 4;\n#X obj 52 139 comport 4 9600;\n#X msg 22 31 3;\n#X obj 247 516 *~;\n#X floatatom 96 385 0 0 0 0 - - -;\n#X obj 271 488 line~;\n#X msg 271 432 0.1 100;\n#X msg 290 457 0 100;\n#X obj 131 543 metro 500;\n#X obj 131 518 r metro;\n#X msg 263 158 \\; metro 0;\n#X msg 262 99 \\; pd dsp 1 \\; metro 1;\n#N canvas 0 22 450 300 (subpatch) 0;\n#X array array99 100 float 0;\n#X coords 0 -1 100 1 200 100 1;\n#X restore 195 249 graph;\n#X obj 94 571 tabwrite~ array99;\n#X obj 95 414 osc~ 1000;\n#X obj 55 339 line 0 10;\n#X obj 56 309 pack f 200;\n#X obj 51 371 vsl 15 128 0 1000 0 0 empty empty empty 0 -9 0 10 -262144\n-1 -1 0 1;\n#X obj 247 544 dac~;\n#X obj 56 278 * 40;\n#X obj 177 417 s z;\n#X floatatom 565 417 0 0 0 0 - - -;\n#X obj 507 239 gemwin;\n#X obj 498 354 gemhead;\n#X msg 567 110 create;\n#X msg 568 139 destroy;\n#X msg 565 52 1;\n#X msg 566 82 0;\n#X floatatom 516 542 0 0 0 0 - - -;\n#X msg 572 204 lighting 1;\n#X obj 500 274 gemhead 1;\n#X obj 500 312 world_light;\n#X obj 499 624 model venus.obj;\n#X obj 572 170 loadbang;\n#X obj 566 370 loadbang;\n#X obj 496 580 rotateXYZ;\n#X floatatom 558 540 0 0 0 0 - - -;\n#X obj 515 491 r x;\n#X obj 558 490 r y;\n#X obj 514 520 * 0.1;\n#X obj 557 519 * 0.1;\n#X msg 564 395 2;\n#X obj 641 389 r z;\n#X obj 498 444 translateXYZ;\n#X obj 641 418 * -0.01;\n#X obj 642 448 + 3;\n#X obj 383 624 model elephal.obj;\n#X obj 268 622 model ateneam.obj;\n#X connect 0 0 10 0;\n#X connect 1 0 10 0;\n#X connect 2 0 10 0;\n#X connect 3 0 10 0;\n#X connect 4 0 1 0;\n#X connect 5 0 9 0;\n#X connect 5 2 9 0;\n#X connect 6 0 7 0;\n#X connect 7 0 28 0;\n#X connect 9 0 6 0;\n#X connect 10 0 5 0;\n#X connect 11 0 1 0;\n#X connect 12 0 27 0;\n#X connect 12 0 27 1;\n#X connect 13 0 23 0;\n#X connect 13 0 29 0;\n#X connect 14 0 12 1;\n#X connect 15 0 14 0;\n#X connect 16 0 14 0;\n#X connect 17 0 22 0;\n#X connect 18 0 17 0;\n#X connect 18 0 17 0;\n#X connect 23 0 12 0;\n#X connect 23 0 22 0;\n#X connect 24 0 13 0;\n#X connect 24 0 26 0;\n#X connect 25 0 24 0;\n#X connect 28 0 25 0;\n#X connect 30 0 52 3;\n#X connect 32 0 52 0;\n#X connect 33 0 31 0;\n#X connect 34 0 31 0;\n#X connect 35 0 31 0;\n#X connect 36 0 31 0;\n#X connect 37 0 44 1;\n#X connect 38 0 31 0;\n#X connect 39 0 40 0;\n#X connect 42 0 38 0;\n#X connect 43 0 50 0;\n#X connect 44 0 56 0;\n#X connect 45 0 44 2;\n#X connect 46 0 48 0;\n#X connect 47 0 49 0;\n#X connect 48 0 37 0;\n#X connect 49 0 45 0;\n#X connect 50 0 30 0;\n#X connect 51 0 53 0;\n#X connect 52 0 44 0;\n#X connect 53 0 54 0;\n#X connect 54 0 30 0;<\/pre>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Theremin y objeto 3D con Ping, Arduino y Puredata\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/M_lOwOLtqnk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h1 class=\"wp-block-heading\">Sampler Theremin<\/h1>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/samplerthereminfoto.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/samplerthereminfoto-300x282.png\" alt=\"\" class=\"wp-image-257\" title=\"samplerthereminfoto\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Sampler Theremin con Arduino y Puredata\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/Axy9hQlzaDI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Scratcher<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui tenemos un Scratcher con Arduino, Puredata y un sensor de Ultrasonido Ping. La idea es simular el sonido que suena al scratchear un disco\u2026 en este caso scratcheamos con la mano en el aire. El sensor de Ultrasonido capta movimientos sutiles de la mano logrando una simulaci\u00f3n muy buena en peque\u00f1os movimientos y gestos.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Scratcher con Arduino, Puredata y un sensor de Ultrasonido Ping\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/DYMEou42L3A?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Patch Puredata:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A mi Patch de Ping Theremin le he a\u00f1adido un env\u00edo a un \u201cScratcher\u201d programado con una Sample Table en Puredata.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/ping-theremin.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/ping-theremin.png\" alt=\"\" class=\"wp-image-379\" title=\"ping theremin\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/scratch.png\"><\/a><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Ejemplo de posibles funciones de Arduino con un sensor de Ultrasonido<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Code for Arduino Obstacle Avoidance Robot\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/D6jMQRgg10o?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Sensor de Ultrasonido HC-SR04<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Sensor de ultrsonido HC-SR04 con Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/dHQmcrWmNys?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/png.png\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/png.png\" alt=\"png\" class=\"wp-image-56\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>sketch:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int Pin_echo = 13; \nint Pin_trig = 12;\nint Pinrojo=6;\nint Pinverde=5;\nint buzzer=4;\n\nvoid setup() { \n Serial.begin (9600); \n pinMode(Pinverde,OUTPUT); \/\/Definimos los pines\n pinMode(Pinrojo, OUTPUT); \n pinMode(buzzer,OUTPUT);\n pinMode(Pin_trig, OUTPUT); \n pinMode(Pin_echo, INPUT); \n} \n\nvoid loop() { \n int duracion, cm; \n digitalWrite(Pin_trig, LOW); \n delayMicroseconds(2); \n digitalWrite(Pin_trig, HIGH); \n delayMicroseconds(10); \n digitalWrite(Pin_trig, LOW); \n duracion = pulseIn(Pin_echo, HIGH); \n cm = duracion \/ 29 \/ 2;\n Serial.print(\"Distancia:\");\n Serial.print(cm); \n Serial.println(\" cm\");\n if (cm&gt;20) \/\/20 cm es la distancia de emergencia\n{\n digitalWrite(Pinverde, HIGH); \/\/En caso que un objeto est\u00e9 lejos, pintamos el LED verde\n digitalWrite(Pinrojo, LOW);\n digitalWrite(buzzer, LOW);\n}\nelse if (cm&lt;20)\n{\n digitalWrite(Pinverde, LOW); \/\/Si el objeto est\u00e1 muy cerca, hacemos sonar la alarma buzzer y el LED rojo\n digitalWrite(Pinrojo, HIGH);\n tone(buzzer, 440, 500);\n}\n delay(500); \n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>pulseIn()<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lee un pulso (ya sea HIGH \u2014alto\u2014 o LOW \u2014bajo\u2014) en un pin. Por ejemplo, si value es HIGH, pulseIn() espera a que el pin sea HIGH, empieza a cronometrar, espera a que el pin sea LOW y entonces detiene la medida de tiempo. Devuelve la anchura del pulso en microsegundos. Interrumpe la medida y devuelve 0 si el pulso no ha comenzado en un tiempo especificado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Funcionamiento<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los ultrasonidos son se\u00f1ales ac\u00fasticas cuyas frecuencias \u2013 de&nbsp;20&nbsp;a&nbsp;400 Khz<strong>\u2013&nbsp;<\/strong>est\u00e1n por encima del rango de frecuencias sensibles al o\u00eddo humano.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los sensores de ultrasonidos son capaces de medir la distancia a la que est\u00e1n respecto a un objeto por medio de un sistema de medici\u00f3n de ecos. Los sensores de&nbsp;ultrasonidos&nbsp;est\u00e1n formados por un transductor que emite un pulso corto de energ\u00eda ultras\u00f3nica. Cuando el pulso es reflejado por un objeto, el sensor captura el eco producido por medio de un receptor, y mediante un sistema de tratamiento de la se\u00f1al, calcula la distancia a la que est\u00e1 de dicho objeto. La f\u00f3rmula para calcular la distancia de un sensor de ultrasonidos es:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">d= 1\/2 v\u00b7t<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00f3nde d es distancia, v es velocidad y t es tiempo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para calcular la distancia a la que est\u00e1 un objeto, &nbsp;utilizaremos la f\u00f3rmula:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">d=1\/2 \u00b7343\u00b7t<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero como nos interesa conocer la distancia en cm, lo que hacemos es&nbsp;calcular cu\u00e1nto se tarda en recorrer 1 cm: &nbsp;343 m\/s = 34300 cm\/s. Entonces, aplicando la formula \u201c<strong>Distancia = Velocidad x Tiempo\u201d<\/strong>, tenemos que<strong>&nbsp;1cm = 34300\u00b7t<\/strong>.&nbsp;Despejando, t =29,15us. Por lo que finalmente, la f\u00f3rmula para calcular la distancia con el sensor es:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">d = (t\/2) \/ 29.4<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Seguidor de frecuencia con Sensor de Ultrasonido HC-SR04<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">https:\/\/www.youtube.com\/embed\/QAoz41er0oQ<\/h2>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch Seguidor de frecuencia&nbsp;con Sensor de Ultrasonido HC-SR04:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">int Pin_echo = 13; \nint Pin_trig = 12;\nint Pinrojo=6;\nint Pinverde=5;\nint buzzer=4;\nunsigned int pitch=0;<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void setup() { \n Serial.begin (9600); \n pinMode(Pinverde,OUTPUT); \/\/Definimos los pines\n pinMode(Pinrojo, OUTPUT); \n pinMode(buzzer,OUTPUT);\n pinMode(Pin_trig, OUTPUT); \n pinMode(Pin_echo, INPUT); \n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void loop() { \n int duracion, cm; \n digitalWrite(Pin_trig, LOW); \n delayMicroseconds(2); \n digitalWrite(Pin_trig, HIGH); \n delayMicroseconds(10); \n digitalWrite(Pin_trig, LOW); \n duracion = pulseIn(Pin_echo, HIGH); \n cm = duracion \/ 29 \/ 2;\n pitch = map(duracion, 20, 700, 500, 2500); \n pitch = (duracion * -1) + 1500; \n Serial.print(\"Distancia:\");\n Serial.print(cm); \n Serial.println(\" cm\");\n Serial.print(\" duracion: \");\n Serial.println(duracion);\n if (cm&gt;20) \/\/20 cm es la distancia de emergencia\n{\n digitalWrite(Pinverde, HIGH); \/\/En caso que un objeto est\u00e9 lejos, pintamos el LED verde\n digitalWrite(Pinrojo, LOW);\n digitalWrite(buzzer, LOW);\n}\nelse if (cm&lt;20)\n{\n digitalWrite(Pinverde, LOW); \/\/Si el objeto est\u00e1 muy cerca, hacemos sonar la alarma buzzer y el LED rojo\n digitalWrite(Pinrojo, HIGH);\n tone(buzzer, pitch, 20);\n}\n delay(10); \n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch&nbsp;HC-SR04 enviando al Serial:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">int Pin_echo = 13;  \nint Pin_trig = 12;\nint Pinrojo=6;\nint Pinverde=5;\nint buzzer=4;\nunsigned int pitch=0;\nvoid setup() { \n Serial.begin (9600); \n pinMode(Pinverde,OUTPUT); \/\/Definimos los pines\n pinMode(Pinrojo, OUTPUT); \n pinMode(buzzer,OUTPUT);\n pinMode(Pin_trig, OUTPUT); \n pinMode(Pin_echo, INPUT); \n}\nvoid loop() { \n int duracion, cm; \n digitalWrite(Pin_trig, LOW); \n delayMicroseconds(2); \n digitalWrite(Pin_trig, HIGH); \n delayMicroseconds(10); \n digitalWrite(Pin_trig, LOW); \n duracion = pulseIn(Pin_echo, HIGH); \n cm = duracion \/ 29 \/ 2;\n pitch = map(duracion, 20, 700, 500, 2500); \n pitch = (duracion * -1) + 1500; \n\n Serial.print(cm);\n Serial.println(); \n \n if (cm&gt;20) \/\/20 cm es la distancia de emergencia\n{\n digitalWrite(Pinverde, HIGH); \/\/En caso que un objeto est\u00e9 lejos, pintamos el LED verde\n digitalWrite(Pinrojo, LOW);\n\n}\nelse if (cm&lt;20)\n{\n digitalWrite(Pinverde, LOW); \/\/Si el objeto est\u00e1 muy cerca, hacemos sonar la alarma buzzer y el LED rojo\n digitalWrite(Pinrojo, HIGH);\n\n}\n delay(10); \n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Sensor PIR de Parallax y Arduino<\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/2191890911_9e6c70e5c6_o.jpeg\"><\/a><\/pre>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.slideshare.net\/slideshow\/embed_code\/2008275\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-prise-en-charge-des-contenus-embarqu-s wp-block-embed-prise-en-charge-des-contenus-embarqu-s wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Sensor PIR y Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/eSkRdBitFT8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">El siguiente sketch:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Enciende un led con la detecci\u00f3n de movimiento de un sensor PIR de Parallax.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Determina el principio y final de una secuencia de movimientos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Referencia del Sensor PIR de Parallax: http:\/\/www.parallax.com\/detail.asp?product_id=555-28027<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La salida del sensor va a HIGH si detecta movimiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n va a LOW si detecta movimiento entre tiempos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este programa ignora las fases cortas de LOW dando un tiempo limite, asumiendo que hay movimiento continuo en estas fases.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Conexiones:<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/pir1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/pir1.jpg\" alt=\"\" class=\"wp-image-242\" title=\"pir\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch de Arduino:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/le damos un tiempo de calibracion al sensor (10-60 seg deacuerdo a las especificaciones)\nint calibrationTime = 30;        \n\n\/\/el tiempo cuando el sensor envia un impulso LOW\nlong unsigned int lowIn;         \n\n\/\/la cantidad de tiempo en milisegundos que el sensor debe estar en LOW\n\/\/antes de que asumamos que se ha detenido el movimiento\nlong unsigned int pause = 5000;  \n\nboolean lockLow = true;\nboolean takeLowTime;  \n\nint pirPin = 3;    \/\/El pin digital al que esta conectado el sensor\nint ledPin = 13;\n\n\/\/Inicializamos\nvoid setup(){\n  Serial.begin(9600);\n  pinMode(pirPin, INPUT);\n  pinMode(ledPin, OUTPUT);\n  digitalWrite(pirPin, LOW);\n\n  \/\/le damos al sensor un tiempo de calibracion\n  Serial.print(\"calibrating sensor \");\n    for(int i = 0; i &lt; calibrationTime; i++){\n      Serial.print(\".\");\n      delay(1000);\n      }\n    Serial.println(\" done\");\n    Serial.println(\"SENSOR ACTIVE\");\n    delay(50);\n  }\n\n\/\/ Programa\nvoid loop(){\n\n     if(digitalRead(pirPin) == HIGH){\n       digitalWrite(ledPin, HIGH);   \/\/el LED visualiza el estado HIGH de salida del sensor\n       if(lockLow){\n         \/\/Nos aseguramos de esperar a la transicion a LOW antes de que haya mas salidas:\n         lockLow = false;\n         Serial.println(\"---\");\n         Serial.print(\"motion detected at \");\n         Serial.print(millis()\/1000);\n         Serial.println(\" sec\");\n         delay(50);\n         }\n         takeLowTime = true;\n       }\n\n     if(digitalRead(pirPin) == LOW){\n       digitalWrite(ledPin, LOW);  \/\/el led visualiza el estado LOW del sensor\n\n       if(takeLowTime){\n        lowIn = millis();          \/\/salva el tiempo de transicion de HIGH a LOW\n        takeLowTime = false;       \/\/nos aseguramos de que esto solo pase durante de una fase LOW\n        }\n       \/\/si el sensor esta en LOW por mas de un tiempo determinado hace una pausa,\n       \/\/asumimos que no habra mas movimiento\n       if(!lockLow &amp;&amp; millis() - lowIn &gt; pause){\n           \/\/nos aseguramos que este bloque de codigo solo se ejecute despues de\n           \/\/que se detecte un nuevo movimiento\n           lockLow = true;\n           Serial.print(\"motion ended at \");      \/\/salida\n           Serial.print((millis() - pause)\/1000);\n           Serial.println(\" sec\");\n           delay(50);\n           }\n       }\n  }<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Operadores Booleanos.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se pueden usar dentro de operaciones condicionales o en una sentencia&nbsp;<a href=\"http:\/\/arduino.cc\/es\/Reference\/If\">if<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&amp;&amp; (AND l\u00f3gico)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verdadero s\u00f3lo si ambos operadores son Verdadero, por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">if (digitalRead(2) == HIGH  &amp;&amp; digitalRead(3) == HIGH) { \/\/ lee dos pulsadores\n  \/\/ ...\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Es Verdadero s\u00f3lo si ambas entradas est\u00e1s activadas, es decir, en estado HIGH.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">|| (OR l\u00f3gico)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verdadero si alguno de los dos operadores es Verdadero, por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">if (x &gt; 0 || y &gt; 0) {\n  \/\/ ...\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Es Verdadero si alguno de los valores x \u00f3 y es mayor que 0.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">! (NOT)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verdadero si el operador es Falso, por ejempo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">if (!x) {\n  \/\/ ...\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Es Verdadero si el valor de x es Falso (p. e. si x es igual a 0).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Monitor serial:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En el monitor serial imprimimos el tiempo de detecci\u00f3n de movimiento y el tiempo en que termina una fase de movimiento continuo.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/PIR-serial.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/PIR-serial.png\" alt=\"\" class=\"wp-image-240\" title=\"PIR serial\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Control de un Rel\u00e9 con Arduino.<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Este ejemplo muestra como encender una bombilla de 220V de corriente alterna (AC) mediante un circuito de 5V de corriente continua (DC) gobernado por Arduino. Se puede utilizar con cualquier otro circuito de 220V con un m\u00e1ximo de 10A (con el rel\u00e9 del ejemplo).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rel\u00e9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El&nbsp;<a href=\"http:\/\/es.wikipedia.org\/wiki\/Rel%C3%A9\">rel\u00e9<\/a>&nbsp;es un dispositivo electromec\u00e1nico, que funciona como un interruptor controlado por un circuito el\u00e9ctrico en el que, por medio de un electroim\u00e1n, se acciona un juego de uno o varios contactos que permiten abrir o cerrar otros circuitos el\u00e9ctricos independientes.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/12V-SPDT-Relay.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/12V-SPDT-Relay-150x150.png\" alt=\"\" class=\"wp-image-206\" title=\"12V SPDT Relay\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/2lbfec71.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/2lbfec71.png\" alt=\"\" class=\"wp-image-208\" title=\"2lbfec7\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Para activar la bobina del rel\u00e9 utilizamos un transistor (BD135 o BD137) por si la potencia que Arduino nos proporciona no es suficiente, y utilizamos tambi\u00e9n, un diodo de protecci\u00f3n (1N4001, 1N4002, 1N4003, \u2026 o 1N4007) para eliminar la corriente inducida al apagar la bobina.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/DIODO-SIMBOLO2.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/DIODO-SIMBOLO2.png\" alt=\"\" class=\"wp-image-198\" title=\"DIODO-SIMBOLO\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a utilizar un rel\u00e9 cuya tensi\u00f3n de trabajo puede ser de 5V, un transistor y un&nbsp;<strong>diodo<\/strong>&nbsp;de protecci\u00f3n que puede ser un 1N4148 o en su defecto un 1N4001. E<strong>l diodo, evita la destrucci\u00f3n del transistor por la contra corriente producida por la inducci\u00f3n del rel\u00e9.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">circuito:<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/rele-transistor.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/rele-transistor.png\" alt=\"\" class=\"wp-image-195\" title=\"rele transistor\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/rele_arduino2.jpeg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/rele_arduino2.jpeg\" alt=\"\" class=\"wp-image-205\" title=\"rele_arduino\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Blink de 2 segundos con Rel\u00e9 y una lampara de 220v<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-prise-en-charge-des-contenus-embarqu-s wp-block-embed-prise-en-charge-des-contenus-embarqu-s wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Controlando un Rel\u00e9 con Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/MQRmUf5Et8Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-prise-en-charge-des-contenus-embarqu-s wp-block-embed-prise-en-charge-des-contenus-embarqu-s wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Rel\u00e9 controlado con Arduino para encendido y apagado de una lampara de 220v\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/e_rT1E9rmj8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"> \/*\n  Enciende y apaga una bombilla de 220V, cada 2 segundos, mediante\n un rel\u00e9 conectado al PIN 2 de Arduino\n*\/\nint relayPin = 2;                 \/\/ PIN al que va conectado el rel\u00e9\n\nvoid setup(){\n   pinMode(relayPin, OUTPUT);\n }\n\n void loop() {\n   digitalWrite(relayPin, HIGH);   \/\/ ENCENDIDO\n   delay(2000);\n   digitalWrite(relayPin, LOW);    \/\/ APAGADO\n   delay(2000);\n }<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Rel\u00e9 y Puredata: control de Encendido con un Trigger<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-prise-en-charge-des-contenus-embarqu-s wp-block-embed-prise-en-charge-des-contenus-embarqu-s wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Trigger para el Encendido de una Lampara con un Rel\u00e9, Arduino y Puredata\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/pME5YO90uY4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">sketch de Arduino:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Rele Trigger y Puredata\n\nconst int relePin = 2;   \n\nvoid setup()\n{\n  Serial.begin(9600);\n  pinMode(relePin, OUTPUT);\n}\n\nvoid loop() {\n  byte Trigger;\n\n  if (Serial.available()) {\n    Trigger = Serial.read();\n    analogWrite(relePin, Trigger);\n  }\n}<\/pre>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/arduino-bonk-rele.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/arduino-bonk-rele.png\" alt=\"\" class=\"wp-image-209\" title=\"arduino bonk rele\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>C\u00f3digo text de PD:<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#N canvas 239 22 480 700 10;\n#X msg 82 436 close;\n#X msg 69 406 open \\$1;\n#X msg 72 365 3;\n#X obj 82 493 comport 3 9600;\n#X floatatom 143 433 5 0 0 0 - - -;\n#X text 6 10 El patch envia un numero binario entre 0 255 por el puerto\nserial al arduino;\n#X msg 124 347 255;\n#X msg 165 387 0;\n#X obj 115 274 bonk~;\n#X obj 110 206 adc~;\n#X msg 17 67 \\; pd dsp 1;\n#X obj 146 57 vsl 15 128 0 100 0 0 empty empty empty 0 -9 0 10 -262144\n-1 -1 7700 1;\n#X obj 111 237 *~;\n#X floatatom 150 227 5 0 0 0 - - -;\n#X obj 123 313 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144\n-1 -1;\n#X obj 161 349 pipe 500;\n#X msg 37 366 2;\n#X text 165 105 determina el nivel de entrada de tu micro;\n#X text 1 101 Enciende el audio;\n#X obj 149 203 * 0.001;\n#X connect 0 0 3 0;\n#X connect 1 0 3 0;\n#X connect 2 0 1 0;\n#X connect 4 0 3 0;\n#X connect 6 0 4 0;\n#X connect 7 0 4 0;\n#X connect 8 1 14 0;\n#X connect 9 0 12 0;\n#X connect 11 0 19 0;\n#X connect 12 0 8 0;\n#X connect 14 0 6 0;\n#X connect 14 0 15 0;\n#X connect 15 0 7 0;\n#X connect 16 0 1 0;\n#X connect 19 0 12 1;\n#X connect 19 0 13 0;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Caja Multi-rel\u00e9 para control de m\u00faltiples luces con Arduino.<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/relee1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/relee1-300x225.jpg\" alt=\"\" class=\"wp-image-314\" title=\"relee1\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Esta caja fue fabricada con el fin de utilizar m\u00faltiples luces controladas independientemente con Arduino y Puredata. De este modo logramos sincronizar una media audiovisual con el encendido y apagado de las luces.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/relee2.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/relee2-300x225.jpg\" alt=\"\" class=\"wp-image-315\" title=\"relee2\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Arduino y Processing<\/h1>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-prise-en-charge-des-contenus-embarqu-s wp-block-embed-prise-en-charge-des-contenus-embarqu-s wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Processing y Arduino\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/V5w6I1AqKjc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Los valores en voltaje de 0 a 5v que envia el potenciometro por el Pin an\u00e1logo, son leidos por analogRead(), como valores entre o y 1023. Estos valores son representados en una gr\u00e1fica en Processing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recordemos que la forma de comunicarse Arduino con otros programas es a trav\u00e9s del puerto serie, asi que nuestro sketch de arduino lo que esta haciendo es: Recibe los valores an\u00e1logos, Los covierte en digital y Los imprime en el Serial. Despu\u00e9s Processing lee estos valores y los re interpreta en una gr\u00e1fica.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/processing-graph2.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/processing-graph2.png\" alt=\"\" class=\"wp-image-231\" title=\"processing graph\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Sketch de Arduino:<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">void setup() {\n  \/\/ initialize the serial communication:\n  Serial.begin(9600);\n}\n\nvoid loop() {\n  \/\/ send the value of analog input 0:\n  Serial.println(analogRead(A0));\n  \/\/ wait a bit for the analog-to-digital converter\n  \/\/ to stabilize after the last reading:\n  delay(10);\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch de Processing:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Graphing sketch\n\n \/\/ This program takes ASCII-encoded strings\n \/\/ from the serial port at 9600 baud and graphs them. It expects values in the\n \/\/ range 0 to 1023, followed by a newline, or newline and carriage return\n\n \/\/ Created 20 Apr 2005\n \/\/ Updated 18 Jan 2008\n \/\/ by Tom Igoe\n \/\/ This example code is in the public domain.\n\n import processing.serial.*;\n\n Serial myPort;        \/\/ The serial port\n int xPos = 1;         \/\/ horizontal position of the graph\n\n void setup () {\n \/\/ set the window size:\n size(400, 300);        \n\n \/\/ List all the available serial ports\n println(Serial.list());\n \/\/ I know that the first port in the serial list on my mac\n \/\/ is always my  Arduino, so I open Serial.list()[0].\n \/\/ Open whatever port is the one you're using.\n myPort = new Serial(this, Serial.list()[0], 9600);\n \/\/ don't generate a serialEvent() unless you get a newline character:\n myPort.bufferUntil('\\n');\n \/\/ set inital background:\n background(0);\n }\n void draw () {\n \/\/ everything happens in the serialEvent()\n }\n\n void serialEvent (Serial myPort) {\n \/\/ get the ASCII string:\n String inString = myPort.readStringUntil('\\n');\n\n if (inString != null) {\n \/\/ trim off any whitespace:\n inString = trim(inString);\n \/\/ convert to an int and map to the screen height:\n float inByte = float(inString);\n inByte = map(inByte, 0, 1023, 0, height);\n\n \/\/ draw the line:\n stroke(127,34,255);\n line(xPos, height, xPos, height - inByte);\n\n \/\/ at the edge of the screen, go back to the beginning:\n if (xPos &gt;= width) {\n xPos = 0;\n background(0);\n }\n else {\n \/\/ increment the horizontal position:\n xPos++;\n }\n }\n }<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Sensor Piezo-el\u00e9ctrico<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">El sensor Piezo-el\u00e9ctrico se conecta all pin an\u00e1logo 0. Conecta tambi\u00e9n un Led al Pin 13 para ver su reaccion al tocar el piezo-el\u00e9ctrico.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/knock_bb.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/knock_bb-276x300.png\" alt=\"\" class=\"wp-image-316\" title=\"knock_bb\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">https:\/\/www.youtube.com\/embed\/7GICWRVXtP8<br><strong>Sketch Piezo-el\u00e9ctrico:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Estas constantes no cambian:\nconst int ledPin = 13;      \/\/ led conectado al pin digital 13\nconst int knockSensor = A0; \/\/ Un piezo conectado al pin analogo 0\nconst int threshold = 100;  \/\/ El valor de threshold que determina cuando hay entrada de sonido.\n\n\/\/ Estas variables cambian:\nint sensorReading = 0;      \/\/ variables para almacenar el valor que lee del sensor pin\nint ledState = LOW;         \/\/ variables para almacenar el ultimo estado del Led, para parpadear la luz\n\nvoid setup() {\n pinMode(ledPin, OUTPUT); \/\/ declara que e ledPin es una salida\n Serial.begin(9600);       \/\/ usamos el puerto serial\n}\n\nvoid loop() {\n  \/\/ lee el sensor y almacena el valor en la variable sensorReading:\n  sensorReading = analogRead(knockSensor);    \n\n  \/\/ si la lectura del sensor es mayor que el threshold:\n  if (sensorReading &gt;= threshold) {\n    \/\/ nos da el estado del ledPin:\n    ledState = !ledState;  \n    \/\/ actualiza el estado del LED:        \n    digitalWrite(ledPin, ledState);\n    \/\/ Envia la palabra \"Knock!\" al ordenador, en una nueva linea\n    Serial.println(\"Knock!\");        \n  }\n  delay(100);  \/\/ retardo para evitar sobre recarga en la memoria del puerto serial\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Instrumento MIDI con sensor Piezo-el\u00e9ctrico<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/la-foto-1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/la-foto-1-300x225.jpg\" alt=\"piezo bombo\" class=\"wp-image-457\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bombo de Bater\u00eda activado con un sensor Piezo-el\u00e9ctrico v\u00eda MIDI con Hairless, Arduino y Logic.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Instumento Midi con Sensor Piezoel\u00e9ctrico y Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/gLyUKWQG8oY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sketch Bombo MIDI:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Guerda el umbral de sensibilidad que disparar\u00e1 la acci\u00f3n\nint Umbral;\nvoid setup()\n{\n pinMode(5, OUTPUT); \n pinMode(6, OUTPUT); \n pinMode(7, OUTPUT); \n pinMode(8, OUTPUT); \n pinMode(19, INPUT); \n \/\/ Establece el baud rate del MIDI;\n Serial.begin(115200);\n\n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void loop()\n{ \n Umbral=analogRead(5);\/\/Lee el valor del pote para establecer la sensibilidad<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">if(analogRead(4)&gt;Umbral){\n digitalWrite(8,HIGH);\n Serial.write( byte(0x9F));\n Serial.write( byte(35)); \/\/Key Number para percusion 35 bombo\n Serial.write( byte(127)); \/\/Velocidad (es el volumen. De 0 a 127)\n delay(220);} \n else{\n digitalWrite(8,LOW);\n }\n\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Sensor de fuerza<\/h1>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/fuerza.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/fuerza-300x225.jpg\" alt=\"fuerza\" class=\"wp-image-508\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con el mismo&nbsp;<strong>Sketch<\/strong>&nbsp;de Arduino del<strong>&nbsp;Bombo<\/strong>, vamos a conectar un sensor de fuerza en el&nbsp;<strong>pin analogico 4<\/strong>. En este caso hacemos un&nbsp;<strong>divisor de tension<\/strong>&nbsp;con nuestro sensor de fuerza y una resistencia de 10 kohm. De la misma manera que hicimos en el ejemplo del fotoresistor.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/virtualColorMixer_bb.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/virtualColorMixer_bb-300x207.png\" alt=\"virtualColorMixer_bb\" class=\"wp-image-509\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Sensor de Temperatura y Arduino<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Para este ejemplo utilizamos un sensor de temperatura LM35.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/FDWWCKVHKBG733D.LARGE_.jpg\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/FDWWCKVHKBG733D.LARGE_.jpg\" alt=\"FDWWCKVHKBG733D.LARGE\" class=\"wp-image-300\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El LM35 proporciona 10mV por cada grado cent\u00edgrado y una resoluci\u00f3n de 0,5 grados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El LM35 est\u00e1 calibrado en grados Kelvin y trabaja en un rango que va desde&nbsp;<em>233,15 \u00baK a 373,15 \u00baK<\/em>&nbsp;(cuyo equivalente en cent\u00edgrados ser\u00eda de&nbsp;<em>-40 \u00baC a +100 \u00baC<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los datos recibidos por el pin an\u00e1logo de arduino los enviamos al serial para poderlos leer. El convertidor anal\u00f3gico digital de la placa Arduino es de 10bits y su resoluci\u00f3n es de 5V\/1024, esto es, algo menos de 5mv.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vi\u00e9ndolo de frente, el primer pin es un pin va a 5v, el segundo pin va al pin anal\u00f3gico 1 y el tercer pin va a tierra (GND).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch Arduino:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\/* Termometro\n\n\nint val;\nint tempPin = 1;\n\nvoid setup()\n{\n Serial.begin(9600);\n}\nvoid loop()\n{\n val = analogRead(tempPin);\n float mv = ( val\/1024.0)*5000; \n float cel = mv\/10;\n float farh = (cel*9)\/5 + 32;\n\n Serial.print(\"TEMPRATURE = \");\n Serial.print(cel);\n Serial.print(\"*C\");\n Serial.println();\n delay(1000);\n\n\/* Descomenta esto para obtener los grados Farenhit \n Serial.print(\"TEMPRATURE = \");\n Serial.print(farh);\n Serial.print(\"*F\");\n Serial.println();\n\n\n*\/\n}\n\n\n<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Captura-de-pantalla-2015-07-13-a-las-19.40.47.png\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Captura-de-pantalla-2015-07-13-a-las-19.40.47.png\" alt=\"Captura de pantalla 2015-07-13 a la(s) 19.40.47\" class=\"wp-image-301\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Encendiendo y apagando un LED con un Push botton<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Conectamos el LED al Pin digital 13 y el Push botton al pin digital 2. El Push botton esta conectado tambi\u00e9n a 5v y a GND a trav\u00e9s de una resistencia de 10 kohms como lo muestra la siguiente imagen:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/button.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/button-300x116.png\" alt=\"\" class=\"wp-image-317\" title=\"button\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-provider-youtube wp-block-embed-youtube\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Encendiendo y apagando un led con un Push botton y Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/PitAWZtTNkY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En el siguiente sketch el LED se enciende cuando presionamos el boton y se apaga cuando lo volvemos a presionar:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sketch:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int inPin = 2;         \/\/ input pin Push botton\nint outPin = 13;       \/\/ output pin LED\n\nint state = HIGH;      \/\/ the current state of the output pin\nint reading;           \/\/ the current reading from the input pin\nint previous = LOW;    \/\/ the previous reading from the input pin\n\n\/\/ the follow variables are long's because the time, measured in miliseconds,\n\/\/ will quickly become a bigger number than can be stored in an int.\nlong time = 0;         \/\/ the last time the output pin was toggled\nlong debounce = 200;   \/\/ the debounce time, increase if the output flickers\n\nvoid setup()\n{\n  pinMode(inPin, INPUT);\n  pinMode(outPin, OUTPUT);\n}\n\nvoid loop()\n{\n  reading = digitalRead(inPin);\n\n  \/\/ if the input just went from LOW and HIGH and we've waited long enough\n  \/\/ to ignore any noise on the circuit, toggle the output pin and remember\n  \/\/ the time\n  if (reading == HIGH &amp;&amp; previous == LOW &amp;&amp; millis() - time &gt; debounce) {\n    if (state == HIGH)\n      state = LOW;\n    else\n      state = HIGH;\n\n    time = millis();    \n  }\n\n  digitalWrite(outPin, state);\n\n  previous = reading;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En el siguiente Sketch el LED se enciende solo mientras presionamos el botton.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sketch:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const int buttonPin = 2;     \/\/ the number of the pushbutton pin\nconst int ledPin =  13;      \/\/ the number of the LED pin\n\n\/\/ variables will change:\nint buttonState = 0;         \/\/ variable for reading the pushbutton status\n\nvoid setup() {\n  \/\/ initialize the LED pin as an output:\n  pinMode(ledPin, OUTPUT);      \n  \/\/ initialize the pushbutton pin as an input:\n  pinMode(buttonPin, INPUT);    \n}\n\nvoid loop(){\n  \/\/ read the state of the pushbutton value:\n  buttonState = digitalRead(buttonPin);\n\n  \/\/ check if the pushbutton is pressed.\n  \/\/ if it is, the buttonState is HIGH:\n  if (buttonState == HIGH) {    \n    \/\/ turn LED on:    \n    digitalWrite(ledPin, HIGH);  \n  }\n  else {\n    \/\/ turn LED off:\n    digitalWrite(ledPin, LOW);\n  }\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Controlando video cropping con un sensor LDR<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Haciendo Video Cropping con un fotorresistor y Arduino con PD. Arduino utiliza Standard Firmata y Puredata mi patch de cropping_multiple con arduino_test.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Arduino y Video Cropping con Fotorresistor\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/Qi1b8tdITac?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Por VJ. du_art<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Patch de Puredata: Cropping-multiple<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/crop.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2011\/03\/crop-300x252.jpg\" alt=\"\" class=\"wp-image-311\" title=\"crop\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Arduino y MIDI<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo vemos como comunicar Arduino con cualquier software o interfaz que se comunique a traves de MIDI.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para comunicar via MIDI, Arduino y cualquier programa que reciba eventos MIDI, existen diferentes formas de re-interpretar la informaci\u00f3n. En este ejemplo vemos una posibilidad que da muy buenos resultados.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Arduino y Midi para controlar Logic, Garageband, Main stage\" width=\"500\" height=\"375\" src=\"https:\/\/www.youtube.com\/embed\/Ju6_oQpOZ9Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pasos a seguir:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1. En este ejemplo conectamos nuestra placa Arduino via USB al ordenador. Nuestra placa Arduino enviara informaci\u00f3n al ordenador la cual tendra que interpretar como MIDI. Para esto utilizaremos el Driver IAC de nuestro Mac.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1) Abre Audio Midi Setup (Aplicaciones &gt; Utilidades &gt; Configuraci\u00f3n de Audio MIDI (Audio MIDI Setup).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2) En el Menu busca &gt; Ventana &gt; Mostrar ventana MIDI<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3) Deberias ver algo parecido a esto:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/IAC.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/IAC.jpg\" alt=\"\" class=\"wp-image-372\" title=\"IAC\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">4) haz Doble click en \u201cIAC Driver\u201d para abrirlo, y veras algo as\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/IAC-2.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/IAC-2.jpg\" alt=\"\" class=\"wp-image-373\" title=\"IAC 2\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">5) Para usar el IAC Driver, primero debes encenderlo. Haz Click seleccionando y activando el cuadro que est\u00e1 junto a \u201cdispositivo conectado\u201d o en ingles \u201cdevice is online\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/iac-3.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/iac-3.jpg\" alt=\"\" class=\"wp-image-374\" title=\"iac 3\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">6) En la lista de Puertos, cada uno es un cable MIDI virtual, por los cuales vas a tener 16 canales para enviar MIDI! Puedes renombrarlos para saber cual es cual. (Para renombrarlos, haz doble-click en el puerto y pon un nuevo nombre).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si no les cambias el nombre por defecto se llamaran Bus IAC 1 y Bus IAC 2. En este caso los he dejado asi para utilizar el 1 como entrada MIDI y el 2 como salida MIDI.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ya haz activado tus puertos IAC!!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/iac-4.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/iac-4.jpg\" alt=\"\" class=\"wp-image-375\" title=\"iac 4\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">7) Ahora para poder comunicarnos entre Arduino y nuestro Software MIDI, que puede ser Logic, o Garage Band o Main Stage o el que quieras, necesitaras un software que funcione de puente. Es posible hacerlo con Pure Data o Max\/MSP o Processing. En este caso utilizaremos un software mas sencillo que ya esta programado y configurado para esta funci\u00f3n. Se llama hairless-midiserial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo puedes descargar aqui:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/projectgus.github.com\/hairless-midiserial\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/projectgus.github.com\/hairless-midiserial\/<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/hairless-MIDI.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/hairless-MIDI.jpg\" alt=\"\" class=\"wp-image-376\" title=\"hairless MIDI\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">8) En el Serial port debes poner el puerto USB donde esta conectada tu placa ARDUINO y en MIDI Out y MIDI In poner los puertos IAC que haz activado anteriormente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si tienes dudas puedes ver el puerto USB de tu placa Arduino en el menu de tu software Arduino &gt; Herramientas &gt; Puerto Serial:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/hairless-2.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/hairless-2.jpg\" alt=\"\" class=\"wp-image-377\" title=\"hairless 2\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Debes tener en cuenta que a diferencia de otros programas que trabajan con MIDI, Hairless midi serial trabaja con un baud rate de 115200 baudios. Asi que en el Serial.begin de tu Sketch debes poner 115200 baudios de velocidad de sampleo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">9) Copia el siguiente sketch y cargalo a tu placa Arduino. (Ten en cuenta que siempre que cargues un sketch, debe estar \u201cnot connected\u201d, o apagado el puerto serial del \u201cHairless midi serial\u201d, sino Arduino puede tener conflictos con la carga del programa ya que esta utilizando el mismo puerto USB para cargar y para transmitir datos).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch MIDI_Arduino:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">void setup() {\n  \/\/  MIDI baud rate para comunicarse con hairless:\n  Serial.begin(115200);\n}\n\nvoid loop() {\n  \/\/ Se comunica con el sistema Hexadecimal traducido a numeros midi. \n  \/\/Toca notas desde C-1 (0x30) hasta C-4 (0x54):\n\n  for (int note = 0x30; note &lt; 0x54; note ++) {\n    \/\/La nota en el canal 1 (0x90), el valor de la nota (note), con una velocidad media (0x45):\n    noteOn(0x90, note, 0x45);\n    delay(100);\n    \/\/La nota en el canal 1 (0x90),  el valor de la nota (note), velocidad de silencio (0x00):\n    noteOn(0x90, note, 0x00);   \n    delay(100);\n  }\n}\n\n\/\/  Toca una nota MIDI.  \nvoid noteOn(int cmd, int pitch, int velocity) {\n  Serial.write(cmd);\n  Serial.write(pitch);\n  Serial.write(velocity);\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">10) Una vez cargado el Sketch en tu placa Arduino, ya puedes abrir o conectar o encender tu \u201cHairless midi serial\u201d. Vas a ver como Arduino funciona como controlador Master y se comunica con tu software Logic, o Garage Band o Main Stage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">11) Si quieres empezar a componer tu musica en arduino para que la interprete Logic por ejemplo, tienes que tener en cuenta que Arduino interpreta valores Hexadecimales y estos valores son enviados a Logic traducidos como numeros MIDI. Te puedes ayudar con las siguientes Tablas de conversion:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/www.tonalsoft.com\/pub\/news\/pitch-bend.aspx\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.tonalsoft.com\/pub\/news\/pitch-bend.aspx<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/www.disfrutalasmatematicas.com\/flash.php?path=2Fnumeros\/..\/images\/convert-binary-hex.swf&amp;w=798&amp;h=198&amp;col=23FFFFFF&amp;title=Conversorbinario2Fdecimal2Fhexadecimal\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.disfrutalasmatematicas.com\/flash.php?path=2Fnumeros\/..\/images\/convert-binary-hex.swf&amp;w=798&amp;h=198&amp;col=23FFFFFF&amp;title=Conversorbinario2Fdecimal2Fhexadecimal<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/midi-arduino.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/midi-arduino.jpg\" alt=\"\" class=\"wp-image-378\" title=\"midi arduino\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Comunicando Multiples Arduinos entre si por los puertos I2C TWI<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Las dos placas se comunican a trav\u00e9s de los puertos I2C TWI. El Pin Analogo 4 (SDA) y el Pin Analogo 5 (SCL). Con la Libreria Wire de Arduino.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/Arudiuno_i2c_pins.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/Arudiuno_i2c_pins.png\" alt=\"\" class=\"wp-image-381\" title=\"Arudiuno_i2c_pins\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Como conectar multiples Arduinos entre si?\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/3SYyRHkP5f8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conexiones:<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/Master_Sender_bb.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/Master_Sender_bb-300x118.png\" alt=\"\" class=\"wp-image-385\" title=\"Master_Sender_bb\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch Arduino Maestro:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;Wire.h&gt;\n\n#define BETA_ARDUINO !(defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100)\n\nconst byte MY_ADDRESS = 25;      \/\/ me\nconst byte SLAVE_ADDRESS = 42;   \/\/ slave #42\n\nvoid setup () \n{\n  Wire.begin (MY_ADDRESS);  \/\/ initialize hardware registers etc.\n}  \/\/ end of setup\n\nvoid loop() \n{\n\n  unsigned int value = 1234;  \/\/ ie. 0x04 0xD2\n\n  Wire.beginTransmission (0);  \/\/ broadcast to all\n\n\/\/  OR:  Wire.beginTransmission (SLAVE_ADDRESS);    \/\/ send to a certain one\n\n#if BETA_ARDUINO    \n  Wire.send (highByte (value));    \n  Wire.send (lowByte (value));  \n#else\n  Wire.write (highByte (value));   \n  Wire.write (lowByte (value)); \n#endif\n\n  byte err = Wire.endTransmission();  \/\/ non-zero means error\n\n  delay (100);  \/\/ wait 0.1 seconds\n}   \/\/ end of loop<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch Arduino Esclavo:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;Wire.h&gt;\n\n#define BETA_ARDUINO !(defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100)\n\nconst byte MY_ADDRESS = 42;   \/\/ me\nconst byte LED = 13;          \/\/ LED is on pin 13\n\nbyte ledVal = 0;\n\nvoid receiveEvent (int howMany)\n {\n\n \/\/ we are expecting 2 bytes, so check we got them\n if (howMany == 2)\n   {\n   int result;\n\n#if BETA_ARDUINO  \n   result = Wire.receive ();\n   result &lt;&lt;= 8;\n   result |= Wire.receive ();\n#else\n   result = Wire.read ();\n   result &lt;&lt;= 8;\n   result |= Wire.read ();\n#endif\n\n   \/\/ do something with result here ...\n\n   \/\/ for example, flash the LED  \n\n   digitalWrite(LED, ledVal ^= 1);   \/\/ flash the LED\n\n   }  \/\/ end if 2 bytes were sent to us\n\n \/\/ throw away any garbage\n while (Wire.available () &gt; 0) \n {\n#if BETA_ARDUINO  \n   Wire.receive ();\n#else\n   Wire.read ();\n#endif\n\n }  \/\/ end while available\n\n}  \/\/ end of receiveEvent\n\nvoid setup () \n{\n  Wire.begin (MY_ADDRESS);  \/\/ initialize hardware registers etc.\n\n  TWAR = (MY_ADDRESS &lt;&lt; 1) | 1;  \/\/ enable broadcasts to be received\n\n  Wire.onReceive(receiveEvent);  \/\/ set up receive handler\n  pinMode(LED, OUTPUT);          \/\/ for debugging, allow LED to be flashed\n}  \/\/ end of setup\n\nvoid loop () \n{\n}  \/\/ end of loop<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Comunicando Multiples Arduinos entre si por los puertos RX y TX<\/h1>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Arduino conexion serial RX y TX\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/Vfbf11Ul8HA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/ArduinoChainedSerial.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/ArduinoChainedSerial.png\" alt=\"ArduinoChainedSerial\" class=\"wp-image-428\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hay que conectar la salida TX (Pin 1) del primer Arduino a la entrada RX (Pin 0) del segundo Arduino y asi sucesivamente en cascada con todos los Arduinos que tengamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ademas conectamos entre si los 5V de todos los Arduinos y entre si los GND de todos los Arduinos para alimentar todas las placas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada Arduino en este ejemplo esta conectado a un led al pin 8 que va en serie a una resistencia de 220 ohm para proteger la placa y el LED, cerrando el circuito en GND.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/CascadingSerial_D15_A.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/CascadingSerial_D15_A.png\" alt=\"CascadingSerial_D15_A\" class=\"wp-image-429\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sketch:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/* Blink en Cascada\n Host---&gt;RX(device 0)TX---&gt;RX(device 1)TX---&gt;RX(device 2)TX---&gt; Etc\n*\/\nconst int ledPin = 8; \/\/ 13 for standard arduino\nvoid setup() {\n \/\/ initialize serial:\n Serial.begin(9600);<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ make the pins outputs:\n pinMode(ledPin, OUTPUT);\n digitalWrite( ledPin, LOW );\n}\nvoid blinkFor( long ms )\n{\n digitalWrite( ledPin, HIGH );\n delay( ms );\n digitalWrite( ledPin, LOW );\n}\nvoid loop()\n{\n\n int ch, digit;\n long d = 0;\n\n \/\/ wait for something to come in\n if( Serial.available() == 0 ) return;\n \/\/ read in a character. \n \/\/ If it's within '1' .. '9', set the timer for that number of seconds.\n ch = Serial.read();\n if( ch &gt;='0' &amp;&amp; ch &lt;= '9' ) {\n digit = ch - '0';\n\n if( digit &gt; 0 ) {\n d = digit * 1000;\n }\n }\n\n if( ch == 'b' ) {\n \/\/ turn off for 1\/4 second, send down echo immediately\n Serial.write( 'b' );\n blinkFor( 250 );\n }\n\n if( d &gt; 0 ) {\n \/\/ turn on the LED for the requested number of seconds\n blinkFor( d );\n \/\/ cascade out our digit, one less than ourselves\n Serial.write( (digit - 1) + '0' );\n }\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Otro ejemplo:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comunicaci\u00f3n de 2 placas Arduino a trav\u00e9s de los pines seriales TX y RX para la dimerizaci\u00f3n de un Led con un potenciometro v\u00eda puerto serial.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Arduino TX y RX Potenciometro y Dimerizaci\u00f3n de Led\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/nJX1mW2fD3w?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sketch Prueba Transmisor:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Transmisor:<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">int Value5;\n int val5;<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void setup() {\n \/\/ inicia puerto serial\n Serial.begin(19200);\n }<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void loop() {\n \/\/ lee el pin analogo 5 con un potenciometro\n Value5 = analogRead(5);<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ remap 0 \/ 255 de la variable Value5\n val5 = map(Value5, 0, 1023, 0, 255);<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ envia el valor al puerto serial\n Serial.write(byte(val5));<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Sketch Prueba Receptor:<\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Receptor\n byte incomingByte;<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void setup() {\n \/\/ inicia el puerto serial\n Serial.begin(19200);<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ declara el pin 11 como OUTPUT - LED\n pinMode (11, OUTPUT);\n }<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">void loop() {<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ lee si hay bytes disponibles en el puerto serial\n if (Serial.available()) {<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ da el valor al \u2018incomingByte\u2019 variable\n incomingByte = Serial.read();<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ escribe el valor en el pin 11\n analogWrite(11, int(incomingByte));<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">}\n }<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Led RGB<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"LED RGB controlado con Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/PSe8KeUOgm0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Conectamos el Led RGB con 3 resistencias de 33o ohm y a su vez a los pines digitales 9, 10, 11 y la pata mas larga del LED a tierra.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/fritzing.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/fritzing.jpg\" alt=\"fritzing\" class=\"wp-image-424\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>sketch:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">    \/*\n    RGB LED \n    *\/\n\n    int redPin = 11;\n    int greenPin = 10;\n    int bluePin = 9;\n\n    void setup()\n    {\n    pinMode(redPin, OUTPUT);\n    pinMode(greenPin, OUTPUT);\n    pinMode(bluePin, OUTPUT);\n    }\n\n    void loop()\n    {\n    setColor(255, 0, 0); \/\/ red\n    delay(1000);\n    setColor(0, 255, 0); \/\/ green\n    delay(1000);\n    setColor(0, 0, 255); \/\/ blue\n    delay(1000);\n    setColor(255, 255, 0); \/\/ yellow\n    delay(1000);\n    setColor(80, 0, 80); \/\/ purple\n    delay(1000);\n    setColor(0, 255, 255); \/\/ aqua\n    delay(1000);\n    }\n\n    void setColor(int red, int green, int blue)\n    {\n    analogWrite(redPin, red);\n    analogWrite(greenPin, green);\n    analogWrite(bluePin, blue);\n    }<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Sensor de humedad<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para el desarrollo de sistemas de control de riego automatas podemos utilizar un sensor de humedad conectado a Arduino que controle una valvula solenoide.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/2014-05-22-16.44.46.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/2014-05-22-16.44.46-300x225.jpg\" alt=\"2014-05-22 16.44.46\" class=\"wp-image-522\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">    \/\/ Sensor de Humedad           \n   \n \/\/ Conectamos el sensor de la siguiente forma: \n \/\/ GND -&gt; GND \n \/\/ VCC -&gt; 5V \n \/\/ DAT -&gt; A0 \n \n \n \n \/\/ Descripci\u00f3n de valores del Sensor \n \n \/\/ 0 -300 Seco \n \/\/ 300-700 H\u00famedo \n \/\/ 700-950 En Agua \n \n int Valor; \n \n void setup(){ \n Serial.begin(9600); \n \n } \n \n void loop(){ \n Serial.print(\"Sensor de Humedad valor:\"); \n Valor = analogRead(0); \n Serial.print(Valor); \n if (Valor &lt;= 300) \n Serial.println(\" Seco, necesitas regar\"); \n if ((Valor &gt; 300) and (Valor &lt;= 700)) \n Serial.println(\" Humedo, no regar\"); \n if (Valor &gt; 700) \n Serial.println(\" Encharcado\"); \n delay(1000);  \n       }<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/www.youtube.com\/embed\/JHvdE5uLOIw<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/www.youtube.com\/embed\/O1nSkqaLhBE<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">SENSOR DE HUMEDAD Y TEMPERATURA \u2013 DHT y RHT03<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/DHT11Sensor.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/DHT11Sensor.jpg\" alt=\"DHT11Sensor\" class=\"wp-image-523\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Las conexiones son muy sencillas: Vcc a +5V, GND a GND y Data a una entrada digital, en nuestro caso la entrada 2.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/2014-08-22-18.09.53.jpg\"><img decoding=\"async\" src=\"https:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/2014-08-22-18.09.53-1024x768.jpg\" alt=\"2014-08-22 18.09.53\" class=\"wp-image-521\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Para realizar el programa de Arduino nos vamos a apoyar en la librer\u00eda DHT de&nbsp;Adafruit&nbsp;para descargar directamente hacer click&nbsp;<a href=\"https:\/\/github.com\/adafruit\/DHT-sensor-library\" target=\"_blank\" rel=\"noreferrer noopener\">aqu\u00ed.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez descargada tendremos que guardar los archivos \u201cDHT.cpp\u201d y \u201cDHT.h\u201d en una carpeta que llamaremos DHT dentro de \u201c\/Documents\/<em>Arduino<\/em>\/libraries\/\u201d en MAC o \u201c<em>My Documents<\/em>\\Arduino\\libraries\\\u201d en Windows.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/www.youtube.com\/embed\/G4oKFOzCSV4<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El c\u00f3digo para leer el sensor con Arduino es el siguiente:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">#include \"DHT.h\"\n\n#define DHTPIN 2 \/\/ Pin digital\n\n\/\/ Escogemos segun el tipo de sensor que usamos\n\/\/#define DHTTYPE DHT11 \/\/ DHT 11 \n#define DHTTYPE DHT22 \/\/ DHT 22 (AM2302)\n\/\/#define DHTTYPE DHT21 \/\/ DHT 21 (AM2301)\n\n\nDHT dht(DHTPIN, DHTTYPE);\n\nvoid setup() {\n Serial.begin(9600); \n Serial.println(\"Lee Sensor RHT03!\");\n \n dht.begin();\n}\n\nvoid loop() {\n \/\/ espera 2 segundos entre una medida y otra.\n delay(2000);\n\n \/\/ Cada lectura de humedad y temperatura tarda 250 millisegundos!\n \n float h = dht.readHumidity();\n \/\/ Lee la temperatura en Celsius\n float t = dht.readTemperature();\n \/\/ Lee la temperatura en Fahrenheit\n float f = dht.readTemperature(true);\n \n \/\/ verifica si hay error en la lectura (intenta de nuevo).\n if (isnan(h) || isnan(t) || isnan(f)) {\n Serial.println(\"Error en la lectura del sensor!\");\n return;\n }\n\n \/\/ Computa el indice de calor\n \/\/ Envia la temperatura en Fahrenheit!\n float hi = dht.computeHeatIndex(f, h);\n\n Serial.print(\"Humedad: \"); \n Serial.print(h);\n Serial.print(\" %\\t\");\n Serial.print(\"Temperatura: \"); \n Serial.print(t);\n Serial.print(\" *C \");\n Serial.print(f);\n Serial.print(\" *F\\t\");\n Serial.print(\"indice de Calor: \");\n Serial.print(hi);\n Serial.println(\" *F\");\n}\n<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">YF-S201 Contador de agua \/ Sensor de Efecto Campo (Hall) \u2013 Negro<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">El sensor de flujo es un dispositivo que, instalado en l\u00ednea con una tuber\u00eda, permite determinar cu\u00e1ndo est\u00e1 circulando un l\u00edquido o un gas. Se compone de un cuerpo de v\u00e1lvula de pl\u00e1stico, un rotor de agua, y un sensor de efecto Hall. Su velocidad cambia con la diferente tasa de flujo. El sensor de efecto Hall emite la se\u00f1al de impulso que corresponde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El sensor de efecto Hall o simplemente sensor Hall o sonda Hall (denominado seg\u00fan Edwin Herbert Hall) se sirve del efecto Hall para la medici\u00f3n de campos magn\u00e9ticos o corrientes o para la determinaci\u00f3n de la posici\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si fluye corriente por un sensor Hall y se aproxima a un campo magn\u00e9tico que fluye en direcci\u00f3n vertical al sensor, entonces el sensor crea un voltaje saliente proporcional al producto de la fuerza del campo magn\u00e9tico y de la corriente. Si se conoce el valor de la corriente, entonces se puede calcular la fuerza del campo magn\u00e9tico; si se crea el campo magn\u00e9tico por medio de corriente que circula por una bobina o un conductor, entonces se puede medir el valor de la corriente en el conductor o bobina.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a href=\"http:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/sku_217625_1.jpg\"><\/a><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">PAra hacer una medicion del sensor de flujo de agua con Arduino, conectamos el cable GND (Negro) a GND , Vss (Rojo) a 5V y la se\u00f1al (amarillo) al pin digital 2, este \u00faltimo con una resistencia en serie de 10kohm.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/water_flow.jpg\"><img decoding=\"async\" src=\"https:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/water_flow.jpg\" alt=\"water_flow\" class=\"wp-image-527\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Sketch:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">volatile int NbTopsFan; \/\/mide el valor ascendente de la se\u00f1al\nint Calc; \nint hallsensor = 2; \/\/El Pin Digital que va al sensor\n\nvoid rpm () \/\/la funcion que interrumpe \n{ \n NbTopsFan++; \/\/La funcion que mide el valor acendente de la se\u00f1al del sensor de efecto hall\n}\n\nvoid setup() \/\/\n{ \n pinMode(hallsensor, INPUT); \/\/inicializa el pin 2 como entrada\n Serial.begin(9600); \/\/inicializa la tasa de lectura\n attachInterrupt(0, rpm, RISING); \/\/el interrupt esta attached\n} \n\n\nvoid loop () \n{\n NbTopsFan = 0; \/\/Pone en 0 el NbTops para comenzar a calcular\n sei(); \/\/Activa los interrupts\n delay (1000); \/\/Espera 1 segundo\n cli(); \/\/desactiva los interrupts\n Calc = (NbTopsFan * 60 \/ 7.5); \/\/(Pulso de frequencia x 60) \/ 7.5Q, = tasa de flujo en L\/hora \n Serial.print (Calc, DEC); \/\/Imprime el numero calculado anteriormente\n Serial.print (\" L\/hora\\r\\n\"); \/\/imprime \"L\/hora\" y devuelve una nueva linea\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">AttachInterrupt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una de las formas comunes de interactuar con cosas que suceden \u201cfuera\u201d de nuestro control es por ejemplo monitorear el estado de las l\u00edneas. Dentro de nuestro \u201cloop\u201d principal podemos leer continuamente el valor de una l\u00ednea de entrada y ejecutar por medio de una condicional un c\u00f3digo especifico en caso de que detectemos un cambio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El problema de este m\u00e9todo es que el c\u00f3digo se vuelve sumamente complejo cuando tenemos que monitorear muchas cosas o cuando nuestro loop principal simplemente tiene que hacer cosas que toman demasiado tiempo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En esta entrada vamos a comprender como utilizar las interrupciones externas del Arduino. Esto nos ser\u00e1 de mucha utilidad para interactuar ya sea con el usuario o con otros dispositivos de hardware que emitan \u201cse\u00f1ales\u201d que nos permitan saber que un evento ha sucedido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Una cosa a la vez\u2026<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los Arduino basados en los microcontroladores Amtel AVR pueden ejecutar una sola secuencia de instrucciones a la vez. El problema de esto es por ejemplo, si ustedes est\u00e1n enviando n\u00fameros a su display y luego el usuario presiona un bot\u00f3n. Si nuestro ciclo toma mucho tiempo en ejecutarse puede que pase mucho tiempo antes de que podamos leer la l\u00ednea de nuestro usuario y perdamos el evento, o tal vez simplemente estamos ocupando un ciclo en hacer algo interesante. Esto es una \u201cdesventaja\u201d de microcontroladores sencillos y es algo con lo que las computadoras han tenido que convivir pr\u00e1cticamente desde que fueron inventadas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfComo manejar eventos externos?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Afortunadamente los dise\u00f1adores de microcontroladores pensaron en este problema hace bastante tiempo y de ah\u00ed surgieron las famosas \u201cinterrupciones\u201d. Las interrupciones (omitiendo muchos detalles) funcionan de manera muy sencilla: Existe una lista de eventos internos o externos que genera ya sea el microcontrolador o una l\u00ednea externa y al detectarse estos eventos el microcontrolador detiene la secuencia de comandos que est\u00e1 ejecutando. Luego de esto, llama al c\u00f3digo definido previamente que se encarga de \u201cmanejar\u201d esa interrupci\u00f3n en espec\u00edfico y luego, cuando ha terminado de \u201catender la interrupci\u00f3n\u201d regresa a ejecutar la secuencia principal que hab\u00eda dejado pausada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tal vez no es una soluci\u00f3n perfecta pero nos permite \u201catender\u201d cosas que consideramos importantes por ejemplo cuando un dispositivo externo env\u00eda datos v\u00eda serial o cuando una l\u00ednea de interrupci\u00f3n cambia su valor de 0 a 1 o viceversa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En Arduino podemos asociar el c\u00f3digo de las interrupciones a trav\u00e9s de la funci\u00f3n attachInterrupt().<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En Arduino Uno tenemos los pines digitales 2 (numero 0) y 3 (numero 1) con los cuales podemos hacer&nbsp;<a href=\"http:\/\/arduino.cc\/en\/Reference\/AttachInterrupt\" target=\"_blank\" rel=\"noreferrer noopener\">attachInterrupt()&nbsp;<\/a>con informacion llamada: Interrupt Service Routine (ISR).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">NOTA<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Se debe declarar la variable que vamos a modificar con attachinterrupt como&nbsp;<em>volatile<\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Syntax<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">attachInterrupt(interrupt, funcion, modo)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">modos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LOW<\/strong>&nbsp;activa el interrupt cuando el pin esta en low,<\/li>\n\n\n\n<li><strong>CHANGE<\/strong>&nbsp;activa el interrupt cuando el pin cambia de valor<\/li>\n\n\n\n<li><strong>RISING&nbsp;<\/strong>activa el interrupt cuando el pin cambia de low a high,<\/li>\n\n\n\n<li><strong>FALLING<\/strong>&nbsp;activa el interrupt cuando el pin cambia de high a low.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/Captura-de-pantalla-2014-08-28-a-las-15.32.24.png\"><img decoding=\"async\" src=\"https:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/Captura-de-pantalla-2014-08-28-a-las-15.32.24.png\" alt=\"Captura de pantalla 2014-08-28 a las 15.32.24\" class=\"wp-image-554\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Libreria de tiempo<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Hay una libreria para programar tiempo, que la podemos descargar en este link:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/playground.arduino.cc\/code\/time\" target=\"_blank\" rel=\"noreferrer noopener\">Libreria Time<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">descargamos la libreria y la poenmos dentro de \u201c\/Documents\/<em>Arduino<\/em>\/libraries\/\u201d en MAC o \u201c<em>My Documents<\/em>\\Arduino\\libraries\\\u201d en Windows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Reiniciamos arduino y cargamos el siguiente sketch:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sketch Time_Alarma.pde<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"> \/*\n * Este ejemplo llama la funcion alarma a las 8:30 y a las 17:45\n * y simultaneamente enciende la luz durante la noche y la apaga en la ma\u00f1ana\n * Otra alarma que solo funciona los Sabados a las 8:29:30\n *\n * un Timer es llamado cada 15 segundos\n * Otro timer es llamado solo una vez a los 10 segundos iniciar programa\n *\n * El reloj esta ajustado con fecha y hora Sabado Jan 1 2011  8:29 am\n *\/\n \n#include &lt;Time.h&gt;\n#include &lt;TimeAlarms.h&gt;\nint led=13;\n\nvoid setup()\n{\n  Serial.begin(9600);\n  pinMode(led, OUTPUT);\n  setTime(8,29,0,1,1,11); \/\/ El reloj lo pone en Sabado a las 8:29:00am de Enero 1 2011\n \n  \/\/Crea alarmas \n  Alarm.alarmRepeat(8,30,0, amanecer);  \/\/ 8:30 todos los dias\n  Alarm.alarmRepeat(17,45,0,tarde);    \/\/ 17:45 todos los dias\n  Alarm.alarmRepeat(dowSaturday,8,29,30,semanal);  \/\/ 8:30:30 los Sabados \n\n \n  Alarm.timerRepeat(15, Repite);   \/\/ Timer es llamado cada 15 segundos    \n  Alarm.timerOnce(10, solounavez);   \/\/ Timer es llamado solo una vez a los 10 segundos\n}\n\nvoid  loop(){  \n  relojDigital();\n  Alarm.delay(1000); \/\/Espera 1 segundo para iniciar el reloj\n}\n\n\/\/ Funciones de llamado de alarma\nvoid amanecer(){\n  Serial.println(\"Alarma: - apaga luz\"); \n  digitalWrite(led,LOW);  \n}\n\nvoid tarde(){\n  Serial.println(\"Alarma: - enciende luz\"); \n  digitalWrite(led,HIGH); \n \/\/ delay(5000); El tiempo no se detiene gracias a la funcion\n  \/\/digitalWrite(led,LOW); \n}\n\nvoid semanal(){\n  Serial.println(\"Alarma: - Hoy es Sabado\");      \n}\n\n\/\/void ExplicitAlarm(){\n  \/\/Serial.println(\"Alarma: - hora y fecha dada\");       \n\/\/}\n\nvoid Repite(){\n  Serial.println(\"Reporta cada 15 segundos\");         \n}\n\nvoid solounavez(){\n  Serial.println(\"Solo una vez a los 10 segundos\");  \n}\n\nvoid relojDigital()\n{\n  \/\/ Imprime la hora\n  Serial.print(hour());\n  imprimeDigitos(minute());\n  imprimeDigitos(second());\n  Serial.println(); \n}\n\nvoid imprimeDigitos(int digitos)\n{\n  Serial.print(\":\");\n  if(digitos &lt; 10)\n    Serial.print('0');\n  Serial.print(digitos);\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Abrimos el monitor Serial y vemos la impresion del reloj y de las alarmas que hemos programado.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a href=\"http:\/\/www.artinteractivo.com\/wp-content\/uploads\/2013\/07\/Captura-de-pantalla-2014-09-11-a-las-19.42.10.png\"><\/a><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Motor servo Rotaci\u00f3n continua<\/h1>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Captura-de-pantalla-2015-07-08-a-las-17.51.18.png\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Captura-de-pantalla-2015-07-08-a-las-17.51.18-300x221.png\" alt=\"Captura de pantalla 2015-07-08 a la(s) 17.51.18\" class=\"wp-image-294\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Existen dos tipos de servo motores: normales y de giro continuo. Los servos normales se controlan con PWM y giran a una posici\u00f3n fija dependiendo en el ancho de pulso. Est\u00e1n limitados en movimiento a un rango entre 0 y 180 grados. Los servos de giro continuo se mantienen girando mientras que reciban pulsos PWM. Los m\u00e1s comunes, fabricados por Parallax, giran en una direcci\u00f3n cuando se les proporcionan pulsos por encima de 1500 microsegundos de ancho y en la contraria al darles un ancho menor al citado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sketch Motor servo Rotaci\u00f3n continua<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">int motorPin = 4;\nint boton = 12;\nint pulsador = 0;\n \/* pin digital para el servo *\/\n\nvoid setup(){\n pinMode(motorPin,OUTPUT);\n pinMode(boton,INPUT);\n \/* declara el pin digital como salida *\/\n Serial.begin(9600);\n}\n\nvoid loop(){\n pulsador=digitalRead(boton);\n \n if (pulsador == 0){\n for(int i = 0; i &lt; 100; i++);{\n \/* repite 100 veces para que veamos al servo moverse *\/\n digitalWrite(motorPin,HIGH);\n delayMicroseconds(1850);\n \/* el delay aqui mostrado establece un ancho de pulso *\/\n digitalWrite(motorPin,LOW);\n delayMicroseconds(1850);\n }\n \n }\n if(pulsador == 1){\n \n\/*\n for(int i = 0; i &lt; 100; i++);{\n \n digitalWrite(motorPin,HIGH);\n delayMicroseconds(100);\n \n digitalWrite(motorPin,LOW);\n delayMicroseconds(100);\n }\n *\/\n }\n Serial.println(pulsador);\n\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Capacitores<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Para este ejemplo tenemos que instalar las librerias correspondientes:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-CapacitiveSensor.h<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-EducationShield.h<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">y despues hay que cargarlas con:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;CapacitiveSensor.h&gt;\n#include &lt;EducationShield.h&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Sigue el led<\/h2>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Capacitores siguiendo leds con Arduino\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/1nSDHEYu-Yc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Material:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1&nbsp;Buzzer<\/li>\n\n\n\n<li>3 LEDs<\/li>\n\n\n\n<li>3 resistencias de 220 ohm<\/li>\n\n\n\n<li>3 resistencias de 1Mohm<\/li>\n\n\n\n<li>6 cables negros<\/li>\n\n\n\n<li>12 cables de diferentes colores (3 largos)<\/li>\n\n\n\n<li>papel de aluminio o cualquier objeto de material conductor<\/li>\n\n\n\n<li>cinta adhesiva<\/li>\n\n\n\n<li>1 breadboard<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/2015-08-11-12.32.30.jpg\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/2015-08-11-12.32.30-765x1024.jpg\" alt=\"2015-08-11 12.32.30\" class=\"wp-image-554\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">las 3 resistencias de 1Mohm se conectan a los pads de materiales conductores como se muestra en la imagen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">van conectados a los pines (3,4,5) cada uno y por el otro extremo al pin 2 todos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El buzzer va conectado al pin 8 y a GND.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">los leds van conectados a los pines (9, 10, 11) cada uno con una resistencia de 220 o 330 ohm en serie y por el otro extremo a GND.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/2015-08-11-12.33.53.jpg\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/2015-08-11-12.33.53-765x1024.jpg\" alt=\"2015-08-11 12.33.53\" class=\"wp-image-555\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h4 class=\"wp-block-heading\">Sketch Capacitores sigue leds:<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*\nSigue el led con capacitores\n*\/\n \n#include &lt;CapacitiveSensor.h&gt;\n#include &lt;EducationShield.h&gt;\n#include &lt;Servo.h&gt;\n#include \"pitches.h\"\n \n\/\/Define los 3 LEDs\nint ledPins[] = {9, 10, 11};\nint pinCount = 3;\nVUMeter LEDs;\n \n\/\/hay 3 pads para activar\nCapacitiveSwitch pad[3];\n \n\/\/tienes 500 milisegundos para presionar el pad\nint reactTime = 500;\n \n\/\/ el buzzer conectado al pin digital 8\nMelody piezo = Melody(8);\n \nvoid setup(){\n LEDs.config(pinCount, ledPins);\n LEDs.begin();\n \n \/\/Configuracion de pads\n pad[0] = CapacitiveSwitch(2,3);\n pad[1] = CapacitiveSwitch(2,4);\n pad[2] = CapacitiveSwitch(2,5);\n pad[0].config(100);\n pad[1].config(100);\n pad[2].config(100);\n}\n \nvoid loop(){\n \/\/Espera un tiempo random antes de comenzar\n delay(random(50, 2000));\n \n \/\/escoge un objetivo aleatorio entre los 3 pads\n int target = random(0, 3);\n \/\/enciende el led correspondiente\n LEDs.on(target);\n \n \/\/si el pad corresponde al led\n if(pad[target].pressed(reactTime)){\n LEDs.off(target);\n \n \/\/toca musica ganadora\n int melody[] = { NOTE_GS4, NOTE_C5};\n int noteDurations[] = { 8, 8};\n int numberOfNotes = 2;\n piezo.play(numberOfNotes, melody, noteDurations, 1);\n }\n else{\n \/\/Sino, activa la musica de la funcion gameOver()\n gameOver();\n }\n}\n \nvoid gameOver(){\n \/\/Enciende todos los leds\n LEDs.fill(pinCount);\n \n \/\/Toca la melodia perdedora\n int melody[] = { NOTE_E2, NOTE_C2};\n int noteDurations[] = { 2, 1};\n int numberOfNotes = 2;\n piezo.play(numberOfNotes, melody, noteDurations, 1);\n \n LEDs.blinkAll(100, 10);\n LEDs.fill(0); \/\/apaga todos los leds\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Instrumento musical con capacitores<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tenemos un instrumento musical con Capacitores. Con el mismo circuito anterior cargamos el siguiente sketch:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*\nSigue el led con capacitores\n*\/\n \n#include &lt;CapacitiveSensor.h&gt;\n#include &lt;EducationShield.h&gt;\n#include &lt;Servo.h&gt;\n#include \"pitches.h\"\n \n\n\n\/\/hay 3 pads para activar\nCapacitiveSwitch pad[3];\n\n\/\/Define los 3 LEDs\nint led1=9;\nint led2=10;\nint led3=11;\n\n \n\/\/ el buzzer conectado al pin digital 8\n\n \nvoid setup(){\n\n \/\/Configuracion de pads\n pad[0] = CapacitiveSwitch(2,3);\n pad[1] = CapacitiveSwitch(2,4);\n pad[2] = CapacitiveSwitch(2,5);\n pad[0].config(100);\n pad[1].config(100);\n pad[2].config(100);\n \n pinMode(led1, OUTPUT);\n pinMode(led2, OUTPUT);\n pinMode(led3, OUTPUT);\n}\n \nvoid loop(){\n\n \n \/\/enciende el led correspondiente\n\n \/\/ led1 nota C5\n if(pad[0].pressed(600)){\n digitalWrite(led1, HIGH);\n delay(200);\n digitalWrite(led1,LOW);\n tone (8,262,200);\n \n }\n \/\/ led2 nota D5\n if(pad[1].pressed(600)){\n digitalWrite(led2, HIGH);\n delay(200);\n digitalWrite(led2,LOW);\n tone (8,294,200);\n \n }\n \/\/ led3 nota E5\n if(pad[2].pressed(600)){\n digitalWrite(led3, HIGH);\n delay(200);\n digitalWrite(led3,LOW);\n tone (8,330,200);\n \n }\n\n}\n<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vemos que utilizamos distintas maneras de escribir notas o encender los LED\u00b4s con o sin la libreria EducationShield pero el resultado es igual!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Knock knock<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tenemos dos Zumbadores o Buzzers que funcionan como transductores, uno hace la funci\u00f3n de altavoz y el otro la funci\u00f3n de micr\u00f3fono. &nbsp; Al colocar una resistencia de 1Mohm en paralelo con el circuito del micr\u00f3fono entre tierra y el Pin anal\u00f3gico A0 nuestro sensor piezoel\u00e9ctrico es bastante sensible y percibe vibraciones en solido permitiendo captar triggers de golpes. El otro Zumbador lo usamos como un altavoz conectado directamente al pin digital 8 y a tierra cerrando el circuito como lo muestra la foto siguiente:&nbsp;<a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/2015-08-12-16.27.44.jpg\"><\/a>&nbsp;&nbsp; En el Siguiente sketch Arduino Aprende el ritmo que haces y lo repite! El C\u00f3digo&nbsp;que cargamos es este:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sketch Knock Knock<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n#include &lt;EducationShield.h&gt;\n#include &lt;Servo.h&gt;\n \n\/\/El numero de golpes que pueden ser grabados\n#define MAX_KNOCKS 30\n \nPiezoKnockSensor sensor=PiezoKnockSensor(A0);\nint speaker = 8;\n \n\/\/una matriz para grabar el patron ritmico\nlong timer[MAX_KNOCKS];\n \n\/\/si comienza a grabar\nboolean started;\n \n\/\/calcula si haz terminado el patron\nlong timeoutBase;\n \n\/\/si dejas de golpear por un tiempo determinado entonces\n\/\/para de grabar\nlong timeout=2000;\n \n\/\/va trackeando el numero de golpes que vas haciendo\nint currentKnock;\n \nvoid setup(){\n \/\/define el umbral y el tiempo de activacion para activar el sensor\n \/\/el umbral define lo fuerte que golpeas,\n \/\/el tiempo de activacion define el tiempo entre golpes y si haz terminado\n \/\/para evitar falsos golpes, pero tambien limita la velocidad de los golpes.\n sensor.config(40,80);\n \n \/\/inicializa los valores\n started=false;\n timeoutBase=0;\n currentKnock=0;\n clearArray();\n}\n \nvoid loop(){\n \/\/El sensor Knock espera un tiempo corto de tiempo si detecta un golpe\n \/\/y despues comienza.\n if(sensor.knocked(10)){\n \/\/si hay un primer golpe comienza a grabar\n if(!started){\n started=true;\n }\n \n long currentTime=millis();\n \/\/resetea el \"timeout\"\n timeoutBase=currentTime;\n \/\/Guarda el tiempo en milisegundos que han \n \/\/pasado desde el ultimo golpe\n timer[currentKnock]=currentTime;\n currentKnock++;\n }\n if(started){\n \/\/si la grabacion comienza y paras\n \/\/de golpear mas del tiempo de \"timeout\", entonces\n \/\/para de grabar y lo reproduce.\n if(millis()-timeoutBase&gt;timeout){\n playback();\n \/\/reinicia los parametros\n started=false;\n clearArray();\n currentKnock=0;\n }\n }\n}\nvoid clearArray(){\n \/\/limpia los valores de la matriz\n for(int i=0;i&lt;MAX_KNOCKS;i++){\n timer[i]=0;\n }\n}\nvoid playback(){\n \/\/reproduce el patron ritmico por el otro piezo<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">for(int i=0;timer[i]!=0;i++){\n \/\/hace un tone de 440 hz durante 30 milisegundos\n tone(speaker, 440, 30);\n if(timer[i+1]){\n \/\/espera la misma cantidad de tiempo que fue detectado\n \/\/entre dos golpes\n delay(timer[i+1]-timer[i]);\n }\n }\n}&nbsp;\n\n\n\nhttps:\/\/www.youtube.com\/embed\/mqMVoKPbftI<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">Pantalla de led virtual<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Conectamos 5 LED\u00b4s del pin digital 2 al pin 6 con resistencias en serie de 220ohm o 330ohm.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Circuito:<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Foto-del-d\u00eda-12-08-15-a-las-18.40.jpg\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Foto-del-d\u00eda-12-08-15-a-las-18.40.jpg\" alt=\"Foto del d\u00eda 12-08-15 a la(s) 18.40\" class=\"wp-image-565\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Cargamos el siguiente c\u00f3digo a la placa:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sketch Pantalla de Led virtual:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;EducationShield.h&gt;\n#include &lt;Servo.h&gt;\n\/*\nAqui hacemos una matriz de LED\u00b4 que corresponde a los pines digitales del 2 al 6.\n*\/\nint ledPins[] = {2, 3, 4, 5, 6};\nint pinCount = 5;\nVUMeter vuMeter;\n \nint rowCount = 0; \/\/ Guarda las filas\nint rowLength = 22; \/\/ El ancho del mensaje, copia este mensaje a la matriz\nint delayTime = 9; \/\/tiempo que toma para mostrar la fila en milisegundos\n \n\/\/ si el mensaje es 0 devuelve LOW y si es 1 devuelve HIGH\nboolean message[5][22]={\n \/\/ H H H H O O O O L L L L A A A A\n {0,1,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0},\n {0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0},\n {0,1,1,1,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0},\n {0,1,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1,0,0,1,0,0},\n {0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,0,0,1,0,0}\n \n};\n \nvoid setup(){\n \/\/ aqui se configuran los pines del 2 al 6 (puede modificarse)\n vuMeter.config(pinCount, ledPins);\n \n vuMeter.begin(); \/\/hace el mismo pinMode, configura los LEDs como outputs\n}\n \nvoid loop(){\n \/\/ si toda la matriz se ha dibujado\n if(rowCount == rowLength) {\n rowCount = 0; \/\/ resetea el conteo de la fila\n } else {\n \/\/ muestra el mensaje\n for (int i = 0; i &lt; pinCount; i++) {\n \/\/ chequea si el mensaje es High\n if (message[i][rowCount] == 1) {\n vuMeter.on(i);\n } else {\n vuMeter.off(i);\n }\n }\n rowCount++;\n }\n \n delay(delayTime);\/\/este es el delay por fila\n \n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora movemos la protoboard con la mano con velocidad de lado a lado para que se vea el rastro de luz y vemos que se escribe la palabra \u201cHOLA\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Captura-de-pantalla-2015-08-12-a-las-19.08.01.png\"><img decoding=\"async\" src=\"https:\/\/www.arduineando.com\/wp-content\/uploads\/2014\/11\/Captura-de-pantalla-2015-08-12-a-las-19.08.01.png\" alt=\"Captura de pantalla 2015-08-12 a la(s) 19.08.01\" class=\"wp-image-566\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>IMU Digital Combo Board \u2013 6 Degrees of Freedom ITG3200\/ADXL345<\/strong><\/h1>\n\n\n\n<pre class=\"wp-block-preformatted\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/10121-01_i_ma.jpg\"><\/a>https:\/\/www.youtube.com\/embed\/yMJdvHOrd_w<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/6DOF_arduino_hookup-400x6461.png\"><\/a><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">IMU 6DOF y Processing<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">sketch:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ Arduino firmware for use with FreeSixCube processing example\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\n#include &lt;FreeSixIMU.h&gt;\n#include &lt;FIMU_ADXL345.h&gt;\n#include &lt;FIMU_ITG3200.h&gt;\n\n#define DEBUG\n#ifdef DEBUG\n#include \"DebugUtils.h\"\n#endif\n\n#include \"CommunicationUtils.h\"\n#include \"FreeSixIMU.h\"\n#include &lt;Wire.h&gt;\n\nfloat q[4]; \/\/hold q values\n\n\/\/ Set the FreeIMU object\nFreeSixIMU my3IMU = FreeSixIMU();\n\nvoid setup() {\n  Serial.begin(115200);\n  Wire.begin();\n\n  delay(5);\n  my3IMU.init();\n  delay(5);\n}\n\nvoid loop() { \n  my3IMU.getQ(q);\n  serialPrintFloatArr(q, 4);\n  Serial.println(\"\"); \/\/line break\n\n  delay(60);\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Processing:<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Sketch:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import processing.serial.*;\n\nSerial myPort;  \/\/ Create object from Serial class\n\nfinal String serialPort = \"\/dev\/tty.usbmodem411\"; \/\/ replace this with your serial port. On windows you will need something like \"COM1\".\n\nfloat [] q = new float [4];\nfloat [] hq = null;\nfloat [] Euler = new float [3]; \/\/ psi, theta, phi\n\nint lf = 10; \/\/ 10 is '\\n' in ASCII\nbyte[] inBuffer = new byte[22]; \/\/ this is the number of chars on each line from the Arduino (including \/r\/n)\n\nPFont font;\nfinal int VIEW_SIZE_X = 800, VIEW_SIZE_Y = 600;\n\nvoid setup() \n{\n  size(VIEW_SIZE_X, VIEW_SIZE_Y, P3D);\n  myPort = new Serial(this, serialPort, 115200);  \n\n  font = createFont(\"Courier\", 32); \n\n  \/*\n  float [] axis = new float[3];\n   axis[0] = 0.0;\n   axis[1] = 0.0;\n   axis[2] = 1.0;\n   float angle = PI\/2.0;\n\n   hq = quatAxisAngle(axis, angle);\n\n   hq = new float[4];\n   hq[0] = 0.0;\n   hq[1] = 0.0;\n   hq[2] = 0.0;\n   hq[3] = 1.0;\n   *\/\n\n  delay(100);\n  myPort.clear();\n  myPort.write(\"1\");\n}\n\nfloat decodeFloat(String inString) {\n  byte [] inData = new byte[4];\n\n  if (inString.length() == 8) {\n    inData[0] = (byte) unhex(inString.substring(0, 2));\n    inData[1] = (byte) unhex(inString.substring(2, 4));\n    inData[2] = (byte) unhex(inString.substring(4, 6));\n    inData[3] = (byte) unhex(inString.substring(6, 8));\n  }\n\n  int intbits = (inData[3] &lt;&lt; 24) | ((inData[2] &amp; 0xff) &lt;&lt; 16) | ((inData[1] &amp; 0xff) &lt;&lt; 8) | (inData[0] &amp; 0xff);\n  return Float.intBitsToFloat(intbits);\n}\n\nvoid readQ() {\n  if (myPort.available() &gt;= 18) {\n    String inputString = myPort.readStringUntil('\\n');\n    \/\/print(inputString);\n    if (inputString != null &amp;&amp; inputString.length() &gt; 0) {\n      String [] inputStringArr = split(inputString, \",\");\n      if (inputStringArr.length &gt;= 5) { \/\/ q1,q2,q3,q4,\\r\\n so we have 5 elements\n        q[0] = decodeFloat(inputStringArr[0]);\n        q[1] = decodeFloat(inputStringArr[1]);\n        q[2] = decodeFloat(inputStringArr[2]);\n        q[3] = decodeFloat(inputStringArr[3]);\n      }\n    }\n  }\n}\n\nvoid buildBoxShape() {\n  \/\/box(60, 10, 40);\n  noStroke();\n  beginShape(QUADS);\n\n  \/\/Z+ (to the drawing area)\n  fill(#00ff00);\n  vertex(-30, -5, 20);\n  vertex(30, -5, 20);\n  vertex(30, 5, 20);\n  vertex(-30, 5, 20);\n\n  \/\/Z-\n  fill(#0000ff);\n  vertex(-30, -5, -20);\n  vertex(30, -5, -20);\n  vertex(30, 5, -20);\n  vertex(-30, 5, -20);\n\n  \/\/X-\n  fill(#ff0000);\n  vertex(-30, -5, -20);\n  vertex(-30, -5, 20);\n  vertex(-30, 5, 20);\n  vertex(-30, 5, -20);\n\n  \/\/X+\n  fill(#ffff00);\n  vertex(30, -5, -20);\n  vertex(30, -5, 20);\n  vertex(30, 5, 20);\n  vertex(30, 5, -20);\n\n  \/\/Y-\n  fill(#ff00ff);\n  vertex(-30, -5, -20);\n  vertex(30, -5, -20);\n  vertex(30, -5, 20);\n  vertex(-30, -5, 20);\n\n  \/\/Y+\n  fill(#00ffff);\n  vertex(-30, 5, -20);\n  vertex(30, 5, -20);\n  vertex(30, 5, 20);\n  vertex(-30, 5, 20);\n\n  endShape();\n}\n\nvoid drawCube() {  \n  pushMatrix();\n  translate(VIEW_SIZE_X\/2, VIEW_SIZE_Y\/2 + 50, 0);\n  scale(5, 5, 5);\n\n  \/\/ a demonstration of the following is at \n  \/\/ http:\/\/www.varesano.net\/blog\/fabio\/ahrs-sensor-fusion-orientation-filter-3d-graphical-rotating-cube\n  rotateZ(-Euler[2]);\n  rotateX(-Euler[1]);\n  rotateY(-Euler[0]);\n\n  buildBoxShape();\n\n  popMatrix();\n}\n\nvoid draw() {\n  background(#000000);\n  fill(#ffffff);\n\n  readQ();\n\n  if (hq != null) { \/\/ use home quaternion\n    quaternionToEuler(quatProd(hq, q), Euler);\n    text(\"Disable home position by pressing \\\"n\\\"\", 20, VIEW_SIZE_Y - 30);\n  }\n  else {\n    quaternionToEuler(q, Euler);\n    text(\"Point FreeIMU's X axis to your monitor then press \\\"h\\\"\", 20, VIEW_SIZE_Y - 30);\n  }\n\n  textFont(font, 20);\n  textAlign(LEFT, TOP);\n  text(\"Q:\\n\" + q[0] + \"\\n\" + q[1] + \"\\n\" + q[2] + \"\\n\" + q[3], 20, 20);\n  text(\"Euler Angles:\\nYaw (psi)  : \" + degrees(Euler[0]) + \"\\nPitch (theta): \" + degrees(Euler[1]) + \"\\nRoll (phi)  : \" + degrees(Euler[2]), 200, 20);\n\n  drawCube();\n}\n\nvoid keyPressed() {\n  if (key == 'h') {\n    println(\"pressed h\");\n\n    \/\/ set hq the home quaternion as the quatnion conjugate coming from the sensor fusion\n    hq = quatConjugate(q);\n  }\n  else if (key == 'n') {\n    println(\"pressed n\");\n    hq = null;\n  }\n}\n\n\/\/ See Sebastian O.H. Madwick report \n\/\/ \"An efficient orientation filter for inertial and intertial\/magnetic sensor arrays\" Chapter 2 Quaternion representation\n\nvoid quaternionToEuler(float [] q, float [] euler) {\n  euler[0] = atan2(2 * q[1] * q[2] - 2 * q[0] * q[3], 2 * q[0]*q[0] + 2 * q[1] * q[1] - 1); \/\/ psi\n  euler[1] = -asin(2 * q[1] * q[3] + 2 * q[0] * q[2]); \/\/ theta\n  euler[2] = atan2(2 * q[2] * q[3] - 2 * q[0] * q[1], 2 * q[0] * q[0] + 2 * q[3] * q[3] - 1); \/\/ phi\n}\n\nfloat [] quatProd(float [] a, float [] b) {\n  float [] q = new float[4];\n\n  q[0] = a[0] * b[0] - a[1] * b[1] - a[2] * b[2] - a[3] * b[3];\n  q[1] = a[0] * b[1] + a[1] * b[0] + a[2] * b[3] - a[3] * b[2];\n  q[2] = a[0] * b[2] - a[1] * b[3] + a[2] * b[0] + a[3] * b[1];\n  q[3] = a[0] * b[3] + a[1] * b[2] - a[2] * b[1] + a[3] * b[0];\n\n  return q;\n}\n\n\/\/ returns a quaternion from an axis angle representation\nfloat [] quatAxisAngle(float [] axis, float angle) {\n  float [] q = new float[4];\n\n  float halfAngle = angle \/ 2.0;\n  float sinHalfAngle = sin(halfAngle);\n  q[0] = cos(halfAngle);\n  q[1] = -axis[0] * sinHalfAngle;\n  q[2] = -axis[1] * sinHalfAngle;\n  q[3] = -axis[2] * sinHalfAngle;\n\n  return q;\n}\n\n\/\/ return the quaternion conjugate of quat\nfloat [] quatConjugate(float [] quat) {\n  float [] conj = new float[4];\n\n  conj[0] = quat[0];\n  conj[1] = -quat[1];\n  conj[2] = -quat[2];\n  conj[3] = -quat[3];\n\n  return conj;\n}<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Para mas informaci\u00f3n mira el siguiente link:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/bildr.org\/2012\/03\/stable-orientation-digital-imu-6dof-arduino\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/bildr.org\/2012\/03\/stable-orientation-digital-imu-6dof-arduino\/<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">The BYTE keyword is no longer suppoted<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">La palabra clave BYTE ya no est\u00e1 soportada<\/h1>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/IDE10.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/IDE10.png\" alt=\"IDE10\" class=\"wp-image-430\"\/><\/a><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">A\u00f1adir multiples entradas y salidas a tu Arduino.<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Arduino Mux:<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/09832-01b_i_ma.jpg\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/09832-01b_i_ma.jpg\" alt=\"\" class=\"wp-image-382\" title=\"09832-01b_i_ma\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La puedes comprar en el siguiente link:<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.sparkfun.com\/products\/9832\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">e-Health Sensor Platform for Arduino and Raspberry Pi [Biometric \/ Medical Applications]<\/h1>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/e_health_planta.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/e_health_planta.png\" alt=\"\" class=\"wp-image-384\" title=\"e_health_planta\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/todos_elementos.png\"><img decoding=\"async\" src=\"https:\/\/www.andresduarte.com\/wp-content\/uploads\/2012\/11\/todos_elementos.png\" alt=\"\" class=\"wp-image-383\" title=\"todos_elementos\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em><\/em><em><strong>Si te gusta el Tutorial de arduino puedes hacer una donaci\u00f3n al autor:<\/strong><\/em><\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><em>Was this post helpfull?<\/em><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Make a donation!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2024 Artinteractivo.&nbsp;<a target=\"_blank\" href=\"https:\/\/www.phonewear.fr\/\" rel=\"noreferrer noopener\">Theme by phonewear<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.facebook.com\/vjduart\/\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/twitter.com\/vjduart\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/plus.google.com\/u\/0\/108367070333887505084\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/channel\/UCY-uJBxlkrThhX2R6a5PVkQ\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/in\/andres-felipe-duarte-marin-aa2a272b?trk=nav_responsive_tab_profile\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/app.ventafun.com\/Andres-Felipe-Duarte-M\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"#\">\u2191<\/a><\/p>\n\n\n\n<ul id=\"sidr-id-menu-tutoriales_arduino\" class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.arduineando.com\/\">Tutoriales<\/a>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.arduineando.com\/tutoriales_arduino\/\">Tutoriales-Arduino<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/xbee-y-arduino\/\">Xbee y Arduino<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/arduino-ethernet\/\">Arduino Ethernet<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/arduino-pro-mini-2\/\">Arduino Pro mini<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/instalar-arduino-en-windows\/\">Instalar Arduino en Windows<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/spark-core-y-ubidots\/\">Spark Core y Ubidots<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/sensor-interruptor-magnetico-groove\/\">Sensor Interruptor magnetico \u2013 Groove<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/spark-core-arduino-wifi\/\">Spark Core (Arduino + Wifi)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/sparkcore-temperatura-y-humedad\/\">Sparkcore temperatura y Humedad<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/maxmsp-jitter\/\">Max\/MSP Jitter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/raspberry-pi\/\">Raspberry Pi<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/manualdetecnicafotografica.com\/?hop=vjduart\">Fotogr\u00e1fia<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/bitbloq-arduino\/\">Bitbloq-Espa\u00f1ol<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/bitbloq-english\/\">Bitbloq-English<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/scratch-arduino\/\">Scratch-Arduino<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/impresion-3d\/\">Impresi\u00f3n 3D<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.artinteractivo.com\/\">Mas Tutoriales<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\">Proyectos<\/a>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.arduineando.com\/kinect-piano-virtual\/\">Kinect Piano virtual<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/kinect-mapping-sobre-cuarpo\/\">Kinect Mapping sobre cuerpo<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/bateria-piezos-arduino-y-ableton\/\">Bateria Piezos, Arduino y Ableton<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.arduineando.com\/ledstrip-controled-with-matrix\/\">Ledstrip controled with Matrix<\/a><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/www.artinteractivo.com\/\">Art interactivo<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.andresduarte.com\/\">Contacto<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Tutoriales-Arduino Tutorial de Arduino: Arduino&nbsp;es una plataforma de&nbsp;hardware libre, basada en una&nbsp;placa&nbsp;con un&nbsp;microcontrolador&nbsp;y un&nbsp;entorno de desarrollo, dise\u00f1ada para facilitar el uso de la electr\u00f3nica en proyectos multidisciplinares. El&nbsp;hardware&nbsp;consiste en una placa con un microcontrolador&nbsp;Atmel AVR&nbsp;y puertos de&nbsp;entrada\/salida. Los microcontroladores m\u00e1s usados son el&nbsp;Atmega168,&nbsp;Atmega328,&nbsp;Atmega1280,&nbsp;ATmega8&nbsp;por su sencillez y bajo coste que permiten el desarrollo de m\u00faltiples dise\u00f1os. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"class_list":["post-144","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/www.artinteractivo.com\/fr\/wp-json\/wp\/v2\/pages\/144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.artinteractivo.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www.artinteractivo.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www.artinteractivo.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.artinteractivo.com\/fr\/wp-json\/wp\/v2\/comments?post=144"}],"version-history":[{"count":3,"href":"http:\/\/www.artinteractivo.com\/fr\/wp-json\/wp\/v2\/pages\/144\/revisions"}],"predecessor-version":[{"id":414,"href":"http:\/\/www.artinteractivo.com\/fr\/wp-json\/wp\/v2\/pages\/144\/revisions\/414"}],"wp:attachment":[{"href":"http:\/\/www.artinteractivo.com\/fr\/wp-json\/wp\/v2\/media?parent=144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}