EA3HMJ Blog

Proyectos, ideas, trabajos & demás cosas

Posts Tagged ‘arduino

LCD display for Trimble GPSDO

leave a comment »

Aprovechando que llevo un GPSDO he decido sacar mas rendimiento visualizando la posición del sol y dando el locator a 10 digitos.

Para ello he comprado un LCD de 2×20 reflectivo que se ve bien en condiciones de mucha luminosidad y grande, quizas mucho, pero es lo que encontre y no me fije en las medidas.

Aqui lo podeis encontrar.

http://uk.farnell.com/midas/mc22008b6w-spr-v2/display-alphanumeric-20×2-nobacklight/dp/2675639

https://www.ebay.es/itm/Expositor-alfanumerico-20×2-nobacklight-mc22008b6w-spr-v2-FNL-/272975252799

El mayor problema es que el protocolo del trimble no es NMEA es UCCM y no encontre nadie que lo tenga funcionando, por lo que me ha tocado programar de la A la Z las cosas que considere basicas.

Lo primero que hay que hacer es modificar el GPS para obtener la señal RX y TX a nivel de TTL, ya que la que facilita en el conector DB9 es RS232 y no es compatible con arduino.

Estas señales las sacaremos del conversor de TTL a RS232.

También necesitamos +5V que los obtenemos del regulador LT1764A que lleva la placa.

El negativo lo podemos coger de cualquier plano de masa que hay en el PCB.

Aprovechando que desmontaba el GPSDO le he sacado fuera el boton de reset y le he añadido un conector para sacara rx,tx,+5v y gnd al exterior.

Vamos con el LCD. Lo he soldado aprovechando los pins del LCD de forma que queda compacto y añadido un boton de reset del arduino por si hay que resetear.

Para finalizar he dibujado una caja para imprimirla en una impresora 3D para que por lo menos el tamaño no aumente más.

Y este es el resultado

Y ahora funcionando

 

 

Anuncios

Written by qlfecv

21 de diciembre de 2017 at 20:44

Publicado en Arduino, Ham radio, Proyecto

Tagged with , ,

Control remoto con Arduino y conversor serie-Ethernet

with one comment

He adquirido en ebay este pequeño artefacto

usr-tcp-t-500x500

Lo podéis encontrar también aquí.

Y toda la información y aplicaciones aquí.

Sin entrar en grandes detalles os diré que permite configurarlo como cliente, y servidor TCP.

Para mi utilidad lo he configurado como servidor con la idea que sea el que reciba las peticiones vía ethernet de un programa y realice lo encomendado.

La comunicación entre el modulo y arduino se realiza con los pins rx, tx,gnd y 5v. No os olvidéis de cruzar tx y rx.

He realizado una pequeña aplicación en arduino que permite leer por ethernet 6 entradas analógicas y leer/escribir 5 digitales,muy fácilmente configurable.


/**************************************************************************//**
* Arduino remote control
* ver 1.0 (c) EA3HMj 2.015 ea3hmj.qlfecv.net
*
* use: USR-TCP232-T V2
* http://en.usr.cn/Ethernet-Module-T24/RS232-serial-to-ethernet-converter-tcp-ip-module
* Serial UART To Ethernet Converter,TCP/IP Module
*
* This library is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see http://www.gnu.org/licenses/
******************************************************************************/
/******************************************************************************
* Header file inclusions.
******************************************************************************/
/******************************************************************************
* Private variable declaration.
******************************************************************************/

/******************************************************************************
* Public function definitions.
******************************************************************************/
//The number of outputs going to be switched.
int outputQuantity = 5;
//Invert the output
boolean outputInverted = false; //true or false
// Select the pinout address
int outputAddress[5] = { 9,10,11,12,13};
/**************************************************************************//**
* void setup()
******************************************************************************/
void setup()
{
// speed module
Serial.begin(115200);
delay(1000);
// Define pin how out
for (int var = 0; var < outputQuantity; var++){
pinMode(outputAddress[var], OUTPUT);
}
}
/**************************************************************************//**
* void loop()
******************************************************************************/
void loop()
{
char incomingByte,pt,c;
int outp ;
// read analogic data
int RA0 = ReadSamples(A0,float)(500.0/1023.0);
int RA1 = ReadSamples(A1,(float)(500.0/1023.0));
int RA2 = ReadSamples(A2,(float)(500.0/1023.0));
int RA3 = ReadSamples(A3,(float)(500.0/1023.0));
int RA4 = ReadSamples(A4,(float)(500.0/1023.0));
int RA5 = ReadSamples(A5,(float)(500.0/1023.0));

if (Serial.available()>0){
incomingByte = Serial.read();
// Dump datas
if (incomingByte=='*'){
// Send analogic inputs
Serial.print(RA0);
Serial.print("*");
Serial.print(RA1);
Serial.print("*");
Serial.print("2");
Serial.print(RA2);
Serial.print("*");
Serial.print("3");
Serial.print(RA3);
Serial.print("*");
Serial.print("4");
Serial.print(RA4);
Serial.print("*");
Serial.print("5");
Serial.print(RA5);
Serial.print("*");
// Send digital output
for (int var = 0; var < outputQuantity; var++){
Serial.print(digitalRead(outputAddress[var]),DEC);
Serial.print("*");
}
// switch digital output
}else if (incomingByte=='?'){
// read values
while (!Serial.available());
pt = Serial.read()-48;
while (!Serial.available());
c = Serial.read();
//if user input is H set output to 1
if(c == 'H') {
outp = 1;
}
//if user input is L set output to 0
if(c == 'L') {
outp = 0;
}
triggerPin(outputAddress[pt], outp);
}
}
}
////////////////////////////////////////////////////////////////////////
//triggerPin Function
////////////////////////////////////////////////////////////////////////
void triggerPin(int pin, int outp){
//Switching on or off outputs, reads the outputs and prints the buttons
if(outp == 1) {
if (outputInverted ==false){
digitalWrite(pin, HIGH);
}
else{
digitalWrite(pin, LOW);
}
}
if(outp == 0){
if (outputInverted ==false){
digitalWrite(pin, LOW);
}
else{
digitalWrite(pin, HIGH);
}
}
}
///////////////////////////////////////////////////////////////////////////
//special Functions
////////////////////////////////////////////////////////////////////////
int ReadSamples(int ana,float scale){
int i;
double s;
int sample=256;

// Sampling loop
for(i=0, s=0; i<sample; i++){
s += analogRead(ana);
}
s /= (double)sample;
s = s*scale;
i=(int)s;
return i;
}

El protocolo es muy sencillo, admite los siguientes comandos:

“*” Devuelve una cadena con el formato 1230*5*27*33*44*57*0*0*1*0*0*

Los 6 primeros valores son las entradas analogicas y los 5 siguientes las salidas digitales

“?xH/L” Para modificar la salida digital anúmero x al valor L o H , ejemplo activar la salida 3: ?3H, desactivar la 4, ?4L, los indices empiezan siempre por cero.

Para el PC uso el programa en Visual Basic

Captura de pantalla 2015-05-03 a las 19.55.17

Aquí os podéis bajar el soft

 

Written by qlfecv

3 de mayo de 2015 at 18:58

Publicado en Arduino, Ham radio, Proyecto

Tagged with , ,

Ultimate 3 baliza WSPR

leave a comment »

El amigo Hans G0UPL ha creado un kit Ultimate3 QRSS/WSPR que es una maravilla para realizar pruebas en estos modos.

DSCN0110 DSCN0109

Para actualizar el firmware del Ultimate3 he usado el programador USBTinyISP junto con un Arduino UNO. Arduino UNO tiene un ATMEGA328P y  Ultimate3 un ATMEGA328.

DSCN0106

Hay que instalar WinAVR y usaremos el programa avrdude para grabar. Hay un pequeño problema, avrdude no soporta el chip ATMEGA328, por lo que modificaremos el fichero avrdude.conf y añadiremos este chip siguiendo este guión.

Quitamos de la placa Arduino el chip ATMEGA328P y lo sustituimos por el de Ultimate3 ATMEGA328.

Ahora lo más facil, primero programamos la memoria flash y luego la eeprom.

write flashwrite eeprom

Ya tenemos actualizado nuestro Ultimate3.

DSCN0111

 

 

 

Written by qlfecv

3 de abril de 2014 at 18:27

Posición del Sol & Luna

leave a comment »

El amigo Pascual EA5FJ me comento que usaba un invento llamado ROVERBOX de on4iy que con un GPS NMEA da en un display la posición del sol respecto a nuestra posición.

Este artilugio es muy útil para posicionarse, por lo que me puse manos a la obra para hacerme uno aprovechando  el GPS que uso para disciplinar los PLLs, el Jupiter TU6 que usa protocolo binario.

Como siempre me pasa, le escribí al colega on4iy y me comento que no lo soporta, por lo que me he visto en la necesidad de hacérmelo.

Me sonaba que Goody ha implementado en su Arduino Rotator Controler el seguimiento del sol y luna, por lo que no ha sido difícil implementar en una plataforma arduino el invento, solo se necesita decodificar las tramas binarias.

sunposition

El resultado es este

DSC01574DSC01575

Written by qlfecv

16 de marzo de 2014 at 9:52

Publicado en Arduino, Ham radio, Proyecto

Tagged with , , ,

PTS-620 Mod

leave a comment »

Aquí os presento la modificación que le he realizado al PTS-620 remoto de Programmed Test Source Inc. para poderlo manejar con mandos exteriores.

Este sintetizador es capaz de generar frecuencias desde 1.000.000,0 MHz hasta  619.999.999,9 MHz con una salida desde – 5dbM hasta 20 dBm pero he limitado a unos 16 dBm.

El corazón de la modificación es un arduino mega, el uno no tiene pins suficientes.

pts arduino esquema

 

También le he puesto un interruptor para encender y apagar.

pts620 mod1pts620 mod2 pts620 mod3

 

 

El frontal queda de esta manera:

pts620 mod4

 

Y aquí una verificación del nivel de señal de salida.

pts620 ajuste

Written by qlfecv

17 de marzo de 2013 at 13:40

Publicado en Arduino, Proyecto

Tagged with , ,

Sistema rotación de antena económico

with 3 comments

Para este proyecto utilizare un rotor de antena de la línea económica modelo AR-302 de Konrad.de no tiene mucha capacidad pero es barato.

AR203

Este rotor tiene un mando que lleva un motor idéntico que el del rotor, de forma que cuando gira el motor de la antena gira el motor del mando, parándose en la posición seleccionada. De esta forma se prescinde del del sensor de posición.

Mando rotor

La alimentación del motor se realiza por 3 hilo que envían la tensión trifasica de 17-20V al motor, para cambiar el sentido de giro se cambia una fase.

rotor ar203

También se puede usar un rotor yaesu , para ello he añadido un conector a la unidad que se coencta con el conector yaesu que llevan los mando de rotores o gobernarlo directamente desde el mismo mando.

yaesu

mando yaesu      rotor yaesu

Ahora viene la parte más compleja del proyecto, el control.

Al sistema de control le he dado las siguientes funcionalidades:

  • Sensor electrónico de posición azimut
  • Pantalla gráfica
  • GPS

La orientación de la antena la conseguimos pulsando en la pantalla sobre el mapa y esta calculara el azimut y distancia al punto seleccionado, girando la antena hasta este punto.

Para complicar más las cosas he previsto dos tipos de GPS,  el EM-406A y uno bluetooth GPS-BT74S que tenia en el coche muerto de risa.

EM406A BT74S

Para la comunicación BT he empleado el modulo TEL0026 en ebay hay muchos pero ojo deben de poderse configurar como master.

En el blog de Akirasan explican como poner en modo master el modulo y conectar dispositivos.

Este es el código PICASO que uso para el emparejamiento BT,


if (BT)
print("Iniciando BT\n");
com_SetBaud(COM1,3840);
com1_Init(combuf, 128, 0);
if (sendBT("AT\r\n"))
print("BT OK\n");
endif
// Iniciamos PSP
if (sendBT("AT+INIT\r\n"))
print("PSP OK\n");
endif
// Emparejamos con MAC
if (sendBT("AT+PAIR=08,1B,C549E6,20\r\n"))
print("PAIR OK\n");
endif
// Enlazamos con MAC
if (sendBT("AT+LINK=08,1B,C549E6\r\n"))
print("LINK OK\n");
endif
<span style="font-size: 13px; line-height: 19px;">else</span>
com_SetBaud(COM1,480);
 endif

TLE0026 HC-05 BT

Como brújula he utilizado el modulo i2c HMC6352  pero debido a la longitud del cable hay que usar un buffer i2c 82B715.

hmc6352

La pantalla gráfica con touch utilizada es uLCD-43 de 4D System que posee un potente lenguaje de programación denominado PICASO.

uLCD-43

Y por ultimo el actor principal: un arduino MEGA que controla todo el sistema.

mega

La primera modificación la realice en el mando del rotor que le añadí un conector de 6 pines para sacar la corriente alterna y no tener que usar un alimentador más.

mando 1 mando 2 mando 3    mando 4

Al rotor se le añade un conector para las 3 fase y la brújula.

rotor

El cable usado es el mismo de los rotores yaesu de 7 hilos, 3 para la tensión y cuatro para la brújula.

El corazón del proyecto es el software que corre simultáneamente en dos procesadores: el gráfico y arduino.

El procesador gráfico se encarga de:

  • Inicializa el sistema .
  • presenta un menú principal que es la brújula y se comunica con arduio via rs232.
  1. mueve el rotor manualmente.
  2. lleva el rotor a posición de parking.
  3. Inicializar el BT
  • puede cambiar a un subprograma para el GPS, este programa determina la ubicación actual.
  • puede cambiar a un subprograma de selección gráfica de dirección de antena a través de mapas.
  1. posiciona en el mapa la ubicación actual.
  2. al seleccionar un punto calcula azimut y distancia, los cálculos los realiza el arduino por falta de potencia de calculo del modulo gráfico.
  3. se comunica con arduino via rs232.

Arduino se encarga de:

Todos estos elementos montados se pueden ver en las imágenes siguientes.

Parte posterior del controlador.

DSC00615

Menú principal

DSC00617

 

El GPS trabajando

DSC00627

Programa de selección gráfica de destino, con distintos mapas. Los mapas son compatibles con los de APRS.

DSC00620 DSC00621 DSC00619

Adjunto el esquema del Controller.

Y todo empaquetado para poderse transportar sin muchos problemas.

DSC00614 DSC00613

Como prueba de fuego montamos esta instalación durante el concurso de VHF XXV Comarques Catalanes para mover una antena de VHF de 9 elementos a 10m de altura.

comarcas catalanas 1 comarcas catalanas 3

Lo primero que aprendí en esta experiencia es llevar siempre encima ferritas, porque la RF entra por todos los sitios y no es amiga de la electrónica de control.

Written by qlfecv

6 de marzo de 2013 at 9:49

Publicado en Arduino, Ham radio, Proyecto

Tagged with , , , , ,

Modificación Arduino UNO con alimentación exterior y sin disipar calor

leave a comment »

La modificación consiste en sustituir el regulador de 5 V que lleva incorporado NCP1117ST50T3G por uno conmutado de RECON R785.0-0.5, aunque no son compatibles en el patillaje con un poco de manitas se consigue montar.

DSC00500

 

Aquí la tensión que le he metido y la estabilidad de la salida.

DSC00502DSC00501

Written by qlfecv

25 de diciembre de 2012 at 20:17

Publicado en Arduino

Tagged with