Hedwig, O Corujo Robótico Pitónico

Para os mais especializados em mecânica e electrónica em LEGO.
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4256
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Hedwig, O Corujo Robótico Pitónico

Mensagem por CyberX »

Para mim uma muito agradável surpresa foi o lançamento do set Hedwig 75979. Tal como o FORMA Koi, é uma escultura animatrónica que fica muito bem em cima de uma secretária ou numa estante, com um movimento mecânico cativante.

Ao contrário do Koi, tive logo de início a ideia de o motorizar, só não sabia bem como ou para quê. Provavelmente com Powered Up para me ir habituando ao Pybrick mas não sabia bem que sensor havia de usar para activar o movimento.
No final acabei por nem sequer usar um sensor: uma vez que as Corujas nos filmes do Harry Potter têm a missão de levar o correio, lembrei-me de fazer um programa que verificasse uma mailbox no GMail e batesse as asas cada vez que chegasse um e-mail novo.

A parte de verificar a mailbox foi relativamente fácil, o Sr. Google deu-me pistas suficientes para fazê-lo em python.
Depois foi só juntar o envio de comandos curtos (um caracter apenas: 's' para 'stop', 'l' para 'left' e 'r' para 'right') através do serviço Nordic UART Service para o Pybricks, algo que tinha ja ensaiado há poucas semanas com os carros Technic Powered Up.

Na parte de MOC/MOD propriamente dita quis esconder o motor e o controlador (hub) debaixo da base do Hedwig. Arranjei várias formas de o fazer, umas mais feias que outras, só que comecei a ter problemas com a movimentação das asas - alguma coisa se desalinhou lá dentro e tive de desmontar quase tudo e voltar a montar. Com isto perdi a vontade de continuar com as ideias mecânicas de esconder o motor por baixo e limitei-me a copiar um video de um grohl666 que mostra como montar um motor PF-M na parte traseira do pilar que sustenta o Hedwig.

Imagem

Imagem


A ideia, num evento, é colocar um letreiro com o e-mail (e um QRCode) e as pessoas mandam mails ao Corujo para vê-lo bater as asas.

Em breve conto arranjar forma de ligar e desligar o Hub sem ter de desmontar a base (embora vá ter de o fazer sempre que for necessário trocar as pilhas). Pode ser que nessa altura tire o motor do pilar e o traga para dentro da base, para junto do Hub.

O script em python corre no meu portátil e ainda não está suficientemente afinado para publicar, daqui a uns dias conto fazê-lo.
Já o script em micropython que corre no City Hub está praticamente concluio, é este:

Código: Selecionar todos

from pybricks.pupdevices import DCMotor
from pybricks.hubs import CityHub
from pybricks.parameters import Port

hub = CityHub()
mOwl = DCMotor(Port.B)
OWL_SPEED = 40

while True:
    i = input("?")
    if i == "l":
        mOwl.dc(-OWL_SPEED)
    elif i == 'r':
        mOwl.dc(OWL_SPEED)
    elif i == 's':
        mOwl.stop()
    else:
        print("!")
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 15775
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada)
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por Conchas »

Muito bem esgalhado!

O que significam exactamente os comandos left e right, relativamente ao bater das asas?

Esse serviço Nordic é para comunicares por BT entre o laptop e o hub, certo!?

O input está a ler de onde?
Não percebi a associação ao BT. Parece que falta qq coisa!?
FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

mini :brincka: Junceira 2022 / 22-24.Jul
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4256
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por CyberX »

Conchas Escreveu: 18 jul 2020, 00:47 O que significam exactamente os comandos left e right, relativamente ao bater das asas?
Roda o motor para a left, roda o motor para a right, o movimento das asas é visualmente semelhante. Mas left esforça menos que right.
Conchas Escreveu: 18 jul 2020, 00:47 Esse serviço Nordic é para comunicares por BT entre o laptop e o hub, certo!?
Certo.
É um serviço disponibilizado pela Nordic nos toolkits da empresa e mais ou menos "aberto" pelo que outros o podem implementar, como é o caso do Pybricks - se te puseres a ver com uma tool BLE vais encontrar num Hub com Pybricks este serviço:

NORDIC_UART_SERVICE = "6e400001-b5a3-f393-e0a9-e50e24dcca9e"

Com duas caracteristicas:
RX_CHARACTERISTIC = '6e400002-b5a3-f393-e0a9-e50e24dcca9e' #RX Write no response
TX_CHARACTERISTIC = '6e400003-b5a3-f393-e0a9-e50e24dcca9e' #TX notify

Na primeira escreves (e o NUS lê, daí chamar-se RX apesar de escrevermos nela) e na segunda activas as notficações para receberes o que o Pybricks tiver enviado via comando "print".

Este serviço é usado pelo ambiente IDE em Chrome para comunicar com o hub por isso enquanto tens o IDE activo não consegues aceder. Mas se tiveres um programa a correr no hub e desconectares o Chrome, o programa continua a correr e ficas com o serviço NUS livre (ou se guardares o programa junto com o firmware do Pybricks, quando ligas e carregas no botão fica logo disponível)
Conchas Escreveu: 18 jul 2020, 00:47 O input está a ler de onde?
do NUS (Nordic UART Service). Eu escrevo para lá a partir do python que corre no meu laptop com um comando destes:

Código: Selecionar todos

hub.writeCharacteristic(handle, bytes(command+CR, 'utf-8'), withResponse=False)
do lado do Pybrick ele despeja tudo o que chega até ao Carriage Return para o "stdin" que é lido pelo input.
Conchas Escreveu: 18 jul 2020, 00:47 Não percebi a associação ao BT. Parece que falta qq coisa!?
Não percebi a pergunta, podes formulá-la melhor?
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 15775
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada)
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por Conchas »

Básicamente, e reformulando com base na tua explicação, não percebi como é que Pybricks faz a associação entre o stdin e tudo o que chega do NUS.

Mas pelos vistos são mesmo coisas lá deles que não é preciso saber... funciona assim e prontos!... 🤪
FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

mini :brincka: Junceira 2022 / 22-24.Jul
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4256
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por CyberX »

Conchas Escreveu: 18 jul 2020, 01:45 Básicamente, e reformulando com base na tua explicação, não percebi como é que Pybricks faz a associação entre o stdin e tudo o que chega do NUS.

Mas pelos vistos são mesmo coisas lá deles que não é preciso saber... funciona assim e prontos!... 🤪
É um salto de fé sim :D

Ao teres um firmware micropython num micro-controlador, seja os STM da LEGO ou os ESP e outros Arduinos aditivados que há para aí acabas sempre tendo uma plataforma comum, quase um sistema operativo, que executa scripts de python (um bocado como o ambiente do ZX Spectrum quando acabavas de o ligar e tinhas de fazer "LOAD ASPAS ASPAS ENTER" para poderes carregar um jogo). Para certas funcionalidades (como enviar scripts, activar e parar os scripts, expor I/O para debug) o micropython prevê uma camada que redirecciona o "stdin" e o "stdout" (para USB por exemplo, em microcontroladores sem nenhum tipo de wireless). Do lado dos scripts micropython, o "stdin" acede-se com o comando "input" e o "stdout" com o comando "print" e mais não precisas saber como programador final.

Nalguns microcontroladores isso pode até permitir ligar um teclado USB (ou mesmo BT) e teres o "stdin" a ler de lá para o "input". E um LCD simples e teres o "stdout" a enviar o "print" para lá. Admito que o SPIKE esteja (ou possa vir a estar) a fazer isso com aquele display de pontos, é mais conveniente enviar caracteres do que construi-los pixel a pixel com chamadas de baixo nível.

Se o NUS faz parte da oferta global do micropython original para os vários microcontroladores com BLE ou se foi incorporado pelo David e o Laurens apenas para o Pybricks desconheço. Mas é porreiro que o tenham feito porque é um serviço BLE conhecido, algumas ferramentas para BLE (e não só as da Nordic) reconhecem-no e outros gadgets no mercado falam-no (como o micro:bit, salvo erro). Além disso, sendo uma UART, é possível redireccionares para lá programas como o PuTTy ou o velhinho HyperTerminal do Windows desde que tenhas alguma "gateway" BLE e não precisas reinventar a roda só para falares com o teu micro-controlador.

No meu caso não tenho nenhuma "gateway" (mas ando aí a ver maneiras simples de a ter) pelo que tive de reinventar parcialmente a roda do lado do computador, com algum código python que estabelece a comunicação com o NUS.

Tudo isto parece mais complicado do que é e ainda assim deixa de ser necessário quando, mais para a frente no projecto Pybricks (ainda estão em Beta) eles implementarem a API que permite troca de mensagens com os Hubs.
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
AGarcia
Administrator
Administrator
Mensagens: 4913
Registado: 03 mai 2009, 22:47
Localização: Peniche
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por AGarcia »

Excelente!
:clapping: :clapping: :clapping:
Avatar do Utilizador
gads
Administrator
Administrator
Mensagens: 6355
Registado: 11 set 2006, 23:58
Localização: Oeiras

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por gads »

very nice :fixe: :clapping:
Guilherme Santos
www.historybricks.com
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 15775
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada)
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por Conchas »

CyberX Escreveu: 18 jul 2020, 08:51 ... quando, mais para a frente no projecto Pybricks (ainda estão em Beta) eles implementarem a API que permite troca de mensagens com os Hubs.
Troca de mensagens com os hubs, ou entre os hubs?
FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

mini :brincka: Junceira 2022 / 22-24.Jul
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4256
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por CyberX »

Conchas Escreveu: 18 jul 2020, 18:32
CyberX Escreveu: 18 jul 2020, 08:51 ... quando, mais para a frente no projecto Pybricks (ainda estão em Beta) eles implementarem a API que permite troca de mensagens com os Hubs.
Troca de mensagens com os hubs, ou entre os hubs?
Ambos os 2 :D
Prototocolo é protocolo, quem souber falar pode entrar na conversa.
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4256
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por CyberX »

Ambos os scripts (python no laptop, micropython no Hub) disponíveis free as in speech and free as in beer:

https://github.com/JorgePe/randomideas/ ... ter/Hedwig
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
Conchas
Direcção
Direcção
Mensagens: 15775
Registado: 26 jan 2007, 15:20
Localização: Feijó (Almada)
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por Conchas »

Há uns anos tinha umas ideias para uns desafios online para o TechnicBRICKs onde estes princípios teriam permitido fazer coisas muito interessantes, que não tinha como. :expectation:

Entretanto agora ando noutro mood completamente diferente. Quem sabe um dia!... :P ;D
FCorreia

#EUusoOmeuLUGBULKnosEVENTOSdaPLUG

We are working to build a better :plug:
LEGO Fan, a lifelong experience - Play Well (Leg Godt)

mini :brincka: Junceira 2022 / 22-24.Jul
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4256
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por CyberX »

"And now for something completely different" é justamente o princípio do python ;)
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
AGarcia
Administrator
Administrator
Mensagens: 4913
Registado: 03 mai 2009, 22:47
Localização: Peniche
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por AGarcia »

Hum... vai ser possível a comunicação entre HUBs com o pybricks?
:o
Avatar do Utilizador
CyberX
Sócio
Sócio
Mensagens: 4256
Registado: 10 mar 2014, 20:09
Localização: Mira Sintra
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por CyberX »

sim!
faz parte do roadmap :
https://github.com/pybricks/support/issues/29

"Powered Up hub-to-hub communication"
Jorge Pereira
«De génio, criança e louco... porquê só 1 pouco?»
Avatar do Utilizador
AGarcia
Administrator
Administrator
Mensagens: 4913
Registado: 03 mai 2009, 22:47
Localização: Peniche
Contacto:

Re: Hedwig, O Corujo Robótico Pitónico

Mensagem por AGarcia »

Excelente!

Dá para pensar numas ideias muito fixes!
Responder