Archivo de la categoría: Arduino

Arduino en la Educación

Arduino nace en Interaction Design Institute Ivrea (IDII) en Italia como una placa programable barata y sencilla de usar para utilizar en proyectos de diseño interactivo. Arduino ya nació en el entorno de la educación, pero rápidamente se extendió su uso en otros muchos entornos como IoT, Arte, Impresoras 3D, drones, robótica, industria, domótica, etc…

El equipo estuvo formado por Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino y David Mellis y debe su nombre de Arduino a un bar de Ivrea.

A lo largo de estos años Arduino ha sido la base de miles de proyectos tecnológicos. Y, actualmente, más de una década después, Arduino continúa proporcionando hardware y software de código abierto para desarrollar nuevos proyectos relacionados con las tecnologías que más están evolucionando en los últimos años como las impresoras en 3D, los drones o la robótica.

Al tratarse de hardware libre la placa Arduino se popularizó muy rápidamente y se creó una comunidad muy activa que ayudó a que creciese de forma exponencial el uso de las placas Arduino. Este respaldo de la comunidad mundial en movimiento y expansión, que incluye a programadores, aficionados, diseñadores y educadores que han ido introducido numerosos desarrollos que han permitido ampliar el tipo de software utilizado para programar nuevo hardware. Siempre inspirada en la filosofía de la cultura libre y la compartición del conocimiento, contribuyendo así al origen del Movimiento Maker.

Arduino, ha permitido aplicar la electrónica al alcance de todas las personas para proyectos de educación, arte, entretenimiento y para soluciones industriales que ayudan en la construcción de ciudades inteligentes.

Arduino es una herramienta que nos sirve para entender cómo funcionan las cosas en el mundo digital que vivimos actualmente.

Con Arduino podemos fácilmente:

  • Fomentar el uso de la programación en el aula
  • Usar de la programación en escuelas e institutos utilizando programación para ser capaces de desarrollar un pensamiento creativo y computacional.
  • Hacer proyectos interactivos que faciliten el aprendizaje de cualquier asignatura sin estar relacionada con la tecnología.
  • Iniciarnos en el mundo de la electrónica y robótica.
  • Construir componentes electrónicos a nuestro gusto.
  • Interaccionar con el mundo exterior mediante actuadores en función de las variables ambientales que leemos mediante los sensores.

Actualmente casi nadie duda de que hay que impartir nociones de programación y robótica en las clases de tecnología, y hay mucho interés además por la conexión que esto tiene con las STEM/STEAM, tan de moda hoy en día (Science, Technology, Engineering, Arts, Mathematics) y en este ambiente Arduinos una de las herramientas más adecuadas, por su bajo costo, sencillez, posibilidades de expansión y soporte de la comunidad.

Hay centros que han sabido encarrilar por libre esta cuestión, pero el problema es que no hay guías de conjunto y lo más adecuado es un itinerario definido para varios años en tecnología, más que cursos de tecnología improvisados sobre la marcha.

Si resolver el problema de la tecnología en un curso es complicado, diseñar un itinerario que cubra, diversas edades, por ejemplo, desde los 12 hasta los 18 años, es algo muy complicado para la mayoría de los centros, porque es difícil avanzar sin gente que conozca la tecnología.

Arduino es una herramienta que permite hacer realidad las ideas que surjan en el aula. Por ejemplo, en un clase de educación vial se propone que para enseñar a la gente a respetar los semáforos se haga un invento en el que si alguien pasa en rojo se dispare un chorro de agua. Con Arduino se podría desarrollar un prototipo con unos sensores, una electrválvula y unos leds para hacer el semáforo.

ARDUINO, herramienta para la educación en el entorno tecnológico: http://fundaciontelefonica.com.ec/conferencias/arduino-herramienta-para-la-educacion-en-el-entorno-tecnologico/

Y no solo Arduino sino también Raspberry Pi en Educación: https://www.raspberrypi.org/education/

Empresas riojanas que usan la tecnología para la Educación:

Arduino Education

Arduino Education es un equipo de Arduino dedicado a la educación formado por expertos en educación, desarrolladores de contenido, ingenieros y diseñadores de interacción. Se centran en el desarrollo de la próxima generación de programas STEAM y apoyo a las necesidades de profesores y estudiantes.

La tecnología de Arduino se usa para:

  • Jugar, en la escuela primaria como juguetes con tecnología Arduino para introducir al alumno en el aprendizaje físico, lógica, creación de habilidades y resolución de problemas.
  • Enseñar y aprender en la escuela secundaria para usar con técnicas innovadoras para estudios cros-curriculares
  • Desarrollo en las universidades, Arduino está ampliamente usado en los campos de la ingeniería, IoT, robótica, arte y diseño entre algunos de ellos.

Articulo de dcuartielles https://www.interempresas.net/Tecnologia-aulas/Articulos/160095-Buenos-dias-toma-tu-placa-y-montala.html

Lo que pasa en las clases: http://www.elconfidencial.com/tecnologia/2017-01-28/arduino-mini-pc-programacion-educacion_1322251/

From upper secundary to university by David Cuartielles: https://www.youtube.com/watch?v=hoJjwDOsJbs  

Arduino at Heart

El programa Arduino at Heart está diseñado para fabricantes y compañías que desean que sus productos sean fácilmente reconocibles según la tecnología de Arduino. El programa está disponible para cualquier producto que incluye un procesador que actualmente es compatible con Arduino.

Más información https://www.arduino.cc/en/ArduinoAtHeart/Products

STEM/STEAM

El término STEM es el acrónimo de los términos en inglés Science, Technology, Engineering and Mathematics (Ciencia, Tecnología, Ingeniería y Matemáticas). El término fue acuñado por la National Science Foundation (NSF) en los años 90. El concepto “Educación STEM” (del inglés STEM Education) se ha desarrollado como una nueva manera de enseñar conjuntamente Ciencia, Matemáticas y Tecnología (en general, no solo informática) con dos características bien diferenciadas:

  • Enseñanza-aprendizaje de Ciencia, Tecnología, Ingeniería y Matemáticas de manera integrada en lugar de como áreas de conocimiento compartimentadas. Por instrucción integrada se entiende cualquier programa en el que hay una asimilación explícita de conceptos de dos o más disciplinas.
  • Con un enfoque de Ingeniería en cuanto al desarrollo de conocimientos teóricos para su posterior aplicación práctica, enfocados siempre a la resolución de problemas tecnológicos.

Más información: https://es.wikipedia.org/wiki/Educaci%C3%B3n_STEM

La palabra STEAM está formada por las iniciales de una serie disciplinas consideradas imprescindibles para formarse en la sociedad actual. Concretamente: las ciencias, la tecnología, la ingeniería, el arte y las matemáticas (del inglés: science, technology, engineering, arts y mathematics). Es decir, añadir las artes al término STEM.

Tradicionalmente ha existido una separación muy marcada entre las disciplinas científico-tecnológicas, las sociolingüísticas y las artísticas. El enfoque STEAM ha logrado romper esta separación para lograr inculcar en la educación esa visión transversal de disciplinas tan necesaria en la sociedad actual.

Este enfoque educativo viene acompañado además del crecimiento del movimiento maker, que parte de la cultura DIY (Do It Yourself o Hazlo tú mismo). Esta visión consiste en dotar a las personas de la capacidad de crear sus propios objetos, con frecuencia usando la tecnología.

Aprovechando este movimiento, el enfoque STEAM incluye en su planteamiento la idea de aprender haciendo. Como han demostrado numerosas investigaciones: lo que se lee se recuerda, lo que se hace se aprende. Esta afirmación parte de la premisa de que para aprender es necesario comprender el contenido, mientras que recordar sólo implica un proceso de memorización que no requiere la comprensión. Y la manipulación de los objetos implícita en el movimiento maker es la mejor forma de facilitar esta comprensión activa de su funcionamiento.

Pensamiento Computacional

¿Qué es?: Es una habilidad que permite resolver problemas aprovechando la potencia de dispositivos con capacidad de cómputo, como los ordenadores o los teléfonos móviles inteligentes.

Otras definiciones de pensamiento computacional han ido surgiendo en la literatura científica desde entonces. Entre las más aceptadas se encuentran la de Aho y la de la Royal Society:

  • El pensamiento computacional es el proceso que permite formular problemas de forma que sus soluciones pueden ser representadas como secuencias de instrucciones y algoritmos.
  • El pensamiento computacional es el proceso de reconocimiento de aspectos de la informática en el mundo que nos rodea, y aplicar herramientas y técnicas de la informática para comprender y razonar sobre los sistemas y procesos tanto naturales como artificiales.

¿Por qué? Teniendo en cuenta que vivimos en un mundo cada vez más digital, esta habilidad resulta fundamental para la vida en sociedad en el siglo XXI y, por tanto, para jóvenes en edad escolar.

Según esta definición operativa, el pensamiento computacional es un proceso de resolución de problemas que incluye las siguientes características:

  • Formular problemas de forma que se permita el uso de un ordenador y otras herramientas para ayudar a resolverlos.
  • Organizar y analizar lógicamente la información.
  • Representar la información a través de abstracciones como los modelos y las simulaciones.
  • Automatizar soluciones haciendo uso del pensamiento algorítmico (estableciendo una serie de pasos ordenados para llegar a la solución).
  • Identificar, analizar e implementar posibles soluciones con el objetivo de lograr la combinación más efectiva y eficiente de pasos y recursos.
  • Generalizar y transferir este proceso de resolución de problemas para ser capaz de resolver una gran variedad de familias de problemas.

Más información: http://code.educalab.es/

Situación en España: http://code.educalab.es/situacion-en-espana/

Arduino es la herramienta que nos permite saltar de la programación en el ordenador a la programación del entorno, leyendo a través de los sensores e interactuando mediantes los actuadores.

Computación Física (Physical Computing)

La computación física es el campo de la computación que estudia la conexión entre el mundo físico y los ordenadores. Esta conexión es bi-direccional, es decir, puede consistir en sensar información del entorno y enviarla a ordenadores para su procesado o bien, el uso de información para controlar motores, solenoides, sistemas de calor y otros dispositivos capaces de actuar sobre el entorno. Del mismo modo que a los dispositivos que pueden medir el entorno los llamamos sensores, a los que pueden actuar sobre el mismo, los denominamos actuadores.

La computación física se centra en diseñar dispositivos, objetos e incluso entornos que permitan establecer un canal de comunicación entre el mundo físico y el mundo virtual. Aunque esto suene a algo relacionado con el futuro, la realidad es que llevamos conviviendo con esta disciplina mucho tiempo. Solo tenemos que pensar en un ordenador o en un dispositivo móvil. Estos dispositivos ponen en contacto nuestro mundo, el mundo físico, y el mundo virtual de las máquinas y ordenadores.

El diálogo se realiza a través de interfaces hardware como un teclado, ratón, micrófono, pantallas, altavoces etc… La finalidad de la computación física es diseñar estas interfaces para que sean capaces de detectar alteraciones en el medio físico y traducirlas a señales que entiendan las máquinas. Esto se hace tanto a través de software como de hardware.

Arduino es una potente herramienta para ayudar a los estudiantes y profesores en la enseñanza de robótica y physical computing (https://en.wikipedia.org/wiki/Physical_computing) que se refiere al diseño y construcción de sistema físicos que usan una mezcla de software y hardware para medir e interactuar con el medio que le rodea.

Más información en:

Physical Computing en wikipedia: https://en.wikipedia.org/wiki/Physical_computing

Impresionante curso de Tom Igoe sobre Arduino: https://itp.nyu.edu/physcomp/

MOOC computación física:

Conceptos relacionados

  • Learning by Doing
  • Learning by Making
  • Aprendizaje por Proyectos
  • Flipped Classromm

Presentación Curso Arduino Docentes

Justificación

Cada día cobra más importancia el conocimiento de la programación y dispositivos programables, por tanto, se pretende dotar a los docentes de formación para desarrollar en el aula nuevas metodologías basadas en las tecnologías de aprendizaje y conocimiento. Este curso de iniciación, tomará la programación y el uso de dispositivos programables como herramientas formativas en el aula, más concretamente el uso y programación de dispositivos Arduino.

Objetivos

El objetivo de este curso es que el alumno obtenga las bases de la plataforma Arduino y sea capaz de realizar proyectos simples para su uso en el aula.

  • Iniciar a los docentes en el uso y programación de dispositivos Arduino
  • Conocer las posibilidades de estos dispositivos
  • Comprender los conceptos básicos asociados.

En este curso el alumno también aprenderá los conceptos del hardware libre, microcontroladores, el mundo maker y DIY para su aplicación en el aula.

Requisitos

Este curso parte desde cero, por lo que no son necesarios unos conocimientos previos, pero sí es recomendable conocimientos básicos de programación en Scratch o LEGO.

Es recomendable un conocimiento medio de Inglés puesto que gran parte de la documentación está en Inglés.

DIRIGIDO A: Profesorado de Ed. Primaria con conocimientos de programación en Scratch o LEGO. Profesorado de Ed. Secundaria.

PLAZAS OFERTADAS: 20

Metodología

El curso se compone de una combinación de teoría y práctica que establecen las bases necesarias para entender la plataforma Hardware y Software de Arduino, con una duración de 10 horas.

Los recursos utilizados para la realización de este curso son:

Además están disponibles otros recursos para ampliar información:

Para interactuar en el curso se puede hacer mediante:

  • Twitter con el hashtag #aprendiendoarduino
  • En el blog poniendo comentarios en los post con la documentación del curso
  • Correo a aprendiendoarduino@gmail.com
  • Preguntando en clase

Para realizar las prácticas de este curso se incluye un Arduino Starter Kit (https://www.arduino.cc/en/Main/ArduinoStarterKit) que contiene un Arduino Uno, una serie de sensores y actuadores y diversos elementos electrónicos necesarios para realizar las prácticas y proyectos.

Todo el material entregado es en préstamo y debe cuidarse al máximo, a la hora del montaje de las prácticas se seguirán las instrucciones para evitar dañar los componentes.

La documentación está disponible on line con el objetivo de mantenerla actualizada y no como un documento físico que se queda obsoleto al día siguiente. Además la documentación irá creciendo durante el curso y después de finalizar el curso seguirá estando disponible para todos.

Toda la documentación y código es liberado con licencia Creative Commons.

Reconocimiento – NoComercial – CompartirIgual (by-nc-sa): No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

Aprendiendo Arduino by Enrique Crespo is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

Calendario del Curso

Fecha Horario Ponente
08/05/2018 17:30 – 20:30 Enrique Crespo
09/05/2018 17:30 – 20:30 Enrique Crespo
12/05/2018 10:00 – 14:00 Arduino Day (Charlas, talleres y presentaciones)

Contenidos

  • Fomento del uso de la programación en el aula con el uso de dispositivos Arduino.
  • Uso de la programación en escuelas e institutos utilizando programación para ser capaces de desarrollar un pensamiento creativo y computacional.
  • Arduino en la Educación.
  • Robótica educativa básica.
  • Kits Educativos Basados en Arduino.
  • Instalación Software Arduino y primeros pasos.
  • Creación de un proyecto de ejemplo.
  • Muestra de trabajos realizados por alumnos con Arduino.
  • Documentar Proyectos Open Source
  • Fablabs y Makerspaces en la Educación

En los talleres del sábado:

  • Herramientas y recursos pedagógicos basados en Arduino para profesores.
  • Programación visual con Arduino.

Certificación

Para tener derecho a certificación, de acuerdo con la Orden 9/08, (BOR de 6 de mayo de 2008), la evaluación de los participantes se hará teniendo en cuenta su asistencia continua y activa, así como la adecuada realización de los trabajos que se propongan. Las faltas de asistencia, independientemente de la causa, no podrán superar el 15% de la duración total de la fase presencial.

Acerca de Enrique Crespo

El autor del curso es Enrique Crespo. Llevo trabajando con Arduino desde el año 2011 y en el año 2014 empecé mi andadura como profesor de Arduino y otros temas relacionados. Desde entonces he impartido muchos cursos presenciales de Arduino, talleres y conferencias en diversos lugares. También colaboro en el makerspace de la Universidad de la Rioja UR-maker.

Todos los cursos, talleres y conferencias que he impartido puedes verlos en https://www.aprendiendoarduino.com/, donde publico toda la documentación y código.

Twitter @jecrespo: https://twitter.com/jecrespom

Linkedin: https://www.linkedin.com/in/enriquecrespo/

Contacto

Para cualquier consulta durante el curso y en cualquier otro momento mediante email: aprendiendoarduino@gmail.com

Twitter @jecrespo: https://twitter.com/jecrespom

Y más información sobre el curso y el autor: http://www.aprendiendoarduino.com/acerca-de/

Presentaciones

Arduino puede usarse en docencia desde primaria, secundaria, bachillerato, Formación profesional de casi cualquier tipo, Universidad (no solo en carreras técnicas) y en el ámbito laboral/profesional, con casi infinitas aplicaciones.

  • ¿En qué nivel de educación eres docente?
  • ¿Qué asignaturas impartes?
  • ¿Tienes experiencia en programación, incluida visual tipo scratch?
  • ¿Tienes algún proyecto donde usar Arduino en el aula?

Uso de Motores con Arduino

Motor DC Básico

Mover un motor DC variando la velocidad y sentido mediante un potenciómetro.

Basado en http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/

Esquema de conexión.

Señales mandadas desde Arduino:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio25-MotorDC_Basico

Ver las señales reales con un osciloscopio en los pines 9 y 10 y en la alimentación del motor.

Mover Servo

Controlar la posición de un servo con un potenciómetro.

Esquema de conexión:

Esquemático:

Tutorial: http://arduino.cc/en/Tutorial/Knob

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio27-Servo

Barrido con Servo

Programar un barrido continuo del 0 a 180º en un servo. Activar y desactivar el barrido con una pulsación de un botón. p.e. activación de un limpiaparabrisas. Hacer tres velocidades de barrido, cada pulsación sube de velocidad y la cuarta lo para.

Tutorial: http://arduino.cc/en/Tutorial/Sweep

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio28-Barrido_Servo

Servo Serial

Controlar la posición del servo como en el ejercicio “Mover servo” pero en lugar de hacerlo con un potenciómetro, hacerlo desde el puerto serie mandando el ángulo al que debe ir. Desde el monitor serie pregunta la posición y se manda un valor entre 0 y 180.

De la misma forma que controlamos desde el puerto serie, se puede extender a controlar el servo desde una aplicación en un ordenador o desde una página web.

Esquema de conexión:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio29-Servo_Serial

Mover un Servo con un Acelerómetro

Una IMU (Inertial Measurement Unit) es un dispositivo capaz de medir la fuerza (aceleración) y la velocidad. Generalmente consta de un Acelerómetro y un Giroscopio. Por lo tanto una IMU no mide ángulos, por lo menos no directamente, requiere algunos cálculos.

Un dispositivo I2C muy interesante es el MPU-6050 que nos sirve para probar e introducirnos en el mundo de los giroscopios y acelerómetros.

Para esta práctica vamos a utilizar una Breakout board bastante típica llamada GY-521, que incluye la IMU MPU-6050 y un regulador de tensión, con lo que podemos alimentar a tanto 3.3V como a 5V.

El siguiente diagrama muestra la orientación de los ejes de sensibilidad y la polaridad de rotación.

El acelerómetro mide la aceleración. La aceleración puede expresarse en 3 ejes: X, Y y Z, las tres dimensiones del espacio. Por ejemplo, si mueves la IMU hacia arriba, el eje Z marcará un cierto valor. Si es hacia delante, marcará el eje X, etc. La gravedad de la Tierra tiene una aceleración de aprox. 9.8 m/s², perpendicular al suelo como es lógico. Así pues, la IMU también detecta la aceleración de la gravedad terrestre. Gracias a la gravedad terrestre se pueden usar las lecturas del acelerómetro para saber cuál es el ángulo de inclinación respecto al eje X o eje Y.

Supongamos que la IMU esté perfectamente alineada con el suelo. Entonces, como puedes ver en la imagen, el eje Z marcará 9.8, y los otros dos ejes marcarán 0. Ahora supongamos que giramos la IMU 90 grados. Ahora es el eje X el que está perpendicular al suelo, por lo tanto marcará la aceleración de la gravedad.

Si sabemos que la gravedad es 9.8 m/s², y sabemos qué medida dan los tres ejes del acelerómetro, por trigonometría es posible calcular el ángulo de inclinación de la IMU. Una buena fórmula para calcular el ángulo es:

Dado que el ángulo se calcula a partir de la gravedad, no es posible calcular el ángulo Z (giro sobre si mismo) con esta fórmula ni con ninguna otra. Para hacerlo se necesita otro componente: el magnetómetro, que es un tipo de brújula digital. El MPU-6050 no lleva, y por tanto nunca podrá calcular con precisión el ángulo Z. Sin embargo, para la gran mayoría de aplicaciones sólo se necesitan los ejes X e Y.

Esquema de conexión IMU:

Esquema conexión servo:

Mover el servo en función del ángulo en el eje x obtenido de la IMU.

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio30-Servo_IMU

Motor Paso a Paso

Mover un motor paso a paso modelo 28BYJ-48 con su adaptador basado en el chip ULN2003A.

El 28BYJ-48 tiene un paso de 5.625 grados (64 pasos por vuelta). El reductor interno tiene una relación de 1/64. Combinados, la precisión total es de 4096 pasos por vuelta, equivalente a un paso de 0.088º, que es una precisión muy elevada.

Es un motor paso a paso unipolar con las siguientes características:

  • Tensión nominal de entre 5V y 12 V.
  • 4 Fases.
  • Resistencia 50 Ω.
  • Par motor de 34 Newton / metro más o menos 0,34 Kg por cm.
  • Consumo de unos 55 mA.
  • 64 pasos por vuelta (con medios pasos).
  • Reductora de 1 / 64.

Datasheet: http://robocraft.ru/files/datasheet/28BYJ-48.pdf

Vamos a usar la secuencia de medios pasos. Con esta secuencia conseguimos una precisión de la mitad del paso. El par desarrollado varía ya que en algunos pasos activamos dos bobinas y en otras solo una, pero a la vez el giro se encuentra más “guiado”, por lo que en general ambos efectos se compensan y el funcionamiento es bueno, salvo en aplicaciones donde estemos muy al límite del par máximo.

Expresando la secuencia en forma de tabla resulta:

Medio-paso A B A’ B’
1 ON OFF OFF OFF
2 ON ON OFF OFF
3 OFF ON OFF OFF
4 OFF ON ON OFF
5 OFF OFF ON OFF
6 OFF OFF ON ON
7 OFF OFF OFF ON
8 ON OFF OFF ON

Modo de medio paso: secuencia de señal de control 8 pasos (recomendada) 5.625 grados por paso / 64 pasos por una revolución del eje del motor interno. Relación de transmisión 64. Total 64 x 64 = 4096 pasos.

Modo de paso completo: secuencia de señal de control de 4 pasos 11.25 grados por paso / 32 pasos por una revolución de la interna eje de motor. Relación de transmisión 64. Total 64 x 32 = 2048 pasos.

Esquema de conexión:

Conexiones de la placa de driver:

Ejercicio basado en http://www.prometec.net/motor-28byj-48/

Otros tutoriales:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio31-Stepper

La otra manera de programar un motor 28BYJ-48 es utilizar la librería Steper que viene incluida con el entorno de desarrollo oficial de Arduino. Esta librería nos facilita el uso de este tipo de motores y viene adaptada para motores bipolares. En este caso la librería stepper usa el modo de paso completo en lugar del medio paso. En este caso el nº de pasos por vuelta es 2048.

Llevando esta secuencia de encendido a una tabla, que posteriormente usaremos para el código, la secuencia quedaría de la siguiente forma:

Paso A B A’ B’
1 ON OFF OFF OFF
2 OFF ON OFF OFF
3 OFF OFF ON OFF
4 OFF OFF OFF ON

Código para mover el motor:

 
#include <Stepper.h>
#define STEPS 2048

Stepper stepper(STEPS, 8, 9, 10, 11);

void setup() {
  stepper.setSpeed(10);
}

void loop() {
  stepper.step(2048);
}

Sensores Arduino

Un sensor es un dispositivo capaz de detectar magnitudes físicas o químicas, llamadas variables de instrumentación, y transformarlas en variables eléctricas.

  • Las variables de instrumentación pueden ser por ejemplo: temperatura, intensidad lumínica, distancia, aceleración, inclinación, desplazamiento, presión, fuerza, torsión, humedad, movimiento, pH, etc.
  • Una magnitud eléctrica puede ser una resistencia eléctrica (como en una RTD), una capacidad eléctrica (como en un sensor de humedad o un sensor capacitivo), una tensión eléctrica (como en un termopar), una corriente eléctrica (como en un fototransistor), etc.

Los sensores se pueden clasificar en función de los datos de salida en:

  • Digitales
  • Analógicos

Dependiendo del tipo de sensor, deberemos conectarlo a una entrada digital o analógica.

Y dentro de los sensores digitales, estos nos pueden dar una señal digital simple con dos estados como una salida de contacto libre de tensión o una salida en bus digital. En caso que el sensor use comunicación por bus, deberemos usar algunos de los buses que implementa Arduino o usar hardware adicional que nos proporcione un interfaz entre el Arduino y el bus.

Un ejemplo de sensor analógico sería el ACS714, es un sensor de efecto hall que mide las corrientes eléctricas que pasan a través del chip y devuelve un valor en voltaje proporcional a la corriente que circula por el sensor:

Datasheet: http://www.allegromicro.com/~/Media/Files/Datasheets/ACS714-Datasheet.ashx

Como medir corriente con Arduino y un sensor ACS714: http://playground.arduino.cc/Main/CurrentSensing

Tutorial de uso del sensor ACS714: http://www.instructables.com/id/How-to-Measure-AC-Current-using-Hall-Effect-Sensor/?ALLSTEPS

Características de  los sensores

  • Rango de medida: dominio en la magnitud medida en el que puede aplicarse el sensor.
  • Precisión: es el error de medida máximo esperado.
  • Offset o desviación de cero: valor de la variable de salida cuando la variable de entrada es nula. Si el rango de medida no llega a valores nulos de la variable de entrada, habitualmente se establece otro punto de referencia para definir el offset.
  • Linealidad o correlación lineal.
  • Sensibilidad de un sensor: suponiendo que es de entrada a salida y la variación de la magnitud de entrada.
  • Resolución: mínima variación de la magnitud de entrada que puede detectarse a la salida.
  • Rapidez de respuesta: puede ser un tiempo fijo o depender de cuánto varíe la magnitud a medir. Depende de la capacidad del sistema para seguir las variaciones de la magnitud de entrada.
  • Derivas: son otras magnitudes, aparte de la medida como magnitud de entrada, que influyen en la variable de salida. Por ejemplo, pueden ser condiciones ambientales, como la humedad, la temperatura u otras como el envejecimiento (oxidación, desgaste, etc.) del sensor.
  • Repetitividad: error esperado al repetir varias veces la misma medida.

Más información: http://es.wikipedia.org/wiki/Sensor#Caracter.C3.ADsticas_de_un_sensor

Tipos de sensores: http://es.wikipedia.org/wiki/Sensor#Tipos_de_sensores

IMPORTANTE: A la hora de elegir un sensor, debemos leer detenidamente las características y elegir uno que sea compatible con nuestro sistema (intensidad y voltaje) y que sea sencillo de usar o nos faciliten una librería sencilla y potente.

Catálogo de sensores:

Sensores con comunicación por bus.

Un bus (o canal) es un sistema digital que transfiere datos entre los componentes de una dispositivo electrónico o entre varios. Está formado por cables o pistas en un circuito impreso, dispositivos como resistencias y condensadores además de circuitos integrados.

La tendencia en los últimos años hacia el uso de buses seriales como el USB, Firewire, etc… para comunicaciones con periféricos, reemplazando los buses paralelos, a pesar de que el bus serial posee una lógica compleja (requiriendo mayor poder de cómputo que el bus paralelo) se produce a cambio de velocidades y eficacias mayores.

Arduino dispone de buses serie I2C y SPI para comunicarse con dispositivos sin necesidad de HW adicional

Bus RS485:

Más información en: http://es.wikipedia.org/wiki/Bus_(inform%C3%A1tica)

Existen muchos tipos de buses de comunicaciones, algunos de ellos los implementa arduino mediante controladores HW integrados en la MCU (I2C) o mediante una librería como one wire. En otros casos es necesario un hardware adicional para adaptar la señal con un transceiver y manejar el protocolo con un controlador, por ejemplo can bus o modbus.

Sondas DHT11 y DHT22

Los sensores DHT11 o DHT22 que son ampliamente usados con Arduino, son unos pequeños dispositivos que nos permiten medir la temperatura y la humedad. A pesar que estas medidas son analógicas, estos sensores los tendremos que conectar a pines digitales, ya que la señal de salida es digital a un bus punto a punto. Llevan un pequeño microcontrolador interno para hacer el tratamiento de señal. Estos sensores han sido calibrados en laboratorios, presentan una gran fiabilidad.

Estos sensores funcionan con ciclos de operación de duración determinada. En determinados casos de aplicaciones los tiempos de lectura de los sensores puede ser determinante a la hora de elegirlo.

ParámetroDHT11DHT22
Alimentación3Vdc ≤ Vcc ≤ 5Vdc3.3Vdc ≤ Vcc ≤ 6Vdc
Señal de SalidaDigitalDigital
Rango de medida TemperaturaDe 0 a 50 °CDe -40°C a 80 °C
Precisión Temperatura±2 °C<±0.5 °C
Resolución Temperatura0.1°C0.1°C
Rango de medida HumedadDe 20% a 90% RHDe 0 a 100% RH
Precisión Humedad4% RH2% RH
Resolución Humedad1%RH0.1%RH
Tiempo de sensado1s2s
Tamaño12 x 15.5 x 5.5mm14 x 18 x 5.5mm

Más información sobre la sonda DHT22: http://www.seeedstudio.com/wiki/Grove_-_Temperature_and_Humidity_Sensor_Pro

Datasheet de sondas DHT22:

Este esquema explica como funciona este sensor y el protocolo de comunicación. La librería implementa el protocolo y facilita el uso de la sonda con Arduino.

Vemos como para un mismo sensor tenemos diferentes librerías con funciones y uso diferente en cada una de ellas. Cada uno de los distribuidores de estas sondas ha creado su propia librería.

Sonda DHT18B20

Otra sonda de temperatura muy usada con Arduino es la DS18B20, esta usa un bus de comunicación multipunto llamado one wire, lo que nos permite leer muchas sondas con una sola i/o digital.

Sonda: http://www.seeedstudio.com/depot/One-Wire-Temperature-Sensor-p-1235.html

Datasheet sensor: http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

Librería: http://playground.arduino.cc/Learning/OneWire

Última version de la librería: http://www.pjrc.com/teensy/td_libs_OneWire.html

Protocolo one-wire:

Librería sonda DS18B20: https://github.com/RobTillaart/Arduino/tree/master/libraries/DS18B20

Otros Sensores

Ejemplos de sensores. Kits Arduino: http://www.robotshop.com/en/37-modules-sensor-kit-arduino.html

Ejemplos Entradas y Salidas Digitales

Input Pullup

Usar la resistencia interna de pull up de Arduino para detectar la pulsación de un botón (leer estado de una entrada digital) y encender el led 13 (integrado en placa) cuando tenga pulsado el botón y apagarlo cuando lo libere. Adicionalmente sacar por el monitor serie el estado de pulsación del botón con un 1 o un 0, de esta forma abriendo el Serial Plotter es posible ver la señal que recibe Arduino.

Imprimir por pantalla el tiempo de loop, que nos servirá para analizar la importancia de este tiempo en el comportamiento del programa.

NOTA: Al contrario que en anteriores prácticas, usamos un botón conectado al pin digital 2 configurado como INPUT_PULLUP. En este caso al leer el pin 2 con digitalRead() me devuelve 1 cuando no está pulsado el botón (abierto) y me devuelve 0 cuando está pulsado el botón (cerrado)

Esquema de conexión:

Diagrama eléctrico:

Resultado:

Tutorial: http://arduino.cc/en/Tutorial/InputPullupSerial

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio16-pullup

NOTA: Ver efecto de la diferencia del tiempo de loop cuando pulso o no pulso el botón debido a el Serial.println que se ejecuta al pulsar el botón.

NOTA: Si el tiempo de loop es muy largo podemos perder pulsaciones rápidas. Probar a poner un delay.

Interruptor

Con la base del ejemplo anterior pero en lugar de mantener pulsado el botón para encender el led, con una pulsación enciende y con otra apaga el led. Ahora el led ponerlo en el pin 10 en lugar del 13. Para hacer esto debemos detectar flancos para encender y apagar.

Más información sobre como detectar flancos: http://rufianenlared.com/flancos/

Esquema de conexión:

Resultado:

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio17-pullup_interruptor

Función Detecta Flanco

Hacer tres funciones para detectar que hagan las siguientes funciones y que se le pase como parámetro el pin donde detectar el flanco:

  • Detectar flanco ascendente
  • Detectar flanco descendente
  • Detectar flanco. Devuelve 1 para un flanco ascendente y un -1 para un flanco descendente.

Para usar estas funciones, deben llamarse en cada loop y para no perder un flanco, deben llamarse como máximo cada 300 ms.

Usarla en el ejemplo anterior del interruptor.

Solución:

Comprobar que si quiere detectar flanco en dos pines con una misma función no es posible. Para solucionarlo es necesario usar clases.

Solución:

Contador de pulsos

Usar Arduino para contar pulsaciones de un pulsador. Modificar el ejemplo anterior para contar el número de veces que se pulsa un botón detectando flancos ascendentes o descendentes y sacarlo por el monitor serie. Adicionalmente encender o apagar el led cada vez que haya 4 pulsaciones del botón.

NOTA: comprobar los rebotes y pensar cómo eliminarlos.

Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio18-cuentapulsos