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
Bonjour auriez vous fini la conception de la girouette ? est il possible d'avoir des photos, schema de connection.....
RépondreSupprimermerci