Proyecto Seguidor de Antena 360º con pantalla táctil Nextion y sintonizador de video 5.8 Ghz

Discussion in 'R/C ELECTRÓNICA' started by CIAPU35, Jan 16, 2019.

  1. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    A pesar de existir ya un hilo abierto sobre el proyecto del Seguidor de Antena 360º.

    http://www.forodrones.com/threads/seguidor-de-antena-360%C2%BA.40052/
    ó
    http://www.aeromodelismovirtual.net/threads/seguidor-de-antena-360º.40052/
    He decidido abrir este nuevo, en el que desearía que las conversaciones se centraran principalmente en los complementos añadidos : La pantalla Táctil de la casa Nextion y un sintonizador de video en la banda de 5.8 GHz.

    La pantalla táctil usada no es muy cara, y además ofrece una funcionalidad excepcional al proyecto.
    Otra ventaja de usar esta pantalla táctil es la posibilidad de conectarla en modo "bluetooth" y mantenerla alejada del seguidor y montarla en modo autónomo, por ejemplo, en la maleta de la estación de tierra.

    Además para aquellos que sean almas inquietas, esta pantalla ofrece la posibilidad de personalizarse los gráficos , colores o posiciones de los objetos presentados en la misma; a lo largo del hilo iré mostrando como se puede hacer.


    El otro complemento, se trata de un sintonizador de video en la banda de 5.8 GHz, al que a través de su interfaz SPI se puede acceder a sus registros internos de control y poder extraer todo su potencial.
    Además de eliminar un peso y espacio inútil, al sustituir a un modulo sintonizador completo , como por ejemplo el RC832.
    Hay que intentar comprar la nueva versión, a la que le han incrementado la sensibilidad (-95 Db), que comparada con la antigua (-90 Db) , casi dobla la posibilidad del alcance.
    Los canales que puede sintonizar en este montaje son 2160, repartidos a lo largo de la banda entre 5325 MHz y 5945 MHz, lo que le da la posibilidad de sintonizar prácticamente cualquier marca de emisor VTx existentes en el mercado.


    Pongo un enlace sobre un video en el que hago una exposición de toda la funcionalidad añadida a esta nueva versión del seguidor de antena 360º (Ver. 2.0).




    Debo decir también que en esta nueva versión se han añadido tres nuevos protocolos de telemetría:
    LTM
    FRSKY_D
    FRSKY_S
     
    #1 CIAPU35, Jan 16, 2019
    Last edited: Mar 22, 2019
    Stapelton likes this.
  2. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    [​IMG]
    [​IMG]
    [​IMG]
     
    #2 CIAPU35, Jan 16, 2019
    Last edited: Mar 22, 2019
  3. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    Pantalla táctil NX4832T035 3.5 Pulgadas.

    Desde Bangood: ( Agotada temporalmente)
    https://www.banggood.com/es/3_5-Inc...-p-1138608.html?rmmds=search&cur_warehouse=CN

    [​IMG]

    Desde EBay:
    https://www.ebay.es/itm/Nextion-NX4...h=item21509d24e8:g:glwAAOSwSONcN2Le:rk:1:pf:0

    [​IMG]






    Sintonizador RX5808 ( con Interface SPI activa)
    ( Versión nueva -95 Db ) !!! Recomendado¡¡¡¡
    (Trasera de placa pintada en blanco )
    Desde EBay :
    https://www.ebay.es/itm/1-PC-RX5808...h=item25f4174333:g:lpYAAOSwphNa2gIO:rk:2:pf:0

    [​IMG]

    Versión antigua : Más económico, pero peor sensibilidad (-90 Db)
    https://www.banggood.com/es/FPV-Wir...er-p-84775.html?rmmds=search&cur_warehouse=CN

    [​IMG]

    De este modelo (versión antigua), según los comentarios de anteriores compradores en la pagina de venta , aseguran que ya viene preparado de fabrica con interface SPI activa.
     

    Attached Files:

    #3 CIAPU35, Jan 16, 2019
    Last edited: Mar 22, 2019
  4. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    Conexiones de la pantalla Nextion o Bluetooth a la placa del seguidor de antena :

    Alimentación a 5 V , conseguida desde cualquier punto +/- de la placa ( a vuestro criterio)

    [​IMG]

    [​IMG]

    Teniendo la pantalla Nextion conectada, es opcional tener también conectado el visor LCD de dos líneas.
    El joystick es obligatorio desconectarlo.





    Conexión sintonizador RX5808 a la placa
    ( La alimentación a 5 V , incluida en la conexión)

    [​IMG]

    NO ES OBLIGATORIO TENER LA PANTALLA NEXTION, para poder trabajar solamente con el sintonizador.
    Con el visor LCD de dos líneas, y el joystick , también se podrá escanear y cambiar de canales de video, solamente no se podrá efectuar un espectro de frecuencias. ( visualizar el video de presentación en el ultimo tercio)
     

    Attached Files:

    #4 CIAPU35, Jan 16, 2019
    Last edited: Mar 22, 2019
  5. Guillesan Maestro FPV

    Guillesan
    Joined:
    Oct 31, 2008
    Messages:
    2,232
    Likes Received:
    4
    Quiero ser el primero en decirte que me alegro estes mejor de ese accidente que tuviste y decirte que solo con ver las fotos se ve que es una virgeria de proyecto, tomo asiento y espero con ansiedad meterle mano.
    Un saludo y bienvenido nuevamente.
    Saludos
     
  6. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    Gracias... Yo también me alegro de poder disponer del brazo y la mano derecha.
    Y aunque parece ser que este foro va haciendo aguas.... no me importa divulgar lo que considero que puede ser útil a la comunidad del Fpv y aguantar aquí hasta el ultimo suspiro del foro.
     
    #6 CIAPU35, Jan 17, 2019
    Last edited: Jan 21, 2019
    Zolber and Waka like this.
  7. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    Para actualizar el firmware de la pantalla Nextion podéis descargar uno, o ambos, de los siguientes archivos y elegir uno de los dos metodos expuestos:

    1º -- SEGUIDOR.TFT ( Archivo Compilado)
    2º -- SEGUIDOR.HMI ( Archivo Fuente)

    Contenidos en este archivo comprimido : SEGUIDOR.ZIP

    METODO 1:

    Con el primer archivo no se necesita trabajar con el Editor Nextion, y solo es necesario disponer de una tarjeta de memoria tipo Micro SD ( de cualquier capacidad -- Máximo 32 Gb). y formateada previamente.
    [​IMG]


    METODO 2:

    Con el segundo archivo es obligatorio disponer del Editor Nextion y tarjeta usb-rs232 tipo FTDI
    Descargar Editor Nextion

    [​IMG]


    [​IMG]


     

    Attached Files:

    #7 CIAPU35, Jan 21, 2019
    Last edited: Mar 25, 2019
  8. Guillesan Maestro FPV

    Guillesan
    Joined:
    Oct 31, 2008
    Messages:
    2,232
    Likes Received:
    4
    Bravo , voy buscando el material
     
  9. raspdroid Miembro

    raspdroid
    Joined:
    Apr 7, 2017
    Messages:
    200
    Likes Received:
    12
    Hola,

    Felicidades tienen muy buena pinta.

    Ayer recibí las placas prototipo del módulo de TX de Audio (estéreo) y vídeo. Lo quiero ensamblar en los próximos días.

    Sería interesante si alguien lo pudiera probar en vuelo y con antenas a ver como se comporta. Si alguien puede estar interesado le podría enviar uno terminado.


    Saludos
     
    #9 raspdroid, Jan 25, 2019
    Last edited: Jan 25, 2019
  10. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    :eek:… !!!!!!!! Y esto...…….. ¿tiene algo que ver con el tema de este hilo? !!!!!!!!!!!!!!!!!!!! :confused:
     
  11. raspdroid Miembro

    raspdroid
    Joined:
    Apr 7, 2017
    Messages:
    200
    Likes Received:
    12
    He visto la pantalla y el módulo y me ha llamado la atención y me gustaría usar esa pantalla con el módulo que diseño y de paso quería compartir el módulo que estoy haciendo por si a alguien le pudiera interesar colaborar (cualquier tipo de colaboración es bienvenida), ya que además es open-source, pero bueno que viendo que es un problema pido disculpas y a ver si lo pueden borrar.....
     
  12. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    Personalizando el aspecto de las pantallas:

    Aquellos que se sientan artistas y dominen el arte grafico, tienen la ocasión de personalizar los dibujos, colores , tamaños y/o posiciones de aquellos objetos gráficos que aparecen por las distintas pantallas.

    Lo primero que recomendaría es que os descarguéis el manual del editor de Nextion , o pasearos por YouTube en donde encontrareis en varios idiomas , abundante material que os mostrarán la forma básica de operar con el editor.


    Lo segundo es respetar escrupulosamente el nombre de los objetos que aparecen por las distintas pantallas, así como los eventos de entrada y salida del objeto y su código asociado.
    También debéis respetar el numero de pagina en el que aparece el objeto.
    Pero a cambio podéis cambiarles la fuente del grafico, la forma, el color, la posición, la fuente y tamaño del texto.
    Podéis añadir nuevos objetos ( líneas, círculos, cuadros, textos, etc.) a las paginas que queráis, pero deben ser neutros a los efectos del código ( sin código) ya que el "firm" del seguidor no dialogará con estos nuevos objetos.
    También podéis añadir nuevas paginas ( a partir de la ultima) en donde podáis escribir por ejemplo : vuestros propios textos como recordatorios de alguna configuración , algún dibujo, etc.

    Para aquellos que quieran profundizar aun más, tendrán que familiarizarse con el modulo que dialoga con la pantalla Nextion y descubrir los objetos conocidos por el Seguidor y a los que puede controlar:

    Ejemplo: esta Sub controla los datos que se mostrarán en la pagina 4 de Nextion y los nombres de los objetos implicados. ( t0 ,t1 , t2...etc.)

    [​IMG]

    Aquí os dejo el código del modulo Nextion, hecho con el editor "Swordfish Basic Compiler" para que todo el que quiera le pueda echar un vistazo, y que puede servir de ejemplo para aquellos que quieran crear su propio código en sus aplicaciones.

    Primera parte : ( El foro no permite mensajes mayores de 20.000 caracteres)

    Code:
    {
    *****************************************************************************
    *  Name    : Nextion.bas                                                    *
    *  Author  : F.L.O.                                                         *
    *  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS]              *
    *          : All Rights Reserved                                            *
    *  Date    : 14/03/2018                                                     *
    *  Version : 1.0                                                            *
    *  Notes   : Protocolo y manejo de pantalla  táctil NEXTION                 *
    *          :                                                                *
    *****************************************************************************
    }
    
    Module Nextion
    
    Include "SUART_INT.bas"
    Include "RecogerCampo.bas"  
    Include "Convert.bas"
    Include "Elementos_Menu.bas"
    Include "EEprom_I.bas"
    Include "Funciones.bas"
    Include "math.bas"
    Include "LeerAnalogico.bas"
    Include "Recoger.bas"
    Include "Calculos.bas"
    Include "Detecta_Protocolo.bas"
    Include "EntradaRS232.bas"
    Include "Prot_Confi.bas"
    Include "Configurar.bas"
    Include "RX5808.bas"
    
    
    '***** PROTOCOLO Nextion
    '*** Variables de recogida de mensajes
    Dim Estado As Byte              ' estado del Parser
    Dim Mensaje(25) As Byte         ' el cuerpo del mensaje
    Dim Indice As Byte              ' indice sobre carga datos
    Dim cFF,cRL As Byte             ' marcadores fin de mensaje
    Dim NuevoDato As Boolean
    Dim tmpField As String(10)
    Dim Item As Byte
    Dim Valor As Integer
    Dim Error As Boolean
    Dim FinComando As String(4)
    Dim chr34 As String(2)   ' comillas "
    Dim PaginaActual As Byte
    Public Dim ErrorNextion As Boolean   ' aviso de un error desde nextion
    Dim X,Y,Radio As Integer
    Dim Pic As Byte
    
    '******************************************************************************
    ' Salida de comando hacia NEXTION por puerto serie
    '*******************************************************************************
    Sub Mandar_a_Nextion(Comando As String )
         {
          Debug
             ' salida por puerto  RS232
               USART.Write(Comando,13,10)
          Fin debug
          }
       
         ' salida por puerto  Soft --> Nextion
          Comando = Comando + FinComando
          SUART_I.Write(Comando)
    
    End Sub
    '******************************************************************************
    ' ¿ Datos Nuevos Disponibles ?
    '*******************************************************************************
    Public Function NuevosDatosNextion() As Boolean
               Result  = NuevoDato
               NuevoDato = false    ' reset para una nueva recogida
    End Function
    '******************************************************************************
    ' Mensaje de Texto : $ITEM, nºitem   (17 y 50)
    '*******************************************************************************
    Sub Mensaje_Item_17_50()
         Mandar_a_Nextion("page 20")
         Mandar_a_Nextion("bt0.val=" + DecToStr(PAN_Inv))
         Mandar_a_Nextion("bt1.val=" + DecToStr(Dir_LCD))    
         Mandar_a_Nextion("click t0,1")    
         Mandar_a_Nextion("click t4,1")  
    End Sub
    '******************************************************************************
    ' Mensaje de Texto : $ITEM, nºitem   y $ITEMT, nº item (1)
    '*******************************************************************************
    Sub Mensaje_Item(Opcion As Byte= 0)
        'Tratar si hay comando de item (Mandado por nextion botones de menu modificacion de valores de eeprom (m0...m4)
     
         Error = GetField(2,tmpField,Mensaje())  ' obtener numero de item de menu
         Item=StrToDec(tmpField)
       
      If Item = 17 Then // Opcion de pagina 20 (Miscelanea-inversion servo/direccion LCD)
           Mensaje_Item_17_50()
           Exit
      EndIf
     
      If Opcion = 0   Then ' para pagina 3 ( mod)
        // (version 0.0 ,todos con prefijo pagina mod.  ejemplo: "mod.Item.val.." )
        // nuevo (1.0)
         Mandar_a_Nextion("page 3")
         Mandar_a_Nextion("Item.val=" + tmpField)
         Mandar_a_Nextion("ValorMax.val=" + DecToStr(Opciones(Item).ValorMax))
         Mandar_a_Nextion("ValorMin.val=" + DecToStr(Opciones(Item).ValorMin))
         'Tratamiento de valores negativos en Slider 'CValor'
         Mandar_a_Nextion("CValor.maxval=" + DecToStr(Opciones(Item).ValorMax))
         Mandar_a_Nextion("CValor.minval=" + DecToStr(Opciones(Item).ValorMin))
         Mandar_a_Nextion("Direccion.val=" + DecToStr(Opciones(Item).Direccion))
         Mandar_a_Nextion("Tipo.val=" + DecToStr(Opciones(Item).Tipo))
         Mandar_a_Nextion("click ValorMax,1") 'ejecutar en nextion refresco de Slider CValor
         'leer primero de EEprom para obtener valor actual
         Valor=Elementos_Menu.LeeEEprom(Opciones(Item).Direccion, Opciones(Item).Tipo)
         Mandar_a_Nextion("Valor.val=" + DecToStr(Valor))
         ' Tratamiento de valores negativos para Slider 'CValor'
         If Valor <= 0 Then
            Mandar_a_Nextion("CValor.val=" + DecToStr(Valor - Opciones(Item).ValorMin))
         Else
            Mandar_a_Nextion("CValor.val=" + DecToStr(Valor))
         End If
         // texto especial segun item
         tmpField = Muestra_Valor_Especial(Item, Valor)
         Mandar_a_Nextion("VE.txt=" + chr34 + tmpField + chr34)
     
      Else      ' pagina 13 (Test) de servos
       
         Mandar_a_Nextion("page 13")
         'leer primero de EEprom para obtener valor actual
         Valor=Elementos_Menu.LeeEEprom(Opciones(Item).Direccion, Opciones(Item).Tipo)
         Mandar_a_Nextion("h2.val=" + DecToStr(Valor))
         Mandar_a_Nextion("t2.txt=" + chr34 + DecToStr(Valor) + chr34)
      EndIf
    End Sub
    
    '******************************************************************************
    ' Mensaje de Texto : $VE, nºitem,valor
    '*******************************************************************************
    Sub Mensaje_Texto_Especial()
         '"$VE" Valor especial ( explicacion de menu)
         Error = GetField(2,tmpField,Mensaje())  ' obtener numero de item de menu
         Item=StrToDec(tmpField)
         Error = GetField(3,tmpField,Mensaje())  ' obtener Valor actual de Nextion                  
         Valor = StrToDec(tmpField)
         tmpField = Muestra_Valor_Especial(Item, Valor)            
         Mandar_a_Nextion("VE.txt=" + chr34 + tmpField + chr34)
    End Sub
    
    '******************************************************************************
    ' Mensaje de Texto : $MV, nºitem,valor
    '*******************************************************************************
    Sub Mensaje_Modifica_EEprom()
         ' "$MV" valor de actualizacion para EEprom devuelto por pagina 'Mod'
         Error = GetField(2,tmpField,Mensaje())
         Item = StrToDec(tmpField)
         Error = GetField(3,tmpField,Mensaje())
         Valor = StrToDec(tmpField)
         If Item < 24 Then  // recogido en elementos de menu
          // guardar nuevo valor en EEprom
          Modificar(Valor , Opciones(Item).Direccion , Opciones(Item).Tipo,true)
          'Mandar_a_Nextion("mod.t2.pic=7")  ' mostrar okey de datos recibidos
          Mandar_a_Nextion("t2.pic=7")  ' mostrar okey de datos recibidos
          Exit
         EndIf
       
         If Item = 50 Then  // item fuera de elementos de menu
          Modificar(Valor , _E_PCF8574 , 1,true)
          Mandar_a_Nextion("t2.pic=7")  ' mostrar okey de datos recibidos
         EndIf
    End Sub
    
    '******************************************************************************
    ' Mensaje de Texto : $VERSION
    '*******************************************************************************
    Sub Mensaje_Version()
         ' "$VERSION" dar el numero actual de version
         'Mostrar numero de version en Pagina Inicio
          Mandar_a_Nextion("t0.txt=" + chr34 + "Seg. Anten.: Version 2.0.0" + chr34)
          Mandar_a_Nextion ("tm0.en=1")
    End Sub
    
    '******************************************************************************
    ' Mensaje de Texto : adicional a $ITEMV,item,valor
    '*******************************************************************************
    Sub Mensaje_Video_Tratar(Valor As Integer)
       'Canal, OrdenCanal,FrecuenciaFina son valores publicos del modulo Configurar.bas
        Dim z As Byte
        Dim Existe As Boolean
        Existe=false
        For z=0 To Bound(CanalesMHz())
           If CanalesMHz(z)= Valor Then
             Canal= z       ' obtener el numero de canal
             Existe=True
           EndIf
        Next
        If Existe=True Then ' si la frecuencia fina coincide con un canal, graba nº canal y orden
          For z=0 To Bound(CanalesOrdenados())
            If CanalesOrdenados(z)= Canal Then OrdenCanal = z EndIf ' obtener el orden
          Next
          // guardar nuevo valor en EEprom
          Modificar(Canal , _Canal , 1,False)                 ' guarda canal
          Modificar(OrdenCanal , _OrdenCanal , 1,False)       ' guarda orden
        EndIf
        Modificar(Valor , _FrecuenciaFina , 2)                ' guarda Frecuencia,y relee eeprom
        RX5808.SintonizaCanal(255,Valor)                      ' Por frecuencia  
                                       
    End Sub
    '******************************************************************************
    ' Mensaje de Texto : $ITEMV,item,valor  (Tratamiento de sintonizador RX5808)
    '*******************************************************************************
    Sub Mensaje_Video()
         Dim a,b As Byte
         Dim PixelX,PixelY As Word
         Dim mRssi As Word ,Frecuencia As Word
         Error = GetField(2,tmpField,Mensaje())
         Item = StrToDec(tmpField)
         Error = GetField(3,tmpField,Mensaje())
         Valor = StrToDec(tmpField)
       
         Select Item
    
             Case 20    ' ordenado por frecuencia
                 If Valor = 0 Then  // sin valor a modificar. Solo mandar a pagina  y valor actual
                   Mandar_a_Nextion("page 14")
                   Mandar_a_Nextion("Can.txt=" + chr34 + DecToStr(FrecuenciaFina)+ chr34)
                   Exit
                 EndIf
               
                 Mensaje_Video_Tratar(Valor)
                 Mandar_a_Nextion("t0.pic=7")  ' mostrar okey de datos recibidos
           
             Case 21     ' por orden natural de canales
                 If Valor = 0 Then  // sin valor a modificar. Solo mandar a pagina y valor actual
                   Mandar_a_Nextion("page 15")
                   Mandar_a_Nextion("Can.txt=" + chr34 + DecToStr(FrecuenciaFina)+ chr34)
                   Mandar_a_Nextion("t0.txt=" + chr34 + CanalesSimbolo(Configurar.Canal) + chr34)
                   Exit
                 EndIf
               
                 Mensaje_Video_Tratar(Valor)
                 Mandar_a_Nextion("t28.pic=7")    ' mostrar okey de datos recibidos
    
             Case 22  ' Entrar en modo  Escaner
                 Mandar_a_Nextion("page 16")
                 Mandar_a_Nextion("vis esc,1") ' visualiza rotulo escaneando
                 a = RX5808.AutoScan(Configurar.FrecuenciaFina)
               If  a <> 255 Then
                 // Primero grabar en EEprom y a continuacion mandar a nextion ( grabar en EEprom para las interrupciones)
                 // y Soft_Uart funciona con interrupciones
                 // Grabar valores en EEprom
                 For b = 0 To Bound(CanalesOrdenados())
                    If CanalesOrdenados(b)= a Then OrdenCanal= b EndIf
                 Next
                 Modificar(OrdenCanal , _OrdenCanal , 1, False) ' Guarda orden
                 Modificar(a , _Canal , 1, False)               ' Guarda numero canal              
                 Modificar(Configurar.FrecuenciaFina , _FrecuenciaFina , 2)' Guarda Frecuencia dada por escaner (y refrescar)                                
                 // informar a Nextion
                 Mandar_a_Nextion("t2.txt=" + chr34 + CanalesSimbolo(a) + chr34)  ' canal oficial
                 Mandar_a_Nextion("t3.txt=" + chr34 + DecToStr(CanalesMHz(a)) + chr34) ' frecuencia oficial proxima          
                 Mandar_a_Nextion("t4.txt=" + chr34 + DecToStr(Configurar.FrecuenciaFina) + chr34) ' sintonia fina
                 Mandar_a_Nextion("vis esc,0") ' apaga escaneando  
               Else
                 Mandar_a_Nextion("vis av,1") ' visualiza rotulo sin video....
                 Mandar_a_Nextion("vis esc,0") ' apaga escaneando
               EndIf
                   
             Case 23  ' Entrar en modo Calibrar RSSI (Max y Min)
                 Mandar_a_Nextion("page 16")
                 Mandar_a_Nextion("vis ca,1") ' visualiza rotulo calibrar
                 a = RX5808.CalibrarRssi(CRssi_Min,CRssi_Max,FrecuenciaFina)
               If a = 0  Then
                  // Grabar valores en EEprom (Para interrupciones)
                 Modificar(CRssi_Min , _CRssi_Min , 2,False)   ' Grabar en EEprom nuevo valor
                 Modificar(CRssi_Max , _CRssi_Max , 2)         ' Grabar en EEprom nuevo valor y Refrescar              
                 // informar a Nextion ( con interrupciones reactivadas )
                 Mandar_a_Nextion("t8.txt=" + chr34 + DecToStr(CRssi_Max) + chr34) ' maximo      
                 Mandar_a_Nextion("t7.txt=" + chr34 + DecToStr(CRssi_Min) + chr34)  ' minimo
                 Mandar_a_Nextion("vis ca,0") ' apaga calibrando          
               Else
                 Mandar_a_Nextion("vis av,1") ' visualiza rotulo sin video....
                 Mandar_a_Nextion("vis ca,0") ' apaga calibrando..
               EndIf
    
             Case 24  ' Entrar en modo Espectro de frecuencias de la banda 5.8 Ghz
                 PixelX = 50 ' empezar por primera columna de 3
                 PixelY = 3
                 Mandar_a_Nextion("page 18")
                 For a = 0 To Bound(CanalesOrdenados())
                    Frecuencia = CanalesMHz(CanalesOrdenados(a))
                    mRssi = RX5808.Espectro(Frecuencia)
                    mRssi= Map(mRssi,CRssi_Min,CRssi_Max,1,90,True) ' mantener entre 1 y 90
                     If a = 24 Then ' primera columna llena , pasar a columna 2
                        PixelX = 184   ' columna
                        PixelY =  3    ' linea
                     EndIf
                     If a = 48 Then ' segunda columna llena , pasar a columna 3
                        PixelX = 330
                        PixelY =  3
                     EndIf
                     //  fill PixelX,PixelY,Valor,8,RED
                    Mandar_a_Nextion("fill "+DecToStr(PixelX)+","+DecToStr(PixelY)+","+DecToStr(mRssi)+",8,RED")      
                    PixelY=PixelY + 13
                 Next
                  RX5808.SintonizaCanal(255,FrecuenciaFina) 'devuelve la frecuencia sintonizada por defecto
         End Select
    End Sub
    
    '******************************************************************************
    ' Decodifica los mensajes recibidos completos desde Nextion
    '*******************************************************************************
    Sub Decodifica_Nextion()
     
       Select Mensaje(0)
               Case 0 To 35    ' errores varios
                   ' ErrText.Text = "¡ Error ! "
               Case 102  ' &h66   pagina actual en Nextion (Sendme)
                   PaginaActual = Mensaje(1)
               Case 112  ' &h70    Retorno de un mensaje de texto con terminacion &hff &hff &hff
    
               Case 113  ' &h71    Retorno de un mensaje numerico de 4 bytes con terminacion &hff &hff &hff
     
               Case 36  ' '$'    mensaje de texto (protocolo Propio)
                    Error = GetField(1,tmpField,Mensaje())
                    If  Error Then  Exit  EndIf
                    If tmpField = "$ITEM" Then   ' modificar valor EEprom
                        Mensaje_Item
                        Exit
                    EndIf
                    If tmpField = "$ITEMT" Then  ' test servos
                        Mensaje_Item(1)
                        Exit
                    EndIf
    
                    If tmpField = "$VE" Then
                       Mensaje_Texto_Especial
                       Exit
                    EndIf
                    If tmpField = "$MV"  Then
                       Mensaje_Modifica_EEprom
                       Exit
                   End If
                   If tmpField = "$VERSION" Then
                       Mensaje_Version
                   End If
                   If tmpField = "$ITEMV" Then
                       Mensaje_Video
                   End If
    
    
        EndSelect
    
    End Sub
    


    No dudéis en preguntar si tenéis alguna duda.
     

    Attached Files:

    #12 CIAPU35, Jan 28, 2019
    Last edited: Mar 22, 2019
  13. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    Segunda Parte :

    Unir con el mensaje anterior

    Code:
    '******************************************************************************
    ' Decodifica datos byte a byte
    '*******************************************************************************
    Sub Recoge_Nextion(C As Byte)
        
        Mensaje(Indice)= C
        Indice = Indice + 1
          
        If C = 255 Then   ' detectar FF FF FF
           cFF = cFF + 1
        Else
           cFF = 0        ' no vienen 3 FF seguidos
        End If
        
        If C = 13 Or C = 10 Then  ' detectar cr/lf
           cRL = cRL + 1
        Else
           cRL = 0                ' no vienen CR/LF seguidos
        End If
        
        If Indice > Bound(Mensaje) Then
          Indice=0     ' No rebasar limites de Mensaje
          Exit
        EndIf
        
        If cFF >= 3 Or cRL >= 2 Then ' alcanzada fin de sentencia
           cFF = 0
           cRL = 0
           'Errornextion=false
           Decodifica_Nextion()
           Indice = 0       
           NuevoDato= true
        End If
          
           // pasar tambien al modulo Parser "Prot_Confi.bas"
           // para extraer posible comandos de "$CONFI" y pasarle el control al mismo
           DecodificaDatos_Confi(C)
    
    End Sub
    
    '*******************************************************************************
    ' MOSTRAR DATOS   pagina 4
    '*******************************************************************************
    Sub Mostrar_Datos_04()     ' Pagina 4 (d1)
      ' t0-> latitud , t1 -> longitud, t2 -> distancia, t3 -> altura , t4 -> satelites, t5 -> direccion seguidor
      ' t6 -> brujula, j0 -> Rssi (Slider) 0 <-> 100
    
         Mandar_a_Nextion("t0.txt=" + chr34 + FloatToStr(Calculos.Posi_Avion.lat,7) + chr34)
         Mandar_a_Nextion("t1.txt=" + chr34 + FloatToStr(Calculos.Posi_Avion.lon,7) + chr34)
         Mandar_a_Nextion("t2.txt=" + chr34 + DecToStr(Posi_Avion.distancia) + chr34)
         Mandar_a_Nextion("t3.txt=" + chr34 + DecToStr(Posi_Avion.Alt-Posi_Seguidor.Alt) + chr34)
         Mandar_a_Nextion("t4.txt=" + chr34 + DecToStr(Recoger.Satelites) + chr34)
         Mandar_a_Nextion("t5.txt=" + chr34 + DecToStr(Posi_Seguidor.Rumbo)+ "º" + chr34)      'Char(223)
         Mandar_a_Nextion("t6.txt=" + chr34 + DecToStr(Calculos.AngBrujula) + "º" + chr34 )    'Char(223)
         Mandar_a_Nextion("j0.val=" + DecToStr(RSSI))
    End Sub
    
    '*******************************************************************************
    ' MOSTRAR DATOS   pagina 5
    '*******************************************************************************
    Sub Mostrar_Datos_05()     ' Pagina 5 (d2)
      ' t0-> bateria , t1 -> protocolo, t2 -> frecuencia mensajes protocolo, t3 -> error crc ,
      ' t4 -> buffer overrun error
      ' p0 -> actividad protocolo,
     
         Mandar_a_Nextion("t0.txt=" + chr34 + FloatToStr(VBateria,1) + chr34)
         Mandar_a_Nextion("t1.txt=" + chr34 + Detecta.ProtocoloText + chr34)
         ''Mandar_a_Nextion("t2.txt=" + chr34 + DecToStr(Recoger.Frecuencia_Mensajes(Recoger.Frecuencia)) + chr34)
         Mandar_a_Nextion("t2.txt=" + chr34 + DecToStr(Recoger.Frecuencia) + chr34)
         Mandar_a_Nextion("t3.txt=" + chr34 + DecToStr(Recoger.Err_CRC) + chr34)
         Mandar_a_Nextion("t4.txt=" + chr34 + DecToStr(BufferOver_Cuenta) + chr34)
        
         If Recoger.Recepcion1 Then
            Recoger.Recepcion1 = false
            If Pic=25 Then
               Pic=26
            Else   
               Pic=25
            EndIf   
         EndIf
      
         Mandar_a_Nextion("p0.pic=" + DecToStr(Pic))     // pic 25 o 26
    
    End Sub
    '*******************************************************************************
    ' Calculo Seno_Coseno ( Posicion del avioncito en el circulo Radar)
    '*******************************************************************************
    Sub Calculo_Seno_Coseno(ByRef X As Integer, ByRef Y As Integer, Grados As Integer, Radio As Integer)
        ' convertir grados a radianes, multipicar grados por  pi/180
        Dim Radian As Float
      
        Radian = Grados * deg2rad  ' pasar a radianes
        'Radio = 150 '  pixeles ( radio a 2000 metros distancia)
        Y = cos(Radian) * Radio
        X = sin(Radian) * Radio
        X = 240 + X      ' centro circulo radar( x=240 , y=160)
        Y = 160 - Y
    End Sub
    
    '*******************************************************************************
    ' MOSTRAR DATOS   Radar (Pagina 12)
    '*******************************************************************************
    Sub Mostrar_Datos_12()     ' Pagina 12 (Radar)
      '  t1 -> distancia,t2-> Altura ,t3 -> rumbo
        
         Dim Dibujo As Byte
      
        '// refrescar pagina ( Para borrar posicion de avion anterior)
        Mandar_a_Nextion ("page 12")
        '// actualizar contadores
        Mandar_a_Nextion ("t1.txt=" + chr34 + DecToStr(Posi_Avion.distancia) + chr34)
        Mandar_a_Nextion ("t2.txt=" + chr34 + DecToStr(Posi_Avion.Alt-Posi_Seguidor.Alt) + chr34)
        Mandar_a_Nextion ("t3.txt=" + chr34 + DecToStr(Posi_Seguidor.Rumbo) + "º" + chr34)
        '// actualizar posicion del avion en el radar
        Radio = Map(Posi_Avion.distancia, 0, 2000, 0, 150, True) 
        Calculo_Seno_Coseno(X, Y, Posi_Seguidor.Rumbo, Radio)
        ' reorientar dibujito del avion para pasar la punta al origen de posicion
          // Y = Y - 10
        Select  Posi_Seguidor.Rumbo
            Case 0 To 90
               Dibujo=36
               'X=X   origen 0.0     
               'Y=Y
            Case 91 To 180 
               Dibujo=37
               'X=X   origen 0.0     
               Y=Y-35
            Case 181 To 270 
               Dibujo=38
               X=X-35   'origen 0.0     
               Y=Y-35
            Case 271 To 360 
               Dibujo=39
               X=X-35   'origen 0.0     
               'Y=Y
        EndSelect
        
        Mandar_a_Nextion ("pic " + DecToStr(X) + "," + DecToStr(Y) + "," + DecToStr(Dibujo))
    
    End Sub
    '*******************************************************************************
    ' MOSTRAR DATOS   pagina 21
    '*******************************************************************************
    Sub Mostrar_Datos_21()     ' Pagina 21 (Afinar)
         ' mostrar nivel de RSSI de video
         Mandar_a_Nextion("j0.val=" + DecToStr(RSSI))
    
    End Sub
    '*******************************************************************************
    ' MOSTRAR DATOS   
    '*******************************************************************************
    Public Sub Mostrar_Datos_Nextion()     
    
       Select PaginaActual
      
             Case 4
               Mostrar_Datos_04
      
             Case 5
               Mostrar_Datos_05
            
             Case 12
               Mostrar_Datos_12
              
             Case 21
               Mostrar_Datos_21
                
            
      EndSelect
    End Sub
    '****************************************************************************
    '* Nombre    : Recoger_Sentencias_SOFT UART                                 *
    '* Proposito : recoger datos de los Buffer SOFT                             *
    '*             mandados por pantalla NEXTION                                *
    '****************************************************************************
    Public Sub Recoger_Sentencias_SOFT()
          Dim ByteEntrada As Byte
      //  Leer el buffer de entrada SOFT UART_INT
          While   SUART_I.DatoDisponible
                  ByteEntrada = SUART_I.GetByte
                  Recoge_Nextion(ByteEntrada)
          Wend
    End Sub
    
    '/////////////////////////////////////////////////////////////////////////
    ' Inicio. Fijar variables
    '/////////////////////////////////////////////////////////////////////////
    FinComando(0)=255  ' sentencia fin de comando
    FinComando(1)=255
    FinComando(2)=255
    FinComando(3)=null
    chr34(0)=34  ' comillas
    chr34(1)=null
    cFF=0
    cRL=0
    Estado = 1
    Indice=0
    NuevoDato= False
    PaginaActual=0
    ErrorNextion=False
    Item=0
    Valor=0
    Error= false
    Pic = 25
     
  14. raspdroid Miembro

    raspdroid
    Joined:
    Apr 7, 2017
    Messages:
    200
    Likes Received:
    12
    El código de RX5808.bas se puede ver en algún sitio porque no lo encuentro.
     
  15. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    Acerca de los VTX de 5.8 GHz


    Trabajando con el sintonizador Rx5808 he podido darme cuenta de que algunos emisores de video en la banda de 5.8 GHz , cuando se selecciona un canal y por tanto una determinada frecuencia, se espera que este emita exactamente en esta frecuencia elegida, y sin embargo la realidad demuestra que no es así como ocurre.

    El Seguidor, al efectuar un AutoEscaner, el método que utiliza es el de pasar por todas las frecuencias oficiales en busca de aquella que ofrezca la señal más potente, es decir, el RSSI más alto.
    Una vez encontrada esta frecuencia o canal, a continuación efectúa un escaneo fino alrededor de esta frecuencia oficial en pasos de 1 MHz en un intervalo de -12 MHz a +12 MHz, mientras va comparando el mejor Rssi encontrado.

    Al final me he encontrado con sorpresas, y he detectado que los emisores de video no emiten con la frecuencia seleccionada oficial, sino que se desplazan ligeramente alrededor de esta.
    Si además, por la parte del sintonizador, solamente disponemos de un modelo en el que nos tenemos que ceñir obligatoriamente a seleccionar las frecuencias oficiales, podemos tener un problema de desfase entre emisor y receptor que nos degradará la calidad de la imagen de video, así como una disminución de la distancia de alcance.


    Por eso, una ventaja importante de utilizar este sintonizador, es la de poder detectar y ajustar finamente la frecuencia real de nuestro emisor VTX.

    Con la opción del autoescaner siempre estaréis automáticamente en la frecuencia real, sin necesidad de
    intervención en frecuencia fina. Por eso no es extrañéis, si tenéis un canal seleccionado en el VTX, y el sintonizador os detecta otro. Esto es debido a que el sintonizador ha determinado que la mejor frecuencia es la que ha escaneado, y que al coincidir con otro canal oficial con esta misma frecuencia, lo selecciona por defecto.
    En otras ocasiones os dará el canal con el que supone que estáis emitiendo y su frecuencia oficial, pero en el apartado de frecuencia fina os dará un valor distinto, que corresponde con la frecuencia real encontrada.

    Ejemplo: En el video de presentación estoy emitiendo con un VTX oficialmente en el canal F4 (5800) , y sin embargo, al autoescanear estoy obteniendo una frecuencia fina de recepción de 5805 MHz que corresponde al canal oficial más próximo A4; por eso el autoescaneo me devuelve este canal.


    [​IMG]




    Esta es la tabla oficial de canales que usan los distintos VTX del mercado ( 72 canales):


    [​IMG]
     

    Attached Files:

    #15 CIAPU35, Feb 1, 2019
    Last edited: Mar 22, 2019
  16. Stapelton Nuevo Miembro

    Stapelton
    Joined:
    Aug 21, 2015
    Messages:
    88
    Likes Received:
    0
  17. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17


    Después de ojear el código de la aplicación, en principio te puedo decir que seria posible utilizar esta aplicación, claro que, siempre y cuando, con algún pequeño esfuerzo habría que crear un modulo traductor de protocolo. (Ten en cuenta que cada uno de nosotros utilizamos nuestros protocolos propietarios).
    Y después de decirte esto, debes tener esto en cuenta:

    1.- Al ser un protocolo propietario de un tercero, (el cual escapa a mi control), este lo puede cambiar en cualquier momento, dejando de ser inmediatamente compatible y obligándome a seguir sus modificaciones.

    2.- Con esta aplicación solo tienes acceso al control del Video, pero no tienes control sobre los ajustes del Seguidor, y ni muchísimo menos presentación de datos sobre el curso del vuelo que estás efectuando.

    3.- Me dices que estás utilizando ya un "bluetooth" , e imagino que será sobre el canal de telemetría, entonces necesitaras otro canal más con "Bluetooth" para transferir los comandos de video con esta aplicación.
    (No se pueden mezclar dos fuentes de TX distintas sobre el mismo puerto).

    4.- Observando el video de presentación de la aplicación , se puede ver que prácticamente toda la funcionalidad es similar a la presentada con la Pantalla Nextion.

    5.- Si el problema es que no te gusta la pantalla táctil, o que es demasiado grande y no sabes donde ponerla, no te preocupes, puedes seguir teniendo control sobre el sintonizador de video con el teclado/joystick y el visor Lcd de dos líneas. En esta ocasión te recomiendo que hagas Autoescan , y siempre tendrás la mejor y mas fiel frecuencia sintonizada.


    Bueno, pues dicho esto...……¿ crees que aun vale la pena meter la cabeza para intentar compatibilizar esta "app" con el seguidor...… o tal vez no sería mejor modificar y/o ampliar las funciones del sintonizador ( a sugerencia de los usuarios) a través del Seguidor con su pantalla Nextion ?.

    Saludos... y gracias por tu sugerencia;)
     
  18. Stapelton Nuevo Miembro

    Stapelton
    Joined:
    Aug 21, 2015
    Messages:
    88
    Likes Received:
    0
    Gracias por tu respuesta:
    Tengo las dos cosas telemetría y bluetooth tanto en la emisora como en el seguidor, y conecto bien por telemetría o por bluetooth pero suelo hacerlo con el bluetooth ya que no tengo que conectar el modulo al móvil con el cable, aparte de quitarme el ruido del puerto usb. Para que funcione tengo que soltar el cable TX de la placa del seguidor (no sé si el seguidor envía alguna señal de telemetría o solo necesita recibir) el caso es que funciona.
    bluetooth telemetry link wiring.jpg

    Solo tengo un problema y es que si tengo el avión en vuelo y apago el seguidor ya es imposible conectar, tengo que aterrizar soltar la batería y al ponerla ya vuelve a conectar y coge posición pero es una coña el tener que aterrizarle, al estar casi dos horas de vuelo se me queda la pantalla lcd sin texto, he pedido un par de pantallas por si esta algo tocada, el seguidor sigue funcionando así que será la pantalla.
    Respecto a la pantalla Nextion pues la pediré pero la dejare acoplada fija al chasis, he visto que venden cajitas impresas para protegerla así que también me pillare una.

    Saludos...
     
  19. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    Ante todo, te pido perdón, o a cualquier otro que haya experimentado este síntoma...…….
    No es que la pantalla LCD esté estropeada, es simplemente que …..

    Ha sido un fallo mío el no comunicar desde el primer día ,que el problema que reportas tiene muy fácil solución.
    Solamente tienes que pulsar el joystick ( a la derecha, o la izquierda , como prefieras) durante más de 6 segundos, y reiniciaras el LCD, y verás como vuelve a la vida.
    El seguidor mantiene todas sus constantes vitales.

    Durante el periodo de pruebas en el nacimiento del proyecto, me ocurrió este síntoma un par de veces a lo largo de un año, así que pensé en incluir la solución como parte del proyecto. Posiblemente no he comunicado nunca la operación, porque pensé que no le ocurriría a nadie más.

    Imagino que, el problema es que el LCD a veces se puede congelar en el paso del protocolo I2C a protocolo paralelo (que es su protocolo nativo), si por los cables recoge alguna interferencia, que desvirtúe los datos y derive en un comando de control extraño al LCD. :rolleyes::rolleyes::rolleyes:

    Saludos...…… y ya sé a quien tendría que pedirle un LCD de repuesto , debido a tu gran Stock :)
     
  20. Stapelton Nuevo Miembro

    Stapelton
    Joined:
    Aug 21, 2015
    Messages:
    88
    Likes Received:
    0
    Gracias Ciapu35 está bien saberlo :), me alegro que tenga solución manual, ¿pero no le podrías poner alguna línea en el código para que cada 15 minutos se reiniciara el LCD automáticamente?;)

    Eso está hecho, si necesitas alguno te lo mando.
    Saludos...

    Después de terminar este proyecto me he dado cuenta que la foto que puse del modulo de telemetría y el bluetooth en bridge estaba mal, dejo este como definitivo.
    El Diodo es para poder cambiar los modos de vuelo, subir point, etc... con Tower desde el móvil.

    Cuando sea necesario conectar por telemetría desde el ordenador para calibrar el seguidor, es necesario puentear el diodo. Si sigue sin conectar suelta el modulo bluetooth.
    telemetría bluetooth bridge.jpg
     
    #20 Stapelton, Feb 4, 2019
    Last edited: Mar 22, 2019
  21. Stapelton Nuevo Miembro

    Stapelton
    Joined:
    Aug 21, 2015
    Messages:
    88
    Likes Received:
    0
    La cage al poner el modulo de telemetría en medio de la Moxon, lo hice inconscientemente XD.

    20190321_212848_1280x800.jpg 20190321_212854_1280x800.jpg 20190321_212911_1280x800.jpg 20190321_213002_1280x800.jpg

    El puente está en la clavija de la pantalla Nextion, al quitarla sigue funcionando con la lcd, no es necesario conectar ni desconectar nada.

    20190322_214717_1280x800.jpg
     
    #21 Stapelton, Mar 22, 2019
    Last edited: Mar 22, 2019
  22. Stapelton Nuevo Miembro

    Stapelton
    Joined:
    Aug 21, 2015
    Messages:
    88
    Likes Received:
    0
    Esta tarde estuve probando con uno de mis drones (nada del otro mundo) polarización horizontal en la telemetría y vertical en el video y los resultados impresionantes, a 5 kilómetros de distancia el video perfecto y la telemetría aunque con alguna desconexión volvía a conectarse correctamente, lo más sorprendente es que en el seguidor tengo una antena de polarización circular para el video y vertical para la telemetría (con el receptor en el medio de la moxon, no he tenido tiempo de modificarla)., no coincide ninguna de las polarizaciones ni antenas y el resultado es sensacional. :eek:
    Solo hay un pero, y son unas pequeñas interferencias en el video que no se si son producidas por la telemetría o los servos, alimento todo con un simple bec de 5 voltios, quizás con un pequeño filtro lo solucione.

    Tengo que probarlo con el avión para acabar de convencerme, con el otro seguidor tenía muchas interferencias en el video, bandas horizontales, mucho ruido, pobre señal, etc...será que el receptor RC832 que es una castaña, tendré que comprar otro sintonizador RX5808 y ponérselo. XD

    Gracias Ciapu35, sencillo pero impresionante este proyecto. :)
    ahhh y apenas he calibrado la brújula y poco mas y va que te cagas
    Saludos...
     
    #22 Stapelton, Mar 23, 2019
    Last edited: Mar 24, 2019
  23. CIAPU35 Miembro

    CIAPU35
    Joined:
    May 9, 2010
    Messages:
    201
    Likes Received:
    17
    Está claro, que en la nueva versión del receptor Rx5808, al aumentar la sensibilidad en recepción (-95 dB contra -90 dB del antiguo), casi aumenta al doble la distancia de alcance (6 dB de diferencia, sería el doble exacto), manteniendo la misma potencia de emisión.
    Además, el poder sintonizar a la frecuencia real de emisión del Vtx , también contribuye a mejorar la calidad de recepción.

    Saludos.
     
    #23 CIAPU35, Mar 25, 2019
    Last edited: Mar 26, 2019

Share This Page