jueves, 13 de junio de 2013

Papa, ¿Y qué es la electricidad?


Si, sé que he hablado antes de electrónica básica, e incluso llegué a exponer la ley de Ohm. Pero hoy voy a hacer un regreso a algo todavía más básico que eso. Hoy voy a tratar de exponer algunos de los fundamentos más básicos de la electricidad.

Esta entrada de hoy la he desarrollado atendiendo al reclamo de todos aquellos miles y miles de comentarios (¿¿¿ :-D ???) que me estáis poniendo en cada una de las entradas pidiéndome que explique fundamentos más básicos.

He de decir y advertir que al poco que tengas una pequeña base de electrónica esta entrada de hoy te será completamente inútil y no te aportará nada en absoluto. Por el contrario, si te estás asomando por primera vez a este mundillo puede que te ayuda a clarificar algún concepto. Por otra parte también pido disculpas a aquellos entendidos del tema que tras leer esta entrada puedan evidenciar pequeñas confusiones o directamente monumentales falacias argumentales. El objetivo que tengo no es hacer definiciones categóricas, sino solo facilitar con algún que otro ejemplo el entendimiento elemental de la electricidad. Y empiezo…

Carga eléctrica
Lo primero a entender, creo yo, es que todo en este mundo tiene una determinada carga eléctrica. Es sencillo. Estamos hechos de átomos que tienen electrones y protones (entre otros bichillos…). Cada elemento básico (de aquellos de la tabla periódica de elementos), tiene una diferente carga eléctrica, y la combinación de esos elementos (en una manzana, un humano, un robot exterminador, o un kilo de plutonio) proporciona a cada cuerpo una diferente carga eléctrica (y no vayas a pensar que la carga eléctrica de esa combinación es la suma de las cargas individuales, es bastante más complejo el tema).

Diferencia de potencial (Voltaje - V)
Atendiendo a lo anterior todos los cuerpos tienen un potencialeléctrico, la diferencia de potencial (también llamada tension, o voltaje) puede entenderse como la diferencia de carga eléctrica (en realidad potencial eléctrico) entre dos cuerpos. El voltaje se mide en voltios (volts), y típicamente se representa con una letra ‘V’ (como la de los lagartos…).
.
Dado que todos los cuerpos y cosas del mundo mundial tienen potencial eléctrico (bueno, ignoro si hay algunas cosas que no lo tienen, como la materia oscura, o como Justin Bieber…) pues entonces existe la posibilidad de medir esa diferencia de potencial de los cuerpos, cosa que puede hacerse con un tester.


Corriente eléctrica (Intensidad - I)
Que haya una diferencia de potencial eléctrico entre dos cuerpos no significa necesariamente que haya corriente eléctrica entre ellos. Por ejemplo, entre la pantalla de mi portátil y el plato de sopa que ha dejado mi nene debe haber alguna diferencia de potencial, pero sin embargo no hay corriente entre ellos. Cuando entre cuerpos con diferencias de potencial se produce una conexión eléctrica entre ellos (por ejemplo, se conecta un cable) se produce un flujo de carga eléctrica (electrones) entre el cuerpo que tiene una carga mayor y el que tiene una menor. Ese flujo eléctrico es lo que se llama intensidad, y suele representarse por la letra ‘I’ y medirse en amperios.
.
La corriente eléctrica se produce entre un “emisor” de electrones (que llamaremos positivo ‘+’) y un receptor de electrones (que llamaremos negativo ‘-’, masa, o tierra). Cuando no hay un punto concreto negativo respecto al que considerar el positivo, se considera que el negativo es cero, o masa (Ground o GND en inglés), y se asocia a una conexión a tierra (que se toma como 0 voltios, siempre respecto al positivo).

Cuando se produce este flujo, y si no hay oposición que lo impida, este flujo de corriente seguirá en el tiempo hasta que la diferencia de potencial entre los dos puntos llegue a cero (es decir ambos puntos origen y destino tengan el mismo potencial eléctrico). En ese momento cesará la corriente. Por supuesto, si tenemos un elemento generador de corriente (como por ejemplo una pila) que mantenga una diferencia de potencial estable entre dos puntos (borne positivo y borne negativo), la corriente seguirá circulando estable y la diferencia de potencial permanecerá hasta que se agote dicha fuente generadora de corriente, la diferencia de potencial entre bornes pase a cero, y por lo tanto deje de haber corriente eléctrica.

Resistencia eléctrica (Resistencia - R)
La resistencia eléctrica es la oposición que deben vencer los electrones para poder desplazarse a través de un conductor, es decir es la oposición que encuentra la corriente eléctrica en su paso por un conductor. La resistencia se suele representar por la letra ‘R’, y se mide en ohms (ohmios) que se representan a su vez con el símbolo (Ω).

Así podemos entender que un conductor eléctrico es un elemento (o cosa) que ofrece una baja resistencia al paso de la electricidad. En general los metales (cobre, hierro, oro, etc…) suelen ser buenos conductores, y con ellos se fabrican cables. El agua es también buen conductor. Por el contrario el plástico, la madera, el aire o tantos otros son malos conductores, ya que ofrecen una muy alta resistencia eléctrica (que podría tender al infinito).

Comprendiendo la ley de Ohm
Como puede intuirse la resistencia R es inversamente proporcional a la Intensidad I. A una mayor resistencia habrá una menor intensidad, y a una mayor intensidad, se encontrará una menor resistencia. Fijaros que en este supuesto el voltaje permanece invariable (siempre que haya un elemento generador eléctrico), es decir, tanto si la resistencia es infinita (y por lo tanto no hay ninguna intensidad –no hay corriente eléctrica-), como si la resistencia es cero (y por tanto hay corriente –flujo de electrones-), el voltaje permanece fijo.
Esto nos lleva a la ley de Ohm:
  •  que dice: V = I * R
  • pero también puede expresarse como: I = V / R
  • o como: R = V / I

Es decir, a mayor resistencia menor intensidad, a mayor intensidad menor resistencia. O lo que es lo mismo a igual resistencia pero mayor intensidad, significa que el voltaje entre los puntos (a un lado y al otro de la resistencia) es mayor, o que a la misma intensidad pero con una resistencia mayor significa que también el voltaje entre los dos puntos era mayor. La ley de Ohm es la base de toda la electrónica y se utilizará continuamente, de ahí a que sea muy necesario que estos conceptos estén muy claros.

El ejemplo de las bañeras de agua
Para ilustrar un poco todo lo anterior (y entenderme que es solo un ejemplo ilustrativo, pero no es científicamente equivalente), podéis imaginaros dos estanques de agua de las mismas dimensiones que están puestos uno al lado del otro al mismo nivel. Sin embargo uno tiene una masa de agua mucho mayor que el otro.

Podríamos (haciendo una serie de falacias argumentales) hacer una equivalencia imaginativa suponiendo que esta masa de agua es algo así como el potencial electrito que contiene la bañera. Las dos bañeras tienen diferente cantidad de agua, por lo tanto en nuestro ejemplo imaginativo es como si tuvieran diferente potencial eléctrico. Es decir, hay una diferencia (imaginativa) de potencial entre las dos.
Ahora suponemos que ponemos en la parte inferior de las bañeras un conducto o tubo de agua que las conecta. Está claro que la bañera con más carga de agua (eléctrica, en nuestra imaginación) transferirá parte de su carga a la bañera que tenga menos. Es decir, se producirá una corriente de agua (imagina corriente eléctrica) entre las dos bañeras. Esta corriente se seguirá produciendo hasta que las dos bañeras tengan la misma masa de agua, es decir, cuando la diferencia de masa (potencial eléctrico) sea cero. En ese momento dejara de haber flujo de corriente entre las dos. Por supuesto que si la bañera con más carga tuviera un grifo permanentemente abierto proporcionándole agua (es decir, un generador de corriente) el flujo seguiría produciéndose eternamente…

En este ejemplo el conductor (tubo de agua) tiene también una resistencia. Puede ser un tubo muy grueso y por lo tanto el intercambio de corriente se produce casi al instante, la resistencia es muy baja;  o un tubo finito lleno de piedras, arena y calamares en su tinta que dificulten el paso del agua. Aun así, si dicho paso es posible aunque sea gota a gota, el flujo de corriente seguirá produciéndose pero está claro que a menor intensidad. Hemos aumentado la resistencia, y por lo tanto ha bajado la intensidad.

Y cuando el cielo nos caiga sobre la tierra
Y ahora otro pequeño ejemplo gráfico para ilustrar todo esto.
.
De todos es sabido que el aire no es un buen conductor eléctrico (no te “picas” cuando pasas por al lado de un enchufe). Sin embargo es posible que en ciertas condiciones especiales, y tras una gran diferencia de potencial entre diferentes elementos (nubes con altas cargas electromagnéticas producidas por la acumulación de agua, corrientes de aire de diferentes temperaturas, y otros efectos atmosféricos) sean capaces de vencer la resistencia del aire al quedar este ionizado. Es entonces cuando vemos que toda la diferencia de potencial entre nubes, o entre estas y la tierra produce esas maravillas que son los rayos y que no dejan de ser una descarga eléctrica por un elemento (el aire) que debido a la ionización se ha convertido momentáneamente en un conductor de electricidad, siempre que hayan realmente diferencias de potenciales muy fuertes entre el origen (nubes) y el destino (otras nubes o la tierra).

jueves, 6 de junio de 2013

Controlar un servomotor con Arduino: magia


Y ahora que ya nos hemos hecho mayores, vamos a empezar a ver cosas más divertidas. La primera de ellas, controlar un servomotor HS-311 con Arduino.

Este servo, muy conocido y usado, suele venir al comprar el kit de iniciación básico de Arduino con sus accesorios.

Antes de empezar, comentar que he tomado prestada la información básica de esta entrada desde aquí (NOOBotics), y también de la página de Arduino UNO, y que las dos me han sido muy útiles.

Para empezar, lo básico es conectar el servo al Arduino. Es sencillito, podéis conectarlo directamente (como en esta imagen de ejemplo), o utilizar la protoboard (como he hecho yo, ver ejemplo abajo), pero lo que hay que hacer es lo mismo:

  • Cable rojo del servo al positivo (pin marcado como 5V de Arduino)
  • Cable negro del servo al negativo (uno de los marcados como GND de Arduino)
  • Cable amarillo del servo al PIN 9 de Arduino (o a cualquiera de los PINs marcados como PWM: Pulse Width Modulation, o modulación por ancho de pulsos), por donde se enviará la señal de control al servo.

Pero..., ¿Cómo funciona el servomotor?. Me gusta que te hagas esta pregunta. :-D  Solo con preguntas como esta conseguirás hacer frente a los robots cuando lleguen..., esto... Trataré de explicarlo con lo que he ido leyendo y aprendiendo por ahí.

De entrada, para que funcione hace falta cargar un programa al Arduino, cosa que más abajo veremos. Pero para entender lo que hará el programa es necesario antes entender como funciona un servo de estos. Un poco de teoría, vamos.

Los que venimos de la nada, o en el mejor de los casos del mundo Lego, un servomotor es un motor en el que le programas la potencia, la dirección del movimiento, y le dices cuanto tiempo ha de estar girando en esa situación. Esa base, aun no siendo mala, no sirve para enfrentarse a un servomotor de modelismo típico como puede ser el HS-311.

Este tipo de servos (como el HS-311) ni siquiera están diseñados para girar continuamente en una misma dirección, de hecho en muchos modelos no son capaces ni siquiera de dar una vuelta completa en una misma dirección. Por el contrario el diseño de los motores ofrece un muy buen control del numero de grados entre 0 y 360 (o el limite menor a 360 que cada fabricante fija) en que puede moverse el eje del motor.
Para hacer una analogía gráfica, podríamos decir que el servo que utilizábamos en Lego WeDo nos permitía directamente mover continuamente las ruedas de un coche, pero no nos permitía moverlas 15 grados. Por el contrario los servos como el HS-311 no nos permiten (directamente) mover las ruedas de un coche, pero si nos permiten decirle a nuestro robot exterminador que levante su brazo ejecutor unos 45º antes de volarnos la cabeza... Para un robot de verdad, al final necesitaremos saber controlar tanto un tipo de motores como otros.

Hasta aquí todo fantástico, Los mundos de Yupi!. Le dices al servo los grados en los que ha de situarse y el va y se sitúa. Pero no. No es tan fácil. Y no es tan fácil porque ¿como le dices al motor la posición en grados en la que ha de situarse?. Pues de entrada hay que saber que todo servo tiene una posición de ángulo mínimo (0 grados) y una posición de ángulo máximo (180 grados). Así que de entrada olvídate de momento de los 360º.
Bueno, pues de lo primero que habrá que hacer por código es establecer los anchos de pulso en microsegundos que se corresponderán con la posición mínima y con la máxima del servo.

¿Y que es el ancho de pulso o PWM?. Pues una buena explicación la he encontrado aquí. Pero yo trataré de explicarlo de nuevo a mi manera para cuando se me haya olvidado (pasado mañana) y tenga que volverlo a leer..., a ver si soy capaz de entenderme... :-).

Pues como dice en esa página la modulación por ancho de pulsos es una técnica para transferir energía mediante una señal cuadrada. En esta imagen podéis ver un buen detalle. La tensión máxima (el valor alto de la señal) que aplicaremos serán unos 5V (volts) puesto que Arduino utiliza ese voltaje con el USB que lo alimenta, y el valor bajo pues serán 0V.

Estos servos, y generalmente por especificaciones del fabricante (o eso creo, y si no pues búscalo por un servicio que han abierto ahora nuevo que se llama internet...) definen según cada modelo cual es el ancho de pulso mínimo que hay que enviar para que se sitúe en el ángulo mínimo (0º) y cuál es el máximo (180º). En nuestro caso (servo HS-311) esos valores de ancho de pulso son 600 microsegundos y 2400 microsegundos respectivamente para min y max (más o menos, vamos, que total esto de la electrónica no es una ciencia exacta... ¿¿¿???).

 Afortunadamente no estamos solos para mover el servomotor. Tenemos un aliado importante, que se llama Arduino. Y arduino tiene un conjunto de PINs (entre ellos el PIN 9) llamados PWM que están justamente diseñados para cosas como esta de mover un servo. Y además de tener Arduino tenemos unas herramientas más, como es un entorno y lenguaje de programación y además una API o librería de servos!!!. Esto nos va a ayudar muchísimo, ya que solo queda realizar un programa como el que se ve más abajo y cargarlo al Arduino.

#include <Servo.h> Servo myservo;  //create servo object int pos = 0;    //servo position int positions[] = {0, 45, 90, 135, 180};  //positions (in degrees) to send to the servo int numPositions = 5; void setup() {   //control servo via pin 9   myservo.attach(9, 650, 2350);   //start serial comm. for debugging   Serial.begin(9600); } void loop() {   int i = 0;   //iterate over positions   for(i = 0; i < numPositions; i++)   {             pos = positions[i];     //print debug output     Serial.println("SETTING:");     Serial.println(pos);     //tell servo to set the new position     myservo.write(pos);     //wait for two seconds     delay(2000);   } }
Básicamente lo que hace el programa es:
  • Incluye la librería "Servo.h"
  • Inicia unas variables, entre ellas un objeto "myservo"
  • Asocia (con attach) el control del servo al PIN 9, y establece los anchos de pulso mínimo y máximo para los grados mínimo (0 grado) y máximo (180 grados) que admite el motor.
  • Establece (con Serial.begin) la velocidad en baudios a 9600 por segundo. Esto ya lo explicare otro día..., si me entero de para que vale aquí... :-( 
  • Y luego entra en un bucle donde (con write) le indica directamente al servo a qué posición en grados a de situarse. En el ejemplo itera continuamente en el mismo bucle pasando el motor continuamente a los grados 0, 45, 90, 135 y 180 de forma indefinida, y esperando un par de segundos en cada posición.
A parte de lo que veis (el programa) esta lo que no veis: la librería "Servo.h" y lo que hay detrás "Servo.cpp" (que si podéis verlo si lo buscáis dentro de la instalación del software de Arduino) y el propio Arduino (que vale!, de verlo lo ves, pero como no te metas en los chips cuesta de pillar que hace y como exactamente... ;-)

Esta librería es la que se encarga de comunicar y transformar a bajo nivel los grados que le indicas a los que quieres que se ponga el servo, a señales específicas (un porron de señales cuadradas tipo PWM) a los PINs de Arduino, y que este hará llegar al servo a través del PIN 9 indicado. Es decir, la magia es lo que no ves. Y lo que solo los magos pueden ver.

Ala!. Y ponlo ya en marcha que por hoy ya esta!.
;-)