ARDUINO M1 CLASE 3
CLASE 3
DISPLAY 7 SEGMENTOS
Un
visualizador de siete segmentos, también conocido como SSD por sus siglas en
inglés (seven-segment display),
es un componente electrónico constituido por una serie de ledes. Cada led es un
segmento en forma de una pequeña raya la cual se puede prender y apagar de
manera independiente. Los siete segmentos están dispuestos de tal manera que
forman el número “8”. Usualmente hay también un octavo segmento que se utiliza
para representar el punto decimal.
Ficha técnica del SSD
COM: * Si se trata de un SSD ánodo común se conecta a Vcc.
* Si se trata de un SSD cátodo común se conecta a GND.
Del esquema se puede observar que cada segmento está identificado por
una letra de la A a la G, y P para
el segmento correspondiente al punto decimal.
Los COM sirven de ánodo común o
de cátodo común.
El SSD
para nuestro proyecto es de ánodo común.
Diseño de los dígitos
Cada uno de los siete segmentos puede
estar encendido o apagado. Esto quiere decir que un SSD puede tener 27 = 128 estados diferentes (256 si consideramos el segmento del punto decimal). Sin embargo no todos estos estados son de nuestro interés. Para nuestro proyecto deseamos únicamente desplegar los dieciséis dígitos hexadecimales: del 0 al 9 y de la A a la F. La siguiente imagen muestra el diseño
convencional de cada uno de estos dígitos. Los segmentos encendidos se muestran
en negro, mientras que los apagados están en gris:
Hay que notar que los diseños de la b y la d se encuentran en minúsculas ya que no se pueden representar en mayúsculas sin que se confundan con algún otro dígito.
Al momento de escribir el software para desplegar estos diseños será necesario implementar un poco de lógica de manipulación de bits para decodificar estos números binarios.
Una forma
compacta de representar estos diseños consiste en usar números
binarios, en donde para un SSD cátodo común un bit 0 representa un segmento apagado y un bit 1 representa un segmento encendido, si se trata de un SSD ánodo común un bit 1 representa un segmento apagado y un bit 0 representa un segmento encendidos. A cada bit de un total de 7 (identificados desde la A a la G) le asociamos un segmento específico del SSD, tal como se muestra en la siguiente figura:
A partir de la disposición anterior podemos codificar el diseño de todos
los dígitos hexadecimales usando números binarios para un SSD ánodo común:
Dígito
0:
|
0000001
|
Dígito
1:
|
1001111
|
Dígito
2:
|
0010010
|
Dígito
3:
|
0000110
|
Dígito
4:
|
1001001
|
Dígito
5:
|
0100100
|
Dígito
6:
|
0100000
|
Dígito
7:
|
0001111
|
Dígito
8:
|
0000000
|
Dígito
9:
|
0000100
|
Dígito
A:
|
0001000
|
Dígito
B:
|
1100000
|
Dígito
C:
|
0110001
|
Dígito
D:
|
1000010
|
Dígito
E:
|
0110000
|
Dígito
F:
|
0111000
|
Al momento de escribir el software para desplegar estos diseños será necesario implementar un poco de lógica de manipulación de bits para decodificar estos números binarios.
EJERCICIO SSD - ARDUINO
En este ejercicio vamos a realizar un contador con el display de 7 segmentos, el cual tendrá un modo manual y un modo automático. El modo manual será por medio de 2 pulsadores el un pulsador irá aumentando el dígito y el segundo pulsador disminuirá el dígito entre 0 y F. El modo automático será por medio de un tercer pulsador el cual iniciará un conteo de los 16 dígitos hexadecimales de 0 a F durante 3 veces seguidas.
Materiales:
1) Una placa de Arduino
2) Un protoboard
3) 2 resistencias 220 ohm
4) 1 Display de 7 segmentos ánodo común
5) 3 pulsadores
6) 3 resistencias de 1K ohm
7) Cables de Arduino
CÓDIGO DE PROGRAMACIÓN
DIAGRAMA ELÉCTRICO
CÓDIGO DEL PROGRAMA
Bueno con esto se concluye el curso de Arduino impartido hacia los estudiantes de Tecnología en Sistemas del "INSTITUTO TECNOLÓGICO SUPERIOR NELSON TORRES", Si están interesados en cursos tales como: electrónica básica, electrónica avanzada, proyectos de robótica, domótica, lenguajes de programción, aplicaciones Android ir a la página y buscar mas información o puede contactarse con nosotros mediante formulario, correo electrónico o llamadas telefónicas, no dude en buscarnos estaremos dispuesto a ayudarlo.
//Declaramos los pines de salida, //en el el proyecto asi lo tenemos cableado //Declaracion de pines del a,b,c,d,e,f,g del display de 7 segmentos // a = A3; int b = 13; int c = 7; int d = 6; int e = 8; // f = A4; // g = A5; //Pulsadores int p1=10; int p2=9; int p3=1; int pulsador1=0; int pulsador2=0; int pulsador3=0; int cont=0; //contador void setup(){ //ENTRADAS pinMode(p1,INPUT); pinMode(p2,INPUT); pinMode(p3,INPUT); //SALIDAS pinMode(A3, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(A4, OUTPUT); pinMode(A5, OUTPUT); numerodisplay(cont); } void loop(){ //Lectura de pulsadores pulsador1=digitalRead(p1); pulsador2=digitalRead(p2); pulsador3=digitalRead(p3); //si se presiona p1 el dígito asciende if(pulsador1==HIGH){ cont=cont+1; numerodisplay(cont); if(cont>15) cont=-1; delay(700); } //si se presiona p2 el dígito desciende if(pulsador2==HIGH){ cont=cont-1; numerodisplay(cont); if(cont<0) cont=16; delay(700); } //si se presiona p3 cuenta 3 veces de 0 a F if(pulsador3==HIGH){ for(int i=0; i<3; i++){ for(cont=0;cont<16;cont++){ numerodisplay(cont); delay(500); } } numerodisplay(0); } } //Función para identificar los bits según el número void numerodisplay(int n){ switch(n){ case 0: //Cero escribirEnElDisplay(0,0,0,0,0,0,1); break; case 1: //Uno escribirEnElDisplay(1,0,0,1,1,1,1); break; case 2: //Dos escribirEnElDisplay(0,0,1,0,0,1,0); break; case 3: //Tres escribirEnElDisplay(0,0,0,0,1,1,0); break; case 4: //Cuatro escribirEnElDisplay(1,0,0,1,1,0,0); break; case 5: //Cinco escribirEnElDisplay(0,1,0,0,1,0,0); break; case 6: //Seis escribirEnElDisplay(0,1,0,0,0,0,0); break; case 7: //Siete escribirEnElDisplay(0,0,0,1,1,1,1); break; case 8: //Ocho escribirEnElDisplay(0,0,0,0,0,0,0); break; case 9: //Nueve escribirEnElDisplay(0,0,0,0,1,0,0); break; case 10: //A escribirEnElDisplay(0,0,0,1,0,0,0); break; case 11: //B escribirEnElDisplay(1,1,0,0,0,0,0); break; case 12: //C escribirEnElDisplay(0,1,1,0,0,0,1); break; case 13: //D escribirEnElDisplay(1,0,0,0,0,1,0); break; case 14: //E escribirEnElDisplay(0,1,1,0,0,0,0); break; case 15: //F escribirEnElDisplay(0,1,1,1,0,0,0); break; } } //Función para enviar 0 y 1 lógico a los pines del SSD void escribirEnElDisplay(int va, int vb, int vc, int vd, int ve, int vf, int vg){ digitalWrite(A3,va); digitalWrite(b,vb); digitalWrite(c,vc); digitalWrite(d,vd); digitalWrite(e,ve); digitalWrite(A4,vf); digitalWrite(A5,vg); }
DIAGRAMA ELÉCTRICO
LIQUID CRYSTAL DISPLAY (LCD)
El LCD (liquid crystal display) es un elemento indispensable en la electrónica cuando usamos microcontroladores ya que nos permiten mostrar información de forma muy sencilla y con un coste muy bajo.
Las principales ventajas que presentan sobre los displays numéricos de LEDs es que son capaces de mostrar muchos más caracteres en varias líneas y que su consumo es muy bajo (del orden de 1mA).
En este tutorial, se va a mostrar cómo conectar una pantalla LCD 1602A a
una placa Arduino para mostrar texto por pantalla. Es bien sencillo y necesita
poco material y nada caro.
Estas pantallas constan de 16 pines.
De izquierda a derecha, sus usos son los siguientes:
- Pin 1 – VSS o GND
- Pin 2 – VDD o alimentación
(+5V)
- Pin 3 – Voltaje de
contraste. Se conecta a un potenciómetro.
- Pin 4 – Selección de
registro. Aquí se selecciona el dispositivo para su uso.
- Pin 5 – Lectura/Escritura.
Dependiendo del estado (HIGH o LOW), se podrá escribir o leer datos
en el LCD
- Pin 6 – Enable. Es el pin
que habilita o deshabilita el LCD.
- Pin 7 hasta Pin 14 – Son los pines de
datos por donde se envía o recibe información.
- Pin 15 – El ánodo del
LED de iluminación de fondo (+5v).
- Pin 16 – El cátodo del LED de
iluminación de fondo (GND).
EJERCICIO CON LCD Y ARDUINO
En este ejemplo vamos a imprimir en "HOLA MUNDO" en la primera fila y en la segunda fila pondremos otro mensaje en mi caso pondré "JCTECNOLOGIAS".
Materiales:
1) Una tarjeta de Arduino
2) Un Protoboard
3) Un potenciómetro de 2K ohm
4) Una resistencia 1K ohm
5) Una LCD 16x2
6) Cables de Arduino
Si contamos con una pantalla LCD y la
queremos utilizar con Arduino, debemos hacer las siguientes conexiones:
CÓDIGO DE PROGRAMACIÓN
/* LiquidCrystal Library - Hello World Demonstrates the use a 16x2 LCD display. The LiquidCrystal library works with all LCD displays that are compatible with the Hitachi HD44780 driver. There are many of them out there, and you can usually tell them by the 16-pin interface. This sketch prints "Hello World!" to the LCD and shows the time. The circuit: * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * LCD R/W pin to ground * LCD VSS pin to ground * LCD VCC pin to 5V * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3) Library originally added 18 Apr 2008 by David A. Mellis library modified 5 Jul 2009 by Limor Fried (http://www.ladyada.net) example added 9 Jul 2009 by Tom Igoe modified 22 Nov 2010 by Tom Igoe This example code is in the public domain. http://www.arduino.cc/en/Tutorial/LiquidCrystal */ // include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins //LiquidCrystal lcd(RS, E, D4, D5, D6, D7); LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.clear(); } void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 0); lcd.print("HOLA MUNDO"); lcd.setCursor(0, 1); lcd.print("JCTECNOLOGIAS"); // print the number of seconds since reset: //lcd.print(millis() / 1000); }
SISTEMA INTELIGENTE ASCENSOR
En el siguiente ejercicio vamos a diseñar un sistema inteligente de un ascensor usando Arduino, donde realizará las siguientes funciones: En una LCD se mostrará las ordenes a ejecutar las cuales son: elegir a que piso desea ir dentro del edificio o si está subiendo o bajando el ascensor; para realizar los mandos del control se contará con 3 pulsadores los cuales tendrán como función aumentar o disminuir el número de piso e iniciar el arranque del ascensor; también se contará con un display de 7 segmentos que indicará la posición actual del piso; finalmente usaremos 2 leds para simular el giro de un motor y un sensor de temperatura LM35Z para apreciar la temperatura en la LCD . Para este ejercicio vamos a combinar los diagramas eléctricos de los ejercicios anteriores.CÓDIGO DEL PROGRAMA
#include <LiquidCrystal.h> //LiquidCrystal lcd(RS, E, D4, D5, D6, D7); LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int cond=0; //Declaramos los pines de salida, //en el el proyecto asi lo tenemos cableado //Declaracion de pines del a,b,c,d,e,f,g del display de 7 segmentos // a = A3; int b = 13; int c = 7; int d = 6; int e = 8; // f = A4; // g = A5; //Pulsadores int p1=10; int p2=9; int p3=1; int pulsador1=0; int pulsador2=0; int pulsador3=0; //Variables de ascensor int piso_actual=1; int piso_ir=1; int j=1; //contador //Variables que representarán un motor //motor_arriba -> A6 //motor_abajo -> A7 int temperatura=0; void setup(){ // Inicializa la libreria de la LCD lcd.begin(16, 2); //Limpia todos los caracteres de la LCD lcd.clear(); //ENTRADAS pinMode(p1,INPUT); pinMode(p2,INPUT); pinMode(p3,INPUT); //SALIDAS pinMode(A3, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(A4, OUTPUT); pinMode(A5, OUTPUT); pinMode(A6, OUTPUT); pinMode(A7, OUTPUT); //Función escribrir dígito en en SSD numerodisplay(piso_actual); } void loop(){ //Lectura de pulsadores pulsador1=digitalRead(p1); pulsador2=digitalRead(p2); pulsador3=digitalRead(p3); digitalWrite(A6,LOW); digitalWrite(A7,LOW); temperatura = analogRead(A2); temperatura = ((temperatura*5*100)/1023); //Conversión de un sensor LM35 if(cond==0){ mensaje_inicio(); } cond=1; lcd.setCursor(0, 0); lcd.print("Temperatura:"); lcd.print(temperatura); lcd.setCursor(0, 1); lcd.print("Ir al piso:"); lcd.print(piso_ir); delay(200); lcd.clear(); //si se presiona p1 el piso asciende if(pulsador1==HIGH){ piso_ir=piso_ir+1; if(piso_ir>9) piso_ir=9; if(piso_ir==piso_actual){ piso_ir=piso_ir+1; if(piso_ir>9) piso_ir=9; } delay(700); } //si se presiona p2 el piso desciende if(pulsador2==HIGH){ piso_ir=piso_ir-1; if(piso_ir<1) piso_ir=1; if(piso_ir==piso_actual){ piso_ir=piso_ir-1; if(piso_ir<1) piso_ir=1; } delay(700); } //si se presiona p3 cuenta 3 veces de 0 a F if(pulsador3==HIGH){ if(piso_actual<piso_ir){ digitalWrite(A6,HIGH); lcd.setCursor(0, 0); lcd.print("SERVICIO ASCENSOR"); lcd.setCursor(0, 1); lcd.print(" SUBIENDO...."); for(j=piso_actual;j<=piso_ir;j++){ numerodisplay(j); delay(800); } piso_actual=piso_ir; lcd.clear(); } if(piso_actual>piso_ir){ digitalWrite(A7,HIGH); lcd.setCursor(0, 0); lcd.print("SERVICIO ASCENSOR"); lcd.setCursor(0, 1); lcd.print(" BAJANDO....."); for(j=piso_actual;j>=piso_ir;j--){ numerodisplay(j); delay(800); } piso_actual=piso_ir; lcd.clear(); } } } //Función mensaje de entrada del Sistema del Ascensor void mensaje_inicio(){ lcd.setCursor(0, 0); lcd.print("SISTEMA INTELIGE"); lcd.setCursor(0, 1); lcd.print(" ASCENSOR"); delay(1500); lcd.clear(); lcd.setCursor(0, 0); lcd.print("ISTEMA INTELIGEN"); lcd.setCursor(0, 1); lcd.print(" ASCENSOR"); delay(1000); lcd.clear(); lcd.print("STEMA INTELIGENT"); lcd.setCursor(0, 1); lcd.print(" ASCENSOR"); delay(1000); lcd.clear(); lcd.print("TEMA INTELIGENTE"); lcd.setCursor(0, 1); lcd.print(" ASCENSOR"); delay(2000); lcd.clear(); } //Función para identificar los bits según el número void numerodisplay(int n){ switch(n){ case 0: //Cero escribirEnElDisplay(0,0,0,0,0,0,1); break; case 1: //Uno escribirEnElDisplay(1,0,0,1,1,1,1); break; case 2: //Dos escribirEnElDisplay(0,0,1,0,0,1,0); break; case 3: //Tres escribirEnElDisplay(0,0,0,0,1,1,0); break; case 4: //Cuatro escribirEnElDisplay(1,0,0,1,1,0,0); break; case 5: //Cinco escribirEnElDisplay(0,1,0,0,1,0,0); break; case 6: //Seis escribirEnElDisplay(0,1,0,0,0,0,0); break; case 7: //Siete escribirEnElDisplay(0,0,0,1,1,1,1); break; case 8: //Ocho escribirEnElDisplay(0,0,0,0,0,0,0); break; case 9: //Nueve escribirEnElDisplay(0,0,0,0,1,0,0); break; case 10: //A escribirEnElDisplay(0,0,0,1,0,0,0); break; case 11: //B escribirEnElDisplay(1,1,0,0,0,0,0); break; case 12: //C escribirEnElDisplay(0,1,1,0,0,0,1); break; case 13: //D escribirEnElDisplay(1,0,0,0,0,1,0); break; case 14: //E escribirEnElDisplay(0,1,1,0,0,0,0); break; case 15: //F escribirEnElDisplay(0,1,1,1,0,0,0); break; } } //Función para enviar 0 y 1 lógico a los pines del SSD void escribirEnElDisplay(int va, int vb, int vc, int vd, int ve, int vf, int vg){ digitalWrite(A3,va); digitalWrite(b,vb); digitalWrite(c,vc); digitalWrite(d,vd); digitalWrite(e,ve); digitalWrite(A4,vf); digitalWrite(A5,vg); }
Bueno con esto se concluye el curso de Arduino impartido hacia los estudiantes de Tecnología en Sistemas del "INSTITUTO TECNOLÓGICO SUPERIOR NELSON TORRES", Si están interesados en cursos tales como: electrónica básica, electrónica avanzada, proyectos de robótica, domótica, lenguajes de programción, aplicaciones Android ir a la página y buscar mas información o puede contactarse con nosotros mediante formulario, correo electrónico o llamadas telefónicas, no dude en buscarnos estaremos dispuesto a ayudarlo.
0 comentarios: