martes, 29 de septiembre de 2015

Marcador controlado por bluetooth. Arduino

Marcador controlado por bluetooth.
Arduino

xsetaseta@gmail.com


El otro día estaba viendo un partido de frontenis y mirando el marcador me surgió la idea de hacer uno controlado mediante bluetooth.
El proyecto debía ser lo mas sencillo posible, y con los materiales que tuviera a mano.
El control debía realizarse a distancia con un ordenador o un teléfono android.
Lo que tengo a mano para realizar el montaje es:
-Arduino nano.
-3 Display de 8 segmentos ánodo común.
-Módulo HC05
Yo no había trabajado antes con display 8 segmentos ánodo común, por lo que he tenido que aprender a multiplexar los distintos display. Como no quería  realizar un circuito complicado he utilizado resistencias en el ánodo para alimentar a los segmentos, por lo cual se iluminará mas el numero 8 que el numero 1 al tener que encender en el primer caso 8 led y en el segundo 2 led. Para hacerlo bien, y que se iluminasen todos los led por igual, debería colocar una resistencia por cada segmento y un transistor por cada display.
La comunicación entre el dispositivo android y el arduino se hace mediante el módulos Bluetooth  HC05.
Es un simple modulo que emplea la comunicación serie (Tx/Rx), en nuestro caso utilizaremos un puerto serie por sofware mediante los pins A0 y A1 del arduino.
En mi caso utilizo otra versión mas antigua del módulo HC05 que esta preprogramado a una velocidad de 38400 y con la contraseña 1234. En el módulo original HC05 viene a una velocidad de 9600, esto es lo que debéis cambiar en el programa arduino.
He querido que mediante el carácter / haga fija la visualización, y si no se pone este carácter, la cadena de caracteres haga un desplazamiento.


Esquema del circuito.



Circuito montado.




Control con un adaptador bluetooth mediante el PC.



1

2

3

4
5




6

7
Control con un teléfono android.

Para realizar el programa android he utilizado el interprete Basic  BASIC! for Android  http://laughton.com/basic/ , es gratis y quería probarlo. El programa no es bonito pero hace su función.
En el programa arduino he realizado la captura desde el bluetooth y desde serie de distinta forma, mediante string y mediante cadena de caracteres, es una simple practica de programación.
No he querido perfeccionar el circuito para que no se copie a pié de la letra, el que quiera utilizarlo que lo mejore trabajando un poco.





FICHEROS



Vídeo de funcionamiento.

Saludos.
JUAN GALAZ

Bibliografía:

http://seta43.duckdns.org/arduan1.html
http://diymakers.es/arduino-bluetooth/
http://english.cxem.net/arduino/arduino4.php
http://www.instructables.com/id/Andruino-A-Simple-2-Way-Bluetooth-based-Android-C/step1/How-to-use-ArduDroid/
http://www.instructables.com/id/Cheap-2-Way-Bluetooth-Connection-Between-Arduino-a/?ALLSTEPS
http://mcuoneclipse.com/2013/06/19/using-the-hc-06-bluetooth-module/
http://www.basic4ppc.com/
http://www.extremadura-web.es/Blog/2012/10/29/comunicacion-bluetooth-serie-arduino-y-basic4android/
http://iesromerovargas.es/recursos/elec/sol/basic4android.htm

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/


jueves, 16 de julio de 2015

Proyector UNIC UC40 no funciona

09/09/2015
Me he puesto en contacto con el vendedor chino.
Le explique el caso mandandole fotos, y me a mandado la fuente totalmente gratis.
Vendedores como estos son dificiles de encontrar.  *****


Un saludo
 _________________________

UNIC UC40 no funciona
Hace un mes me compre un proyector portátil para ver películas y fotos. Mi presupuesto no era mucho, 100€ como máximo. Después de ver diferentes proyectores que tenían resoluciones bajas 320x240  por un precio de 40€, me decidí por un UNIC UC40 que tiene una resolución real de 800x480. Su precio ronda los 79€ incluidos los gasto de envío desde china. Por este precio no existe un proyector mejor, para ver DVD  con resoluciones  de 720x480 píxeles (para NTSC) y 720x576 (para PAL) es suficiente. Después de ver durante este tiempo bastantes películas  le di el aprobado por su tamaño, resolución y su calidad/precio bastante ajustado. Yo estaba satisfecho con la compra.
Un buen día mientras estaba viendo una película, se apago de golpe y se volvió a encender. Lo achaqué a una posible caída de tensión, pero a partir de entonces empezó a encenderse y apagase bastantes veces, hasta que ya no se encendía, o amagaba con encenderse pero al encenderse la lampara se apagaba completamente.
Mandarlo arreglar no merece la pena, y como yo soy muy manitas con esto de la electrónica me dispuse a desarmarlo para ver si podía arreglarlo.
En las siguientes imágenes veréis el despiece del aparato.






Después de hacer varias pruebas, descubrí que si quitaba la alimentación de 19V al led de proyección el aparato no se apagaba, aunque claro no se veía proyectada la imagen. Probé alimentar el led a 19V con otra fuente externa, y el proyector funcionaba perfectamente.

Conclusión la fuente de alimentación estaba estropeada y no daba suficiente  potencia para alimentar el led de proyección.
Como me temía esto ya le a pasado a mas de uno, y existe repuesto de la fuente de alimentación en aliexpress por 13€
 http://es.aliexpress.com/item/Original-UNIC-UC40-Power-board-accessories-For-UC40-Projector/32393578961.html?s=p
Como he dicho antes, soy un manitas en la electrónica y he hecho un apaño para poder disfrutar del proyector sin gastarme nada hasta que decida si compro la fuente de alimentación.
La fuente de alimentación del proyector entrega 19V para alimentar al led , y 12V para alimentar al resto de la electrónica del proyector. El mayor consumo del aparato es para el led, el resto consume unos 250mA a 12V. Como tengo alimentadores de portatiles que funcionan con 19V, he alimentado el led de proyección con dicha tensión, comprobando que funcionaba perfectamente. Para alimentar al resto de los circuitos del proyector, he utilizado un regulador 7812 que nos proporciona 12V y 1000mA. He colocado un pequeño disipador al 7812 para que no se estropee. Debido a que en cuanto alimento el proyector se enciende el led de proyección pero no el ventilador, he tenido que alimentar directamente el ventilador desde los 12V.
Cerrado el proyector y probado, funciona perfectamente, esperemos que no se rompan mas cosas.

Un saludo.
Juan Galaz

jueves, 11 de junio de 2015

Antena vertical 1/4 de onda - FM 104 MHz

Antena vertical 1/4 de onda
xsetaseta@gmail.com

La fabricación de una antena suele ser fácil, pero su ajuste a una frecuencia concreta algo más difícil.
En este caso he fabricado una antena de FM para la frecuencia de 104MHz.
La antena es vertical de 1/4 de onda con 4 radiales, y con una impedancia de 52 ohmios.
Ante todo he intentado hacerla lo más barata posible, utilizando materiales muy fáciles de encontrar.
Los materiales son:
  • Caja de conexiones de plástico estanca 1€.   
  • PL259 Base de chasis con tornillos.    3€
  • Una chapa cuadrada de 6x6cm (depende del tamaño de la caja estanca)
  • 4 tornillos rosca chapa
  • Clema de empalme.     1€
  • Alambre acerado del que se utiliza en tendederos.      4€  10m (te sobrará mucho)
Para sujetar los radiales he realizado dos pruebas, una utiliza clemas de empalme para sujetar los radiales, y la segunda  utiliza tornillos de rosca chapa.
Yo recomiendo el de rosca chapa, por ser muy fácil de montar.
Para sujetar el elemento  radiante he realizado dos pruebas, la primera utilizando una clema que se conecta directamente al conector, y la segunda utiliza una clema que se sujeta a la chapa cuadrada. Yo prefiero esta última, queda más sujeta.

Para el cálculo de la longitud de los elementos se utiliza la siguiente formula.






Tornillos de rosca chapa sujetando los radiales, y elemento radiante sujetado a la chapa cuadrada mediante clema.


 Clemas de empalme sujetan los radiales, y elemento  radiante se conectado directamente al conector.


Antena funcionando.


Ajustando longitud de antena.

Ir cortando trozos pequeños del elemento radiante hasta que la onda reflejada esté lo mas próximo a 1.

Después de cortar trozos del elemento radiante, la longitud es de 65cm.



En algunos libros he visto que el cálculo para el elemento radiante es de:
1/4 longitud de onda x 0,90 = 0,649 m


Medidor de estacionarias.


Saludos
Juan Galaz

11/06/2015-Palencia(España)