Te agarramos en curva y podrás estar consternado, nervioso, confundido, pero tranquilo... No hay de que espantarse y es como una simple razón ¡ya los hemos utilizado anteriormente! Si te pones a pensar un momento, en nuestro primer proyecto utilizamos los pines digitales. Asi que no tienes que preocuparte, vamos a dar una pequeña explicación de que son.
Para comenzar debemos definir una señal digital, esta es un tipo de señal en la cual cada uno de los signos que codificara el contenido del mismo pasa a ser analizado en términos de magnitudes. Esta señal solo va a poseer 2 estados. El estado de valor inferior de tensión -Vcc el cual le vamos a otorgar un valor lógico denominado LOW o 0 y el estado de valor superior +Vcc el cual vamos a otorgar un valor lógico denominado HIGH o 1, a estos valores tambien los conocemos como lógica binaria. Por lo tanto, el valor de la tensión en la señal digital vamos a representarlo con los estados LOW y HIGH.
Dentro de la programación, estas dos ultimas podemos utilizarlas como constantes, tal que
LOW y HIGH = Escribir o al leer un pin hay dos posibles valores. Estos van a tener un significado diferente dependiendo del pin en el que estén, otorgándole valores como OUTPUT o INPUT .
INPUT, OUTPUT y INPUT_PULLUP = Posibles formas de configuración para los pines digitales.
Una salida digital nos va a permitir variar la tensión a uno de los 2 valores antes mencionados. Lo que nos va a permitir realizar acciones. Como lo mencionamos en las entradas digitales, los dos valores pueden ser -Vcc y +Vcc los cuales corresponden con 0V o GND y 5V.
Todos los pines de nuestro Arduino pueden actuar como salidas digitales, ahora puedes empezar a comprender el porque se llaman input o output y porque esta sección se llama I/O Digitales.
En Arduino, vamos a tener diferentes funciones las cuales vamos a poder utilizar I/O digitales, estas son:
pinMode() = Aquí vamos a indicar la configuración del pin seleccionado, si este va actuar como una entrada o una salida.
digitalWrite() = Le otorgaremos un valor HIGH o LOW en el pin digital seleccionado. Si lo configuramos como OUTPUT pone el voltaje que le va a corresponder al pin. Si lo configuramos como INPUT va habilitar o deshabilitar la resistencia interna de pull up del pin.
digitalRead() = Leerá el valor del pin seleccionado como HIGH o LOW.
Tambien vamos a contar con funciones avanzadas, las cuales son:
pulseIn() – Leerá un pulso de un pin. Si el valor asignado es HIGH, la función espera a que el pin entre en un estado HIGH, comienza a temporizar y espera a que el pin vuelva a LOW, devolviendo una longitud del pulso en tiempo de microsegundos.
shiftOut() – Desplazará un byte de un bit cada vez. El desplazamiento comenzara, ya sea, del más o menos significativo. Cada bit será escrito en un pin cada que se produzca un pulso de reloj.
shiftIn() – Desplaza un byte de un bit cada vez. El desplazamiento comenzara, ya sea, del más o menos significativo. Para cada bit, el reloj es puesto a HIGH, el siguiente bit es leído de la línea de datos para que después el reloj sea puesto a LOW.
tone() – Generará una onda cuadrada de la frecuencia del pin seleccionado. La duración debera ser especificada, de lo contrario, la onda continuará hasta una llamada a noTone (). El pin puede ser conectado a un zumbador piezo para reproducir tonos.
noTone() – Se va a encargar de detener la generación de una onda cuadrada resultante de tone(). No tendrá ningún efecto si no se está generando algún tono.
Vale, vale... Muy bonita la teoría y todo, pero ¿Cómo voy a aplicar esto en la practica?
Es por eso que a continuación de enseñaremos un proyecto en el cual podrás entender el uso de estos conceptos.
Para esto vamos a necesitar
Arduino
Cable USB
LED's (de cualquier color )
Cables jumpers (de preferencia de colores diferentes)
Resistencias de 220 Ohm
Sensor ultrasónico
Protoboard
Vamos a comenzar utilizando nuestro cable jumper negro, una punta la vamos a conectar en el agujero de "GND" del Arduino, la otra punta la vamos a conectar en la segunda columna de la protoboard, justo donde esta la figura de "menos". Ahora, vamos a tomar nuestra resistencia y la vamos a conectar debajo del jumper negro, la otra punta ira en la fila contigua de donde colocamos el primero, después, tomaremos alguno de nuestros LED, vas a observar que tiene dos patas, una mas corta que la otra, la pata corta (cátodo), la vamos a colocar en la misma fila de donde conectamos la resistencia y la pata larga (ánodo) en la fila de abajo de la placa.
Ahora conectaremos un segundo jumper de color verde, una punta la vamos a conectar en el pin 10 (aunque puede ser cualquiera), la otra punta ira conectada justo en la fila de donde conectamos el ánodo del LED. Tomaremos un tercer jumper de color amarillo, un apunta la vamos a conectar en la primera columna de la protoboard, justo donde esta la figura de "mas", la otra punta la vamos a conectar en el pin de 5V.
Llego el momento de conectar nuestro sensor ultrasonico. Podras ver que este posee 4 conexiones: Vcc, TRIG, ECHO y GND, vamos a comenzar conectando a Vcc, usaremos un jumper de color amarillo, un apunta la vamos a conectar en la primera columna de la protoboard, justo donde esta la figura de "mas" donde conectamos el jumper amarillo anterior, la otra punta la vamos a conectar en la conexión Vcc. Ahora usaremos un jumper de color azul, un apunta la vamos a conectar en el pin 7 y la otra punta la vamos a conectar en la conexión TRIG. Usando un jumper de color naranja, un apunta la vamos a conectar en el pin 4 y la otra punta la vamos a conectar en la conexión ECHO.
Por último vamos a utilizar un jumper de color negro, una punta la vamos a conectar en la segunda columna de la protoboard y la otra punta la vamos a conectar en la conexión GND.
Hemos finalizado nuestro montaje del proyecto, A continuación te dejamos el sketch que vamos a utilizar para poder programar nuestra placa.
Comenzaremos nombrando nuestras variables para guiarnos usaremos las conexiones que tiene nuestro sensor y le otorgaremos el pin en el cual conectamos TRIG y ECHO. También nombraremos una variable para nuestro LED con el pin correspondiente y por último nombraremos las variables "tiempo" y "distancia" sin ningún valor, ya que, el programa se encargara de otorgarle dichos valores.
Ahora vamos a configurar los pines: Tanto para trig como para led va a emitir la señal, la vamos a tomar como una salida. Ahora echo va hacer el que va a recibir la señal emitida, por lo que va a funcionar como una entrada.
Ahora, para poder configurar el void loop, debemos tener en mente como es que queremos que funcione. Al querer un detector, buscaremos que el sensor ultrasónico detecte movimiento cerca o un objeto cerca, el LED lanzara una señal y viceversa, cuando no detecte ningún movimiento cerca u objeto, el LED no lanzara la señal. Teniendo ya planteado el funcionamiento, vamos a escribir nuestro código.
Nombraremos "digitalWrite(trig, HIGH)" esto para que trig emita el sonido, con HIGH para que se encienda. Entonces estamos indicando que se encienda para que pueda emitir la onda de sonido con un delay de 1 milisegundo para que solo nos emita un pulso de sonido.
Ahora "digitalWrite(trig, LOW)" para que se pueda apagar, por lo tanto usaremos LOW. Aquí es donde entrara nuestra variable tiempo, con esto se va obtener el tiempo que tardo la onda de sonido en ir y regresar. Recuerdas las funciones avanzadas? es momento de usarlas. Nombraremos "tiempo= pulseIn(echo, HIGH)" para el pulso que viene de regreso, al tratarse de esta onda utilizaremos echo, ya que, es el pin que va a recibir dicha señal y lo vamos a colocar en HIGH para que se active al momento de recibir. Aquí hay que aclarar algun muy importante, hasta ahora el resultado nos lo esta arrojando en tiempo, pero nosotros lo que buscamos es que nos de la distancia, por ende, la siguiente linea la usaremos para hacer una conversión de valores. Usaremos la variable distancia indicando que es igual al tiempo/ 58.2. El valor de 58.2 es una contante que nos indica el fabricante del sensor, entonces es importante leer los manuales de los sensores que ocupemos.
Buscamos que se encienda si esta cerca y se apague cuando este lejos. Entonces nuestras siguientes lineas justo vamos a condicionar estas acciones. empezamos con if, donde la distancia va hacer menor a 50 cm (tu puedes modificar la distancia) el led se va a encender con el linea "digitalWrite(led, HIGH)". Ahora sino se cumple esa condición, entonces este se va apagar, por lo cual usaremos else seguido de "digitalWrite(led, LOW)"
!Hemos terminado! Ahora vamos hacer la prueba para ver que todo funciona correctamente.
En nuestra simulación podemos observar que si alejamos nuestro objeto a una distancia mayor a 50 cm, nuestro led se mantendrá apago, pero si movemos el objeto a una distancia menor a 50 cm, el LED de encenderá para indicarnos que hay movimiento. Justo como lo teníamos pensado y escrito en el código. Ahora vayamos a ver otro ejemplo.
Para esto vamos a necesitar
Arduino
Cable USB
LED's (de cualquier color )
Cables jumpers (de preferencia de colores diferentes)
Resistencias de 220 Ohm
Sensor PIR
Protoborad
Vamos a comenzar utilizando nuestro cable jumper negro, una punta la vamos a conectar en el agujero de "GND" del Arduino, la otra punta la vamos a conectar en la segunda columna de la protoboard, justo donde esta la figura de "menos". Ahora, vamos a tomar nuestro LED y lo colocaremos en alguna de las columnas, con la resistencia vamos hacer un punte entre la columna negativa y la linea del cátodo.
Ahora conectaremos un segundo jumper de color verde, una punta la vamos a conectar en el pin 13 (aunque puede ser cualquiera), la otra punta ira conectada justo en la fila de donde conectamos el ánodo del LED. Tomaremos un tercer jumper de color amarillo, un apunta la vamos a conectar en la primera columna de la protoboard, justo donde esta la figura de "mas", la otra punta la vamos a conectar en el pin de 5V.
Ya tenemos todo listo para conectar nuestro PIR. Podrás ver que este posee 3 conexiones: señal, potencia y GND, vamos a comenzar conectando la señal, usaremos un jumper de color verde, un apunta la vamos a conectar en el pin 12 del Arduino, la otra punta la vamos a conectar en la conexión señal. Ahora usaremos un jumper de color amarillo, un apunta la vamos a conectar en la columna positiva y la otra punta la vamos a conectar en la conexión potencia. Usando un jumper de color negro, un apunta la vamos a conectar en el pin GND y la otra punta la vamos a conectar en la conexión GND.
Hemos finalizado nuestro montaje. Ahora vamos a la programación.
Comenzaremos nombrando una variable para nuestro LED con el pin correspondiente y otra variable para nuestro sensor PIR con el pin correspondiente y por último nombraremos las variables "pirdato" sin ningún valor, ya que, el programa se encargara de otorgarle dicho valor proveniente del sensor.
Ahora vamos a configurar los pines: Tenemos que led va a emitir la señal, por lo tanto lo vamos a tomar como una salida. Ahora pir va hacer el que va a recibir la señal emitida, por lo que va a funcionar como una entrada.
Igualaremos "pirdato" a la lectura digital del pin 7, tal que: "digitalRead(pir)". Buscamos que el LED se encienda si se detecta movimiento a través del sensor o que este apagado si no se detecta algún movimiento. Entonces vamos a condicionar estas acciones en nuestro código. empezamos con if, si el "pirdato" (la cual ya le asignamos un valor) es igual igual (ya que, estamos realizando una comparación en una condición) a encendido y ¿qué pasa si pirdato esta encendido? En ese caso, escribimos "digitalWrite(led, HIGH)". Y sino se cumple la condición el LED no se encendera, entonces escribiremos "digitalWrite(led, LOW)". Para que nuestra lectura sea mas constante, vamos agregar un delay de 10 milisegundos.
Llego el momento de echar andar nuestro código y...
¡Funciona! Como podrás ver, en el momento en el que hay un movimiento, nuestro led se enciende y cuando se detiene, se apaga. También podemos observar que si el movimiento esta fuera del área de detección, tanto como el LED como el sensor no detectaran nada y no se encenderá.