Mostrando entradas con la etiqueta servo. Mostrar todas las entradas
Mostrando entradas con la etiqueta servo. Mostrar todas las entradas

viernes, 16 de febrero de 2018

Control de dos servos a distancia mediante Arduino y nRF24L01

Página principal

Control de dos servos a distancia mediante
Arduino y nRF24L01

xsetaseta@gmail.com

De mi anterior montaje carreco.html tenía montado todo el circuito en el mando emisor.
Tenía un mando reutilizado de un helicóptero que tenía averiado.
No tenía que tocar nada en la parte del emisor, ni siquiera debía modificar el programa.
En el lado del receptor solo debo añadir 2 servos y cambiar un poco el programa.

Esquema del emisor. (Realizado con https://easyeda.com/ )


Circuito emisor montado con el mando reciclado.




Esquema del receptor.



Fotos del receptor montado.

Patillas de los distintos tipos de servos.

Debemos tener en cuenta que los servo tienen bobinas y que producen interferencias y alto consumo en picos, por lo cual deberemos alimentar todo desde una fuente algo estable.
Los datos se reciben cada 100 miliSegundos (algo menos, no es exacto) ,alrededor de 10 transmisiones de datos  por segundo.
Por hacerlo simple y sin muchas complicaciones, no se ha realizado ni medias de datos, ni detección de errores.
El que lo quiera hacer mas seguro que modifique el programa, es fácil, no hay que dar todo hecho.
También se puede utilizar los módulos con antena y mayor potencia que pueden alcanzar hasta 1Km en campo abierto. Si utilizamos mas potencia deberemos plantearnos es alimentar el nrf24 de otro sitio que no sea los 3.3V del arduino.
Hace dos años realice un circuito muy parecido rf24l01.html , utilice otra librería y otro programa, os puede servir de guía.

VIDEO DE FUNCIONAMIENTO

PROGRAMA

Hasta pronto.
Juan Galaz


BIBLIOGRAFÍA

rf24l01.html
https://www.prometec.net/servos/
https://github.com/maniacbug/RF24
https://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
http://openhardware.pe/transceptores-nrf24l01-2-4ghz-radio-wireless-how-to/
http://cursos.olimex.cl/tutoriales/
http://www.electroensaimada.com/servomotor.html
http://arduino.cl/servo-motor-con-arduino/


domingo, 16 de agosto de 2015

Radar mediante sonido. Hc-sr04 y 2 servos.


Radar mediante sonido.
hc-sr04 y 2 servos.
Manejados por arduino y controlados mediante PC.
Programación gambas (linux)

xsetaseta@gmail.com


Tenía montado los dos servos de mi anterior montaje, y se me ocurrió colocar el detector de obstáculos hc-sr04 para hacer una especie de radar mediante sonidos.
En uno de mis anteriores montajes había utilizado el hc-sr04 como detector de obstáculos arson.html , por lo que la parte de programación en arduino es realmente sencilla.
En cuanto a la parte de programación en el PC he utilizado parte del código de mi anterior montaje ledservo.html que maneja los servos y que obtiene a través de la conexión serie la distancia que proporciona el hc-sr04.
Todo esto proporciona una gráfica a modo de radar, donde podemos observar las distintas distancias que obtiene el sensor según los objetos encontrados.
A pesar de que el sensor debería proporcionar las distancias correctas, me he dado cuenta que no responde a todos los materiales de la misma forma, mi camisa amplia de algodón  resulta ser invisible. Además el angulo de rebote  que tiene el hc-sr04 es un tanto dispar, pudiendo detectar cosas pequeñas colocadas cerca sobre una mesa, pero no detectarlas si están enfrente.
Mi idea era hacer una especie de escaneo en 3D, pero la realidad del sensor ha frustrado el proyecto hasta que no encuentre un sensor mas preciso.

Esquema del montaje.


El sensor montado con los 2 servos.


Gráfico del programa realizado en basic sobre gambas.


Todos los programas

Vídeo del montaje funcionando


Hasta pronto.
Juan Galaz


BIBLIOGRAFÍA

http://seta43.duckdns.org/arson.html
http://seta43.duckdns.org/ledservo.html
http://cursos.olimex.cl/tutoriales/
http://www.electroensaimada.com/servomotor.html
http://arduino.cl/servo-motor-con-arduino/

miércoles, 29 de julio de 2015

Control de puntero láser mediante 2 servos

Control de puntero láser mediante 2 servos.
Manejados por arduino y controlados mediante PC.
Programación gambas (linux)
xsetaseta@gmail.com


De mi anterior tenia dos servos montados y manejados por una placa arduino nano. Me vino a la cabeza un proyecto que tenía en mente, manejar un puntero láser mediante un ordenador. Solo tenía que realizar un programa que mandase las coordenadas de posicionamiento desde el PC al arduino, y este manejaría los servos.
La realización fue rápida, no me he complicado mucho en el interface del PC, la he realizado en gambas (una especie de Visual Basic) bajo linux.
Toma las coordenadas de una superficie azul de 360x360 , y manda los datos X e Y como valores entre 0 y 179 mediante el interface serie al arduino.
Si se cambia la potencia se manda también con datos entre 0 y 254, que maneja el puntero mediante PWM, me hubiera gustado hacerlo con voltios reales, pero el proyecto debía realizarse rápidamente.
Para poder mover el puntero, se debe pulsar el botón izquierdo del ratón.
Para dar la potencia máxima, se debe pulsar el botón derecho del ratón.
Como los servos están construidos mediante motores, estos producen interferencia en el propio arduino, por lo cual debemos de alimentar los servos desde una fuente externa.


Esquema de conexionado.



Colocación de láser en los servos.


Montaje del circuito con todos los componentes.


El montaje funcionando
 




Vídeo del montaje funcionando

Programa  gambas

Programa arduino





Hasta pronto.
Juan Galaz


BIBLIOGRAFÍA

http://cursos.olimex.cl/tutoriales/
http://www.electroensaimada.com/servomotor.html
http://arduino.cl/servo-motor-con-arduino/



domingo, 26 de julio de 2015

nRF24L01 Control de 2 servos + 1 servo o motor



nRF24L01
Control de 2 servos + 1 servo o motor
xsetaseta@gmail.com


Revisión del circuito. 17/11/2017
Después de bastante tiempo de realizar el montaje, tuve la necesidad de hacer otro montaje con el nRF24.
Montado todo bien no me funcionaba, o el funcionamiento era errático.
Después de muchas pruebas, descubrí que en algún que otro módulo se necesitaba un condensador entre Vcc y GND.
Colocados los condensadores en todos los módulos el funcionamiento era correcto.

____________________________________________________________

En este montaje he utilizado dos placas arduino y dos módulos nRF24L01 para el control de 2 servos  y un motor de DC o 1 servo.
El control se realiza desde el circuito emisor donde existen 3 potenciómetros a modo de joystick, donde 2 hacen de modo coordenadas  X-Y , y el tercer potenciómetro a modo de control de potencia.
Mi objetivo era realizar el control de un avión RC de ala fija, donde el control se realiza con el timón de dirección y con el timón de profundidad, y la potencia del motor con el tercer potenciómetro de potencia.
En este montaje solo he utilizado el modo de transmisión de un módulo emisor  a el otro módulo receptor.
El nRF24L01+ integra un completo transceptor RF de 2,4 GHz, un sintetizador de RF y toda la lógica de banda base incluyendo un acelerador de protocolo por hardware Enhanced ShockBurstTM con una interfaz  SPI de alta velocidad para el controlador de la aplicación. El módulo Transceptor es de baja potencia y corto alcance, 200 metros más o menos.
Estos transceivers utilizan la banda de 2,4 GHz como muchos routers WiFi, algunos teléfonos inalámbricos, etc y no necesitan licencia. Estos transceptores pueden tanto enviar, como recibir datos en “paquetes” de varios bytes a la vez.

La librería utilizada es la RF24             https://github.com/maniacbug/RF24






Conexión del Arduino al nFR24L01
3V3 ----VCC (3.3V )
pin D8-----------CE (chip enable in)
pin D7----------CSN (chip select in)
SCK pin D13----------SCK (SPI clock in)
MOSI pin D11----------SDI (SPI Data in)
MISO pin D12----------SDO (SPI data out)
GND----------GND


Los pin CE y CS se pueden cambiar a otros pin del arduino en el programa.
//RF24 (cepin, cspin)
RF24 radio(8,7);


La alimentación del nFR24L01 debe estar entre 1.9 to 3.6V, por lo cual debemos utilizar la salida de 3.3V del arduino. En algunas páginas recomiendan colocar un condensador en la salida de 3.3V para minimizar posibles caídas de tensión debido a un consumo puntual alto.

Para el control de potencia del motor DC se utiliza el modo PWM (control mediante ancho de pulso) que maneja un MOSFET IRF630, es el que tenía a mano, puede servir cualquier otro.



Los servos se controlan mediante el ancho de pulso.


Emisor


Programa emisor Arduino
//xsetaseta@gmail.com
#include <SPI.h>
#include <nRF24L01.h>

#include <RF24_config.h>
#include <RF24.h>


#define debug 0

int sensorPin1 = A0;
int sensorPin2 = A1;
int sensorPin3 = A2;

unsigned char cadena[10];

RF24 radio(8,7);

unsigned int z;

// Topology
// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

void setup(void)
{

  Serial.begin(9600);

  radio.begin();
  radio.setRetries(15,15);
  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(1,pipes[1]);
  Serial.println("Transmitiendo datos");
}

void loop(void)
{
    radio.stopListening();
    cadena[0]='A';
    cadena[1] = analogRead(sensorPin1)>>2;
    cadena[2] = analogRead(sensorPin2)>>2;
    cadena[3] = analogRead(sensorPin3)>>2;
    cadena[4] = 'A';
    cadena[5] = 'A';
#if debug    
    Serial.print(cadena[1],DEC);Serial.print(" ");
    Serial.print(cadena[2],DEC);Serial.print(" ");
    Serial.print(cadena[3],DEC);
#endif     
    enviarS();    
    radio.startListening();  
    delay(21); //20
  
}

void enviarS()
{
    if (radio.write( cadena, 6 ))
      { Serial.println(" ok send.");}
    else
      { Serial.println(" failed send.");}
}


Receptor


Programa receptor Arduino
//xsetaseta@gmail.com
#include <SPI.h>
#include <nRF24L01.h>

#include <RF24_config.h>
#include <RF24.h>

#include <Servo.h>

#define debug 0

Servo myservo1;
Servo myservo2;
Servo myservo3;

int posicion;

bool done;

const int analogOutPin = 5;

unsigned char cadena[10];
int z;

//RF24 (cepin, cspin) 
RF24 radio(8,7);

// Topology
// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

void setup()
{
  Serial.begin(9600);
  myservo1.attach(2);
  myservo2.attach(3);
  myservo3.attach(4);
  
  radio.begin();
  radio.setRetries(15,15);
  radio.startListening();
  radio.openWritingPipe(pipes[1]);
  radio.openReadingPipe(1,pipes[0]);
  Serial.println("Esperando datos");
}

void loop()
{
  delay(10);
  if ( radio.available() )
    {
      done = false;
      while (!done)
        {
        done = radio.read( cadena, 6);
#if debug        
         Serial.print(cadena[0]);Serial.print(" ");
         Serial.print(cadena[1],DEC);Serial.print(" ");
         Serial.print(cadena[2],DEC);Serial.print(" ");
         Serial.print(cadena[3],DEC);Serial.println(" ");
#endif      
         z=cadena[0];
         switch(z)
          {
           case 65:
              posicion = map(cadena[1], 0, 254, 0, 179); myservo1.write(posicion);
              posicion = map(cadena[2], 0, 254, 0, 179); myservo2.write(posicion);
              posicion = map(cadena[3], 0, 254, 0, 179); myservo3.write(posicion);
              analogWrite(analogOutPin, cadena[3]);
             break;
          }

        radio.stopListening();
       delay(10);
        radio.startListening();
        }
    }
}

Los dos servos se controlan desde los pins D2 y D3 .
Como podemos ver podemos controlar un tercer servo en el pin D4 o un motor DC se utiliza el modo PWM en el pin D5.
El sistema funciona en prototipo, pero no lo he montado en circuito impreso, ni montado en el avión como me hubiera gustado hacer.
Tampoco he probado el alcance real en campo abierto para ver el alcance real. Cierto es que si necesitamos mucho más alcance existe un módulo nFR24L01 con antena que promete llegar hasta 1Km.
La alimentación normal de todo el circuito es de 5V a excepción del módulo nFR24L01 que es de 3.3V , pero lo he alimentado todo a 3.4V y funciona perfectamente.

Librerías
Programas


Hasta pronto.
Juan Galaz


BIBLIOGRAFÍA

https://github.com/maniacbug/RF24
https://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
http://openhardware.pe/transceptores-nrf24l01-2-4ghz-radio-wireless-how-to/
http://cursos.olimex.cl/tutoriales/
http://www.electroensaimada.com/servomotor.html
http://arduino.cl/servo-motor-con-arduino/