EA3HMJ Blog

Proyectos, ideas, trabajos & demás cosas

Archive for the ‘Arduino’ Category

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 , ,

New portable PLL for 24 & 47 GHz

leave a comment »

dsc03283

Pascual EA5JF se le ocurrió usar el PLL  ELCOM que tenemos en el equipo de 47 GHz para 24GHz y realizo la modificación  junto a José Luis EA5IOT, autor del soft para el arduino que lo controla, de meter 4 frecuencias con un conmutador externo, una vez lo sacaron adelante (cosa que no dudaba) lo he implantado yo para la nueva versión de mi estación portatil y ya voy por 5.

Como este PLL dispone de un oscilador fijo de 9200 MHz las frecuencias que generamos son:

2536 Mhz -> 47 GHz IF 144 MHz
2572 Mhz -> 47 GHz Beacon
2608 Mhz – > 24 GHz IF 144 MHz
2752 Mhz -> 24 GHz IF 432 MHz

photo324706653384583094

Un pequeño video de como funciona.

Seguiremos trabajando …

Written by qlfecv

18 de enero de 2017 at 20:29

Publicado en Arduino, Ham radio

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 , ,

Posición del Sol & Luna II

leave a comment »

He decido montar un posicionar del sol y la luna, pero esta vez que pueda ver toda la información en pantalla.

En ebay se encuentran pantallas LCD OLE de 128×64 1.3″ que para el exterior no son muy buenas, pero para lo que la quiero cubre de sobra las expectativas.

 

DSC01693 DSC01692

 

Montado en una cajita lowcost

DSC01717

Para que os hagáis una idea del tamaño

DSC01718

Written by qlfecv

24 de mayo de 2014 at 18:53

Publicado en Arduino, Ham radio

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 , , ,

24Ghz partyday III

leave a comment »

Después de darle unas vuelta a la frecuencia de referencia de 103.58 Mhz me he dado cuenta que es complicado de disciplinarlo con un simple PLL, ya que si descomponemos el valor es solo divisible por 2 y 5179 lo que hace muy difícil el PLL y habría que recurrir a un DDS inverso a algo así.

Entonce cambio de planes y  usaremos una frecuencia de referencia de 103.5Mhz que son cristales normalitos y facil de disciplinar con PLL.

Para ello lo primero que miraremos es el oscilador local que esta en 23.616 Ghz la tensión de sintonia (VT)  por si tenemos que volver al estado inicial.

DSC01072 DSC01073

 

Ahora calculamos la nueva Lo = 103.5Mhz *228 = 23.598 Ghz que al restar 24.048 nos da una IF de 450 Mhz.

Resintonizamos el DRO hasta la nueva frecuencia con esa referencia.

DSC01076 DSC01075

 

Ya podemos sacar la referencia a fuera y tapar el transvecter

DSC01081 DSC01080

 

Y a probar con la nueva referencia y IF.

DSC01082 DSC01083 DSC01084 DSC01081

 

Ahora queda disciplinar un ocxo a 103.5 Mhz y ya tendremos un transvecter de 24 Ghz “decente”

 

Written by qlfecv

23 de septiembre de 2013 at 22:29

Publicado en Arduino, Proyecto

Tagged with , ,