Files
carinha-control-panel/docs/SERVOS.md

32 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Aba de testes de servos
## Controle ao vivo
Opção disponível acima dos cartões, desmarcada ao abrir a página. Ativar a opção não movimenta: arrastar um deslizador envia o pulso respeitando os limites salvos. No máximo 10 solicitações por segundo, uma em andamento por vez; valores intermediários são substituídos pela posição mais recente. O watchdog do servidor desliga o canal até cerca de 2,1 segundos após o último comando recebido.
Desmarcar Controle ao vivo ou clicar Desligar todos cancela a fila, aguarda a solicitação em andamento e desliga os canais. Ocultar a página também solicita desligamento. Falha de rede continua coberta pelo watchdog. Alterações não salvas bloqueiam o modo. O motor não fornece confirmação da posição física.
Verificado no navegador com API simulada: ativação sem movimento, arraste desativado sem comandos, frequência limitada, entrega da última posição, cancelamento ao parar e bloqueio com configurações não salvas. Testes da página original continuam passando. Movimento físico depende da observação do usuário.
Correção em 2026-10-05: removida a escrita de zero em ALL_LED_OFF_H após escrever o pulso individual. Esse registrador replica o byte nos 16 canais, sobrescrevendo o pulso (1500 µs acabava com 51 ticks em vez de 307) e retirando o desligamento dos outros canais. Teste de regressão emula essa replicação e confirma o valor correto e isolamento dos canais. Correção instalada e serviço reiniciado. Movimento físico ainda precisa ser observado pelo usuário.
Disponível em http://192.168.1.35:8100/servos e no link Servos do painel. Instalada no Orange Pi em 2026-10-05.
Começa com seis cartões, canais 0–5, e permite adicionar até 16. Cada cartão configura nome, canal físico, mínimo, máximo e centro em microssegundos. Canal 1 corresponde inicialmente ao cartão Servo 2: o nome do cartão não é a numeração da placa.
Configurações são gravadas em /opt/carinha-pc/servos.json ao clicar Salvar configurações. Enquanto há alterações não salvas, os testes ficam bloqueados. Abrir a página, mover o slider ou salvar não envia movimento. Não existe leitura da posição real do eixo.
Testar por 2 s envia o pulso escolhido; Testar centro envia o centro configurado. O backend desliga automaticamente esse canal em até aproximadamente 2,1 segundos. Desligar todos os sinais desliga os 16 canais. Isso não corta a fonte externa e pode remover a sustentação de um braço montado: nesta etapa usar braço apoiado ou servo sem carga. Não é botão de emergência elétrica.
Limites iniciais 1400–1600 µs, centro 1500 µs; limites absolutos aceitos pela API 1000–2000 µs. Não ampliar sem calibração da montagem. A duração máxima não limita velocidade nem esforço mecânico. Nenhuma sincronização de servos pareados nesta etapa.
PCA9685 em 0x40, /dev/i2c-2, configurado por Environment=CARINHA_I2C=/dev/i2c-2 no drop-in /etc/systemd/system/carinha-pc.service.d/i2c.conf. O driver usa biblioteca padrão Linux, 50 Hz aproximados (prescale 121; oscilador nominal 25 MHz). Somente o primeiro teste configura a frequência: desliga primeiro os canais antigos antes de liberar o canal solicitado. Inicialização do servidor não envia pulsos.
O servidor Windows exibe configurações mas não controla hardware. Usar a aba hospedada no Orange Pi. Nenhum motor foi acionado nos testes automatizados da implantação. Alimentação informada: 6 V; corrente da fonte ainda não confirmada. Dimensionar a fonte conforme os motores antes de testar carga ou vários simultaneamente.
Verificado: testes de validação e persistência, até 16 canais, duplicatas rejeitadas, duração máxima, sequência de inicialização, regressão do servidor (12 testes), página real no navegador desktop/mobile, rejeição de pulso inválido e origem externa. Pendentes: movimento físico, calibração e mapeamento do braço conforme os arquivos que o usuário fornecerá.
Arquivos: servos.py, servos.html, servos.js. API: GET /servos/status; POST JSON /servos/config {servos:[...]}, /servos/mover {indice:0,pulso:1500}, /servos/parar {}. O índice é o cartão na lista, começando em zero; canal é configurável. Comandos inválidos recebem HTTP 400 e indisponibilidade I²C HTTP 503.
Retorno: parar serviço; restaurar kiosk-server.py e painel.html de /opt/carinha-pc/backup-servos-20261005; remover drop-in i2c.conf; systemctl daemon-reload; iniciar serviço. Preservar servos.json. O servidor anterior em 8099 permanece disponível.