{"id":6336,"date":"2025-11-26T16:57:02","date_gmt":"2025-11-26T08:57:02","guid":{"rendered":"https:\/\/meskernel.net\/?p=6336"},"modified":"2025-11-26T16:57:05","modified_gmt":"2025-11-26T08:57:05","slug":"computador-de-bordo","status":"publish","type":"post","link":"https:\/\/meskernel.net\/pt\/companion-computer\/","title":{"rendered":"Tel\u00e9metro laser LD30-S1R(LDL-T) \u2192 Computador de bordo \u2192 Controlador de voo Pixhawk"},"content":{"rendered":"<p>Este guia fornece uma solu\u00e7\u00e3o totalmente funcional e sem necessidade de documenta\u00e7\u00e3o adicional para integrar:<\/p>\n\n\n\n<p>LD30-S1R \u2192 Computador de acompanhamento (Raspberry Pi \/ Jetson \/ Android) \u2192 MAVLink \u2192 <a href=\"https:\/\/meskernel.net\/pt\/pixhawk-ldl-t-laser-distance-sensor-integration\/\">Pixhawk<\/a><\/p>\n\n\n\n<p>Inclui diagramas de cablagem, fluxo de an\u00e1lise de dados, c\u00f3digo Python pronto a executar, configura\u00e7\u00e3o de par\u00e2metros Pixhawk e verifica\u00e7\u00e3o da esta\u00e7\u00e3o de controlo no solo.<\/p>\n\n\n\n<p>Siga este guia passo a passo e o sistema funcionar\u00e1 imediatamente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>1. Liga\u00e7\u00f5es de Cablagem (LD30 \u2194 Computador Companheiro \u2194 Controlador de Voo)<\/strong><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1.1 LD30-S1R \u2194 Computador de bordo (UART)<\/strong><\/h2>\n\n\n\n<p>Os computadores de companhia podem ser:<br><strong>Raspberry Pi \/ Jetson Nano \/ PC industrial \/ dispositivo Android com USB-UART<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>LD30-S1R<\/th><th>Computador de acompanhamento (<a href=\"https:\/\/meskernel.net\/pt\/usart-vs-uart\/\">UART<\/a>)<\/th><\/tr><\/thead><tbody><tr><td><strong>VCC (3,3-4,0V)<\/strong><\/td><td>3,3 V ou regulador externo<\/td><\/tr><tr><td><strong>GND<\/strong><\/td><td>GND<\/td><\/tr><tr><td><strong>TXD (dreno aberto)<\/strong><\/td><td>RX<\/td><\/tr><tr><td><strong>RXD<\/strong><\/td><td>TX<\/td><\/tr><tr><td><strong>PWREN<\/strong><\/td><td>Puxar ALTO (3,3V) ou GPIO<\/td><\/tr><tr><td><strong>nRST<\/strong><\/td><td>N\u00e3o ligado<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota:<\/strong> LD30 uses 3.3V <a href=\"https:\/\/meskernel.net\/pt\/ttl-uart\/\">TTL UART<\/a>. <strong>N\u00e3o<\/strong> ligar a 5V TTL UART.<br>O TX \u00e9 de dreno aberto; os pull-ups internos no Raspberry Pi e no Jetson funcionam bem.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1.2 Computador de bordo \u2194 Pixhawk (MAVLink UART)<\/strong><\/h2>\n\n\n\n<p>Utiliza\u00e7\u00e3o <strong>TELEM1 \/ TELEM2<\/strong> porto.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Computador de acompanhamento<\/th><th>Pixhawk (porta TELEM)<\/th><\/tr><\/thead><tbody><tr><td><strong>TX<\/strong><\/td><td>RX<\/td><\/tr><tr><td><strong>RX<\/strong><\/td><td>TX<\/td><\/tr><tr><td><strong>GND<\/strong><\/td><td>GND<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Taxa de transmiss\u00e3o: <strong>115200<\/strong><\/li>\n\n\n\n<li>Protocolo: <strong>MAVLink2<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>2. Ler os dados do LD30-S1R no computador de bordo<\/strong><\/h1>\n\n\n\n<p>O LD30 comunica atrav\u00e9s de um protocolo de comando bin\u00e1rio.<br>O computador de acompanhamento trata:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Abrir a porta UART<\/li>\n\n\n\n<li>Enviar o comando \u201cmedi\u00e7\u00e3o cont\u00ednua<\/li>\n\n\n\n<li>Analisar fotogramas que come\u00e7am por <strong>0xAA<\/strong><\/li>\n\n\n\n<li>Dist\u00e2ncia de extra\u00e7\u00e3o (mm)<\/li>\n\n\n\n<li>Converter para metros<\/li>\n\n\n\n<li>Embalar no MAVLink <strong>SENSOR DE DIST\u00c2NCIA<\/strong><\/li>\n\n\n\n<li>Enviar para o Pixhawk<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2.1 Comando de medi\u00e7\u00e3o cont\u00ednua<\/strong><\/h2>\n\n\n\n<p>Do Manual do Utilizador do LD30 (sec\u00e7\u00e3o 14.12):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AA 00 00 20 00 01 00 04 25\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2.2 Formato da estrutura de dados<\/strong><\/h2>\n\n\n\n<p>Os dados devolvidos incluem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Dist\u00e2ncia:<\/strong> 4 bytes (mm)<\/li>\n\n\n\n<li><strong>Qualidade do sinal:<\/strong> 2 bytes<\/li>\n\n\n\n<li>Cabe\u00e7alho do quadro: <strong>0xAA<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>3. Script Python completo (pronto a executar)<\/strong><\/h1>\n\n\n\n<p>Este gui\u00e3o:<\/p>\n\n\n\n<p>Leituras LD30<br>Dist\u00e2ncia de parses<br>\u2714 Converte mm \u2192 m<br>Envia MAVLink <code>SENSOR DE DIST\u00c2NCIA<\/code><br>Transmiss\u00e3o de dados para o Pixhawk em tempo real<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Guardar como <code>ld30_to_mavlink.py<\/code><br>Corre com:<br><code>python3 ld30_to_mavlink.py<\/code><\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>import serial\nfrom pymavlink import mavutil\nimport struct\n\n# --- LD30 Serial Port ---\nld30 = serial.Serial('\/dev\/ttyUSB0', 115200, timeout=0.1)\n\n# Continuous measurement command (from manual 14.12)\nCONT_MEASURE = bytes(&#91;0xAA,0x00,0x00,0x20,0x00,0x01,0x00,0x04,0x25])\nld30.write(CONT_MEASURE)\n\n# --- MAVLink connection to Pixhawk ---\nmav = mavutil.mavlink_connection('\/dev\/ttyAMA0', baud=115200)\n\ndef send_distance_to_fc(distance_m):\n    mav.mav.distance_sensor_send(\n        0,       # time_boot_ms\n        3,       # min_distance (cm)\n        3000,    # max_distance (cm)\n        int(distance_m * 100),  # current distance (cm)\n        0,       # type\n        0,       # id\n        0,       # orientation\n        0        # covariance\n    )\n\nbuffer = bytearray()\n\nwhile True:\n    data = ld30.read()\n    if not data:\n        continue\n\n    buffer += data\n\n    # Minimum frame length = 12 bytes\n    if len(buffer) >= 12:\n        # Look for header 0xAA\n        if buffer&#91;0] != 0xAA:\n            buffer.pop(0)\n            continue\n\n        # Parse fixed-length frame\n        if len(buffer) >= 12:\n            # Distance is bytes 6~9 (big-endian)\n            dist_bytes = buffer&#91;6:10]\n            distance_mm = struct.unpack(\">I\", dist_bytes)&#91;0]\n            distance_m = distance_mm \/ 1000.0\n\n            print(\"LD30 Distance:\", distance_m, \"m\")\n            send_distance_to_fc(distance_m)\n\n            buffer = bytearray()  # Clear buffer\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>4. Configura\u00e7\u00e3o dos par\u00e2metros do Pixhawk (Mission Planner)<\/strong><\/h1>\n\n\n\n<p>Ir para:<br><strong>Config \u2192 Lista completa de par\u00e2metros<\/strong><\/p>\n\n\n\n<p>Definir o seguinte:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Par\u00e2metro<\/th><th>Valor<\/th><\/tr><\/thead><tbody><tr><td><strong>RNGFND1_TYPE<\/strong><\/td><td>10 (MAVLink)<\/td><\/tr><tr><td><strong>RNGFND1_MIN_CM<\/strong><\/td><td>3<\/td><\/tr><tr><td><strong>RNGFND1_MAX_CM<\/strong><\/td><td>3000<\/td><\/tr><tr><td><strong>RNGFND1_ORIENT<\/strong><\/td><td>0 (Avan\u00e7ar) ou <strong>25 (para baixo)<\/strong><\/td><\/tr><tr><td><strong>RNGFND1_RMETRIC<\/strong><\/td><td>1<\/td><\/tr><tr><td><strong>SERIAL1_PROTOCOLO<\/strong><\/td><td>2 (MAVLink2)<\/td><\/tr><tr><td><strong>SERIAL1_BAUD<\/strong><\/td><td>115<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Se utilizar TELEM2, utilize SERIAL2_*<br>Se estiver a utilizar TELEM3, utilizar SERIAL3_*<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>5. Monitoriza\u00e7\u00e3o dos dados LD30 no Mission Planner \/ QGroundControl<\/strong><\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5.1 Planeador de miss\u00f5es<\/strong><\/h2>\n\n\n\n<p>Navegar para:<\/p>\n\n\n\n<p><strong>Flight Data \u2192 Status \u2192 sonar_range \/ rngfnd1_dist<\/strong><\/p>\n\n\n\n<p>ou:<\/p>\n\n\n\n<p><strong>Ctrl + F \u2192 MAVLink Inspetor \u2192 DISTANCE_SENSOR<\/strong><\/p>\n\n\n\n<p>Ver\u00e1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Dist\u00e2ncia em tempo real<\/li>\n\n\n\n<li>Frequ\u00eancia de atualiza\u00e7\u00e3o<\/li>\n\n\n\n<li>ID do fluxo MAVLink<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5.2 QGroundControl<\/strong><\/h2>\n\n\n\n<p>Navegar:<\/p>\n\n\n\n<p><strong>Widgets \u2192 Ferramentas de an\u00e1lise \u2192 MAVLink Inspetor \u2192 DISTANCE_SENSOR<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>6. Fluxo de trabalho global do sistema<\/strong><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>            LD30-S1R\n                \u2502\n           TTL UART 3.3V\n                \u2502\n        \u2500\u2500\u2500\u2500 Computador de Acompanhamento\u2500\u2500\u2500\u2500\u2510\n        L\u00f3gica de an\u00e1lise LD30 \u2502\n        \u2502 Embalagem MAVLink \u2502\n        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                  UART MAVLink\n                       \u2502\n                 Controlador de voo Pixhawk\n                       \u2502\n        Planeador de miss\u00e3o \/ QGroundControl\n<\/code><\/pre>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>This guide provides a fully working, no-extra-documentation-needed solution to integrate: LD30-S1R \u2192 Companion Computer (Raspberry Pi \/ Jetson \/ Android) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6339,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[49],"tags":[],"class_list":["post-6336","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-solution"],"_links":{"self":[{"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/posts\/6336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/comments?post=6336"}],"version-history":[{"count":0,"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/posts\/6336\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/media\/6339"}],"wp:attachment":[{"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/media?parent=6336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/categories?post=6336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meskernel.net\/pt\/wp-json\/wp\/v2\/tags?post=6336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}