Como trazer a câmera e exibir em uma placa de suporte do módulo de computação

Desenvolvemos a nossa própria placa porta-módulos computacional, chamada PCCB. É compatível com Raspberry Pi Compute Modules 1 - 3 Plus, e tem uma série de características muito úteis para uso industrial (RS232, CAN Bus, RS485, TPM, DC/DC Stepdown).

Hoje, eu verifiquei a câmera e a interface de exibição de 7'' que nós fornecemos no quadro também.

Bild 1 Szene 1

Observe os conectores DISP1 e CAM1.

Conhecimento de fundo sobre a câmera

O módulo da câmera tem dois pinos GPIO adicionais. Estes são designados:

  • CAM_IO0 ou CAM_GPIO / CAMERA_0_SHUTDOWN
  • CAM_IO1 ou Linha de LED / CAMERA_0_LED

CAM_IO0 é utilizado para dirigir a câmera, e ligá-la para cima / baixo, quando é necessário. Isto não pode ser feito manualmente configurando o pino alto em tempo de execução - o VideoCore Blob tem que ser capaz de fazer isto.

(possivelmente é possível puxar isto para cima sempre, mas isto deixará a câmara ligada e aumentará o consumo de energia).

O CAM_IO1 (LED Line) foi utilizado na câmara v1 previamente para conduzir o LED. Não está em uso na Câmara Raspberry Pi v2, segundo os engenheiros da Raspberry Pi.

O pino do conector da câmara (tanto na Câmara Raspberry Pi como na nossa placa) é:

  • GND
  • CAM_D0_N
  • CAM_D0_P
  • GND
  • CAM_D1_N
  • CAM_D1_P
  • GND
  • CAM_CK_N
  • CAM_CK_P
  • GND
  • CAM_IO0
  • CAM_IO1
  • CAM_SCL
  • CAM_SDA
  • CAM_3V3

A câmera geralmente usa o barramento interno I2C (SDA0 e SCL0 disponíveis, por exemplo, em GPIO0 e GPIO1)

imagem

Esquemas

Estes são os esquemas do nosso esquema de hardware:

imagem

Como você pode ver (e como discutido anteriormente), estamos utilizando GPIO_27 como CAM_IO0 e GPIO_26 como CAM_IO1.

O visor não necessita de pinos GPIO adicionais.

Tanto o display quanto a câmera utilizam o barramento interno I2C, nos Pinos GPIO_1 e GPIO_0.

dt-blob.bin

Este arquivo é uma parte opcional dos arquivos de inicialização do Raspberry Pi. Ele é colocado em /boot e substitui um dt-blob.bin embutido que é compilado em start.elf.

Ele comunica a configuração do pino GPIO ao Firmware rodando no VideoCore (VCOS, Video Core OS). Como as placas Compute Module Carrier, como as nossas, terão configurações de pinos personalizados, frequentemente, este dt-blob.bin precisa de ser fornecido.

Aqui estão mais informações sobre este ficheiro, incluindo um processo de arranque passo a passo:

Raspberry Pi fornece a fonte para várias configurações possíveis com o dt-blob.bin aqui:

Eu selecionei o arquivo dt-blob-disp1-cam1.dts como fonte e renomeei-o para dt-blob-disp1-cam1_pccb.dts.

Você pode baixar o arquivo fonte original do Raspberry Pi aqui:

Este arquivo precisa ser modificado para refletir nossa escolha de pinos GPIO (que, por sua vez, permitirá que o VideoCore Firmware ligue a câmera e fale com ela).

Este arquivo fonte inclui configurações para muitos modelos Pi diferentes. Estamos interessados apenas nas configurações do módulo de computação: pins_cm3 e pins_cm

imagem

imagem

(Note que os seus números de linha podem estar desligados por alguns contadores, pois incluí algumas coisas adicionais no ficheiro que não são relevantes para a nossa discussão aqui).

Aqui você deve modificar quatro linhas. Em nossa configuração de hardware específica (!), eu modifiquei:

imagem

para

imagem

e

imagem

para:

imagem

As mesmas modificações precisam ser aplicadas tanto para CM3 como para CM.

pin@p26 { function = "output"; termination = "no_pulling"; }; // LED CAMERA 0
pin@p27 { function = "output"; termination = "no_pulling"; }; // CAMERA 0 SHUTDOWN

(…)

pin_define@CAMERA_0_LED {
    tipo = "interno";
    número = ;
};
pin_define@CAMERA_0_SHUTDOWN {
    tipo = "interno";
    número = ;
};
pin_define@CAMERA_0_UNICAM_PORT {
    tipo = "interno";
    número = ;
};

Note que você também tem a possibilidade de utilizar uma CAMERA_0_I2C_PORT e CAMERA_0_SDA_PIN / CAMERA_0_SCL_PIN diferentes se a configuração do seu hardware assim o exigir.

O mesmo se aplica à exibição, existem as entradas DISPLAY_SDA, DISPLAY_SCL, DISPLAY_I2C_PORT que podem ser modificadas.

No nosso caso, deixei-os no padrão, pois é assim que o nosso quadro foi concebido.

Compilar este arquivo

No pi, corre:

sudo dtc -I dts -O dtb -o dt-blob-disp1-cam1_pccb.dtb dt-blob-disp1-cam1_pccb.dts

imagem

Isso lhe dará um muro de avisos, que pode ser ignorado com segurança.

Instalar o dt-blob.bin

sudo cp dt-blob-disp1-cam1_pccb.dtb /boot/dt-blob.bin

E reiniciar.

Teste

os pinos 26 e 27 estão agora configurados como pinos de saída, e são conduzidos para baixo:

imagem

vcgencmd get_camera

rendimentos:

suportado=1 detectado=1

imagem

Podes levar um alambique a usar:

raspistill -v -o test.jpg

(Não se esqueça de ativar a câmera usando raspi-config também!)

Transmissão de vídeo

Uma pequena dica de bónus. No seu Pi, você pode começar um fluxo usando:

raspivid -o - - -t 0 -hf -w 800 -h 400 -fps 24 |cvlc -vvvvv -h264-fps=24 stream:///dev/stdin -sout '#standard{access=http,mux=ts,dst=:8160}' :demux=h264

Note os -fps 24 e -h264-fps=24 para ambos, raspivid e cvlc, para sincronizar os seus framerados!

imagem

imagem

use VLC para visualizar o fluxo (usando o IP da sua placa de computação):

imagem

imagem

Mostrar

O visor também requer o dt-blob.bin.

Usei uma fonte de alimentação externa para alimentar o display, em uma revisão do PCCB teremos +5 V de energia em um cabeçalho para uso com o display.

Por favor, note que eu não podia usar o cabo flexível da câmera para fazer o display funcionar; ele tinha que ser conectado usando o seu próprio cabo (curto).

Sequencio a energia primeiro para o visor, depois para o PCCB

O toque funciona.

b2461dd4-c434-4882-b277-baab25b705eeb700c161-0009-4e3f-ba0b-5759cfdbe78cadd6926c-45c2-4293-a506-3f2fdd8d752f

Mostrador e câmera juntos

Isso também funciona, o fluxo da câmera também é exibido ao vivo no visor.

WhatsApp Image 2020-09-01 em 21.01.21WhatsApp Image 2020-09-01 em 21.01.20

imagem

Erros

durante a execução

raspistill -v -o test.jpg

vais ter:

mmal_vc_component_create: falhou na criação do componente 'vc.ril.camera' (1:ENOMEM)

também

vcgencmd get_camera

irá exibir um ou outro:

suportado=0 detectado=0

ou

suportado=1 detectado=0

Se suportado=0 você deve verificar se o seu dt-blob.bin está instalado corretamente em /boot.

Se detectado=0, você deve verificar se os pinos GPIO estão configurados corretamente no dt-blob.bin.

Certifique-se também de que a câmara é activada utilizando o raspi-config.

Orientação flexível adequada

Os cabos flexíveis têm de ser correctamente orientados para fazer a ligação. Você pode dar uma olhada nos pinos, e ver se os pinos GND e +3V3 se comportam como esperado, ou se não há conexão / sem tensão.

Serviço por pi3g

Podemos trazer o seu hardware para você, oferecer serviços de consultoria ou desenvolvimento de hardware e software Raspberry Pi sob medida - contacte-nos hoje.

Ref