Cintillo Institucional
Diferencias entre las revisiones 20 y 21
Versión 20 con fecha 2011-07-13 16:58:41
Tamaño: 12741
Comentario:
Versión 21 con fecha 2011-07-13 16:59:13
Tamaño: 12745
Comentario:
Los textos eliminados se marcan así. Los textos añadidos se marcan así.
Línea 11: Línea 11:
Línea 12: Línea 13:

wiki comunidad

Proyecto Hardware Libre Cenditel

Página Cenditel

wiki Cenditel

Plataforma de Desarrollo Colaborativo

Curso Sensibilización Hardware Libre (Unidad 002)

logohl.png logohl.png logohl.png

== 002/03 Actividad 003 ==

Con esta actividad se busca comenzar con el manejo del puerto serie, su iniciación y sus comandos, que permite la comunicación con la computadora a través de la interfaz del arduino y con el programa processing. Esta actividad se inicia con la descripción del puerto serial, las señales de modulación PWM y servomotores, para finalizar con programas que permitan el manejo del puerto serial y control de servomotores.

El puerto Serie

La mayoría de los microcontroladores están diseñados para trabajar de manera autónoma, es decir sin necesidad de tener comunicación de manera continúa con el computador. El hardware arduino utiliza el puerto serie para la transmisión tanto del código en el momento de la programación, como envío de datos para comunicación con periféricos.

De manera general, para la comunicación serial se utilizan dos lineas, una para el envío y otra para la recepción, llamadas comúnmente como tX y rX, lo que permite tener una comunicación "full duplex", es decir enviar y recibir de manera simultánea.

serie2.png
figura 23.1. Diagrama de una comunicación serie

De la figura 23.1, se pueden observar los principales características de una transmisión por el puerto serie, aprovechamos para realizar una descripción de los principales términos utilizados en la transmisión:

  • Velocidad: es la tasa de velocidad entre el computador y el microcontrolador, típicamente se utiliza una velocidad de 9600 bits por segundo.
  • Bit de Inicio: identifica el inicio de la transmisión.
  • Palabra: el dato que se quiere transmitir.
  • Bit de Parada: Identifica el fin de la transmisión
  • Bit de paridad: es un simple protocolo de detección de errores, se puede configurar paridad par o impar.

Comandos

Arduino para el manejo de puerto serie tiene cinco comandos:

  • Serial.begin();
    • Configura la velocidad de transmisión en baudios (baud rate ejemplo: 9600). esta debe ir dentro de la estructura del void setup().
  • Serial.available();
    • Se una para la recepción de datos desde el puerto serial, se coloca en verdadero cuando hay datos en el puerto serie. Generalmente se usa en una estructura de decisión.
  • Serial.read;
    • Permite la lectura de datos, el valor leído debe guardarse en una variable.
  • Serial.print(data,format);
    • Se utiliza para enviar datos o comentarios (string). Los datos pueden ser enviados en distintos formatos: DEC, HEX, OCT, BIN, BYTE.
  • Serial.println(data,format);
    • De manera similar al anterior, escribe en el puerto serial pero agregando una nueva linea.

Seguridad

La tarjeta Arduino Diecimila no contiene protección contra sobre corriente por el puerto serie. Existe una versión llamada Arduino Duemilanove [1]. Al existir una corriente superior a 500mA el sistema se activa protegiendo el puerto de la PC.

El Servo Motor

Un Servomotor es un dispositivo pequeño que tiene un eje de rendimiento controlado. Este puede ser llevado a posiciones angulares específicas al enviar una señal codificada, al cambiar esta señal enviada al motor la posición angular cambia. Los servomotores se consideran como primer paso en la robótica, cuando se necesite un posicionamiento mecánico preciso, ejemplos de aplicaciones se puede mencionar: El zoom de una cámara, el autoenfoque de un conjunto óptico, aeromodelismo, puertas automáticas, entre muchas otras.

El motor del servo tiene algunos circuitos de control y un potenciómetro que esta conectado al eje central del servo motor. Este potenciómetro permite a la circuitería de control, supervisar el ángulo actual del servo motor. Si el eje está en el ángulo correcto, entonces el motor está apagado. Si el circuito chequea que el ángulo no es el correcto, el motor girará en la dirección adecuada hasta llegar al ángulo correcto. El eje del servo es capaz de llegar alrededor de los 180 grados. Normalmente, en algunos llega a los 210 grados, pero varía según el fabricante. Un servo normal se usa para controlar un movimiento angular de entre 0 y 180 grados.

Si para el control de uno de estos sistemas utilizamos un microcontrolador que además de actuar sobre el servomotor deba realizar otras actividades, se nos planteará siempre el temor de no lograr actuar en los tiempos requeridos por estos sistemas. Sin embargo, la clave de un funcionamiento satisfactorio y de una realización sin mayores complicaciones se basa en la utilización de un cristal de alta frecuencia (20 Mhz) para poder ejecutar todo el trabajo adicional que sea necesario hasta que llegue el momento de refrescar nuevamente el impulso de control del servomotor. Esto debe ir acompañado, por supuesto, de la observación cuidadosa del diagrama de tiempos de nuestra aplicación.

La Señal PWM

La modulación por ancho de pulsos (también conocida como PWM, siglas en inglés de pulse-width modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una senoidal o una cuadrada, por ejemplo), ya sea para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga.

El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en relación con el período. Expresado matemáticamente:

[ANEXAR]

  • D = \frac{\tau}{T}
  • D es el ciclo de trabajo
  • τ es el tiempo en que la función es positiva (ancho del pulso)
  • T es el período de la función

La construcción típica de un circuito PWM se lleva a cabo mediante un comparador con dos entradas y una salida. Una de las entradas se conecta a un oscilador de onda dientes de sierra, mientras que la otra queda disponible para la señal moduladora. En la salida la frecuencia es generalmente igual a la de la señal dientes de sierra, y el ciclo de trabajo está en función de la portadora.

[ANEXAR]

La principal desventaja que presentan los circuitos PWM es la posibilidad de que haya interferencias generadas por radiofrecuencia. Éstas pueden minimizarse ubicando el controlador cerca de la carga y realizando un filtrado de la fuente de alimentación.

El refresco se realiza habitualmente con una frecuencia de 50 veces por segundo, pero es normal y efectivo trabajar entre los 10 y los 30 milisegundos. Por otro lado, el ancho del impulso, es decir, su tiempo de duración, dará la posición u orientación del actuador mecánico. En este punto en particular, se cuando se está constantemente atento a enviar un impulso de duración exacta para evitar oscilaciones mecánicas indeseadas, se centra la complejidad y la cautela al trabajar con servomotores.




003/01 Actividad 003

Prueba de puerto serie ...

Enlaces

Control de PWM con Arduino

Como mencionamos al principio, los servomotores se controlan mediante impulsos de ancho variable que deben refrescarse periódicamente. Esto significa que si dejamos de enviar la señal de control en el tiempo en el que el servomotor lo necesita, éste (a pesar de estar energizado) dejará de mantenerse en la posición preestablecida y adoptará cualquier orientación regida por el esfuerzo al que esté sometido. Es decir, si no mantenemos la señal de control en forma efectiva todo el tiempo que sea necesario, el sistema quedará a merced de las fuerzas externas a la que sea sometido. Por ejemplo, un brazo de palanca dejará de sostener un objeto y se dejará caer todo el trayecto mecánico que pueda recorrer, o un sistema erguido en vertical se caerá hacia atrás o hacia adelante al momento en el que el servomotor deje de “sostener” la aplicación en la posición preestablecida.

onda_20ms.png

motor.png

Conexión del Servo

Conectando un servo las conexiones son de tres cables, y se basan en una normativa de colores que involucran al Rojo como positivo de la alimentación principal, junto a otro cable que puede ser de color Negro o Marrón y que refiere al negativo de alimentación. Un tercer cable, correspondiente al control de posicionamiento del actuador mecánico, es Amarillo o Blanco.

colores.png

Con respecto a la tensión de trabajo de los servomotores suele estar comprendida entre los 3 y los 7 Volts, siendo 5 Volts la tensión más utilizada. La corriente que requiere depende del tamaño del servo (usualmente indicada por el fabricante), esta corriente depende principalmente del par.



Prácticas

Para esta actividad con la señal PWM se diseñaron dos prácticas, donde se trabaja con la señal PWM del arduino, utilizando la "salida analógica" del arduino, en realidad se refiere a la salida PWM, con el inconveniente que esta salida esta pre-configurada


Trabajo con servo motores con librería de arduino


// Controlling a servo position using a potentiometer (variable resistor) 
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> 

#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
 
int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 
 
void setup() 
{ 
  myservo.attach(7);  // attaches the servo on pin 9 to the servo object 
} 
 
void loop() 
{ 
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there 
} 

Sin Librería Arduino

Este nos permite nodificar la frecuencia de la PWM

int potpin = 0;  // analog pin used to connect the potentiometer
int motorpin=9;
//int val;    // variable to read the value from the analog pin
int sensorval;
float val;



void setup()
{
//  myservo.attach(7);  // attaches the servo on pin 9 to the servo object
pinMode (motorpin,OUTPUT);

  TCCR1A = 0x00;  // esto es para setear el timer en uno de los modos de
generación de PWM
  TCCR1B = 0x13; // esto setea el "prescaler" (N), de la siguiente manera:

  // TCCR1B=0x11 --> N=1;  TCCR1B=0x12 -->N=8;  TCCR1B=0x13 -->N=64, etc.
  // N, el famoso "prescaler", es un divisor del clock de la Arduino (16MHz)

  ICR1 = 3000; //  ICR1 es el valor máximo del analogWrite, lo que le
llaman el "TOP"

}

void loop()
{
  sensorval = analogRead(potpin);            // reads the value of the
potentiometer (value between 0 and 1023)
  val = map(sensorval, 0, 1023, 75, 360);     // scale it to use it with
the servo (value between 0 and 180)
//  myservo.write(val);                  // sets the servo position
according to the scaled value
  analogWrite (motorpin,val);
  delay(15);                           // waits for the servo to get there
}




Referencias

hlpd/curso_arduino/uni00203 (última edición 2011-07-15 17:34:37 efectuada por _desactivada_csoto)