Curso Arduino y robótica: Entradas y salidas

Material para realizar los ejercicios

  • 2x Leds
  • Pulsador
  • LDR – Sensor de luz – o un potenciómetro
  • Imprimir plantilla – Caja de schrödinger

Pines

La placa Arduino posee un conjunto de pines que pueden usarse de distintas maneras y con configuraciones distintas de entrada / salida . Este es un aspecto que veremos más adelante a medida que aprendamos otros modos de comunicación (I2c, ICSP, Serial, interrupciones…) . Pero por ahora no nos tenemos que preocupar aún de los mapas de pinout que podamos encontrar en Internet como si de un laberinto se tratara.

Un esquema básico de los modos de comunicación a usar con nuestra placa habilitados para conectar diferentes componentes es el siguiente:

Pero nuestro esquema puede resultar mucho más complejo si queremos profundizar en su modelo de conexión.

Dependiendo del tipo de placa, este esquema puede ser diferente y en función de nuestras necesidades deberemos de comprar un modelo de placa que se adapte por ejemplo a si dispone de más interrupciones, más capacidad de procesado o más memoria.

I/O – Input/Output

Vamos a resumir el diagrama de pines anterior para comprenderlo mejor, en un principio tenemos que entender el concepto de entradas/ salidas y el concepto digital o analógico.

En la siguiente imagen tenemos una placa Freaduino, que es un clon de Arduino que nos permite conectar los pines en tripletes con sus conexiones de voltaje ( Rojo y negro ) y el pin de señal que coincide con el amarillo.

Para entender algunos aspectos de voltaje os dejamos un enlace para conocer la aplicación de la electrónica sobre la placa.

A la derecha podemos ver los 13 pines digitales, y a la izquierda los 6 pines analógicos. Encima de los analógicos se encuentran los pines de voltaje para diferentes aplicaciones de electrónica.

I/O significa Input o Output, o lo que es lo mismo entradas o salidas. Cada uno de los pines que se declaran como pin de entrada, quiere decir que la información circula desde el exterior a dentro de la placa, (como la información leída de los sensores ) y los pines de salida, es la información o  acción que genera la placa hacia fuera, (como el movimiento de servomotores, led, zumbador … ).

Función pinMode

pinMode (pin, INPUT)

Cada pin está declarado por defecto como un pin de entrada, por lo que no sería necesario ejecutar la instrucción pinMode(). Cuando un pin está declarado como pin de entrada se asocia a un estado de alta impedancia. Esto significa que existe una resistencia con un valor muy alto (100MΩ), de manera que es necesaria la circulación de una corriente muy pequeña para cambiar el estado del pin. Esto también puede provocar errores por ruido eléctrico cuando el pin no esta conectado a nada o hay un cable suelto.

 

pinMode (pin, OUTPUT)

Los pines de salida se encuentran en un estado de baja impedancia (valor bajo de resistencia), es decir, que puede proporcionar una mayor intensidad a otros circuitos. Los pines pueden proporcionar (corriente positiva) o recibir (corriente negativa)  40 mA, por lo que hay que tener cuidado de no quemar la placa. Esta corriente no es suficiente para mover algunos motores , relés u otros dispositivos.

Para proteger la placa es necesario conectar una resistencia recomendada de 470Ω, o 1KΩ. En caso de superar este nivel de intensidad se pueden dañar los transistores de salida en el pin o dañar el chip Atmega. A menudo solo resulta dañado el uso del pin, mientras que el resto de la placa puede seguir funcionando perfectamente.

INPUT – LDR o Potenciómetro – Señal Analógica

Una señal analógica es una señal continua generada por un fenómeno natural, como la música, el voltaje o corriente que circula por un cable, los temblores de un terremoto o la luz.

Si lo visualizamos convenientemente desde el Serial Plotter, podremos observar una gráfica que dibujará la intensidad de la luz capturada por el sensor. Consejo: Leer el post para usar correctamente el Serial Plotter.

IMPORTANTE: Las señales analógicas nos proporcionan valores de 0 a 1023; es decir un número de 10 bits.

Estos valores capturados por el sensor se pueden “mapear” para traducir su efecto en un dato manejable para nuestra placa en una variable de memoria de 8 bits que están entre 0 y 255. De esta manera tendremos una misma referencia para manejar los datos entre valores analógicos y digitales.

 

OUTPUT – LED digital o analógico

Encender un LED es muy sencillo. Arduino dispone de un LED integrado en el pin número 13 y podemos utilizarlo en caso de no tener ninguno a mano.

Aún así, vamos a realizar un ejercicio especial. Hemos hablado sobre las señales analógicas, por lo que en este caso tiene sentido de hablar de una señal digital para encender o apagar un LED que dispone de dos estados. Pero vamos a mezclar un poco el concepto.

En este ejercicio, vamos a realizar una conexión de un LED y utilizaremos la función analogWrite()

  1. Encender un LED desde el pin digital 3. HIGH/LOW
  2. Encender un LED desde el pin digital 3 con un valor numérico 0/1.
  3. Encender otro LED desde el pin digital 4 con la función analogWrite.
  4. Bucle for para encender y apagar de forma progresiva. Recordar que los valores van de 0 a 255.



int time;

void setup() {
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);

  time = (int)(50);

}

void loop() {
  digitalWrite(4, HIGH);
  for (int i = 0; i <= 255; i++) { 
    analogWrite(3, i); 
    delay(time); 
  } 
  for ( int i = 255; i >= 0; i--) {
    analogWrite(3, i);
    delay(time);
  }
  digitalWrite(4, LOW);

}

 

INPUT – Pulsador digital

Con el siguiente esquema vamos a encender un LED conectado a un pulsador, de manera que cuando apretemos el botón hagamos pasar electricidad hacia un LED ( por Hardware ); mientras que el segundo LED lo vamos a encender leyendo primero el estado del botón y ejecutando la instrucción de encender el segundo LED ( por Software ).

Por último, tendremos que ser capaces de que el LED permanezca encendido hasta presionar el LED de nuevo.

  1. Lectura del estado del pulsador por el monitor serie.
  2. Sentencia if…else para encender el LED conectado al Pin 4.
  3. Ejercicios propuestos
    1. Uso de variables para mantener el estado cada vez que se aprieta el pulsador. Es decir, apretar el botón y una vez suelto se ha de mantener encendido. Cuando se apriete otra vez ha de mantenerse apagado.
    2. Botón sumador . Cada vez que se aprieta el pulsador aumenta en 1 una variable contador y que se muestre por pantalla.

*Atención con la conexión de las patillas del pulsador. Las patillas están conectadas en dos pares, tal y como se indica en la figura anterior. Cuando se pulsa el botón todas las patillas estarán puenteadas y conectadas entre sí.
int LEDpin = 3;
int buttonPin = 4;

void setup() {
  pinMode(LEDpin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
  
  if ( digitalRead(buttonPin) == HIGH ){
    digitalWrite( LEDpin, HIGH );
  }else{
    digitalWrite( LEDpin, LOW );
  }
  
}

Mini proyecto – El LED de Schrödinger

Para practicar con este formato, vamos a aventurarnos a crear El LED de schrödinger en el que vamos a aplicar lo aprendido para realizar un control de una entrada analógica y una salida (digital o analógica ) en el que tendremos que crear un código de control para encender un LED cuando caiga la noche y que se apague cuando se haga de día.

Para ello, vamos a montar una caja de schrödinger con esta plantilla y pasaremos a través de sus agujeros el LED y el sensor de luz LDR.

Para crear este circuito podemos fijarnos en el siguiente esquema, pero tenemos que configurar la orientación para que el LDR sea capaz de leer la luz de nuestro LED.

Nuestro problema será que si metemos el LED y el sensor de luz enfrentados el uno con el otro en una caja totalmente cerrada, nunca sabremos en qué momento el LED estará encendido o apagado, por lo que tendremos que hacer uso de el monitor serie para leer que estado hay en su interior y visualizar como varía.


Una vez completado este tutorial, puedes acceder al siguiente nivel.

Puedes acceder además a los ejemplos de código que desarrollaremos durante el curso a través de nuestro Github.

Documentacion ZaragozaMakerSpace Github

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

uno × cuatro =

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.