{"id":509,"date":"2026-02-14T20:01:44","date_gmt":"2026-02-14T19:01:44","guid":{"rendered":"https:\/\/www.f1rtd.com\/?p=509"},"modified":"2026-03-08T19:40:11","modified_gmt":"2026-03-08T18:40:11","slug":"rotord-1ere-partie-linterface","status":"publish","type":"post","link":"https:\/\/www.f1rtd.com\/index.php\/2026\/02\/14\/rotord-1ere-partie-linterface\/","title":{"rendered":"RoTorD. 1ere partie : Prototype d&rsquo;interface"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"820\" height=\"496\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/RoTorD.png\" alt=\"\" class=\"wp-image-523\" style=\"aspect-ratio:1.6533907427341228;width:289px;height:auto\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/RoTorD.png 820w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/RoTorD-300x181.png 300w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/RoTorD-768x465.png 768w\" sizes=\"auto, (max-width: 820px) 100vw, 820px\" \/><\/figure>\n<\/div>\n\n\n<p>A l&rsquo;origine du projet, le but n\u2019\u00e9tait pas de construire un pupitre, mais juste une interface similaire \u00e0 la  GS-232B (qui coute presque plus cher que le rotor lui meme &#8230;). Comme j&rsquo;ai de plus en plus de mal \u00e0 imaginer des trucs qui ne sont pas connectable d&rsquo;une mani\u00e8re ou une autre en reseau IP, j&rsquo;etais parti sur un ESP32 puis je me suis dit qu\u2019un truc sur un petit \u00e9cran tactile, cela pouvait \u00eatre rigolo et faire bien frimeur dans la station\ud83d\ude0e. Finalement, j&rsquo;ai d\u00e9cid\u00e9 de faire d&rsquo;une pierre 2 coups.  Un pupitre dot\u00e9 d&rsquo;une interface graphique tactile qui h\u00e9berge une emulation GS-232B.  <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Voila un projet parfait pour recycler un des raspberry pi qui traine dans mon bazar. Pour l&rsquo;occasion ce sera un PI4 2Go et un \u00e9cran officiel 7&Prime; de premi\u00e8re g\u00e9n\u00e9ration (800&#215;480). J&rsquo;ai appel\u00e9 le projet RoTorD tout simplement parce que c&rsquo;est moi qui l&rsquo;ai fait et que dans rotord il y a R_T__D tout comme dans F1RTD \ud83d\ude01.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le connecteur \u2018EXT\u2019&nbsp;:<\/h2>\n\n\n\n<p>Tout comme l&rsquo;interface GS-232B, RoTorD utilise le connecteur &lsquo;EXT&rsquo; qui se trouve sur la face arri\u00e8re du pupitre Yaesu G-1000DXC. C&rsquo;est un connecteur femelle mini-din 6 broches cabl\u00e9 comme suit :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"379\" height=\"458\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/rotoryaesu_minidinext.png\" alt=\"\" class=\"wp-image-512\" style=\"aspect-ratio:0.8275595869921837;width:121px;height:auto\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/rotoryaesu_minidinext.png 379w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/rotoryaesu_minidinext-248x300.png 248w\" sizes=\"auto, (max-width: 379px) 100vw, 379px\" \/><\/figure>\n<\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"159\" height=\"132\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/monidin6.png\" alt=\"\" class=\"wp-image-513\" style=\"aspect-ratio:1.20463009562154;width:178px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>1 : Rotation \u00e0 droite (cw)<\/li>\n\n\n\n<li>2 : Rotation \u00e0 gauche (cww)<\/li>\n\n\n\n<li>3 : Vitesse de rotation<\/li>\n\n\n\n<li>4 : Orientation du rotor<\/li>\n\n\n\n<li>5 : GND<\/li>\n\n\n\n<li>6 : NC<\/li>\n<\/ul>\n\n\n\n<p>Fondamentalement, voil\u00e0 \u00e0 quoi servent ces broches\u00a0: La rotation \u00e0 droite se fait par la mise \u00e0 GND de la broche 1 et de la broche 2 pour la rotation \u00e0 gauche. La position du rotor est lue sur la broche 3 qui retourne une tension comprise entre 0 et 5v pour un angle de 0 \u00e0 450\u00b0. Pour la vitesse, on applique une tension comprise entre 0 et 5v sur la broche 4 pour une vitesse qui va du mini. au maxi. (en fait cela modifie la tension d&rsquo;allimentation du moteur qui va de ~11 \u00e0 24v)<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Pour le raccordement, j\u2019avais envisag\u00e9 de r\u00e9cup\u00e9rer le cordon d\u2019un vieux clavier ou souries ps\/2, mais pas de bol, tous les fils ne sont pas c\u00e2bl\u00e9s \ud83d\ude41<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">L&rsquo;interface<\/h2>\n\n\n\n<p>Il faut donc construire une petite interface pour raccorder tout \u00e7a sur le port gpio du Raspberry Pi. Voila la solution que j\u2019ai adopt\u00e9e pour le prototype en utilisant surtout ce que j\u2019avais dans mes fonds de tiroir.<\/p>\n\n\n\n<p><strong>Rotation gauche\/droite.<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"431\" height=\"104\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/gpio_rotate-1.png\" alt=\"\" class=\"wp-image-520\" style=\"aspect-ratio:3.797723455868632;width:375px;height:auto\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/gpio_rotate-1.png 431w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/gpio_rotate-1-300x72.png 300w\" sizes=\"auto, (max-width: 431px) 100vw, 431px\" \/><\/figure>\n<\/div>\n\n\n<p>La commande du sens de rotation est r\u00e9alis\u00e9e au moyen d\u2019optocoupleurs 4N35 . Chaque optocoupleur est pilot\u00e9 par une broche GPIO du Raspberry Pi configur\u00e9e en sortie. La LED interne de l\u2019optocoupleur est aliment\u00e9 via une r\u00e9sistance de 470 \u03a9. Cette valeur limite le courant \u00e0 environ 5 mA, ce qui est suffisant pour assurer la saturation du phototransistor de sortie dans les conditions d\u2019utilisation pr\u00e9vues (charge faible c\u00f4t\u00e9 sortie). L\u2019utilisation de simples transistors NPN mont\u00e9s en commutation aurait \u00e9galement permis de remplir cette fonction mais j&rsquo;ai mis la main sur les optos en premier &#8230;.<\/p>\n\n\n\n<p><strong>Acquisition de la position rotor.<\/strong><\/p>\n\n\n\n<p>Une tension continue comprise entre 0 et 5 V est disponible sur la broche 4 du connecteur. Cette tension varie en fonction de la position angulaire du rotor. Les valeurs exactes peuvent diff\u00e9rer selon le mod\u00e8le de rotor utilis\u00e9. \u00c0 titre de mesure sur mon G-1000DXC, la tension relev\u00e9e est de 0,045 V \u00e0 0\u00b0 et 4,480 V \u00e0 450\u00b0. Pour rendre cette tension &lsquo;dig\u00e9rable&rsquo; par le Raspberry Pi, j&rsquo;ai utilis\u00e9 un ADC MCP3202 (R\u00e9solution : 12 bits, 2 entr\u00e9es analogiques, interface de communication SPI). <\/p>\n\n\n\n<p>Sur le MCP3202, c&rsquo;est Vdd qui fait office de tension de r\u00e9f\u00e9rence . Une alimentation en 5 V via le connecteur GPIO du Raspberry Pi aurait \u00e9t\u00e9 envisageable mais cette tension n\u2019est pas r\u00e9gul\u00e9e par la carte elle-m\u00eame. Sa valeur d\u00e9pend directement de la qualit\u00e9 du bloc d\u2019alimentation externe et des variations peuvent appara\u00eetre en fonction de la charge syst\u00e8me (CPU et p\u00e9riph\u00e9riques). Donc pour de assurer une r\u00e9f\u00e9rence la plus stable possible et coh\u00e9rente avec les niveaux logiques du Raspberry Pi, c&rsquo;est l&rsquo;alimentation en 3,3 V prise sur le port GPIO qui a \u00e9t\u00e9 retenue. Vue que la tension issue du rotor peut atteindre une valeur proche de 5 V, un diviseur de tension a \u00e9t\u00e9 mis en amont de l&rsquo;ADC afin d\u2019adapter le signal \u00e0 sa plage d&rsquo;entr\u00e9e de 0 \u00e0 3,3 V. Le diviseur pr\u00e9sente un rapport de ~0,66 et est constitu\u00e9 d\u2019une r\u00e9sistance de 20 k\u03a9 et une de 10 k\u03a9.<\/p>\n\n\n\n<p>Pour isoler l\u2019imp\u00e9dance de la source et am\u00e9liorer la stabilit\u00e9 de la mesure, un AOP rail-to-rail MCP602 est mont\u00e9 en suiveur tout de suite derri\u00e8re le diviseur. Cette configuration permet d\u2019\u00e9viter toute influence de l\u2019ADC sur le diviseur et assure une faible imp\u00e9dance de sortie vers l\u2019entr\u00e9e analogique. Un filtre passe-bas RC est ajout\u00e9 entre la sortie de l\u2019AOP et l\u2019entr\u00e9e de l\u2019ADC. Le filtre est compos\u00e9 d&rsquo;une r\u00e9sistance en s\u00e9rie de 1K\u03a9 et d&rsquo;une capa de 100nF vers la masse. Il permet notamment de limiter le bruit haute fr\u00e9quence et am\u00e9liore grandement la stabilit\u00e9 de la conversion. La seconde entr\u00e9e de l&rsquo;ADC est mise a la masse pour le prototype. Elle pourra \u00e9ventuellement servir \u00e0 r\u00e9cup\u00e9rer la tension de &lsquo;vitesse&rsquo; afin d&rsquo;en disposer informatiquement.<\/p>\n\n\n\n<p>L\u2019ADC \u00e9tant aliment\u00e9 en 3,3 V, les niveaux logiques sont compatibles avec ceux du Raspberry Pi. Le raccordement des lignes SPI (MOSI, MISO, SCLK, CS) peut donc \u00eatre r\u00e9alis\u00e9 sans adaptation de niveau suppl\u00e9mentaire.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"654\" height=\"418\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/gpio_azimut.png\" alt=\"\" class=\"wp-image-519\" style=\"aspect-ratio:1.5646318255013907;width:551px;height:auto\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/gpio_azimut.png 654w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/gpio_azimut-300x192.png 300w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/figure>\n<\/div>\n\n\n<p><strong>Vitesse de rotation<\/strong>.<\/p>\n\n\n\n<p>Le contr\u00f4le de la vitesse de rotation s\u2019effectue par l\u2019application d\u2019une tension continue comprise entre 0 et 5 V sur la broche 3 du connecteur. Le Raspberry Pi ne disposant pas de sortie analogique native, la tension de commande est g\u00e9n\u00e9r\u00e9e \u00e0 partir d\u2019un signal PWM . Ce signal est ensuite filtr\u00e9 afin d\u2019obtenir une tension continue proportionnelle au rapport cyclique, puis amplifi\u00e9 pour atteindre une tension proche de 5V pour un rapport cyclique de 100%. Un filtre passe-bas RC d\u2019ordre 2 a \u00e9t\u00e9 mis en place afin de lisser le signal PWM avant l&rsquo;amplification. Le filtrage est constitu\u00e9 de deux cellules RC successives 3.3k\u03a9\/47uF et 3.3k\u03a9\/1uF. N&rsquo;ayant que des capas chimiques avec ces valeurs dans mes tiroirs, c&rsquo;est ce que j&rsquo;ai utilis\u00e9 pour le proto. Pour l&rsquo;amplification, j&rsquo;ai profit\u00e9 de l&rsquo;AOP rest\u00e9 dispo sur le MCP602 mais cette fois ci mont\u00e9 en ampli non inverseur avec un gain de ~1.5 avec une paire de r\u00e9sistance 10k\u03a9, 4.7k\u03a9.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"114\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/gpio_pwm_vitesse.png\" alt=\"\" class=\"wp-image-525\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/gpio_pwm_vitesse.png 600w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/gpio_pwm_vitesse-300x57.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>Voila, le prototype fonctionne et la programmation a d\u00e9j\u00e0 bien avanc\u00e9. La pr\u00e9cision est plut\u00f4t tr\u00e8s bonne et la subtilit\u00e9 du code me permet d&rsquo;ajouter plein d&rsquo;options que je n&rsquo;avais pas pr\u00e9vu au d\u00e9part. Tout cela fera l&rsquo;objet d&rsquo;une seconde partie &#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"427\" src=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/proto.png\" alt=\"\" class=\"wp-image-530\" srcset=\"https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/proto.png 800w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/proto-300x160.png 300w, https:\/\/www.f1rtd.com\/wp-content\/uploads\/2026\/02\/proto-768x410.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<p><\/p>\n<div class=\"pdfprnt-buttons pdfprnt-buttons-post pdfprnt-bottom-right\"><a href=\"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts\/509?print=print\" class=\"pdfprnt-button pdfprnt-button-print\" target=\"_blank\" ><img decoding=\"async\" src=\"https:\/\/www.f1rtd.com\/wp-content\/plugins\/pdf-print\/images\/print.png\" alt=\"image_print\" title=\"Contenu imprim\u00e9\" \/><\/a><\/div>","protected":false},"excerpt":{"rendered":"<p>A l&rsquo;origine du projet, le but n\u2019\u00e9tait pas de construire un pupitre, mais juste une interface similaire \u00e0 la GS-232B (qui coute presque plus cher que le rotor lui meme &#8230;). Comme j&rsquo;ai de plus en plus de mal \u00e0 &hellip; <a href=\"https:\/\/www.f1rtd.com\/index.php\/2026\/02\/14\/rotord-1ere-partie-linterface\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-509","post","type-post","status-publish","format-standard","hentry","category-bricolouillage"],"_links":{"self":[{"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts\/509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/comments?post=509"}],"version-history":[{"count":23,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts\/509\/revisions"}],"predecessor-version":[{"id":560,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/posts\/509\/revisions\/560"}],"wp:attachment":[{"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/media?parent=509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/categories?post=509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.f1rtd.com\/index.php\/wp-json\/wp\/v2\/tags?post=509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}