|   FOROS      |         |     KIO4 |      
   Inicio B4A (Basic4Android) App inventor 2 WAMP - PHP - MySQL
   Elastix - VoIP Cosas de Windows Webs interesantes Arduino
  Estación meteorológica Visual Basic Script (VBS) Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

14.- Display de 7 segmentos. Medidor EMF (final de la página).

- Hay dos tipos de Display de 7 segmentos, de Ánodo común y de Cátodo común.

Ten cuidado que el terminal central arriba y abajo es el mismo.

En mi caso voy a utilizar el Ánodo común.

Tendré que alimentarlo con tensión positiva en Vcc (HIGH).

Para que se enciendan los segmentos LED tendré que ponerlos a 0 V (LOW).

Siempre verás una resistencia para cada segmento LED, en mi caso para simplificar el circuito solo utilizo una resistencia de unos 470 óhmios. Cambiará la luminosidad según la cantidad de segmentos encendidos, pero el montaje es válido para hacer pruebas.

- Bajo a LOW los segmentos LED que quiero iluminar según el número deseado.

- Cada vez que dibujo un número debo borrar los segmentos LED anteriores, los borro todos. Para borrarlos subo los segmentos a HIGH.

 

Código
/*
  Juan A. Villalpando
  kio4.com
  agosto 2015
 */

/* Display de 7 segmentos de Ánodo común.
*/

#define a 2
#define b 3
#define z 4 // He utilizado la z en vez de la c. La c da error.
#define d 5
#define e 6
#define f 7
#define g 8
int tiempo=500;

// En el setup establecemos los parámetros iniciales.
void setup() {
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(z, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
}

void loop() {
   uno();
   delay(tiempo);
   dos();
   delay(tiempo);
   tres();
   delay(tiempo);
   cuatro();
   delay(tiempo);
   cinco();
   delay(tiempo);
   seis();
   delay(tiempo);
   siete();
   delay(tiempo);
   ocho();
   delay(tiempo);
   nueve();
   delay(tiempo);
   cero();
   delay(tiempo);
}

void borrado(){
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(z,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}

void uno(){
borrado();
digitalWrite(b,LOW);
digitalWrite(z,LOW);
}

void dos(){
borrado();  
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(g,LOW);
digitalWrite(e,LOW);
digitalWrite(d,LOW);
}

void tres(){
borrado();
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(g,LOW);
digitalWrite(z,LOW);
digitalWrite(d,LOW);
}

void cuatro(){
borrado();
digitalWrite(b,LOW);
digitalWrite(z,LOW);
digitalWrite(g,LOW);
digitalWrite(f,LOW);
}

void cinco(){
borrado();
digitalWrite(a,LOW);
digitalWrite(z,LOW);
digitalWrite(d,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}

void seis(){
borrado();
digitalWrite(a,LOW);
digitalWrite(z,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}

void siete(){
borrado();
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(z,LOW);
}

void ocho(){
borrado();
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(z,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}

void nueve(){
borrado();
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(z,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}

void cero(){
borrado();
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(z,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
}

_________________
- Conexionado.

Normalmente verás el conexionado del Display de 7 segmento como indico en el dibujo de abajo, pero para hacer pruebas puedes utilizar el primer esquema, más simple y efectivo para realizar esta práctica.

____________________________________

- Dos códigos obtenido en internet.

http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html

Código 1
 
 


// Arduino 7 segment display example software 
// http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html 
// License: http://www.opensource.org/licenses/mit-license.php (Go crazy) 

// Define the LED digit patters, from 0 - 9 
// Note that these patterns are for common cathode displays 
// For common anode displays, change the 1's to 0's and 0's to 1's 
// 1 = LED on, 0 = LED off, in this order: 


// Arduino pin: 2,3,4,5,6,7,8 
byte seven_seg_digits[10][7] = { 
{ 1,1,1,1,1,1,0 }, // = 0 { 0,1,1,0,0,0,0 }, // = 1 { 1,1,0,1,1,0,1 }, // = 2 { 1,1,1,1,0,0,1 }, // = 3 { 0,1,1,0,0,1,1 }, // = 4 { 1,0,1,1,0,1,1 }, // = 5 { 1,0,1,1,1,1,1 }, // = 6 { 1,1,1,0,0,0,0 }, // = 7 { 1,1,1,1,1,1,1 }, // = 8 { 1,1,1,0,0,1,1 } // = 9 }; void setup() {  pinMode(2, OUTPUT);  pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); writeDot(0); // start with the "dot" off } void writeDot(byte dot) { digitalWrite(9, dot); } void sevenSegWrite(byte digit) { byte pin = 2; for (byte segCount = 0; segCount < 7; ++segCount) { digitalWrite(pin, seven_seg_digits[digit][segCount]); ++pin; } } void loop() { for (byte count = 10; count > 0; --count) { delay(1000); sevenSegWrite(count - 1); } delay(4000); }

 

Código 2
// Longer, more obvious example for Arduino 7 segment display 
// http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html 
// License: http://www.opensource.org/licenses/mit-license.php (Go crazy) 

void setup() { 
pinMode(2, OUTPUT); 
pinMode(3, OUTPUT); 
pinMode(4, OUTPUT); 
pinMode(5, OUTPUT); 
pinMode(6, OUTPUT); 
pinMode(7, OUTPUT); 
pinMode(8, OUTPUT); 
pinMode(9, OUTPUT); 
digitalWrite(9, 0); // start with the "dot" off 
} 

void loop() { 
// write '9' 
digitalWrite(2, 1); 
digitalWrite(3, 1); 
digitalWrite(4, 1); 
digitalWrite(5, 0); 
digitalWrite(6, 0); 
digitalWrite(7, 1); 
digitalWrite(8, 1); 
delay(1000); 
// write '8' 
digitalWrite(2, 1); 
digitalWrite(3, 1); 
digitalWrite(4, 1); 
digitalWrite(5, 1); 
digitalWrite(6, 1); 
digitalWrite(7, 1); 
digitalWrite(8, 1); 
delay(1000); 
// write '7' 
digitalWrite(2, 1); 
digitalWrite(3, 1); 
digitalWrite(4, 1); 
digitalWrite(5, 0); 
digitalWrite(6, 0); 
digitalWrite(7, 0); 
digitalWrite(8, 0); 
delay(1000); 
// write '6' 
digitalWrite(2, 1); 
digitalWrite(3, 0); 
digitalWrite(4, 1); 
digitalWrite(5, 1); 
digitalWrite(6, 1); 
digitalWrite(7, 1); 
digitalWrite(8, 1); 
delay(1000); 
// write '5' 
digitalWrite(2, 1); 
digitalWrite(3, 0); 
digitalWrite(4, 1); 
digitalWrite(5, 1); 
digitalWrite(6, 0); 
digitalWrite(7, 1); 
digitalWrite(8, 1); 
delay(1000); 
// write '4' 
digitalWrite(2, 0); 
digitalWrite(3, 1); 
digitalWrite(4, 1); 
digitalWrite(5, 0); 
digitalWrite(6, 0); 
digitalWrite(7, 1); 
digitalWrite(8, 1); 
delay(1000); 
// write '3' 
digitalWrite(2, 1); 
digitalWrite(3, 1); 
digitalWrite(4, 1); 
digitalWrite(5, 1); 
digitalWrite(6, 0); 
digitalWrite(7, 0); 
digitalWrite(8, 1); 
delay(1000); 
// write '2' 
digitalWrite(2, 1); 
digitalWrite(3, 1); 
digitalWrite(4, 0); 
digitalWrite(5, 1); 
digitalWrite(6, 1); 
digitalWrite(7, 0); 
digitalWrite(8, 1); 
delay(1000); 
// write '1' 
digitalWrite(2, 0); 
digitalWrite(3, 1); 
digitalWrite(4, 1); 
digitalWrite(5, 0); 
digitalWrite(6, 0); 
digitalWrite(7, 0); 
digitalWrite(8, 0); 
delay(1000); 
// write '0' 
digitalWrite(2, 1); 
digitalWrite(3, 1); 
digitalWrite(4, 1); 
digitalWrite(5, 1); 
digitalWrite(6, 1); 
digitalWrite(7, 1); 
digitalWrite(8, 0); 
delay(4000); 
} 
      

 

____________________________________

- ¿Cómo podríamos conectar 4 Display?

En principio nos damos cuenta que el Arduino no tiene tantos terminales como para conectar tantos Display.
Para solventarlo se utiliza la técnica del Multiplexado.

Se conectan los 4 Display a los mismos terminales del Arduino, digamos que se conectan en "paralelo".
Las conexiones a, b, c, d, e, f, g van a los mismos terminales del Arduino en los 4 Display.

Luego por el terminal de alimentación de cada Display se envía un pulso. De tal manera que solo está iluminado un Display cada vez que llega su pulso.
Pero los pulsos llegan tan rápidos que parecen que están los 4 Display encendidos.

A la vez que llega un pulso a cierto Display sale por los terminales a...g la información correspondiente a ese Display, es decir la información que le corresponde a un Display sale al mismo tiempo que le llega su pulso.

Es preferible utilizar pantallas LCD como comento en otro tutorial, ya que con ese tipo de pantalla obtenemos unos resultados más vistosos y es más fácil de utilizar.

_________________

- Propuestas.

- Realiza un contador que cuente incrementando y decrementando.

- Medidor de EMF

- Con una resistencia de 3,3 M, realiza un detector de campo magnético:

http://www.instructables.com/id/Arduino-EMF-Detector/

Conectar un cable de 5 cm al terminal A5 del Arduino y el otro extremo a una resistencia de 3,3 M. El otro extremo de la resistencia a Gnd del Arduino.

Conecta un cable que hará de antena de unos 21 cm al extremo de la resistencia que no va al Gnd.

Código: 7_seg_EMF_detector.rtf

Una vez terminado lo acercas y alejas a un router con wifi para comprobar su funcionamiento.

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información