Archivo de la etiqueta: Avanzado

Práctica: Motores

Servo

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

Solución: http://arduino.cc/en/Tutorial/Knob

Ejercicio: Programar un barrido continuo del 0 a 180º en un servo. Activar y descativar el barrido con una pulsación de un botón. p.e. activación de un limpiaparabrisas.

Solución: http://arduino.cc/en/Tutorial/Sweep

Anuncios

Actuadores y periféricos de salida

Un actuador es un dispositivo capaz de transformar energía hidráulica, neumática o eléctrica en la activación de un proceso con la finalidad de generar un efecto sobre elemento externo. Este recibe la orden de un regulador, controlador o en nuestro caso un Arduino y en función a ella genera la orden para activar un elemento final de control como, por ejemplo, una válvula.

 Existen varios tipos de actuadores como son:

  • Electrónicos
  • Hidráulicos
  • Neumáticos
  • Eléctricos
  • Motores
  • Bombas

 Para cada actuador, necesitamos un “driver” o manejador para poder mandar órdenes desde Arduino.

  • Recordad que los pines de Arduino solo pueden manejar un máximo de 40mA y recomendable usar 20mA de forma continua.
  • Recordar que Arduino solo puede manejar un total de 200 mA de salida. Es decir que la corriente máxima que admite Vcc y GND son 200 mA.

 Este enlace explica mucho mejor los las limitaciones de corriente en los pines de Arduino:  http://playground.arduino.cc/Main/ArduinoPinCurrentLimitations

 Otro tipo de actuadores son los relés. Para manejar un relé necesitamos un driver, puesto que con los 40mA posiblemente no sea suficiente para activar la bobina del relé.

 Un relay driver es un circuito electrónico que usa un transistor para activar la bobina del relé de forma que con una pequeña corriente activamos el circuito que alimenta al relé desde una fuente externa.

 Los Relay Shield ya tienen integrados los relés y los drives, lo que nos facilita el trabajo, incluso algunas shields incluyen su librería: http://www.seeedstudio.com/wiki/Relay_Shield

 O también una placa con dos relés y su driver con posibilidad de alimentarlos externamente:  http://www.geeetech.com/wiki/index.php/2-Channel_Relay_module

 

También existen integrados como el ULN2803A que nos permiten controlar reles, se trata de un array o conjunto de 8 pares darlington que soportan 500mA y 50V. Sirve para conectar la carga a masa. Características: http://www.ti.com/lit/ds/symlink/uln2803a.pdf

 Si tuviéramos que controlar elementos con más potencia como Motores o sistemas que tienen muchos arranques y paradas, es recomendable usar contactores a los que atacaremos desde los relés.

 

Motores

  • Motor DC. Un motor de corriente continua convierte la energía eléctrica en mecánica. Se compone de dos partes: el estator y el rotor. El estator es la parte mecánica del motor donde están los polos del imán. El rotor es la parte móvil del motor con devanado y un núcleo, al que llega la corriente a través de las escobillas. Si queremos cambiar el sentido de giro del rotor, tenemos que cambiar el sentido de la corriente que le proporcionamos al rotor, basta con invertir la polaridad de la pila o batería.
    Para controlar un motor DC desde Arduino, tendremos que usar un driver para motores para proporcionarle más corriente al motor ya que las salidas del Arduino sólo dan 40mA. De esta manera, con el driver podemos alimentar el motor con una fuente de alimentación externa.

 El L293D es un integrado para controlar motores DC que usa el sistema puente en H. Es un sistema para controlar el sentido de giro de un motor DC usando cuatro transistores.  En la imagen vemos que los transistores se comportan como interruptores y dependiendo que transistores conducen y cuáles no cambia la polarización del motor, y con esto el sentido de giro.

 El L293D tiene dos puentes H y proporciona 600mA al motor y soporta un voltaje entre 4,5V y 36V tal y cómo pone en el datasheet: http://www.ti.com/lit/ds/symlink/l293d.pdf

 

Nosotros usaremos la parte de la izquierda (los diodos externos hay que ponerlos para evitar las corrientes inducidas del motor). Cómo se aprecia en la imagen, los pins 3 y 6 son las salidas y se conectan a los bornes del motor. Y los pins 2 y 7 son las entradas donde conectaremos las salidas del Arduino. Dependiendo que valor ponemos entre los pins 2 y 7 el motor girará en un sentido o en otro.

Es muy IMPORTANTE que si optais o necesitais utilizar el driver L293, utiliceis diodos para evitar dañar el integrado con las corrientes parásitas generadas por los propios solenoides de las cargas. No obstante el modelo L293D no los necesita, ya que, los lleva incorporados el propio integrado, con lo que se hace “más sencillo” y “económico” su uso. También es cierto que L293 al no llevarlos integrados nos permite escoger los que mejor se adapten a nuestras cargas o necesidades.

Para controlar la velocidad del motor vamos a usar PWM. Sabemos que hay que atacar los pins 2 y 7 del L293D desde dos salidas del Arduino. En estas dos salidas habrá un PWM a cada una. Pero tenemos que invertir un PWM. ¿Qué quiere decir invertir? Pues que cuando en un PWM tengamos un pulso a un valor alto, en el otro PWM el mismo pulso sea valor bajo. En la imagen lo entenderemos de una manera más gráfica.

Esquema de Montaje.

 Fuente, más información y código en: http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/

  •  Servomotor (o también llamado servo) es similar a un motor de corriente continua pero con la capacidad de posicionarse en una posición determinada y permanecer fija en esta. Normalmente el ángulo es de 0 a 180 grados, y se alimentan a 5 voltios mínimo.

 Un servomotor está formado por un motor de corriente continua, una caja reductora, un juego de engranajes, un potenciómetro y un circuito de control. Puede aguantar cierto peso a través del par o torque del servo indicado en sus características. Normalmente se indica con Kg/cm, que quiere decir los kilos que aguanta a 1 cm de distancia.

 

Para controlar un servo, se usa el PWM. La mayoría trabaja en una frecuencia de 50 Hz (20ms). Cuando se manda un pulso, la anchura de este determina la posición angular del servo. La anchura varía según el servomotor pero normalmente es entre 0,5ms a 2,5ms.

 

El Arduino utiliza la librería <Servo.h> para controlar los servos y usa las siguientes funciones:

 Fuente, más información y código en: http://diymakers.es/controlar-servomotor-con-mando-ir/

 Más información: http://en.wikipedia.org/wiki/Servomotor

  • Motor paso a paso. Un motor paso a paso (también llamado stepper) es un dispositivo electromagnético que convierte impulsos eléctricos en movimientos mecánicos de rotación. La principal característica de estos motores es que se mueven un paso por cada impulso que reciben. Normalmente los pasos pueden ser de 1,8º a 90º por paso, dependiendo del motor. Son motores con mucha precisión, que permiten quedar fijos en una posición (como un servomotor) y también son capaces de girar libremente en un sentido u otro (como un motor DC).

 Cuando circula corriente por una o más bobinas del estator se crea un campo magnético creando los polos Norte-Sur. Luego el rotor se equilibrará magnéticamente orientando sus polos Norte-Sur hacia los polos Sur-Norte del estator. Cuando el estator vuelva a cambiar la orientación de sus polos a través de un nuevo impulso recibido hacia sus bobinas, el rotor volverá a moverse para equilibrarse magnéticamente. Si se mantiene esta situación, obtendremos un movimiento giratorio permanente del eje. El ángulo de paso depende de la relación entre el nombre de polos magnéticos del estator y el nombre de polos magnéticos del rotor.

Los motores bipolares son más complejos de controlar ya que el flujo de corriente tiene que cambiar de dirección a través de las bobinas con una secuencia determinada. Para esto debemos conectar cada una de las dos bobinas en un puente en H (H-Bridge). Utilizaremos el integrado L293 que contiene dos H-Bridge (datasheet).

 Para controlar motores paso a paso con Arduino, utilizaremos la librería <Stepper.h>:

 Fuente, más información y código en: http://diymakers.es/mover-motores-paso-paso-con-arduino/

Definición de la Wikipedia: http://es.wikipedia.org/wiki/Motor_paso_a_paso

 Un ejemplo de driver de un motor paso a paso https://www.pololu.com/product/2133

 Datasheet del driver: https://www.pololu.com/file/download/drv8825.pdf?file_id=0J590

Este tipo de motor es más lento, su rotación es precisa, es de fácil configuración y control , además mientras que los servos requieren un mecanismo de retroalimentación y circuitos de soporte para accionamiento de posicionamiento, un motor paso a paso tiene control de posición a través de su naturaleza de rotación por incrementos fraccionales.

Adecuado para las impresoras 3D y dispositivos similares en los que la posición es fundamental. 

  • Otros motores, como los de alterna monofásicos que podemos controlar su encendido, apagado y sentido de giro con un relé o un contactor y los trifásicos que habrá que usar un arrancador para controlar su encendido y apagado y un variador para controlar la velocidad.

 Disponemos de shields para controlar múltiples motores, ya sean DC, servos o paso a paso.

A la hora de seleccionar un motor, hay varios factores que deben evaluarse antes de decidir qué tipo utilizar. Estos factores incluyen velocidad, par, bucle abierto o cerrado, resolución, precio y mantenimiento.

La velocidad es uno de los criterios más importantes a tener en cuenta al elegir entre servo y motor paso a paso. Hay una relación inversa entre velocidad y par en los motores por pasos. Cuando la velocidad se incrementa, el par decrece. Los motores servo tienen un par constante hasta la velocidad nominal. Como criterio general, por encima de 1000 rpm, debe seleccionarse servo. Si la velocidad está por debajo de 500 rpm, los motores por pasos son una buena elección porque producen un par más alto que el servomotor de tamaño equivalente. Los servomotores tienen la capacidad de producir un par pico en cortos periodos de tiempo que es hasta 8 veces su par nominal continuo. Esto es particularmente útil cuando la resistencia del movimiento no es constante. Los motores por pasos no tienen esta capacidad.

En algunos casos que requieren la alta velocidad, alta aceleración o aplicaciones críticas, el bucle cerrado es importante. Esto ocurre por ejemplo cuando se trabaja con accesorios caros en los que los fallos no son aceptables.

Ejemplo de actuadores que se pueden comprar

 Actuadores

 Relés http://www.trossenrobotics.com/c/data-i-o-Relay-switching-boards.aspx

 Por último tenemos otros dispositivos que usan las salidas digitales, que podemos denominarlos periféricos:

  • Pantalla LCD
  • displays numéricos
  • pantallas táctiles
  • impresoras
  • zumbadores
  • pulsadores/interruptores
  • indicadores luminosos
  • etc..

 Displays:

 Como funciona un display LCD: http://ww1.microchip.com/downloads/cn/AppNotes/cn011075.pdf

 Aprender a usar un display LCD:

Y mucho más… https://www.sparkfun.com/categories/20

Sensores

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

 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.

 Un ejemplo de sensor analógico sería el ACS714:

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

 Como medir corriente: http://playground.arduino.cc/Main/CurrentSensing

Características de un sensor: http://es.wikipedia.org/wiki/Sensor#Caracter.C3.ADsticas_de_un_sensor

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

 A la hora de elegir un sensor, debemos leer detenidamente las características y elegir uno que sea compatible con nuestro sistema (tensión y voltaje) y que sea sencillo de usar o nos facilite 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 para comunicaciones con periféricos, reemplazando los buses paralelos, incluyendo el caso del microprocesador con el chipset en la placa base, 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.

 

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 (one wire) y 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.

Los sensores DHT11 o DHT22 que vimos anteriormente,  son unos pequeños dispositivos que nos permiten medir la temperatura y la humedad. A diferencia de otros sensores, éstos los tendremos que conectar a pines digitales, ya que la señal de salida es digital. Llevan un pequeño microcontrolador interno para hacer el tratamiento de señal. Estos sensores han sido calibrados en laboratorios, presentan una gran fiabilidad.

 Ambos 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ámetro DHT11 DHT22
Alimentación 3Vdc ≤ Vcc ≤ 5Vdc 3.3Vdc ≤ Vcc ≤ 6Vdc
Señal de Salida Digital Digital
Rango de medida Temperatura De 0 a 50 °C De -40°C a 80 °C
Precisión Temperatura ±2 °C <±0.5 °C
Resolución Temperatura 0.1°C 0.1°C
Rango de medida Humedad De 20% a 90% RH De 0 a 100% RH
Precisión Humedad 4% RH 2% RH
Resolución Humedad 1%RH 0.1%RH
Tiempo de sensado 1s 2s
Tamaño 12 x 15.5 x 5.5mm 14 x 18 x 5.5mm

 Veamos en profundidad la sonda DHT22.

http://www.seeedstudio.com/wiki/Grove_-_Temperature_and_Humidity_Sensor_Pro

 Datasheet:

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

 Otra sonda de temperatura pero que usa un bus de comunicación, lo que nos permite leer muchas sondas con una sola i/o digital es la DS18B20.

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

 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

 one-wire: http://en.wikipedia.org/wiki/1-Wire

 one-wire: http://www.maximintegrated.com/en/app-notes/index.mvp/id/148

Entradas y salidas analógicas, PWM

Una señal eléctrica analógica es aquella en la que los valores de la tensión o voltaje varían constantemente y pueden tomar cualquier valor. En el caso de la corriente alterna, la señal analógica incrementa su valor con signo eléctrico positivo (+) durante medio ciclo y disminuye a continuación con signo eléctrico negativo (–) en el medio ciclo siguiente.

Un sistema de control (como un microcontrolador) no tiene capacidad alguna para trabajar con señales analógicas, de modo que necesita convertirlas en señales digitales para poder trabajar con ellas.

La señal digital obtenida de una analógica tiene dos propiedades fundamentales:

En el caso de un arduino Uno, el valor de 0 voltios analógico es expresado en digital como B0000000000 (0) y el valor de 5V analógico es expresado en digital como B1111111111 (1023).

Por lo tanto todo valor analógico intermedio es expresado con un valor entre 0 y 1023, es decir, sumo 1 en binario cada 4,883 mV.

Arduino Uno tiene una resolución de 10 bits, es decir, unos valores entre 0 y 1023.

Arduino Due tiene una resolución de 12 bits, es decir, unos valores entre 0 y 4095.

Diferencia entre señales analógicas y digitales:

PWM

Como hemos dicho Arduino Uno tiene entradas analógicas que gracias a los conversores analógico digital puede entender ese valor el microcontrolador, pero no tiene salidas analógicas puras y para solucionar esto, usa la técnica de PWM.

Las Salidas PWM (Pulse Width Modulation) permiten generar salidas analógicas desde pines digitales. Arduino Uno no posee salidas analógicas puras.

El arduino due, posee dos salidas analógicas puras mediante dos conversores digital a analógico. Estos pines pueden usarse para crear salidas de audio usando la librería correspondiente.

La modulación por ancho de pulsos (también conocida como PWM, siglas en inglés de pulse-width modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una senoidal o una cuadrada, por ejemplo), ya sea para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga.

El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en relación con el período. duty cycle = (tiempo que la salida está a uno o HIGH)/ (periodo de la función)

En este ejemplo se ve como simular con PWM una onda sinusoidal analógica.

En Arduino la frecuencia de PWM es de 500Hz.

En la actualidad existen muchos circuitos integrados en los que se implementa la modulación PWM, por ejemplo para lograr circuitos funcionales que puedan controlar fuentes conmutadas, controles de motores, controles de elementos termoeléctricos, choppers para sensores en ambientes ruidosos y algunas otras aplicaciones.

Definición de PWM en la web de Arduino: http://arduino.cc/en/Tutorial/PWM

No confundir PWM con la funcion tone() que es utilizada para generar una onda cuadrada de ciclo de trabajo 50%, con el fin de emitir sonidos audibles, modificando la frecuencia.

Más información de tone() en: https://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation

Conversor analógico digital (ADC)

Un microcontrolador solo entiende señales digitales (1’s y 0’s), por lo tanto para poder leer señales analógicas necesitamos los convertidores Analógico a Digital (ADC).

Como funciona un conversor analógico a digital:

Conversor digital  analógico (DAC)

Definición: http://en.wikipedia.org/wiki/Digital-to-analog_converter

Al contrario que las señales analógicas, las señales digitales se pueden almacenar y transmitir sin degradación. Los DAC se usan para los altavoces, amplificadores para producir sonido. Ejemplo de la transmisión de la voz por la líneas telefónicas.

En arduino los pines analógicos se definen y tienen las propiedades siguientes: http://arduino.cc/en/Tutorial/AnalogInputPins

En arduino para tratar las entradas y salidas digitales usamos las siguientes funciones:

Otras funciones interesantes con entradas/salidas analóicas:

Las entradas digitales y analógicas (especialmente estas) son un recurso escaso en los microntroladores, para poder multiplicar esas entradas/salidas, podemos hacer uso de los multiplexores.

Los multiplexores son circuitos combinacionales con varias entradas y una única salida de datos, están dotados de entradas de control capaces de seleccionar una, y sólo una, de las entradas de datos para permitir su transmisión desde la entrada seleccionada hacia dicha salida.

Esta es una técnica muy utilizada para multiplicar las señales, con arduino podemos usar varios shield para multiplexar las señales.

Muxshield: https://www.sparkfun.com/products/11723

Para ver las funciones de la librería de este shield para Arduino se pueden ver en la página 5: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Dev/Arduino/Shields/Mux_Shield_II_User_Guide.pdf

Permite hasta 48 pines de Arduino. Usa el TI 74HC4067 para la funcionalidad de multiplexación de 16 canales y TI 74HC595 para los registros de cambio (registro de desplazamiento de tres estados). Tiene múltiples modos: entrada y salida digital y entrada analógica

Librería de arduino: Arduino Library

Entradas y salidas Digitales

Una señal digital es un tipo de señal generada por algún tipo de fenómeno electromagnético en que cada signo que codifica el contenido de la misma puede ser analizado en término de algunas magnitudes que representan valores discretos, en lugar de valores dentro de un cierto rango. Por ejemplo, el interruptor de la luz sólo puede tomar dos valores o estados: abierto o cerrado, o la misma lámpara: encendida o apagada (véase circuito de conmutación).

http://es.wikipedia.org/wiki/Se%C3%B1al_digital

 Los sistemas digitales, como por ejemplo un microcontrolador, usan la lógica de dos estados representados por dos niveles de tensión eléctrica, uno alto, H y otro bajo, L (de High y Low, respectivamente, en inglés). Por abstracción, dichos estados se sustituyen por ceros y unos, lo que facilita la aplicación de la lógica y la aritmética binaria. Si el nivel alto se representa por 1 y el bajo por 0, se habla de lógica positiva y en caso contrario de lógica negativa.

 Cabe mencionar que, además de los niveles, en una señal digital están las transiciones de alto a bajo y de bajo a alto, denominadas flanco de bajada y de subida, respectivamente.

En una señal digital, se denomina flanco a la transición del nivel bajo al alto (flanco de subida) o del nivel alto al bajo (flanco de bajada).

 En la siguiente imagen el flanco de bajada es detectado por el retardo que realiza la compuerta not así cuando a la entrada haya uno las dos entradas de la or negada serán uno y cero, por tanto la salida será de cero, pero en el momento en que la entrada sea de cero la conexión directa que hay a la or negada nos dará un cero inmediato en una de sus entradas, mientras que por el retardo que presenta la not también tendremos un cero y esto nos generará un uno a la salida por unos momentos, o sea la detección del flanco de bajada.

 Las señales digitales:

  • Discreta: puede tomar un conjunto de valores
  • Binaria: Encendido (1) – Apagado (0)

 Arduino trabaja con tecnología TTL (transistor-transistor logic):

http://es.wikipedia.org/wiki/Tecnolog%C3%ADa_TTL

 Características

  • Su tensión de alimentación característica se halla comprendida entre los 4,75V y los 5,25V. Normalmente TTL trabaja con 5V.
  • Los niveles lógicos vienen definidos por el rango de tensión comprendida entre 0,0V y 0,8V para el estado L (bajo) y los 2,4V y Vcc para el estado H (alto).
  • La velocidad de transmisión entre los estados lógicos es su mejor base, si bien esta característica le hace aumentar su consumo siendo su mayor enemigo. Motivo por el cual han aparecido diferentes versiones de TTL como FAST, LS, S, etc y últimamente los CMOS: HC, HCT y HCTLS. En algunos casos puede alcanzar poco más de los 250 MHz.
  • Las señales de salida TTL se degradan rápidamente si no se transmiten a través de circuitos adicionales de transmisión (no pueden viajar más de 2 m por cable sin graves pérdidas).

 En arduino los pines digitales se describen y tienen la propiedades siguientes:  http://arduino.cc/en/Tutorial/DigitalPins

 En arduino para tratar las entradas y salidas digitales usamos las siguientes funciones:

 En la imagen siguiente se muestra el estado por defecto de una I/O digital en un microcontrolador de Arduino. Se ha simplificado con interruptores la compleja electrónica que hay dentro.

Por defecto los digital I/O pins están configurados como inputs en un estado de alta impedancia (equivalente a una resistencia de 100 Mohms en frente del pin), es decir, SW3 a ON y no hace falta llamar a la función pinMode() aunque es recomendable para aclarar el código.

  • PinMode(x, INPUT) –> SW3 = ON (resto a OFF). Los valores leidos serán aleatorios si el pin de Arduino está al aire.
  • PinMode(x,INPUT_PULLUP) –> SW3 = ON & SW4 = ON (resto a OFF). Los valores leidos sin nada conectado al pin es HIGH. La Resistencia R1 tiene un valor dependiendo del microcontrolador, pero tiene un valor entre 20kOhm y 150kOhm.
  • PinMode(x, OUTPUT) & digitalWrite(x,HIGH) –> SW2 = ON & SW1 = +5V (resto a OFF). Estado de baja impedancia, no hay resistencia interna y es necesario poner una adecuada para no superar los 40mA máximos admitidos
  • PinMode(x, OUTPUT) & digitalWrite(x,LOW) –> SW2 = ON & SW1 = GND (resto a OFF). Estado de baja impedancia, no hay resistencia interna y es necesario poner una adecuada para no superar los 40mA máximos admitidos

 En el caso que el pin esté configurado como OUTPUT, hay diferencia entre sink (recogida de corriente) y source (fuente de corriente) de un pin digital configurado como salida.

En el primer caso para encender el LED debo poner digitalWrite() a HIGH y en el segundo a LOW

 

 En el caso que el pin de entrada configurado como INPUT. Cuando el botón no está pulsado, en el primer caso leo digitalRead() un valor HIGH y en el segundo LOW y cuando pulso el botón, en el primer caso leo digitalRead() un valor LOW y en el segundo HIGH. Como véis, dependiendo de la configuración de lo conectado cambia lo leido.

 

 En el caso que el pin de entrada configurado como INPUT_PULLUP. Si el botón no está pulsado leo HIGH (no se producen lecturas aleatorias con el pin al aire) y cuando pulso el botón leo LOW.