dimecres, 31 de desembre del 2014

Uso del transistor para el control de corrientes elevadas.


14 Uso del transistor para el control de corrientes elevadas.

Arduino puede entregar como máximo I=40 mA por cada pin de salida digital, si necesitamos controlar dispositivos con un consumo de corriente mayor debemos utilizar un transistor. Además mediante un transistor podemos manejar tensiones diferentes ( por ejemplo alimentar motores cc de 3V) por lo que nos permite más posibilidades.
Hay básicamente dos tipos de transistores los transistores bipolares BJT, y los de efecto de campo MOS y JFET. [35] Además dentro de cada categoria podemos encontrar transistores NPN, PNP,JFET Canal P, N. Existen fototransistores, Transistores Darlington para grandes potencias y de otros tipos.
Los transistores van encapsulados de distintas formas y mediante la hoja de características (datasheet) del fabricante obtenemos su patillaje y características.


Símbolos
 




Pines

PNP BCE (Base, Colector,Emisor)
NPN BCE (Base, Colector,Emisor)

Canal P GDS (Gate,Drain,Source)
Canal N GDS (Gate,Drain,Source)

Pueden funcionar como interruptores o amplificadores, en nuestro caso utilizaremos un transistor de pequeña potencia, un BC547c, un transistor NPN funcionando como interruptor para el control de un relé y el control de un pequeño motor de CC.
 

Transistor BC547B
Encapsulado TO 92 (Los encapsulados son estándard) [37]


1. Colector
2.Base
3.Emisor

Como elemento de protección del circuito contra corrientes transitorias producidas por la bobina colocamos un diodo 1N4007 polarizado inversamente. [38]

Hoja de datos de BC547 de Fairchild [36]

Control de un relé mediante transistor.
Mediante el pin digital 3 de Arduino saturamos la base del transistor, este actuará como un interruptor .



Materiales:
1 Arduino.
1 Transistor BC547B
1 Resistencia 1kΩ
1 Resistencia 330Ω
1 Diodo 1N4007
1 Relé 5V
cables y una Protoboard
 

Circuito:
Control de Relé mediante transistor.
Esquema:
Esquema eléctrico.

Programa:


Vamos a activar el pin 3 donde está colocada la base del transistor, al activar el pin 3 estará activo durante 5 segundos, luego se desactiv durante 5 segundos mas y comienza el bucle de nuevo. Según el fabricante de relé SONGLE RELAY [39] el consumo es de 71mA (por debajo de los 100mA del TRT) y puede soportar hasta 30 operaciones (ON/OFF) por minuto, dato importante a la hora de calcular la velocidad de conmutación.

Programa con 5 segundos entre transición.
Código:
void setup()
{
  pinMode( 3 , OUTPUT);
}

void loop()
{
  digitalWrite( 3 , HIGH );
  delay( 5000 );
  digitalWrite( 3 , LOW );
  delay( 5000 );
}


Control de un motor de DC mediante transistor.

 
Vamos a controlar un motor mediante una salida PWM (3), para ello utilizamos un transistor BD137 [40] que puede soportar una corriente de colector de 1.5 Amperios.
El motor de juguete funciona con 3V y consume un amperio. Vamos a controlar la velocidad automáticamente. Materiales:

1 Arduino.
1 Transistor BD137
1 Resistencia 1kΩ
1 Diodo 1N4007
cables y una Protoboard


Circuito:

Motor de 3V DC alimentado a baterias.

Esquema:

Esquema .Control motor de 3V DC alimentado a baterias.
Programa:
Programa Ardublock
Código:
int _ABVAR_1_vel = 0 ;

void setup()
{
  pinMode( 3 , OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  _ABVAR_1_vel = 50 ;
  while ( ( ( _ABVAR_1_vel ) < ( 150 ) ) )
  {
    _ABVAR_1_vel = ( _ABVAR_1_vel + 1 ) ;
    analogWrite(3 , _ABVAR_1_vel);
    Serial.print("vel =");
    Serial.print(_ABVAR_1_vel);
    Serial.println();
    delay( 100 );
  }

}


Si queremos controlar el sentido de giro podemos utiliza un puente en H [41], podemos utilizar un Arduino motor shield (http://arduino.cc/en/Main/ArduinoMotorShieldR3) o otros circuitos como el Ardumoto (http://tienda.bricogeek.com/shields-arduino/429-ardumoto-driver-de-motores-para-arduino.html)

Vídeo Youtube

Links:
[35] Transistores. http://es.wikipedia.org/wiki/Transistor
[36] Datasheet: https://www.fairchildsemi.com/datasheets/BC/BC547.pdf
[37] Encapsuldos: http://bricotronika.blogspot.com.es/2013/04/identificacion-de-terminales-en-los.html
[38] http://panamahitek.com/conceptos-basicos-de-electronica-el-diodo/
[39]https://www.ghielectronics.com/downloads/man/20084141716341001RelayX1.pdf
[40]pdf.datasheetcatalog.com/datasheet/fairchild/BD137.pdf
[41]http://es.wikipedia.org/wiki/Puente_H_%28electr%C3%B3nica%29
[42] Vídeo Youtube http://youtu.be/Rr8xFHyV-JI

dissabte, 6 de desembre del 2014

Control de Relés con Ardublock


13 Relés.
Un relé es un interruptor controlado eléctricamente. Se utiliza para controlar dispositivos de mayor potencia. En el caso de Arduino la corriente máxima de cada pin de salida es de 40 mA para 5V y 50mA si trabajamos con 3,3.V, pero ¿qué ocurre si queremos conectar una lámpara de 220V y 500mA? La solución es utilizar un relé que activará Arduino y éste relé cerrará el circuito de alimentación de la lámpara. Si queremos utilizar dispositivos de potencia, podemos utilizar un relé.

Ejemplos de Relés.(wikipedia)
 
Simbología

 
Tipos

Un relé está compuesto de una bobina (circuito electromagnético) y uno o varios contactos (circuito eléctrico).
Activación de una lámpara con un relé.

Uno de los problemas de los relés es el tiempo de accionamiento y su vida útil. Son muy interesantes para cargas que consuman mucha intensidad.
Actualmente existe una gran variedad de Relés y la tendencia es utilizar relés de estado sólido, donde el contacto se sustituye por un interruptor tipo transistor para DC y triac para AC. (DC Corriente contínua y AC Corriente Alterna)
 

Tambien podemos encontrar relés reed que son un cilindro con unas láminas contacto y la bobina arrollada al cilindro, generalmente están integrados con forma de circuito integrado.

 A la hora de elegir un relé tendremos que tener una serie de consideraciones.



  • Tensión de funcionamiento de la bobina. 
  • Intensidad consumida por la bobina.
  • Tiempo de operación (generalmente en ms) 
  • Vida útil (número mínimo de aperturas y cerraduras del contacto) 
  • Tensión máxima soportada por el contacto. 
  • Intensidad máxima soportada por el contacto. 
  • Resistencia y tensión máxima de aislamiento.

Datos de la bobina de un relé Omrom.


Tiempo de operación y vida útil de un relé OMROM.

Activación Relé con pulsador.
Vamos a activar un relé mediante un pulsador de forma que realiza la función de telerruptor. (Un pulso se activa y el siguiente pulso desactiva). Vamos a colocar un led para determinar si está activo o no.

Materiales:
1 Arduino.
1 Resistencia 220 Ω
1 Resistencia 10KΩ
1 LED
1 Pulsador
1 Relé 5V compatible Arduino.
cables y una Protoboard


Circuito:

Circuito activación de una lámpara con un relé.

Es muy importante no confundir el circuito de mando del relé (5V DC) con el circuito de carga (220V AC), por lo que es recomendable probar su funcionamiento primero sin carga. Los circuito conectados a 220V AC tiene riesgo eléctrico, así que mucho cuidado.

Esquema:

 
Esquema. Relé con Arduino.

Programa:

 Código Ardublock. Relé con Arduino.

Código:

bool _ABVAR_1_valor= false ;

void setup()
{
  pinMode( 8 , INPUT);  // entrada pulsador
  pinMode( 4 , OUTPUT); //salida led
  pinMode( 2 , OUTPUT); // salida rele
}

void loop()
{
  if (digitalRead(8))
  {
    _ABVAR_1_valor = !( _ABVAR_1_valor ) ; //cada vez que pulsamos cambiamos valor
  }                                                                               // variable bool_ABVAR_1_valor
  digitalWrite( 4 , _ABVAR_1_valor ); //escribimos en el rele el valor de la variable
  digitalWrite( 2 , _ABVAR_1_valor );
  delay( 300 ); //retardo para evitar cambios bruscos en la variable
}




Video funcionamiento.

Links:
Relés Wikipedia. http://es.wikipedia.org/wiki/Rel%C3%A9
Funcionamiento relé (youtube). http://www.youtube.com/watch?v=QjszJEncew8
PDF Datasheet Relés OMROM http://docs-europe.electrocomponents.com/webdocs/002b/0900766b8002b94f.pdf
Símbolos. http://www.simbologia-electronica.com/simbolos-electricos-electronicos/simbolos-reles.htm
Funcionamiento Youtube https://www.youtube.com/watch?v=87wWrx-4Hwg
Arduino Infowiki: http://arduino-info.wikispaces.com/ArduinoPower

dilluns, 24 de novembre del 2014

Diagramas de flujo y estructuras de control.




11. Diagramas de flujo.

Un flujograma es una representación gráfica de un programa, se recomienda antes de iniciar la programación, realizar el diagrama de flujo para organizar y aclarar las ideas sobre el programa que vamos a realizar.
Veamos los símbolos mas comunes y algunos ejemplos.


Símbolos flujogramas.

Ejemplo: Activar un led cuando se activa un pulsador con un retardo de un segundo.

Activar led con pulsador.
Links:
 
12. Estructuras de control.

Los programas en Arduino se ejecutan en bucle (loop do), es decir se ejecutan las instrucciones una detrás de otra y cuando llega al final, empieza de nuevo.
Pero muchas veces necesitamos modificar el flujo secuencial del programa. Es decir se interrumpe el flujo original para realizar otras secuencias, por ejemplo si realizamos una alarma, tendremos que alterar la secuencia en el momento que un sensor se active para indicarnos que ha saltado la alarma.
En programación se utilizan de forma habitual los contadores, son variables que se incrementan o se decrementan en función de unas entradas. Por ejemplo si diseñamos una empaquetadora de botes y queremos que cada caja contenga 12 elementos, necesitaremos un contador.
Podemos necesitar que el programa se comporte de una forma si se cumplen unas condiciones y de otra si se cumplen otras, por ejemplo en el caso de que la temperatura esté por encima de los 20 grados y el sensor de luz se activa baja el toldo, y si no se cumple estas condiciones deja el toldo subido.
También podemos encontrarnos en el caso que se tengan que ejecutar unas instrucciones hasta que se cumpla una condición. Por ejemplo: activa la bomba de agua del depósito y muestra el valor del nivel del depósito hasta que el sensor de llenado se active, en este momento para la bomba y muestra el mensaje 'depósito lleno'.
Todas las estructuras pueden ser:
  1. Secuenciales (se ejecutan las instrucciones en bucle)
  2. Iteractivas (dependiendo de las entradas se ejecutan de una forma o de otra)
  3. Estructuras avanzadas (son estructuras mas complejas)
Las estructuras de control son fácilmente implementables con Ardublock.


Estructuras de control Ardublock.
Ardublock y las estructuras de control.

Ardublock
Arduino
Función
void setup()
{
pinMode( 1 , INPUT);
pinMode( 2 , OUTPUT);
}
void loop()
{
if (digitalRead(1))
{
digitalWrite( 2 , HIGH );
}
}
Entradas Pin 1
Salidas Pin 2

Si entrada 1 se activa,pondremos la salida 2 en ON
void setup()
{
pinMode( 1 , INPUT);
pinMode( 2 , OUTPUT);
}
void loop()
{
if (digitalRead(1))
{
digitalWrite( 2 , HIGH );
}
else
{
digitalWrite( 2 , LOW );
}
}
Entradas Pin 1
Salidas Pin 2

Si entrada 1 se activa,pondremos la salida 2 en ON sino, la salida 2 en OFF
void setup()
{
pinMode( 1 , INPUT);
pinMode( 2 , OUTPUT);
}
void loop()
{
digitalWrite( 2 , HIGH );
while ( digitalRead(1) )
{
digitalWrite( 2 , LOW );
}
}
Entradas Pin 1
Salidas Pin 2
Activamos la salida Pin 2, mientras esté activa la entrada 1, la salida 2 estará en OFF
(El test se realiza antes de los comandos)
void setup()
{
pinMode( 1 , INPUT);
pinMode( 2 , OUTPUT);
}
void loop()
{
digitalWrite( 2 , HIGH );
do
{
digitalWrite( 2 , LOW );
}
while(digitalRead(1));
}
Entradas Pin 1
Salidas Pin 2
Activamos la salida Pin 2, mientras esté activa la entrada 1, la salida 2 estará en OFF
(En este caso se realiza el test después de los comandos)
int _ABVAR_1_a;
void setup()
{
pinMode( 1 , OUTPUT);
pinMode( 2 , OUTPUT);
}

void loop()
{
for (_ABVAR_1_a=1; _ABVAR_1_a<= ( 5 ); ++_ABVAR_1_a )
{
digitalWrite( 1 , HIGH );
delay( 1000 );
digitalWrite( 1 , LOW );
}
digitalWrite( 2 , HIGH );
}
Entradas Pin 1
Salidas Pin 2
Se utiliza una variable Integer = ABVR_1_a

Se repite 5 veces salida Pin 1 ON, Delay 1 seg Salida Pin 1 OFF, después salida 2 ON
int _ABVAR_1_v1 = 0 ;
void setup()
{
pinMode( 1 , OUTPUT);
}
void loop()
{
for (_ABVAR_1_v1= 1; _ABVAR_1_v1<= ( 12 ); _ABVAR_1_v1++ )
{
digitalWrite( 1 , HIGH );
delay( 1000 );
digitalWrite( 1 , LOW );
delay( 1000 );
}
}
Salidas Pin 1
Se utiliza una variable Integer = ABVR_1_v1
Se repite la secuencia Pin 1 ON, Pin 1 OFF con un retardo de 1 seg y se incrementa la variable ABV_1_v1 cada vez. La repetición son 12 veces.
int _ABVAR_1_v1 = 0 ;
void setup()
{
pinMode( 1 , OUTPUT);
}

void loop()
{
for(_ABVAR_1_v1 = 1;
1<=12?_ABVAR_1_v1 <= 12:_ABVAR_1_v1 >= 12;
1<=12?_ABVAR_1_v1 = _ABVAR_1_v1 + 2:_ABVAR_1_v1 = _ABVAR_1_v1 - 2)
{
digitalWrite( 1 , HIGH );
delay( 1000 );
digitalWrite( 1 , LOW );
delay( 1000 );
}
}
Salidas Pin 1
Se utiliza una variable Integer = ABVR_1_v1
Se repite la secuencia Pin 1 ON, Pin 1 OFF con un retardo de 1 seg y se incrementa la variable ABV_1_v1 cada vez. La repetición son 12 veces en pasos de 2 (6 veces en total, però la variable al final tiene el valor 12)


Sirve para salir de una secuencia
Subrutinas.
Las subrutinas llamadas también subprogramas, procedimientos o funciones son trozos de programa separados del bloque principal y que podemos llamar cuando queramos, la subrutina devuelve el resultado y el programa continua su ejecución en el punto donde estaba.
Imaginemos que queremos implementar un programa y que tenga una función que se repite muchas veces, podemos llamar a la subrutina en cada punto del programa que l necesitemos, con lo que nos ahorramos teclear el código de esta función cada vez. Sirve para estructurar y clarificar los programas.

Ardublock

Arduino
Función


Llamada a la subrutina.





Subrutina con los comandos que ejecuta.
void blink();

void setup()
{
pinMode( 1 , OUTPUT);
}

void loop()
{
blink(); //llamada a la funcion
}

void blink() //funcion
{
digitalWrite( 1 , HIGH );
delay( 1000 );
digitalWrite( 1 , LOW );
delay( 1000 );
}

Llamamos a la funcion blink que produce un parpadeo del led en el pin1 con un retrado de 1 segundo.
Al terminar la subrutina, el programa sigue su curso normal.


Links: