samedi 31 janvier 2015

girouette télémetrique pour taranis

Bon je vais vous décrire le réalisation de ma girouette avec retour télémétrique pour ma radio taranis plus de FrSky
l'idée est de la couplé au GPS pour obtenir des données twa vitesse d'ou le choix du recepteur X4R ou X4RSB pour disposer de l'entré analogique pour la girouette et l'entrée smart port pour le GPS

configuration:
girouette
aimant anneau à polarisation radiale
capteur sentron 2SA-10
pont diviseur pour coller à l'entrée analogique
ubec de 5V pour lisser la tension d'entrée sur le capteur
récepteur FrSky X4RSB

le circuit électronique donne une tension comprise entre 5 et 95% de la tension d'entrée soit entre 0.25V et 4.75V en fonction de l'angle de la girouette entre 0 et 180°
Et oui elle ne fait pas la différence entre tribord et bâbord
un pont diviseur pour abaisser cette tension pour avoir un Vmax de 3.3V (maximum accepté par l'entrée analogique des récepteurs FrSky)

un petit calcul dans un script lua pour transformer cette tension en angle puis affichage et le tour est joué

voici mon script lua pour  utiliser les données
affichage A1 accu de réception direct sur le récepteur ( non valable si présence d'un bec ou ubec)
affichage tension émetteur
affichage du rssi (qualité de la liaison TX RX)
affichage du swr ( qualité de l'émission)
avec l'affichage du aws: angle entre le vent apparent et le bateau grâce à la girouette télémétrique fabriquée données récupérés en A2
et calcul du VMG  en fonction de la vitesse du GPS (par smart port et du aws en A2)
affichage graphique position manche voile du aws tension TX RX et RSSI

code
-- script for RC sailboat with a personnal wind indicatorentry in A2 and smart port GPS
-- Version 1.0
-- FROMENT A
-- for more information about personnal wind indicator antoinefroment@gmail.com
-- janvier2015
-- A installer dans SCRIPT\"nom du modele" sur la carte SD
-- le nom du modele ne doit pas contenir d'espace
local function vgauge(vx, vy, vw, vh, vfill, vmaxfill)
--draw border
lcd.drawRectangle(vx, vy ,vw, vh)

-- calculate height
local vlen = vh * vfill / vmaxfill
local vheight = vy + ( vh - vlen)

-- dont go negative
if vlen < 2 then vlen = 2 end

--draw fill inside border
lcd.drawFilledRectangle(vx + 1, vheight + 1, vw - 2,vlen - 2, 0)
end

local function run(event)

      -- affichage A1
      -- si A1 202
      -- si A2 203

  lcd.drawChannel(122, 5, 202, LEFT+XXLSIZE)


      -- calcul pourcentage A1 lipo2s
      -- formule pour lipo 2S   %=(T-7,1068)/0,0118
      -- formule pour lipo 3S   %=(T-10,6602)/0,0177
      -- formule pour lipo 4S   %=(T-14,2136)/0,0236
      -- formule pour lipo 5S   %=(T-17.767)/0,0295

  local percent1 = (getValue(202)-7.1068)/0.0118
  if percent1 < 0 then
    percent1 = 0
  end

      -- affichage pourcentage sur la réprésentation graphique

  lcd.drawNumber(100, 50, percent1, MIDSIZE)
  lcd.drawText(lcd.getLastPos(), 53, "%", SMLSIZE)

      -- affichage graphique de pourcentage A1

  lcd.drawGauge(3, 49, 195, 14, percent1, 100)

      -- affichage valeur Tx

  lcd.drawChannel(3, 5, "tx-voltage", LEFT+MIDSIZE)

      -- calcul pourcentage Tx


  local settings = getGeneralSettings()
  local percent2 = (getValue("tx-voltage")-settings.battMin) * 100 / (settings.battMax-settings.battMin)

      -- affichage pourcentage sur la réprésentation graphique

  lcd.drawNumber(76, 6, percent2, MIDSIZE)
  lcd.drawText(lcd.getLastPos(), 7, "%", SMLSIZE)

      -- affichage graphique de pourcentage Tx

  lcd.drawGauge(30, 5, 72, 14, percent2, 100)

      -- mise en variable de la valeur rssi pour affichage

  local rssi = (getValue(200))

      -- affichage texte Rssi

  lcd.drawText(3, 26, "Rx", SMLSIZE)

      -- affichage valeur RSSI sur représentation graphique

  lcd.drawNumber(78, 27, rssi, SMLSIZE)

      -- affichage graphique du RSSI

  lcd.drawGauge(30, 26, 72, 8, getValue(200), 100)

local swr = (getValue(198))

      -- affichage texte swr

  lcd.drawText(3, 38, "SWR", SMLSIZE)

      -- affichage valeur swr sur représentation graphique

  lcd.drawChannel(30, 38, 198, SMLSIZE)

      -- affichage texte AWS

  lcd.drawText(32, 38, "AWS", SMLSIZE)

          --calcul AWS en fonction de A2

local aws = 54.545*(getValue(203))
if aws < 0 then
aws = 0
end

      -- affichage valeur aws

   lcd.drawNumber(60, 38, aws, SMLSIZE)

          -- affichage texte VMG

  lcd.drawText(62, 38, "VMG", SMLSIZE)

          --calcul VMG en fonction de la vitesse GPS 211 et A2 203

local vmg = (getValue(211))*(math.cos(math.deg(aws)))


      -- affichage valeur vmg

   lcd.drawNumber(95, 38, vmg, SMLSIZE)

      -- affichage texte Voile

 -- lcd.drawText(2, 2, "Voile", SMLSIZE)

        -- affichage d'un curseur twa

  vgauge(200, 2, 5, 60, getValue(203), 100)


      -- affichage d'un curseur pour position du manche gaz
  lcd.drawRectangle(206, 2, 5, 60, ROUND) 
  vgauge(206, 2, 5, 59, getValue(77)+1024, 2048)
  vgauge(206, 2, 5, 59, getValue(77)+924, 2048)


end

return { run=run }


voici l'ensemble de mon code certaines valeurs de formule sont à revoir en fonction de votre capteur de girouette elles sont en orange.

Plus de détails plus tard quand j'aurais recu l'ensemble de mes commandes pour la réalisation

merci à O. Cohen pour la correction twa aws

1 commentaire:

  1. Bonjour auriez vous fini la conception de la girouette ? est il possible d'avoir des photos, schema de connection.....
    merci

    RépondreSupprimer