raspberrypi

raspberrypi

  • Atualizando a câmera do raspberry pi 3

    rpi3 01KGWKSFVHCM2G183J81214VHA

    No começo do ano eu pesquisei meio que sem querer os preços de câmeras pro raspberry pi.  Aqui no projeto das fotos na janela, descrito em weather snapshot em Python, eu uso um raspberry pi 3.

    E achei que os preços estavas acessíveis.  Então comprei uma com visão noturna e lente eyefish, pra dar aquele look maroto nas fotos.

    Não sabia eu o tamanho do drama que iria iniciar aí.

    A câmera chegou e já meti a mão na massa e montei a danada.  Tirei o raspberry pi da janela e desmontei.

    rpi3 IMG 20260207 114013

    Coloquei as câmeras lado a lado pra comparar o antes e o depois.

    rpi3 IMG 20260207 114559

    O primeiro problema foi o encaixe da câmera.  Ele não cabia nessa câmera nova, que tem 2 parafusos na parte traseira.  Então fiz um "ajuste" de engenheiro: peguei o parafusador de móveis da Ikea, que tem duas brocas pequenas, e usei uma dessas pra gastar um pouco o encaixe traseiro pra caber melhor.  Claro que nessas eu errei posição e precisei furar de novo.  Tudo isso em cima da mesa da cozinha.

    rpi3 IMG 20260207 120048

    Não ficou lá aquela Brastemp, mas consegui montar.

    rpi3 IMG 20260207 122053

    rpi3 IMG 20260207 122305

    rpi3 IMG 20260207 122521

    rpi3 IMG 20260207 122622

    Daí foi colocar na janela e partir pro abraço.  Claro que o abraço não foi como eu esperava.

    rpi3 IMG 20260207 123236

    rpi3 IMG 20260207 123241

    Expectativa era essa abaixo, tirada com a câmera do telefone:

    rpi3 IMG 20260207 163941

    Mas saiu isso aqui:

    rpi3 01KHFZ688B7QJRXSA486G3J5PB

    Eu achei que era alguma regulagem.  Então busquei mais informações pro tipo de câmera, etc.  Em algum lugar eu encontrei alguém comentando que ela vinha com 2 leds laterais pra fotos noturnas, da visão noturna, e que era só tirar.  Eu acabei tirando porque de noite ficava inviável de ver qualquer coisa.

    rpi3 IMG 20260207 191216

    O resultado:

    rpi3 01KK1Q5YVF2X230W2GFP5RTHCN

    Não importava o que eu fizesse, tinha essa camada puxando pro vermelho em toda foto.

    Acabei encontrando um programa em python pra administrar a câmera remotamente:

    https://github.com/monkeymademe/CamUI

     rpi3 01KGW5RM05N32TZWYSKS71RAE6

    Mas mesmo usando CamUI ficava avermelhado.  E isso era no fim do dia, já quase anoitecendo.  Durante o dia era desastre puro.

    rpi3 01KHJHJZ21P7ZG4HG98SPZXSGP

    Mas de noite, até que ia bem.

    rpi3 01KJ4D2AR736MG28VCREQ3N11E

    rpi3 01KJ4ES8HE01P426HC9750VKBW

    Legal pela luminosidade, mas mata toda a luz natural da noite.  Não que seja muita.  Mas uma das minhas esperanças é capturar as aurora boreal com essa câmera.  Já são 11 anos morando aqui, uns 8 anos do raspberry pi tirando as fotos e nunca pegou nada.  Mas esperança nunca morre.  Geralmente o memory card morre antes.  Então a câmera não funciona pro que preciso.

    Depois de pesquisar em vários fóruns, achei a informação que eu já imaginava e que ia doer: não tem como desligar o modo noturno nessas câmeras.  Bom pra ambientes indoor com pouca luz, porém um fracasso miserável pra colocar numa janela e tentar pegar fotos durante o dia.  Eu até tentei bloquear o infrared que fica na própria câmera mas sem sucesso.  Claro que tudo do melhor jeito que a engenharia moderna pode oferecer: usando silvertape.

    Como eu já ia encomendar outra câmera, acabei aproveitando e comprando um sensor de temperatura também,  que por acaso chegou antes.  Por quê comprei?  Sei lá.  Pareceu legal.  Como já estava comprando mais coisas mesmo, comprei um suporte que imaginei que caberia melhor a câmera nova.  Claro que eu estava errado, mas eu descrevo sobre isso mais abaixo.

    rpi3 IMG 20260227 133857

    rpi3 IMG 20260227 134926

    Enfim chegou a câmera nova nessa semana.  Desmontei e coloquei em operação.  Aproveitei e comprei também um cabo flat mais longo, pra não precisar grudar o raspberrypi na perna do tripé.

    rpi3 IMG 20260227 134926

    rpi3 IMG 20260227 134926

    rpi3 IMG 20260227 134926

    Essa parte que parece madeira (é acrílico) na parte de trás era do suporte novo.  A câmera deveria entrar no meio do suporte mas... a lente não passa no buraco.  Tentei aumentar com o esquema pseudo-furadeira com a parafusadeira da Ikea, mas não deu muito certo.

    Sobrou então montar a câmera pela frente mesmo.

    rpi3 IMG 20260227 134926

    Como não dava pra montar o suporte como foi planejado, tive de usar novamente a engenharia moderna: dá-lhe silvertape.

    rpi3 IMG 20260227 134926

    rpi3 IMG 20260227 134926

    Durante os testes o raspberrypi morreu.  Então tive de tirar mais uma vez da janela, colocar aqui no quarto no setup de trabalho com monitor, mouse e teclado e olhar.  E capturar minha cara de "ué?!" quando não achei nenhum motivo pro danado ter travado.  Pelo menos não apareceu nada nos logs (e isso talvez indique que o memory card já está pedindo arrego).

    rpi3 IMG 20260227 134926

    Como já estava fora, aproveitei e colei o suporte pra ficar menos... engenharia moderna.

    rpi3 IMG 20260227 134926

    rpi3 IMG 20260227 134926

    rpi3 IMG 20260227 134926

    E finalmente o resultado final.

    rpi3 IMG 20260227 134926

    Demorou, custou o dobro do que eu queria, mas cheguei no resultado aguardado.

    Próximo passo será atualizar o software.  Eu vi que voltaram com um módulo em Python.  E também eu uso numpy pra decidir se a foto está boa ou se precisa tirar outra com parâmetros mais pra noite como maior tempo de exposição.  Achei recentemente na Wikipedia um algoritmo, já em Python, pra saber se é nascer do sol ou poente.  Então é mais fácil usar o algoritmo pra bater com o horário e fazer as mudanças.  Vai consumir menos CPU e deve ficar mais rápido pra tirar fotos.

    E o sensor de temperatura?  Tá lá na janela pegando a temperatura interna.  Ele mostra abaixo do que realmente está, mas deve ser porque está na janela.  E estou enviando na última linha nos dados das fotos.  Claro que isso não serve pra nada, mas entre tanta coisa que já não serve pra nada, não é isso que fará grande diferença.

    Pra seguir os posts da câmera:

    https://mastodon.social/@helio_weather

    O bom é que agora já vou poder capturar os dias ensolarados que estão voltando.  Deixo pro fim do artigo a foto que tirei essa semana ao voltar pra casa pedalando.  Foi o primeiro dia do ano que sai do trabalho e voltei pedalando com luz do sol.

    rpi3 IMG 20260227 134926

    Nota: eu não mudei nada de código no raspberrypi por conta da câmera nova.  Por isso não tem nada de código ou algo estilo bamblers nesse post.

  • Sensor de temperatura no raspberry pi

    rpi3 IMG 20260304 191114

    Como eu descrevi no artigo anterior, atualizando a câmera do raspberry pi 3, eu comprei também um sensor de temperatura.  Não que eu precisasse, não que eu tenha um uso pra ele.  A janela aqui tem vedação dupla e não tem como eu colocar ele do lado de fora sem arrebentar alguma coisa ou da janela ou do sensor.  Então fica aqui dentro.

    Pra ativar esse camarada, eu precisei rodar o raspi-config e habiltar a interface wire-1 em "interface options".  E depois rebootar.

    Ele aparece habilitado no boot:

    root@raspberrypi3 /h/pi [0|1]# dmesg | grep -i wire
    [   15.395743] Driver for 1-wire Dallas network protocol.
    [   15.466930] gpio-4 (onewire@0): enforced open drain please flag it properly in DT/ACPI DSDT/board file
    [   15.497220] w1_master_driver w1_bus_master1: Attaching one wire slave 28.00000025630b crc 48
    [   21.844564] Bluetooth: HCI UART protocol Three-wire (H5) registered

     No caso, ele mostra que conectei no GPIO-4.

    Pra ler os dados é baba: tem uma interface do kernel que te dá em formato txt.  Basta ler o conteúdo de& /sys/bus/w1/devices/28-00000025630b/w1_slave.  Imagino que esse caminho deva mudar se usar um GPIO diferente.

    pi@raspberrypi3 ~> cat /sys/bus/w1/devices/28-00000025630b/w1_slave 
    31 01 7f 80 7f ff 0f 10 90 : crc=90 YES
    31 01 7f 80 7f ff 0f 10 90 t=19062

    O valor da temperatura é o que está na segunda linha junto com o "t=".  No caso mostra 19062, que é 19.062°C.

    Pra ler em Python, o jeito mais baba possível:

    #! /usr/bin/env -S uv run --script
    
    TEMPERATURE_SENSOR = "/sys/bus/w1/devices/28-00000025630b/w1_slave"
    
    def GetLocalTemperature() -> str | None:
        """
        pi@raspberrypi3 ~> cat /sys/bus/w1/devices/28-00000025630b/w1_slave
        17 01 7f 80 7f ff 09 10 01 : crc=01 YES
        17 01 7f 80 7f ff 09 10 01 t=17437
        """
        temp_item: str = ""
        with open(TEMPERATURE_SENSOR) as fh:
            for line in fh.readlines():
                if not re.search("t=", line):
                    continue
                line = line.rstrip()
                temp_item = line.split()[-1]
        if len(temp_item) == 0:
            return None
        temp_int = temp_item.split("=")[-1]
        temp = int(temp_int) / 1000.0
        return f"{temp:0.2f}"
        
    if __name__ == '__main__':
        temp = GetLocalTemperature()
        print(f"Temperature: {temp}°C")

    Eu segui várias dicas de lugares aleatórios, mas o melhor foi esse aqui:

    https://cdn-learn.adafruit.com/downloads/pdf/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing.pdf

script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js">