Construyendo Un Contador Binario Con

Construyendo un contador binario con Arduino Del poco tiempo que tengo ultimamente para hacer cosillas, el Viernes por f

Views 201 Downloads 1 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Construyendo un contador binario con Arduino Del poco tiempo que tengo ultimamente para hacer cosillas, el Viernes por fin pude ir a la tienda de electrónica para comprar materiales :). Básicamente compre una placa de prototipos, unos leds con resistencias y un LDR ( Resistencia variable según la luz ). De momento dejaremos el LDR para otra entrada y centremonos en las bombillas.

La conexión del circuito es bastante sencilla, simplemente enchufamos la salida digital del arduino al lado positivo del LED poniendo entre medias una resistencia, mientras que el lado negativo de cada LED iría al la conexión de tierra de la placa Arduino.

Como veis en el esquema, nada complicado Montandolo en la placa de prototipos, a mi me ha quedado algo así:

Una vez tenemos el circuito montado, viene la parte de la programación, antes de nada hay que descargarse el genial

entorno de programación de la gente de Arduino. Os lo podeis descargar desde aquí. El código en cuestión sería algo como: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

int outPin[] = {13, 12, 11, 10, 9}; int delayValue = 600; void setup() { int i = 0; for ( i = 0; i < 5; i++) pinMode(outPin[i], OUTPUT); } void loop() { int i = 0, j=0; for ( i = 0; i < 32; i++) { for ( j = 0; j < 5; j++) { if ( ( (i >> j) & 1 ) == 1 ) digitalWrite(outPin[j], HIGH); else digitalWrite(outPin[j], LOW); } delay(delayValue); } }

Como veis es bastante sencillo, declaramos un array con el conjunto de pines a los cuales estan enganchados nuestros LEDs. En la función setup, los configuramos en modo salida. La chicha esta en la función loop(), esta se ejecutará una y otra vez, lo que hacemos es iterar por los 32 numeros que podemos mostrar, ya que tenemos 5 LEDs, y 2 elevado a 5 son 32. Por cada número, encedemos o apagamos cada led correspondiente. La clave esta en el bucle que realiza la operación “(i >> j) & 1”. Cada iteración del bucle divide el

numero en cuestion por 2 y se queda unicamente con el bit de menor valor. Asi sabemos si tenemos que encender o no el LED. Por ejemplo, para mostrar el número 21, que en binario es (10101) deberiamos encender los LEDs 0, 2 y 4 y dejar apagados el resto. El calculo sería: 

LED 0: 21 (10101 & 1) -> 1 , encendido



LED 1: 21 / 2 = 10 (01010 & 1) -> 0, apagado



LED 2: 21 / 4 = 5 (00101 & 1) -> 1, encendido



LED 3: 21 / 8 = 2 (00010 & 1) -> 0, apagado



LED 4: 21 / 16 = 1 (00001 & 1) -> 1, encendido Como vemos, el resultado del calculo es correcto. Básicamente lo que se hace es ir desplazando los bits hacia la derecha y quedandonos con el bit menos significativo. Bueno, pues dada la maravillosa sencillez que caracteriza al Arduino, solo nos queda darle al boton de Upload, y veremos, como las lucecitas empiezan a encenderse. Os dejo un video de mi resultado

Práctica 10 Encender un LED con botón pulsador y luego apagarlo con el mismo botón Posted on 13 Febrero, 2017 by Editor

10.1 Objetivo General: Encender un LED utilizando un botón pulsador, luego apagar el LED utilizando el mismo botón pulsador. Nueva práctica sobre encender una serie de LEDs tipo estrella fugaz, ver Práctica 13.

10.2 Materiales y Métodos: 1. 2. 3. 4. 5. 6. 7. 8.

Un LED. Una tarjeta Arduino Uno-R3 o Arduino Mega 2560. Un cable USB impresora. Un computador. Cables para el montaje del circuito. Tarjeta Protoboard. Una Resistencia Eléctrica de 220 ohm. Un Botón Pulsador.

En la práctica 2 el LED se encendía al presionar el botón, pero si se soltaba el botón el LED se apagaba. En esta práctica se quiere utilizar el botón para que encienda el LED y este se quede encendido a pesar de que se deje de presionar el botón. Luego si se quiere apagar el LED, el código debe dar la posibilidad de al oprimir el mismo botón, el LED se apague. Note que el circuito es el mismo que el de la práctica 2. El código de esta práctica puede ser utilizado en general para inicializar código a ejecutar por Arduino. Por ejemplo, si se diseña un robot móvil seguidor de línea, el código puede ser empleado para activar el funcionamiento del robot.

10.3 Montaje de la práctica: Antes de comenzar la realización del montaje del circuito electrónico, se debe realizar el circuito en el programa Fritzing. Se debe tener en cuenta el conocimiento de cuál es el cátodo y ánodo del LED. Se coloca el ánodo en el pin 13 y el cátodo a tierra (ground), usar el pin 5V y conectar al botón como se muestra en la figura 2:

Figura 2. Montaje del circuito en el programa Fritzing Se observa en la Figura 2 que se está utilizando el Arduino Uno, si se utiliza la tarjeta Arduino Uno-R3 el mismo procedimiento. Como se observa en la Figura 2, el Protoboard nos ayuda a insertar el LED e instalar el circuito a través de cables, al igual que la resistencia eléctrica y el botón pulsador. La línea que esta de color rojo que conecta el LED a la tarjeta Arduino emite los 5V al estar conectado la tarjeta al computador (El computador es capaz de proveerle Arduino 5V). Los 5V como se observa van hacia al botón y luego al cerrarse el circuito le deja pasar al pin 7. Para proteger el circuito y evitar que al pin 7 no le llegue más de 5V, le colocamos al circuito una resistencia eléctrica, la cual llevara en gran parte de esa señal a tierra. Luego que tengamos armado el circuito en el programa Fritzing, se comienza con el desarrollo del programa en el IDE de Arduino.

10.3 IDE de Arduino para la práctica: – Se selecciona la tarjeta Arduino que se esta utilizando sea Arduino Uno-R3 o Arduino Mega 2560. – Se selecciona el Puerto Serial. Bajo que puerto USB se va a conectar el Arduino con el computador. – Se empieza a realizar el código: 

Inicialmente debemos darle un nombre de qué consiste el codigo, esto se hace a través del símbolo //, se puede colocar el título de la







práctica o del programa en sí. También se puede utilizar como comentarios dentro del programa. Se declaran las variables. En la práctica se declaran de tipo constante, una variable que no cambiara durante el desarrollo del programa, su comando es const, además se debe especificar qué tipo de datos se almacenará en la constante, en este caso será entero y su comando es int, luego se le da el nombre de la variable; en la tarjeta Arduino se coloca el ánodo en el pin 13, la variable se le asignara el valor de 13. También se declara la variable botón en el pin 7 y una variable entero val igual a cero (0), la diferencia de las demás variables es que la variable val no será constante va a variar entre 0 y 1, en función de si el botón está presionado o no. Se define si la variable declarada son de tipo entrada o de salida, para eso se utiliza el comando void setup(), se abre corchete ({) para saber qué es lo que contiene ese comando y al finalizar el comando se cierra corchete (}). Internamente del corchete se declara que la variable LED es de salida, esto se realiza a través del comando pinMode, este a su vez necesita como argumento la variable y el tipo de señal de la misma, es decir pinMode(LED,OUTPUT); en la que OUTPUT indica que la señal saldrá del pin 13 permitiendo encender el LED. Para definir el botón pulsador lo importante es definir el pin donde está conectado el boton (pin 7), este se define en la programación en vez de ser un OUTPUT es un INTPUT, cada vez que el reciba en ese INPUT él va a tomar una acción; la cual es decirle Arduino que tome una señal digital en el pin 13 y encienda el LED, su comando será pinMode(BONTON,INPUT). Luego de definir las variables, se procede a realizar la estructura del código a través del comando voidloop (), de igual manera se abre corchete({) y se cierra (}) luego de terminar su cumplimiento. Internamente del corchete se establecen las instrucciones que ejecutara Arduino continuamente. Se utilizara la variable val la cual leerá digitalmente lo que sucede en el pin 7 (botón), su comando seria digitalRead(BOTON). La práctica permite introducir otra estructura de programación la cual es if, la que significa si en español. La estructura if es un condicional que permite decidir en función del valor de la variable val, si este es alto (HIGH=1) o si es bajo (LOW=0). Se utiliza una variable estado (state) que registrará los cambios de HIGH y LOW cuando se pulsa el botón de esta manera se crea un suiche de encendido que luego al volver a





presionar sirve para apagar lo que esté dentro del if que contenga la variable state. Para que el LED se encienda, si state==1 se utiliza el comando digitalWrite(LED,HIGH). Para quel LED pueda apagarse se utiliza el mismo comando digitalWrite pero indicándole esta vez una señal baja LOW, esto cuando el state esté en 0. Al terminar el desarrollo del programa se debe compilar para verificar si existen errores dentro del codificado. Luego si no existen errores se debe cargar el código en la tarjeta Arduino para que lo ejecute.

NOTA: Para quel IDE de Arduino pueda entender los comandos es necesario que al final de cada instrucción se coloque punto y coma (;). En la siguiente imagen se mostrara como quedo plasmado en el IDE de Arduino, los procedimientos anteriormente señalados: // Práctica encender LED con botón pulsador y luego apagar LED con el mismo //boton pulsador const int LED =13; const int BOTON = 7; int val = 0; //val se emplea para almacenar el estado del boton int state = 0; // 0 LED apagado, mientras que 1 encendido int old_val = 0; // almacena el antiguo valor de val void setup(){ // definir si la variable es de entrada // o salida. pinMode(LED,OUTPUT); // establecer que el pin digital es una señal de salida pinMode(BOTON,INPUT); // y BOTON como señal de entrada } void loop() { // loop = realice un lazo continuamente val= digitalRead(BOTON); // lee el estado del Boton if ((val == HIGH) && (old_val == LOW)){ state=1-state; delay(10); } old_val = val; // valor del antiguo estado if (state==1){ digitalWrite(LED, HIGH); // enciende el LED } else{ digitalWrite(LED,LOW); // apagar el LED } }

Algoritmo 1 Código para encender y apagar un LED utilizando un botón pulsador. Implementación del algoritmo 1 en el simulador https//123d.circuits.io:

https://circuits.io/circuits/3991652-practica-10-encender-un-led-conboton-pulsador-y-luego-apagarlo-con-el-mismo-boton

Práctica 13 Encender una secuencia de varios LEDs (Estrella fugaz) Posted on 5 Enero, 2018 by Editor

13.1 Objetivo General: Encender una secuencia de varios LEDs simulando una estrella fugaz.

Un conjunto de 12 LEDs serán encendidos de forma secuencial. Se simula con este práctica el comportamiento de una estrella fugaz.

13.2 Materiales y Métodos: 1. 2. 3. 4. 5. 6. 7.

12 LEDs (Colores: Amarillo, Verde y Rojo). Una tarjeta Arduino Uno-R3 o Arduino Mega 2560. Un cable USB impresora. Un computador. Cables para el montaje del circuito. Tarjeta Protoboard. 12 Resistencias Eléctrica de 220 ohm.

13.3 Montaje de la práctica: Antes de comenzar la realización del montaje del circuito electrónico, se debe realizar el circuito en el programa TinkerCad. Cada LED será conectado tal como lo hicimos en la Práctica 1 donde encendimos y apagamos un LED, o como en la Práctica 11 donde encendimos una secuencia de LEDs simulando un semáforo. Se van a usar los pines del 2 al 13 para conectar cada uno de los 12 LEDs, ver Figura 2:

Figura 2. Montaje del circuito en el programa TinkerCAD

Se observa en la Figura 2 que se está utilizando el Arduino Uno, si se utiliza la tarjeta Arduino Uno-R3 el mismo procedimiento. Como se observa en la Figura 2, el Protoboard nos ayuda a instalar los LEDs e instalar el circuito a través de cables, al igual que las resistencias. Luego que se tiene armado el circuito en el programa TinkerCad, se comienza con el desarrollo del programa en el IDE de Arduino.

13.4 IDE de Arduino para la práctica: – Se selecciona la tarjeta Arduino que se esta utilizando sea Arduino Uno-R3 o Arduino Mega 2560. – Se selecciona el Puerto Serial. Bajo que puerto USB se va a conectar el Arduino con el computador. – Se empieza a realizar el código: 



Inicialmente debemos darle un nombre de qué consiste el código, esto se hace a través del símbolo //, se puede colocar el título de la práctica o del programa en sí. También se puede utilizar como comentarios dentro del programa. Se declaran las variables. En esta práctica introduciremos un tipo de variable que no ha sido utilizada en las prácticas anteriores y es los vectores o arreglos. En concreto se crea un vector del tipo entero intpinArray[ ]={2,3,….}. Los corchetas indican que se esta declarando un vector. Para seleccionar una entrada específica del









vector se usa pinArray[1] y dará como resultado 3. Los vectores en el arduino IDE van desde 0 hasta n. Se declaran variables del tipo entero que definen el tiempo entre encender una luz y otra (waitStart), el número de LEDs que se encienden simultáneamente (tailLength) y el número de LEDs (lineSize). Las tres variables son del tipo int. En el segmento de void setup se declara que cada componente del vector pinArray es del tipo OUTPUT . Esto se hace de forma compacta utilizando un lazo for que va desde 0 hasta que i sea menor ( lt ) al número de LEDs. En el segmento de void setup se indica que enciendan la cantidad de LEDs indicada en tailLength, luego mediante una instrucción if se establece que a partir del LED tailLength encienda el siguiente pero apague el último de la cola. Así sucesivamente hasta llegar al final del número de LEDs Al terminar el desarrollo del programa se debe compilar para verificar si existen errores dentro del codificado. Luego si no existen errores se debe cargar el código en la tarjeta Arduino para que lo ejecute.

NOTA: Para quel IDE de Arduino pueda entender los comandos es necesario que al final de cada instrucción se coloque punto y coma (;). En la siguiente imagen se mostrara como quedo plasmado en el IDE de Arduino, los procedimientos anteriormente señalados: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

//Estrella fugaz int pinArray [] = {2,3,4,5,6,7,8,9,10,11,12,13 }; // Vector donde se van a declarar int waitStart= 200; // Tiempo entre encender un LED y otro int tailLength = 4; // Numero de LEDs activos int lineSize = 12; // Numero total de LEDs void setup() { int i; for (i=0; i< lineSize; i++) { pinMode(pinArray[i], OUTPUT); } } void loop() { int i; int tailCounter = tailLength; // Se establece un contador con los LEDS //que deben encenderse al mismo tiempoI set up the length in a counter

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

for (i=0; i 0) tailCounter--; } for (i=(lineSize-tailLength); i 0) { //Si se detecta algun pulso entrara a la condicion Numero = Serial.parseInt(); //Convierte en numero lo que se ingrese desde el monitor serial if (Numero == 1){ //Si es 1 realizara los siguientes pasos donde aplicaran para todos los numeros Serial.println("Numero uno 1000"); //Se despliega el mensaje PrenderLeds(1,0,0,0); //Se manda un 1 en la posicion del led a prender y un 0 para apagarlo } if (Numero == 2){ Serial.println("Numero dos 0100"); PrenderLeds(0,1,0,0); } if (Numero == 3){

Serial.println("Numero tres 1100"); PrenderLeds(1,1,0,0); } if (Numero == 4){ Serial.println("Numero PrenderLeds(0,0,1,0); } if (Numero == 5){ Serial.println("Numero PrenderLeds(1,0,1,0); } if (Numero == 6){ Serial.println("Numero PrenderLeds(0,1,1,0); } if (Numero == 7){ Serial.println("Numero PrenderLeds(1,1,1,0); } if (Numero == 8){ Serial.println("Numero PrenderLeds(0,0,0,1); } if (Numero == 9){ Serial.println("Numero PrenderLeds(1,0,0,1); } if (Numero == 10){ Serial.println("Numero PrenderLeds(0,1,0,1); } if (Numero == 11){ Serial.println("Numero PrenderLeds(1,1,0,1); } if (Numero == 12){ Serial.println("Numero PrenderLeds(0,0,1,1); } if (Numero == 13){ Serial.println("Numero PrenderLeds(1,0,1,1); } if (Numero == 14){ Serial.println("Numero PrenderLeds(0,1,1,1); } if (Numero == 15){ Serial.println("Numero PrenderLeds(1,1,1,1); } if (Numero > 15){ Serial.println("Numero PrenderLeds(0,0,0,0); } } }

cuatro 0010");

cinco 1010");

seis 0110");

siete 1110");

ocho 0001");

nueve 1001");

diez 0101");

once 1101");

doce 0011");

trece 1011");

catorce 0111");

quince 1111");

fuera de rango");

Vídeo: Para abrir el Monitor serial basta con la combinacion de teclas Ctrl + Shift + M o directo desde el IDE de arduino en la opcion de Herramientas>Monitor serial

/* Contador númerico ascendente y descendente con 2 botones uno para incrementar y el otro para decrementar

const int PinContador const int PinUpDown = 10;

= 9;

const int tiempoAntirebote = 10; int cuenta = 0; el botón byte BtnContador; byte BtnContadorAnt; byte BtnUpDown; byte BtnUpDownAnt; byte UpDown = true; decremetna

*/

// boton de Incr conectado al pin 10 // boton de Decr conectado al pin 9

// lleva la cuenta de las veces que presionamos

// UpDown = true incrementa Updown = false

const byte pin[] = {2,3,4,5,6,7,8}; // 0 1 2 3 4 const byte segmento[] = {0b1111110, 0b0110000, 0b1111001, 0b1111001, 0b0110011, // 5 6 7 8 9 0b1011011, 0b1011111, 0b1110000, 0b1111111, 0b1111011}; //Función antirebote botón inicio boolean antirebote(byte pin) { int contador = 0; boolean estado; boolean estadoAnt;

// guarda el estado del botón // guarda el último estado del botón

do { estado = digitalRead(pin); // Leer el estado del botón y guardarla en la variable "estado" if(estado != estadoAnt) { // comparamos el estado actual del botón con el Ant contador = 0; // si es diferente contador va a valer 0 y reiciamos el contador, "!=" significa diferente a estadoAnt = estado; // guardamos el valor de "estado" que leimos en "estadoAnt" } else { contador = contador + 1; // en caso de que sea igual "contador" sumará 1 } delay(1); } while(contador < tiempoAntirebote); return estado; } // Función antirebote botón fin

void actualizarNumero() { for (int i=0; i