SERVOMOTOR MG995

Servomotor TowerPro MG995 con alto Torque, hasta 15Kg-cm. Robusto, alto rendimiento, compacto, con engranes de Metal, tamaño estándar, incluye accesorios y tornillos para montarlo en cualquier proyecto. Ideal para proyectos de Electronica, Robotica... etc.


Se puede utilizar con Arduino o cualquier Microcontrolador, compatible con tarjetas controladoras de Servos.

CARACTERÍSTICAS 
 
  • Dimensiones: 40.7 * 19.7 * 42.9mm
  • Peso: 55g
  • Torque: 8.5kg/cm (4.8V), 10kg/cm (6V)
  • Deadband settings: 4 microseconds
  • Tipo de conector: JR, FUTABA General, Conector universal para la mayoría de los receptores de radio control
  • Ángulo de rotación: Un máximo de 180º
  • Operating current: 100mA
  • Tensión de funcionamiento: 3-7.2V
  • Rango de Temperatura: -30 a +60 °C
  • Velocidad de Operación (4.8V sin carga): 0.2 seg / 60 grados
  • Velocidad de Operación (6V sin carga): 0.16 seg / 60 grados

CONEXIONES


Qué es y como instalar Geany en Ubuntu para programar en C

Geany es un editor de texto pequeño y ligero con características básicas de entorno de desarrollo integrado (IDE). Está disponible para distintos sistemas operativos, como GNU/Linux, Mac OS X y Microsoft Windows. Es distribuido como software libre bajo la Licencia Pública General de GNU.



Algunas de sus principales características:
  • Sirve para programar en varios lenguajes como C, Java, Pascal, HTML, CSS, PHP y muchos más. 
  • Se pueden gestionar proyectos grandes de forma sencilla. 
  • Tiene la función de autocompletado, con la cual hay que tener cuidado ya que nos puede llevar a cometer errores de sintaxis, pero siendo cuidadoso esta muy bien. 
  • Se le pueden instalar plugins para añadirle funcionalidades. 
  • El código se puede “plegar” por secciones, para tener una vista general de todo el texto. 
  • Es un entorno bastante ligero y fácil de usar. 
  • Colorea nuestro código en función del lenguaje que estemos usando para una más fácil búsqueda de textos. 
  • Permite búsqueda de textos concretos en el código. 
  • Está disponible para los principales sistemas operativos. Geany
  • Numeración de las líneas del documento.
Opciones para instalar Geany
  
1.- Instalar este programa en Ubuntu añadiendo el PPA correspondiente, para ello tenéis que abrir la Terminal y escribir el siguiente comando:

 sudo add-apt-repository ppa:geany-dev/ppa

Ahora toca recargar los repositorios de Ubuntu con este otro comando:

 sudo apt-get update 

Y por ultimo, ya hemos agregado el PPA, ahora solo nos falta instalar el programa con este otro comando:

sudo apt-get install geany geany-plugins

Ahora, después de que termine el proceso ya tendremos a nuestra disposición este excelente programa con el cual podremos escribir código.

2.- Instalar Geany directamente desde "Centro de software de Ubuntu"
Está disponible para ser instalado sin necesidad de acceder al terminal.


Una vez instalado el programa necesitamos configurar varios parámetros para compilar el código escrito en C y después ejecutar el programa generado.

Es necesario acceder al menú Construir y acceder a la opción Establecer comandos de construcción. Nos aparecerá una ventana donde tenemos que introducir los valores que faltan.


Pasos a seguir para compilar y ejecutar un programa con geany

  • Los ficheros se han de guardar en la carpeta personal.
  • Los ficheros tienen la extensión .c, Ejemplo: areaCirculo.c
  • Pulsar la tecla “F9” para compilar y construir el ejecutable.
  • A continuación pulsar  “F5” para ejecutar el programa.


La polea reductora

La polea reductora es un operador compuesto de un motor y una polea doble que están unidos mediante una correa.


Se emplea para transformar el movimiento rápido y con poca fuerza, del motor en el movimiento, más lento pero con mayor fuerza de la polea.

Entre otras aplicaciones, la polea reductora sirve para construir mecanismos que son capaces de elevar pesos, vehículos que se desplazan, etc... empleando para ello motores de poca potencia

Cómo construir una polea reductora

Si no se tiene una polea, se puede fabricar una utilizando cartón o contrachapado de 10 mm de grosor. El tamaño de esta polea dependerá de la carga y velocidad, cuanto mayor sea la carga, tanto mayor deberá ser el radio de la polea.



Se coloca la polea en un eje, fijando la polea a dicho eje, tiene que quedar solidaria a dicho eje. Si el eje se ha fabricado utilizando varilla roscada, la polea se fija mediante tuercas y arandelas.

A la hora de colocar el motor eléctrico , se tendrá en cuenta que:

Si el motor está muy lejos de la polea, cuando se unan, la goma elástica que los une quedará muy tensa y al motor le costará más trabajo hacer girar la polea.

  • Si el motor está muy próximo a la polea, la goma que los une estará poco tensa, el motor patinará y la polea no se moverá.

  • Si el eje del motor y el de la polea son convergentes, cuando giré el motor la gomilla se escapará .

  • Si el eje del motor y el de la polea son divergentes, la gomilla rozará con el motor y le hará perder fuerza.

Una vez que sabemos cuales son la posición y distancia adecuadas, se fija el motor a la base. Fijar el motor a la base

Se conecta la correa de la polea con el eje del motor.

¿Cómo es la estructura general de un programa en Arduino?

Un programa de Arduino se denomina sketch o proyecto y tiene la extensión .ino 

La estructura básica del lenguaje de programación de Arduino es bastante simple y se compone de al menos dos partes. Estas dos partes necesarias, o funciones, encierran bloques que contienen declaraciones, estamentos o instrucciones.

setup()

La función setup() se invoca una sola vez cuando el programa empieza. Se utiliza para inicializar los modos de trabajo de los pins, o el puerto serie. Debe ser incluido en un programa aunque no haya declaración que ejecutar. Así mismo se puede utilizar para establecer el estado inicial de las salidas de la placa. 

loop()

Después de llamar a setup(), la función loop() hace precisamente lo que sugiere su nombre, se ejecuta de forma cíclica, lo que posibilita que el programa esté respondiendo continuamente ante los eventos que se produzcan en la placa.
//Declaración de las funciones y variables

void setup()
{
 // Funciones de inicialización que define el modo de los pines y del puerto USB
}

void loop()
{
//Funciones, estructuras de control y operadores que definen el funcionamiento de la placa

}


//Programa de ejemplo

int tiempoEncendido=1000; // Variable que establece el tiempo durante el cual el diodo se va a mantener encendido
int tiempoApagado=1000; // Variable que establece el tiempo durante el cual el diodo se va a mantener encendido

int pinDiodo=0; // Variable para establecer el pin donde va a esta conectado el diodo
void setup()
{
pinMode(pinDiodo, OUTPUT);
}

// El programa se ejecuta cíclicamente por tiempo indefinido
void loop()
{
digitalWrite(pinDiodo, HIGH); // Enciende el led
delay(tiempoEncendido); // Se mantiene encendido el tiempo establecido en la variable tiempoEncendido
digitalWrite(pinDiodo, LOW);  // Se apaga el diodo led
delay(tiempoApagado); //Se mantiene apagado el diodo led el tiempo establecido en la variable tiempoApagado
}

¿Qué es una instrucción?

Una instrucción puede ser considerada como un hecho o suceso de duración determinada que genera unos cambios previstos en la ejecución de un programa, por lo que debe ser una acción previamente estudiada y definida.

Ejemplos:

int n=0;
delay(1000);
adelante();

Tipos de instrucciones

Los tipos de instrucciones permitidos están definidos y determinados dentro de cada plataforma y  podemos encontrar las siguientes:
  • Instrucciones de definición de datos.
  • Instrucciones primitivas.
    • Instrucciones de entrada.
    • Instrucciones de salida.
    • Instrucciones de asignación.
  • Instrucciones compuestas
  • Instrucciones de salto.

Instrucciones primitivas

Se consideran como tales las instrucciones de entrada/salida y las instrucciones de asignación.


Instrucciones de entrada

Son aquellas instrucciones encargadas de recoger el dato de un periférico o dispositivo de entrada (sensor) y seguidamente almacenarlo en memoria en una variable previamente definida.

 
Ejemplos

digitalRead(num_del_pin); // Devuelve un valor digital (HIGH o LOW) leído desde el pin num_del_pin.

analogRead(num_del_pin);  //Devuelve un número que es la tensión  leída en el pin num_del_pin.


millis(); //Devuelve el tiempo em milisegundos, desde que se activó el programa.

Serial.read(); //Lee el puerto USB y devuelve el valor 0_255 del dato allí presente.


Instrucciones de salida

Son aquellas instrucciones encargadas de recoger los datos procedentes de variable o los resultados obtenidos de expresiones evaluadas y depositarlos en periféricos o dispositivos de salida.

Ejemplos

pinMode(numero_del_pin, modo); // Pone elpin numero_del_pin en  modo INPUT o OUTPUT.
digitalWrite(numero_del_pin, valor); // Escribe un valor digital ( HIGH o LOW)  en el pin numero_del_pin.
analogWrite(num_del_pin, valor _0_255); // Pone en el pin numero_del_pin una señal digital  PWM, proporcional al valor valor _0_255.


Instrucciones de asignación de datos

Son aquellas instrucciones utilizadas para informar al procesador del espacio que debe reservar en memoria para almacenar un dato mediante el uso de variables.

La definición consiste en indicar un nombre a través del cual haremos referencia al dato, un tipo para informar al procesador de las características y espacio que debe reservar en memoria y opcionalmente un valor inicial.

int n=0;  // Variable "n" de tipo entero y con el valor inicial 0.

nivel_ldr=leerEstadoLdr();  //Llamada a la función leerEstadoLdr y asignar el valor devuelto por dicha función a la variable nivel_ldr.

Instrucciones compuestas

Son aquellas instrucciones que no pueden ser ejecutadas directamente por el procesador, y están constituidas por un bloque de acciones agrupadas en subprogramas.

//Función para controlar el movimiento de subida de un puente levadizo

 void subir()
{
 analogWrite(EA, velocidad);
 digitalWrite(I1, HIGH);
 digitalWrite(I2, LOW);
}


Instrucciones de salto

Son aquellas instrucciones que alteran o rompen la secuencia de ejecución de un programa, perdiendo toda posibilidad de retornar el control de ejecución del programa al punto de llamada. El uso de este tipo de instrucciones debe quedar restringido y usarlo solo en excepciones.





Puente levadizo controlado por Arduino

Se trata de idear, diseñar, planificar y construir una maqueta de un PUENTE LEVADIZO con diversos materiales disponibles, que cumpla las siguientes condiciones: 

CONDICIONES 

  • La elevación y descenso del tablero será suave.
  • Su accionamiento será eléctrico a 4,5V y su control:
    • El control será automático mediante Arduino y sensores de final de carrera.
    • El ajuste de piezas y acabado deberá ser preciso.
    • Las medidas máximas del conjunto no excederán de 300x200x150 mm
Solución adoptada

La solución final consiste en la construcción de una maqueta construida con listones de madera de samba y contrachapado.

Puente levadizo

Sistema de transmisión formado por un motor con reductora y un sistema de transmisión por correa.


El sistema de subida y bajada está formado por un torno fabricado con varilla roscada.


En la parte superior hemos colocado dos poleas de madera, para reducir rozamiento del cable.


Como elementos final de carrera se ha utilizado dos LDR, una para detectar la subida del tablero,


y otra para detectar la bajada del tablero


Por último el circuito de control está formado por una placa de Arduino Uno, un pulsador, dos LDRs  y  un driver L293D.


Circuito eléctrico
 

Programa

#define EA 9
#define I1 8
#define I2 10
#define pinPulsador 0  // Pin digital de entrada para el pulsador
int pinLDR_S = 0;      //A0, Pin analógico para LDR superior
int pinLDR_I = 1;     //A1,  Pin analógico para LDR inferior
int valorLDR_S = 0;
int valorLDR_I = 0;
int velocidad=200;
int estadoPulsador=HIGH;

 void subir()
{
 analogWrite(EA, velocidad);
 digitalWrite(I1, HIGH);
 digitalWrite(I2, LOW);
}

 void bajar()
 {
 analogWrite(EA, velocidad);
 digitalWrite(I1, LOW);
 digitalWrite(I2, HIGH);
}
 void parar()
{
 digitalWrite(I1, LOW);
 digitalWrite(I2, LOW);
 }
 void setup()
 {
  pinMode(EA, OUTPUT);
  pinMode(I1, OUTPUT);
  pinMode(I2, OUTPUT);
  pinMode (pinPulsador, INPUT);

}


void loop()
{
estadoPulsador = digitalRead(pinPulsador); //Leer estado del pulsador

valorLDR_S= analogRead(pinLDR_S);
valorLDR_I= analogRead(pinLDR_I);

if ( estadoPulsador == LOW && valorLDR_I>300)<300 br=""><300 300="">
<300 br="">{
while(valorLDR_S >300)
{
  subir();
  valorLDR_S= analogRead(pinLDR_S);
  delay(300);
}
parar();
}
if(estadoPulsador==LOW && valorLDR_S>300)
<300 br=""><350 br=""><350 br=""> {
<300 br=""><350 br=""><350 br=""> while(valorLDR_I >300)
  {
   bajar();
   valorLDR_I= analogRead(pinLDR_I);
   delay(300);
  }
   //parar motor
   parar();
  }
 }

Estructuras de control

Son utilizadas para controlar la secuencia de ejecución de un programa así como, determinados bloques de instrucciones.

Una clasificación podría ser la siguiente:
  • Estructura secuencial. Es aquella que permite la ejecución de un bloque de instrucciones de forma secuencial, es decir, una a continuación de la otra, respetando rigurosamente el orden establecido entre ellas de arriba a bajo y de izquierda a derecha. Leer más..

  • Estructuras alternativas. También llamadas estructuras condicionales, son aquellas que controlan la ejecución o la no ejecución de una o más instrucciones en función de que se cumpla o no una condición establecida. Leer más..

  • Estructuras repetitiva. Son aquellas instrucciones que nos permiten variar o alterar la secuencia normal de ejecución de un programa haciendo posible que un grupo de acciones se ejecuten más de una vez de forma consecutiva. Este tipo de instrucciones también reciben el nombre de bucles o lazos. Leer más..