Sistema de assistência ao estacionamento baseado em Pi: 9 etapas
Sistema de assistência ao estacionamento baseado em Pi: 9 etapas
Anonim
Sistema de assistência ao estacionamento baseado em Pi
Sistema de assistência ao estacionamento baseado em Pi

Ei! Aqui está um pequeno projeto legal que você pode fazer em uma única tarde e usá-lo diariamente. É baseado no Raspberry Pi Zero W e irá ajudá-lo a estacionar perfeitamente o seu carro todas as vezes.

Aqui está a lista completa das peças de que você precisa:

  • Raspberry Pi Zero W (chamaremos isso de 'rpi' ou 'pi' neste artigo)
  • Cartão micro SD de 4 GB ou maior para o pi OS
  • Dois módulos sensores de distância de tempo de voo tinyLiDAR
  • Painel LED 32x32 RGB (existem muitos fabricantes para isso com diferentes espaçamentos de pontos, você pode, por exemplo, usar o Adafruit 1484 ou similar, basta pesquisar por '32x32 LED Matrix' no Google). Nosso painel tinha um passo de 6 mm.
  • 25 pés de cabo CAT5
  • aproximadamente 22 fios coloridos de jumper de pino de conector macho para macho
  • Fonte de alimentação microUSB 5v 2Amp (carregador de celular) Tudo pronto? Vamos lá!

Resumo de TL; DR

  • Baixe o Raspbian Lite OS para rpi
  • Configure o pi para funcionar sem periféricos em WiFi com um IP estático
  • Configure seu ambiente de desenvolvimento de PC com PuTTY, WinSCP e opcionalmente SublimeText com addon FTP
  • Baixe, crie e vincule o driver do painel de LED
  • Baixe e instale o pigpio
  • Baixe nosso código Python
  • Conecte o painel de exibição de LED de 32x32
  • Faça o cabo de extensão CAT5 para o sensor tinyLiDAR lateral
  • Etapa opcional (mas apenas para usuários avançados): faça uma dança rápida e feliz quando tudo estiver funcionando;)

Etapa 1: O que é Pi Zero W?

O que é um Pi Zero W?
O que é um Pi Zero W?

Você sem dúvida já ouviu falar do Raspberry Pi, mas o que diabos é um pi 'Zero W'?

O Raspberry Pi Zero e o Zero W foram adições mais recentes à família Pi, significando mais para IoT e outras aplicações embarcadas de baixo custo. Eles são versões simplificadas da placa pi original, mas ainda com um poderoso processador de 1GHz. Aqui está uma boa comparação de todos os modelos.

O benefício para nós em escolher a Pi Zero W aqui em vez de outras placas controladoras é que podemos programá-la facilmente na linguagem Python de nível superior enquanto ainda usamos os drivers de painel LED C / C ++ rápidos. Também tem um preço atraente de apenas US $ 10USD.

Lembre-se de que, como esta placa é uma versão simplificada de um pi inteiro, algumas coisas mudaram. Em particular, o conector Ethernet foi eliminado, o conector HDMI mudou para um tamanho mini e as quatro portas USB foram simplificadas para apenas um tipo de micro USB. Há outro conector micro USB integrado, mas é apenas para alimentar a placa. A eliminação de todos os conectores USB de tamanho normal apresenta algumas complexidades. Ou seja, como você pode conectar um teclado e um mouse? Os periféricos e hubs USB padrão usam conectores do tipo A, não do tipo micro.

Então o que nós podemos fazer?

Podemos ficar sem cabeça!

Não, não queremos enlouquecer, mas usar uma alternativa para a configuração direta normal com fio. Headless significa "túnel" no pi remotamente usando uma conexão de rede SSH (Secure Shell). Para este projeto, usaremos a abordagem headless sobre WiFi. Daí a razão para escolhermos a versão W do pi zero em vez do custo ainda menor pi zero.

Observe que também há outra maneira de executar o pi no modo sem cabeça usando algo chamado VNC. Ele precisa de um software VNC especial em execução em seu PC, pois fornece uma área de trabalho gráfica virtual completa em seu PC. Não exigimos (e realmente não queremos) a área de trabalho para nosso projeto, portanto, vamos nos ater ao método SSH mais simples.

Etapa 2: Scotty, precisamos de mais energia

Scotty, precisamos de mais energia!
Scotty, precisamos de mais energia!

O painel de matriz de LED de 32x32 pode, sozinho, levar vários amperes de corrente. Sem brincadeiras! É por isso que a maioria desses painéis inclui alguns cabos de alimentação de aparência robusta para alimentá-lo. Felizmente para nós, não precisaremos obter uma fonte de alimentação massiva para este projeto. Conseguimos alimentar todo o sistema com apenas um carregador de celular microUSB de 5 V / 2 amp. A razão para a corrente mais baixa é porque usamos gráficos relativamente simples e, portanto, não ligamos a maioria dos LEDs. Se você está pensando em fazer animação ou usar vídeo / gráficos brilhantes, você definitivamente deve considerar ligar o painel com uma fonte de alimentação separada.

Etapa 3: posicionamento do sensor e software

Posicionamento de sensor e software
Posicionamento de sensor e software
Posicionamento de sensor e software
Posicionamento de sensor e software

Você notou que estamos usando dois tinyLiDARs neste sistema em vez de apenas um? Conforme mostrado no diagrama de configuração da garagem, um é colocado na frente do carro e o outro é colocado ao longo de um lado do carro.

O sensor lateral detectará se você saiu do centro ao estacionar o carro e, claro, o da frente dirá quando parar.

O display LED de 32x32 o ajudará mostrando setas para avançar, esquerda ou direita e um display de contagem regressiva com cantos coloridos para indicar a distância que você ainda tem que dirigir. Dê uma olhada em nosso pequeno vídeo para todos os estados de exibição.

Plano de jogo

Resumindo, estamos usando a sempre popular biblioteca hzeller C para o driver LED, Python para o código de controle e a biblioteca pipgpio C para o controle I2C adequado de nossos sensores.

Python é uma linguagem de alto nível super fácil que você pode editar facilmente em qualquer editor de texto. Normalmente usamos SublimeText e para este projeto também usamos um plugin FTP muito útil que nos permite editar os arquivos de script diretamente no pi. Esta é uma etapa opcional, pois só é necessária se você quiser editar o código. Mais detalhes estão disponíveis no final deste artigo.

Todas as placas rpi, como você deve saber, não têm suporte nativo para alongamento de clock I2C. Então, usamos a biblioteca pigpio novamente para este projeto para controlar os sensores tinyLiDAR, mas desta vez com uma ligeira torção …

Vários tinyLiDARs

Quando você compra um tinyLiDAR, ele sempre está configurado para o endereço escravo padrão de 0x10. Isso é bom para quando você está usando um único sensor, mas se você tiver mais de um no barramento, pode ser um problema se você escrever um comando para 0x10 e todos eles responderem de volta!

Portanto, temos 3 opções aqui:

Primeiro, podemos usar o comando (tinyLiDAR) "R" para escrever um novo endereço de escravo para o sensor conectado ao barramento I2C. Em seguida, repita isso para cada sensor. Anexar, escrever e desanexar fisicamente cada sensor para este procedimento. tinyLiDAR armazenará o endereço fornecido em sua memória não volátil integrada. O endereço persistirá mesmo depois de desligar e ligar a alimentação até que você o limpe emitindo o comando RESET.

A segunda opção é usar o conveniente recurso de atribuição automática que criamos como uma meta estendida na campanha IGG. Isso envolve enviar o comando "AR" e apontar o dedo para cada sensor individualmente para atribuir endereços I2C sequenciais aos sensores individuais, semelhante à primeira opção, mas você não precisa desconectar fisicamente cada sensor para fazer isso.

A terceira opção é a que estamos usando aqui neste projeto e é possível graças à biblioteca pigpio. Para implementar o padrão I2C corretamente, o pigpio bitbangs o GPIO. Portanto, por causa disso, podemos criar facilmente barramentos I2C separados em praticamente qualquer par de pinos GPIO sobressalentes.

Portanto, não há necessidade de reprogramar endereços de escravos para os vários sensores LiDAR. Podemos apenas usar um ônibus separado para cada um:)

Observe que o barramento I2C rodando a 100Kbps é, na verdade, bastante robusto. Estamos usando o velho cabo Ethernet CAT5 para passar o barramento I2C para o sensor tinyLiDAR lateral que está a 7 metros de distância sem nenhum componente repetidor ativo! Os detalhes da fiação do sensor são mostrados acima.

Ok, jabber jibber suficiente, vamos começar a baixar o código!

Etapa 4: Configurando o Pi

Configurando o Pi
Configurando o Pi
Configurando o Pi
Configurando o Pi

Cuidado: O pi usa um sistema de arquivos Linux, portanto, é melhor executar as seguintes etapas em um sistema baseado em Linux. Você pode acabar reformatando o cartão SD se fizer isso no Windows. Usamos o desktop Ubuntu 18.04 incrível e gratuito rodando em um ambiente virtual em um PC com Windows 10, mas você pode tentar algo semelhante.

Você precisará primeiro fazer o download do sistema operacional em raspberrypi.org e gravá-lo em seu cartão microSD. Portanto, siga estas etapas:

(1) No Ubuntu, vá aqui e pegue a imagem do Raspbian Lite. Salve-o em sua pasta de downloads.

(2) Em seguida, baixe o utilitário de gravação de cartão SD Etcher. Para sua informação - o link de download oficial do Etcher para a versão Linux em sua página inicial não funcionou para nós, então usamos o método descrito aqui:

Em resumo, as etapas descritas no link foram:

Adicionar repositório debian Etcher:

echo "deb https://dl.bintray.com/resin-io/debian stable etcher" | sudo tee /etc/apt/sources.list.d/etcher.list

Confie na chave GPG do Bintray.com:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61

Atualize e instale:

sudo apt-get update

sudo apt-get install etcher-electron

Depois de concluído, você pode ir em frente e iniciar o Etcher a partir de seu desktop Ubuntu. Ele irá solicitar o arquivo de origem (que você coloca na pasta de downloads). O próximo passo no Etcher é escolher o destino correto. Etcher faz um bom trabalho em detectar seu cartão micro SD, mas você deve estar paranóico aqui. Para verificar se ele está encontrando o destino adequado - tente ejetar o cartão microSD clicando em ejetar na janela do explorador de arquivos do Ubuntu e verifique se ele desaparece como a opção de destino dentro do Etcher. Em seguida, coloque-o de volta e prossiga para a etapa final, que é gravar o arquivo neste cartão microSD.

Espere um pouco até terminar e continue em frente.

Etapa 5: Tempo WiFi

Tempo WiFi
Tempo WiFi
Tempo WiFi
Tempo WiFi

Ok, agora é hora de inserir seus dados de WiFi.

Dica: você sempre pode copiar (Ctrl + C) e colar (clicar com o botão direito, colar) as informações deste artigo na tela do terminal PuTTY em vez de digitar os comandos. Verifique também no final deste artigo vários comandos úteis do Linux.

Quando o Etcher terminar de gravar no cartão micro SD, haverá 2 unidades exibidas conforme mostrado acima. Um é chamado de boot e o outro é chamado de rootfs

Precisamos usar o gerenciador de arquivos para entrar na pasta de boot e criar um arquivo chamado wpa_supplicant.conf.

Para fazer esta etapa, você pode apenas clicar no lado esquerdo onde diz boot e, em seguida, no lado direito da tela você pode clicar com o botão direito no fundo branco e escolher Abrir no Terminal.

Isso abrirá uma janela de terminal (semelhante ao CMD no Windows), onde você pode digitar o seguinte:

sudo nano wpa_supplicant.conf Dica: você precisará inserir sua senha do sistema Linux para que ele possa ser executado como superusuário. Isto é necessário ou então você não será capaz de salvar os arquivos quando terminar de editar

O comando acima iniciará o editor de texto "nano", onde você pode inserir as seguintes informações:

país = EUA

ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev update_config = 1 rede = {ssid = "WiFi_SSID" scan_ssid = 1 psk = "WiFi_Password" key_mgmt = WPA - PSK}

Nota: Lembre-se de substituir WiFi_SSID e WiFi_Password pelo seu próprio nome de rede WiFi e senha.

Quando terminar, basta clicar em Ctrl + X para sair e responder Sim para gravar o arquivo ao sair.

Nosso próximo passo é criar um arquivo vazio chamado ssh. Para fazer isso, basta digitar o seguinte na janela do terminal:

toque ssh

Agora precisamos dar ao nosso pi um endereço IP estático para que saibamos onde ele está toda vez que quisermos nos conectar a ele. Digite o seguinte na janela do terminal:

sudo nano /etc/dhcpcd.conf

Isso deve abrir o editor de texto nano novamente e podemos adicionar este texto ao final do arquivo:

interface wlan0

static ip_address = 192.168.0.static routers = 192.168.0.1 static domain_name_servers = 192.168.0.1 8.8.8.8

Nota: Isso pressupõe que o prefixo da rede é 192.168.0. Se você tiver 192.168.1 etc, use sua rede. O servidor de nomes de domínio 8.8.8.8 é para o Google e é opcional aqui.

Digite 'exit' no Terminal para fechá-lo. Em seguida, clique com o botão direito sobre o nome de inicialização no lado esquerdo da janela do gerenciador de arquivos e selecione Ejetar.

Agora você pode conectar este cartão microSD em seu pi e conectar o cabo de alimentação microUSB para alimentar seu pi.

Se tudo correr bem, o LED verde piscará por um tempo como se estivesse acessando uma unidade de disco rígido e deve conectar você à sua rede sem fio. Espere cerca de um minuto para se acalmar e espere que o LED fique verde sólido.

Para verificar se tudo funcionou, podemos tentar fazer o ping.

Portanto, basta digitar a linha abaixo e verificar se há uma resposta.

ping 192.168.0.200

No Ubuntu, você deve obter algo semelhante a isto:

ping 192.168.0.200

PING 192.168.0.200 (192.168.0.200) 56 (84) bytes de dados. 64 bytes de 192.168.0.200: icmp_seq = 1 ttl = 128 tempo = 752 ms 64 bytes de 192.168.0.200: icmp_seq = 2 ttl = 128 tempo = 5,77 ms 64 bytes de 192.168.0.200: icmp_seq = 3 ttl = 128 tempo = 7,33 ms ^ C --- 192.168.0.200 estatísticas de ping --- 3 pacotes transmitidos, 3 recebidos, 0% de perda de pacotes, tempo 2001ms rtt min / avg / max / mdev = 5,777 / 255,346 / 752,922 / 351,839 ms

Observe que o ping continua a operar até que você pressione Ctrl + C para sair.

No Windows, você deve obter algo assim:

ping 192.168.0.200

Ping de 192.168.0.200 com 32 bytes de dados: Resposta de 192.168.0.200: bytes = 32 tempo = 4ms TTL = 64 Resposta de 192.168.0.200: bytes = 32 tempo = 5ms TTL = 64 Resposta de 192.168.0.200: bytes = 32 tempo = 6ms TTL = 64 Resposta de 192.168.0.200: bytes = 32 tempo = 5ms TTL = 64 Estatísticas de ping para 192.168.0.200: Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de perda), tempos de ida e volta aproximados em milissegundos: Mínimo = 4ms, Máximo = 6ms, Média = 5ms

Tudo certo? Avante …

Etapa 6: Login

Login
Login

Agora que temos conectividade com o pi, queremos enviar comandos. Mas como? PuTTY, é claro! Você pode baixar o PuTTY aqui. Configurando o PuTTY Depois de baixar o software PuTTY, faça um perfil para o seu pi com as seguintes informações:

Nome do host (ou endereço IP): 192.168.0.200 Tipo de conexão: SSHDê a este perfil um nome em Sessões salvas e clique em Salvar. Você pode usar qualquer nome que desejar, por exemplo "rpizw_200"

Para fazer o login, basta selecioná-lo na lista e clicar em Carregar. Em seguida, pressione Abrir. Digite o nome de usuário e a senha para fazer login:

nome de login: pi

Senha padrão: framboesa

Aqui está um exemplo de sessão mostrado no PuTTY quando você faz o login:

faça login como: pi

[email protected]'s password: Linux raspberrypi 4.14.34+ # 1110 Seg 16 de abril 14:51:42 BST 2018 armv6l Os programas incluídos no sistema Debian GNU / Linux são software livre; os termos de distribuição exatos para cada programa são descritos nos arquivos individuais em / usr / share / doc / * / copyright. O Debian GNU / Linux vem ABSOLUTAMENTE NENHUMA GARANTIA, até o limite permitido pela lei aplicável. Último login: [data e hora] de 192.168.0. [Endereço ip] SSH está habilitado e a senha padrão para o usuário 'pi' não foi alterada. Este é um risco de segurança - faça login como o usuário 'pi' e digite 'passwd' para definir uma nova senha.

No primeiro login, avisará que você ainda não alterou a senha. Você deve alterá-lo para algo forte, mas simples de lembrar, então vá em frente e altere-o digitando passwd e siga os prompts.

Em seguida, devemos atualizar o software no pi digitando o seguinte:

sudo apt-get update && sudo apt-get upgrade

Isso fará o download de todas as atualizações necessárias da sua conexão com a Internet. Responda SIM se solicitado para permitir que continue e então dê algum tempo para atualizar.

Neste momento, provavelmente também deveríamos desligar o som do pi, pois ele tem algum mau juju com a biblioteca de drivers de LED. Copie, cole as seguintes linhas uma de cada vez e pressione Enter após cada linha:

cd ~

gato << EOF | sudo tee /etc/modprobe.d/blacklist-rgb-matrix.conf lista negra snd_bcm2835 EOF sudo update-initramfs -u

A saída será mais ou menos assim:

pi @ raspberrypi: ~ $ cd ~

pi @ raspberrypi: ~ $ cat <> lista negra snd_bcm2835>> lista negra EOF snd_bcm2835 pi @ raspberrypi: ~ $ sudo update-initramfs -u pi @ raspberrypi: ~ $

Em seguida, temos que reiniciar o pi para que as alterações tenham efeito, então digite o seguinte:

sudo reinicie agora

A conexão cairá, é claro, enquanto o pi é reiniciado, para que você possa fechar o PuTTY. Tente fazer login novamente um minuto depois.

Agora é hora de obter um gerenciador de arquivos FTP gráfico chamado WinSCP. Você pode baixar o WinSCP aqui

O WinSCP é muito parecido com o gerenciador de arquivos do Windows e do Ubuntu. Ele nos permite arrastar e soltar arquivos de e para o pi e criar diretórios com apenas um clique com o botão direito do mouse.

Depois de fazer o download, você precisará configurar um perfil para o seu pi.

Configuração do WinSCP No pop-up de Login, escolha Novo site. Use as seguintes configurações para a sessão:

Protocolo de arquivo: SFTP Nome do host: 192.168.0.200 Nome de usuário: pi Senha: {qualquer senha que você alterou o padrão na etapa PuTTY acima}

Em Configurações avançadas do site, vá para Ambiente | Diretórios e digite / home / pi para o diretório remoto e o que quiser para a configuração do diretório local.

Em Configurações avançadas do site, vá para Ambiente | Shell e escolha sudo su - na lista suspensa Shell.

Em seguida, clique em Salvar.

Mantenha o WinSCP e o PuTTY abertos enquanto executa as etapas a seguir

Vá para o terminal PuTTY e digite o seguinte:

cd ~

Isso nos levará ao nosso diretório inicial dentro do pi.

Agora podemos obter a biblioteca de drivers de LED do github. Para usar o código mais recente, precisaremos extrair o repo, portanto, precisamos instalar o utilitário git.

Insira isso no PuTTY:

sudo apt-get install git

responda Y para continuar e levará alguns segundos para instalar o git para nós a partir da internet.

A saída deve ser semelhante a esta:

pi @ raspberrypi: ~ $ sudo apt-get install git

Lendo listas de pacotes … Concluído Construindo árvore de dependências Lendo informações de estado … Concluído Os seguintes pacotes adicionais serão instalados: git-man liberror-perl Pacotes sugeridos: git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn Os seguintes NOVOS pacotes serão instalados: git git-man liberror-perl 0 atualizado, 3 recém-instalado, 0 para remover e 0 não atualizado. Precisa obter 4.848 kB de arquivos. Após esta operação, 26,4 MB de espaço em disco adicional serão usados. Você quer continuar? [S / n] y Get: 1 https://muug.ca/mirror/raspbian/raspbian stretch / main armhf liberror-perl all 0.17024-1 [26,9 kB] Get: 2 https://muug.ca/mirror/ raspbian / raspbian stretch / main armhf git-man all 1: 2.11.0-3 + deb9u3 [1, 433 kB] Obter: 3 https://muug.ca/mirror/raspbian/raspbian stretch / main armhf git armhf 1: 2.11.0-3 + deb9u3 [3, 388 kB] Obtido 4, 848 kB em 5s (878 kB / s) Selecionando o pacote liberror-perl não selecionado anteriormente.(Lendo o banco de dados… 34363 arquivos e diretórios instalados atualmente.) Preparando para descompactar… / liberror-perl_0.17024-1_all.deb… Descompactando liberror-perl (0.17024-1)… Selecionando o pacote anteriormente não selecionado git-man. Preparando para descompactar… / git-man_1% 3a2.11.0-3 + deb9u3_all.deb… Descompactando git-man (1: 2.11.0-3 + deb9u3)… Selecionando o pacote anteriormente não selecionado git. Preparando para descompactar… / git_1% 3a2.11.0-3 + deb9u3_armhf.deb… Descompactando git (1: 2.11.0-3 + deb9u3)… Configurando git-man (1: 2.11.0-3 + deb9u3)… Configurando liberror-perl (0.17024-1)… Processando gatilhos para man-db (2.7.6.1-2)… Configurando git (1: 2.11.0-3 + deb9u3)…

Agora volte para o WinSCP e navegue até a pasta / home / pi. Em seguida, no lado direito da janela WinScp, clique com o botão direito e escolha criar um novo diretório chamado "parking"

De volta à tela do PuTTY, você pode digitar ls para confirmar que acabou de criar uma nova pasta no pi. Em seguida, insira este:

cd p [TAB]Dica: Pressionar a tecla TAB irá preencher automaticamente o nome parcial para você

Pressione a tecla Enter para entrar neste diretório.

pi @ raspberrypi: ~ $ cd parking /

pi @ raspberrypi: ~ / parking $ ls

Agora podemos obter os arquivos do driver digitando o seguinte no PuTTY:

git clone

O resultado será mais ou menos assim:

pi @ raspberrypi: ~ / parking $ git clone

Clonando em 'rpi-rgb-led-matrix'… remoto: Contando objetos: 3740, concluído. remoto: Total 3740 (delta 0), reutilizado 0 (delta 0), embalagem reutilizada 3740 Objetos recebidos: 100% (3740/3740), 20,61 MiB | 1,32 MiB / s, pronto. Resolvendo deltas: 100% (2550/2550), concluído.

Agora compile os arquivos do driver de LED acessando este novo diretório 'rpi-rgb-led-matrix' e digitando o comando make:

cd r [TAB]

faço E isso é o que parecia em nosso quadro

pi @ raspberrypi: ~ / parking $ cd rpi-rgb-led-matrix /

pi @ raspberrypi: ~ / parking / rpi-rgb-led-matrix $ make make -C./lib make [1]: Entrando no diretório '/ home / pi / parking / rpi-rgb-led-matrix / lib' g ++ - I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o gpio.o gpio.cc g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o led-matrix.o led-matrix.cc g ++ -I../ incluir - Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o options-initialize.o options-initialize.cc g ++ -I../ incluir -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o framebuffer.o framebuffer.cc g ++ -I../ inclui -Wall -O3 -g - fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o thread.o thread.cc g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = ' "regular" '-Wextra -Wno-unused-parameter -fno-exceptions -c -o bdf-font.o bdf-fon t.cc g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o graphics.o graphics.cc g ++ - I../ incluir -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o transformer.o transformer.cc g ++ -I../ incluir -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-parâmetro não utilizado -fno-exceções -c -o led-matriz-co led-matrix-c.cc cc -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -c -o hardware-mapping.o hardware-mapping.c g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o content-streamer.o content-streamer.cc g ++ -I../ include -Wall -O3 - g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-exceptions -c -o pixel-mapper.o pixel-mapper.cc g ++ -I../ include -Wall -O3 -g -fPIC -DDEFAULT_HARDWARE = '"regular"' -Wextra -Wno-unused-parameter -fno-excep tions -c -o multiplex-mappers.o multiplex-mappers.cc ar rcs librgbmatrix.a gpio.o led-matrix.o options-initialize.o framebuffer.o thread.o bdf-font.o graphics.o transformer.o led-matrix-co hardware-mapping.o content-streamer.o pixel-mapper.o multiplex-mappers.o g ++ -shared -Wl, -soname, librgbmatrix.so.1 -o librgbmatrix.so.1 gpio.o led -matrix.o options-initialize.o framebuffer.o thread.o bdf-font.o graphics.o transformer.o led-matrix-co hardware-mapping.o content-streamer.o pixel-mapper.o multiplex-mapeadores. o -lpthread -lrt -lm -lpthread make [1]: Saindo do diretório '/ home / pi / parking / rpi-rgb-led-matrix / lib' make -C example-api-use make [1]: Entrando no diretório ' / home / pi / parking / rpi-rgb-led-matrix / examples-api-use 'g ++ -I../ inclui -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o demo-main. o demo-main.cc make -C../lib make [2]: Entrando no diretório '/ home / pi / parking / rpi-rgb-led-matrix / lib' make [2]: Saindo do diretório '/ home / pi / parking / rpi-rgb-led-matrix / lib 'g ++ demo-main.o -o demo -L../ lib -lrgbmatrix -lrt -lm -lpthread g ++ -I../ inclui -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o minimal-example.o minimal-example.cc g ++ minimal-example.o - o minimal-example -L../ lib -lrgbmatrix -lrt -lm -lpthread cc -I../ inclui -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o c-example.o c- example.c cc c-example.o -o c-example -L../ lib -lrgbmatrix -lrt -lm -lpthread -lstdc ++ g ++ -I../ include -Wall -O3 -g -Wextra -Wno-unused- parâmetro -c -o text-example.o text-example.cc g ++ text-example.o -o text-example -L../ lib -lrgbmatrix -lrt -lm -lpthread g ++ -I../ include -Wall - O3 -g -Wextra -Wno-unused-parameter -c -o scrolling-text-example.o scrolling-text-example.cc g ++ scrolling-text-example.o -o scrolling-text-example -L../ lib -lrgbmatrix -lrt -lm -lpthread g ++ -I../ inclui -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o clock.o clock.cc g ++ clock.o -o clock -L.. / lib -lrgbmatrix -lrt -lm -lpthread g ++ -I../ include -Wall -O3 -g -Wextra -Wno-unused-parameter -c -o ledcat.o ledcat.cc g ++ le dcat.o -o ledcat -L../ lib -lrgbmatrix -lrt -lm -lpthread make [1]: Saindo do diretório '/ home / pi / parking / rpi-rgb-led-matrix / examples-api-use' pi @raspberrypi: ~ / parking / rpi-rgb-led-matrix $

Nossa próxima etapa será vincular a biblioteca de matriz RGB ao Python. Usamos o Python 2 padrão para este projeto. Portanto, para fazer essa ligação, inserimos a seguinte linha por vez, como antes:

sudo apt-get update && sudo apt-get install python2.7-dev python-pillow -y

make build-python sudo make install-python

Nota: Você pode ignorar com segurança o único aviso sobre '-Wstrict-prototype' que aparece ao executar as duas instruções make. Os comandos make levam alguns minutos para serem executados e não dizem nada enquanto estão ocupados. Portanto, não tenha medo - seu pi deve voltar em breve;)

Aqui está a saída parcial da primeira instrução make:

construção de extensão 'gráficos'

arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fdebug-prefix-map = / build / python2.7-kKRR4y / python2.7-2.7.13 =. -fstack-protector-strong -Wformat -Werror = format-security -fPIC -I../../ include -I / usr / include / python2.7 -c rgbmatrix / graphics.cpp -o build / temp.linux- armv6l-2.7 / rgbmatrix / graphics.o -O3 -Wall cc1plus: aviso: a opção de linha de comando '-Wstrict-prototypes' é válida para C / ObjC, mas não para C ++ arm-linux-gnueabihf-g ++ -pthread -shared -Wl, -O1 -Wl, -Bsymbolic-functions -Wl, -z, relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fdebug-prefixo -map = / build / python2.7-kKRR4y / python2.7-2.7.13 =. -fstack-protector-strong -Wformat -Werror = format-security -Wl, -z, relro -Wdate-time -D_FORTIFY_SOURCE = 2 -g -fdebug-prefix-map = / build / python2.7-kKRR4y / python2.7 -2.7.13 =. -fstack-protector-strong -Wformat -Werror = format-security build / temp.linux-armv6l-2.7 / rgbmatrix / graphics.o -L../../ lib -lrgbmatrix -o./rgbmatrix/graphics.so make [1]: Saindo do diretório '/ home / pi / parking / rpi-rgb-led-matrix / bindings / python' pi @ raspberrypi: ~ / parking / rpi-rgb-led-matrix $

A seguir, instalaremos a biblioteca pigpio C. Para fazer isso corretamente, precisamos fazer a partir do código-fonte, portanto, basta inserir as seguintes linhas:

cd ~

sudo rm -rf PIGPIO wget abyz.me.uk/rpi/pigpio/pigpio.zip descompactar pigpio.zip cd PIGPIO make sudo make install rm pigpio.zip

A instalação acima leva cerca de 3 minutos.

Agora é hora de obter nossos arquivos de projeto Python. Digite o seguinte:

cd ~

cd / home / pi / parking / rpi-rgb-led-matrix / bindings / python / samples wget https://s3.amazonaws.com/microedco/tinyLiDAR/Raspberry+Pi/tinyL_parking.zip unzip -j tinyL_parking.zip rm tinyL_parking.zip

Então, para executá-lo, digite o seguinte:

sudo python parking.py

Mas você não precisa fazer isso agora, pois ainda temos que conectar tudo …

Etapa 7: fios

Fios
Fios
Fios
Fios
Fios
Fios
Fios
Fios

Como mencionado anteriormente, alimentamos o painel de LED com o mesmo adaptador de alimentação que alimenta o pi. Para fazer isso, você terá que emendar os robustos fios vermelho e preto aos pinos do conector macho para que possam ser plugados nos pinos 2 e 9 do conector pi de 40 pinos.

Desconecte a alimentação do pi agora e conecte o painel de LED de acordo com o diagrama ilustrado acima. Mantenha o pino 2 desconectado por enquanto.

NOTA: O painel de matriz de LED às vezes pode ligar em um estado estranho. Se isso acontecer, sua fonte de alimentação pode ficar muito fraca, independentemente da capacidade de corrente que ela tenha. Notamos isso durante o desenvolvimento em nossa fonte de bancada, que pode fornecer mais de 4 amperes. A solução para isso é executar o código pi primeiro e, em seguida, conectar o pino 2 para alimentar o painel de LED. Desta forma, o painel deve surgir em um estado de baixa energia, uma vez que elimina os estados aleatórios do LED. A corrente quiescente (todos os LEDs desligados) para nosso painel de LED foi de apenas 50mA a 5v.

CAT5

Usamos um cabo ethernet CAT5 de 25 pés e o modificamos para se conectar aos pinos do cabeçalho pi em uma extremidade e aceitar os pinos do conector GROVE do outro lado para que pudéssemos estender a distância para colocar nosso sensor tinyLiDAR lateral. As fotos acima mostram este cabo antes e depois das modificações. Desconsidere as cores dos fios dos pinos da plataforma, pois eles não estão correlacionados aos diagramas. Apenas certifique-se de conectar seu sistema conforme mostrado nos diagramas de conexão ilustrados mostrados anteriormente na etapa 3.

Etapa 8: Ilumine

Image
Image
Etapa opcional e comandos úteis
Etapa opcional e comandos úteis

A sequência de inicialização adequada deve ser conectar o carregador microUSB ao pi e esperar que os LEDs azuis nos sensores tinyLiDAR pisquem rapidamente, mostrando que eles estão fazendo medições. Isso prova que o código está funcionando corretamente.

Você pode então conectar lenta mas firmemente o pino 2 para a alimentação do painel de LED. Tenha cuidado para não causar falhas ao fazer isso! Se o painel de LED mostrar alguns LEDs brilhantes congelados, provavelmente está com problemas, então remova a alimentação do microUSB do pi e espere alguns segundos para tentar a sequência de inicialização novamente.

Para executar o código, digite o seguinte:

cd / home / pi / parking / rpi-rgb-led-matrix / bindings / python / samples

sudo python parking.py

Se tudo correr bem, você deverá obter um display semelhante ao mostrado no vídeo.

Dê uma olhada rápida no código parking.py para entender quais limites usamos. O padrão para o sensor frontal é 200 mm. Como o alcance do sensor é de 11 mm a 2 m, é uma boa ideia manter a distância nom_parked_Front em 200 mm ou mais. O sensor lateral nom_parked_Side está definido para 600 mm. Veja a imagem acima para o código Python mostrando essas opções de configuração.

Se tudo estiver funcionando, você pode montar o sistema em sua garagem e ajustar os parâmetros acima conforme necessário. Uma vez que seu pi está conectado ao seu WiFi, você sempre pode entrar e editar suas configurações de distância conforme necessário para a configuração de sua garagem em particular enquanto ela ainda está montada.

É isso agora?

Sim, é sim! - hora de fazer sua dança feliz:)

Obrigado por ler e desfrutar do seu novo assistente de estacionamento!

Etapa 9: Etapa opcional e comandos úteis

Etapa opcional - complemento FTP para texto sublime

Para editar os arquivos de script Python diretamente no pi, podemos instalar o addon FTP chamado Sublime SFTP da Wbond. Você pode baixar este complemento seguindo as instruções aqui

Para configurar este addon, precisamos configurar as credenciais do FTP em Arquivo | SFTP / FTP | Página de configuração do servidor….

Para nossa configuração, usamos:

"tipo": "sftp", "sync_down_on_open": verdadeiro, "sync_same_age": verdadeiro, "host": "192.168.0.200", "usuário": "pi", "senha": "YOUR_RPI_PASSWORD_HERE", "porta": "22", "remote_path": "/ home / pi /", "file_permissions": "664", "dir_permissions": "775", Use Ctrl + S ou Arquivo | Salve para salvar essas informações. Você será solicitado a fornecer um nome para chamar esta configuração. Nós simplesmente o chamamos de "rpizw_0_200"

Agora, para acessar o pi do SublimeText, vá para Arquivo | SFTP / FTP | Navegar no servidor …

Selecione na lista de opções que aparece. Você vai querer escolher o perfil com o nome que especificou acima;) Siga as instruções para navegar nas pastas e editar o arquivo desejado.

Extras úteis

Comandos úteis do Linux para usar no pi.

Antes de desconectar o pi, SEMPRE certifique-se de desligá-lo para não corromper o arquivo do cartão microSD. Digite este comando:

sudo shutdown now

e espere que o led verde se apague antes de desconectar a energia. Da mesma forma, para reiniciá-lo, você pode inserir:

sudo reinicie agora

Para listar arquivos em um diretório, use:

ls

Você pode encontrar outros comandos úteis do Linux aqui

Recomendado: