Índice:
- Etapa 1: Peças e acessórios
- Etapa 2: Descrição das peças: chapéu dos sentidos
- Etapa 3: Montagem: Registrador de impacto
- Etapa 4: Montagem: Registrador de impacto no painel do carro
- Etapa 5: Registrador de impacto: trabalho e aplicações
- Etapa 6: Descrição do software: Nó vermelho
- Etapa 7: noções básicas de Node-red
- Etapa 8: Nó vermelho: Fluxo _1a
- Etapa 9: Nó Vermelho: Fluxo_1b
- Etapa 10: Nó vermelho: Flow_2a
- Etapa 11: Nó vermelho: Flow_2b
- Etapa 12: Nó vermelho; Flow_3
- Etapa 13: MQTT
- Etapa 14: MQTT: assinante
- Etapa 15: MQTT: Editando Propriedades em Node-red
- Etapa 16: o código Python:
- Etapa 17: O Código Final
- Etapa 18: monitoramento de vídeo ao vivo
Vídeo: Registrador de impacto para veículos: 18 etapas (com fotos)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
O Registrador de Impacto foi projetado para registrar o impacto sofrido no veículo durante a condução ou parado. Os impactos são armazenados no banco de dados na forma de leituras, bem como de vídeo / imagem. Com o impacto, o usuário remoto pode ser verificado em tempo real, e o usuário remoto pode assistir ao vídeo salvo ou ter acesso remoto à câmera pi e assistir aos eventos de acordo.
Etapa 1: Peças e acessórios
(1) Raspberry Pi 3 ou melhor: potência computacional necessária
(2) Chapéu de framboesa pi sense
(3) Câmera Raspberry Pi / câmera USB
(4) Cartão de memória com a imagem raspbian mais recente (deve suportar nó vermelho, quase todas as imagens mais recentes sim)
(5) Fonte de alimentação de pelo menos 2,1 A (usei banco de bateria para operação autônoma no carro)
Etapa 2: Descrição das peças: chapéu dos sentidos
O Sense HAT tem uma matriz de LED RGB 8 × 8, um joystick de cinco botões e inclui os seguintes sensores:
- Giroscópio
- Acelerômetro
- Magnetômetro
- Temperatura
- Barométrico
- pressão
- Umidade
Mais informações sobre como trabalhar com o sense hat podem ser obtidas nos seguintes links: Sense_Hat
API para sense hat está hospedada em: Sense_hat_API
O código para a programação do sense hat é abordado em etapas posteriores. O código Sense-hat também pode ser simulado em um simulador hospedado em: Sense-hat simulator
Etapa 3: Montagem: Registrador de impacto
- A montagem é mais simples, pois o chapéu do sensor precisa ser empilhado sobre o pi (os parafusos de montagem designados são fornecidos com o chapéu do sensor).
- A câmera USB ou a câmera pi podem ser conectadas. No tutorial, a câmera pi é considerada e, consequentemente, a codificação é realizada para a mesma.
- Insira o cartão de memória e configure o código Python e o nó-vermelho (a configuração e o código são abordados nas etapas seguintes)
A imagem acima mostra a câmera pi conectada através de um cabo de fita plana ao pi
Etapa 4: Montagem: Registrador de impacto no painel do carro
Para montar o gravador, usei fita dupla-face, a vantagem é que o gravador pode ser facilmente colocado em diferentes posições, a que melhor se adequar ao seu carro.
Outra câmera é montada verticalmente como mostrado, usando a mesma fita dupla-face, O próximo passo é conectar uma fonte de energia (banco de energia de 10.000 mAH) junto com uma conexão de internet pronta
A conexão com a Internet deve ser necessária para o aplicativo MQTT (os detalhes para MQTT são cobertos em etapas posteriores)
Etapa 5: Registrador de impacto: trabalho e aplicações
A partir do chapéu do sentido, a aceleração e o giroscópio são usados para verificar se os valores brutos estão além do limite definido no código.
Acelerômetro: O acelerômetro informa a quantidade de força gravitacional (força G) atuando em cada um dos eixos x, y e z, se qualquer eixo medir mais de 1G de força, então o movimento rápido pode ser detectado. (observe que o eixo apontando para baixo teria valor de 1g e deve ser considerado de acordo no código python).
Giroscópio; O giroscópio é usado para medir o movimento angular, ou seja, durante uma curva fechada, o sensor pode ser ativado (depende da configuração do código), de modo que uma pessoa girando bruscamente no veículo seria pega !!
Qualquer ativação do limite definido também é exibida na matriz de LED do chapéu de detecção como "!" em vermelho para aceleração e verde para ativação do giroscópio
Etapa 6: Descrição do software: Nó vermelho
Node-RED é uma ferramenta de programação baseada em fluxo, originalmente desenvolvida pela IBM Emerging Technology Servicesteam e agora uma parte da JS Foundation.
Mais informações sobre o nó vermelho podem ser obtidas no seguinte link: nó-vermelho
Para o nosso caso, usaríamos node -red para as atividades seguintes
(1) Interagir com os joysticks para iniciar as funções da câmera
(2) Monitorar os impactos no veículo e retransmitir as informações para o usuário final, empregando MQTT e ainda aceitando os comandos do usuário final por meio de MQTT e iniciando a aplicação necessária em pi
(3) Executar alguns procedimentos básicos, como desligamento do pi
As etapas seguintes fornecem informações detalhadas para o diagrama de fluxo implementado no nó vermelho
Observe que os diagramas de fluxo de nó vermelho interagem com o código Python, portanto, a última parte cobre os aspectos do código Python
Etapa 7: noções básicas de Node-red
Certas etapas básicas são destacadas para iniciar o Node-red rapidamente, mas sim o node-red é muito simples para começar e trabalhar nos aplicativos.
- Iniciando Node-red: https:// localhost: 1880.
- Iniciando Node-red quando pi está conectado à internet https:// endereço ip>: 1880
Etapa 8: Nó vermelho: Fluxo _1a
O Flow _1a monitora quaisquer alterações no arquivo CSV e com base nas alterações, ou seja, impacto detectado, a gravação de vídeo da câmera é configurada para o modo ligado e, posteriormente, o usuário é informado pela Internet de que ocorreu um impacto
Etapa 9: Nó Vermelho: Fluxo_1b
Nesse fluxo, a gravação de vídeo pode ser iniciada a qualquer momento, bastando pressionar o joystick
Etapa 10: Nó vermelho: Flow_2a
Nesse fluxo, sempre que uma nova imagem ou vídeo é armazenado / carregado no diretório, a informação é retransmitida ao usuário cadastrado pela internet
Etapa 11: Nó vermelho: Flow_2b
Este fluxo é projetado principalmente para o usuário remoto, de modo a controlar o dispositivo da seguinte maneira
(a) dispositivo de desligamento
(b) tirar fotos
(c) Gravar vídeos
(d) iniciar o código principal (o código do datalogger é o código principal que calcula o impacto)
Etapa 12: Nó vermelho; Flow_3
O fluxo é projetado para acesso local, de forma a iniciar o código principal ou dispositivo de desligamento
Etapa 13: MQTT
MQTT (Message Queuing Telemetry Transport) é um protocolo TCP / IP, no qual o editor e o assinante interagem.
Em nosso caso, Pi é o editor, enquanto o aplicativo instalado em nosso moblile / PC deve ser o assinante.
Desta forma, na geração de qualquer impacto, as informações são retransmitidas remotamente para o usuário (uma conexão de Internet funcional é obrigatória)
Mais informações sobre MQTT podem ser acessadas no seguinte link: MQTT
Para começar a usar o MQTT, primeiro precisamos nos registrar, para o tutorial que usei o cloudmqtt (www.cloudmqtt.com), há um plano gratuito em "gato bonito", isso é tudo.
Depois de registrar, crie uma instância diga "pi" após a qual você obterá os seguintes detalhes
- Nome do servidor
- porta
- nome do usuário
- senha
Os itens acima são necessários durante a assinatura pelo celular / pc
Para meu aplicativo, usei o aplicativo MQTT da google play store (versão Android)
Etapa 14: MQTT: assinante
O aplicativo MQTT em execução no celular (versão Android)
O impacto detectado em pi são retransmitidos de volta
Etapa 15: MQTT: Editando Propriedades em Node-red
Em nó vermelho, após selecionar o nó MQTT, "Nome do servidor" e "tópico" a serem mencionados. Isso deve ser o mesmo na extremidade do assinante
Etapa 16: o código Python:
A funcionalidade do código é de acordo com o fluxograma anexado
Etapa 17: O Código Final
O código python está anexado
A fim de fazer nosso script python rodar a partir do terminal, precisamos torná-los executáveis como chmod + x datalogger.py, além do topo do código deve conter a seguinte linha "shebang" #! / usr / bin / python3 (isso é necessário para executar funções de node-red)
#! / usr / bin / python3 // shebang linefrom sense_hat import SenseHat de datetime import datetime from csv import writer import RPi. GPIO como GPIO from time import sleep
sense = SenseHat ()
importar csv
timestamp = datetime.now ()
atraso = 5 // o atraso é definido para armazenar dados no arquivo data.csv vermelho = (255, 0, 0) verde = (0, 255, 0) amarelo = (255, 255, 0)
# GPIO.setmode (GPIO. BCM)
# GPIO.setup (17, GPIO. OUT)
def get_sense_impact ():
sense_impact = acc = sense.get_accelerometer_raw () sense_impact.append (acc ["x"]) sense_impact.append (acc ["y"]) sense_impact.append (acc ["z"])
giroscópio = sense.get_gyroscope_raw ()
sense_impact.append (gyro ["x"]) sense_impact.append (gyro ["y"]) sense_impact.append (gyro ["z"])
return sense_impact
def impact (): // função para detectar impacto # GPIO.setmode (GPIO. BCM) # GPIO.setup (4, GPIO. OUT) acceleration = sense.get_accelerometer_raw () x = acceleration ['x'] y = acceleration ['y'] z = aceleração ['z'] x = abs (x) y = abs (y) z = abs (z)
giroscópio = sense.get_gyroscope_raw ()
gyrox = gyro ["x"] gyroy = gyro ["y"] gyroz = gyro ["z"]
girox = redondo (girox, 2)
giro = redondo (giro, 2) giro = redondo (giro, 2)
impact = get_sense_impact ()
se x> 1,5 ou y> 1,5 ou z> 1,5: // os valores são definidos após a iteração na estrada real podem ser alterados de acordo para diferentes tipos e habilidades de direção com aberto ('impact.csv', 'w', nova linha = ' ') como f: data_writer = writer (f) data_writer.writerow ([' acc x ',' acc y ',' acc z ',' giroscópio x ',' giroscópio y ',' giroscópio z ']) #GPIO. output (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", vermelho) data_writer.writerow (impacto)
elif gyrox> 1.5 or gyroy> 1.5 or gyroz> 1.5: // os valores são definidos olhando para a velocidade na qual as curvas são iniciadas com open ('impact.csv', 'w', newline = '') como f: data_writer = writer (f) data_writer.writerow (['acc x', 'acc y', 'acc z', 'giroscópio x', 'giroscópio y', 'giroscópio z']) # GPIO.output (4, GPIO. ALTO) sense.clear () sense.show_letter ("!", Verde) data_writer.writerow (impacto)
outro:
# GPIO.output (4, GPIO. LOW) sense.clear ()
def get_sense_data (): // função para registrar e armazenar valores do sensor sense_data =
sense_data.append (sense.get_temperature ()) sense_data.append (sense.get_pressure ()) sense_data.append (sense.get_humidity ())
orientação = sense.get_orientation ()
sense_data.append (orientação ["yaw"]) sense_data.append (orientação ["pitch"]) sense_data.append (orientação ["roll"])
acc = sense.get_accelerometer_raw ()
sense_data.append (acc ["x"]) sense_data.append (acc ["y"]) sense_data.append (acc ["z"]) mag = sense.get_compass_raw () sense_data.append (mag ["x"]) sense_data.append (mag ["y"]) sense_data.append (mag ["z"])
giroscópio = sense.get_gyroscope_raw ()
sense_data.append (gyro ["x"]) sense_data.append (gyro ["y"]) sense_data.append (gyro ["z"])
sense_data.append (datetime.now ())
retornar sense_data
com open ('data.csv', 'w', newline = '') como f:
data_writer = escritor (f)
data_writer.writerow (['temp', 'pres', 'hum', 'yaw', 'pitch', 'roll', 'acc x', 'acc y', 'acc z', 'mag x', ' mag y ',' mag z ',' giroscópio x ',' giroscópio y ',' giroscópio z ',' data e hora '])
enquanto verdadeiro:
print (get_sense_data ()) para o evento em sense.stick.get_events (): # Verifique se o joystick foi pressionado se event.action == "pressionado": # Verifique em qual direção se event.direction == "up": # sense.show_letter ("U") # seta para cima aceleração = sense.get_accelerometer_raw () x = aceleração ['x'] y = aceleração ['y'] z = aceleração ['z'] x = redondo (x, 0) y = redondo (y, 0) z = redondo (z, 0)
# Atualize a rotação da tela dependendo de qual caminho para cima o if x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) else: sense.set_rotation (0) sense.clear () t = sense.get_temperature () t = round (t, 1) mensagem = "T:" + str (t) sense.show_message (mensagem, text_colour = red, scroll_speed = 0.09) elif event.direction == "down": acceleration = sense.get_accelerometer_raw () x = aceleração ['x'] y = aceleração ['y'] z = aceleração ['z'] x = round (x, 0) y = redondo (y, 0) z = redondo (z, 0)
# Atualize a rotação da tela dependendo de qual caminho para cima o if x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) else: sense.set_rotation (0) # sense.show_letter ("D") # Seta para baixo sense.clear () h = sense.get_humidity () h = round (h, 1) message = "H:" + str (h) sense.show_message (message, text_colour = green, scroll_speed = 0,09) p = sense.get_pressure () p = round (p, 1) mensagem = "P:" + str (p) sense.show_message (mensagem, text_colour = amarelo, scroll_speed = 0,09)
# elif event.direction == "left":
# acceleration = sense.get_accelerometer_raw () # x = acceleration ['x'] #y = acceleration ['y'] #z = acceleration ['z'] # x = round (x, 0) # y = round (y, 0) # z = redondo (z, 0)
# Atualize a rotação da tela dependendo de qual caminho para cima // Não usado e controlado por node-red #if x == -1: sense.set_rotation (90) #elif y == 1: sense.set_rotation (270) #elif y == -1: sense.set_rotation (180) #else: sense.set_rotation (0) # sense.show_letter ("L") # Seta para a esquerda # elif event.direction == "right": # sense.show_letter ("K") # Seta para a direita # elif event.direction == "middle": # sense.clear ()
impacto()
data = get_sense_data ()
dt = data [-1] - timestamp se dt.seconds> delay: data_writer.writerow (data) timestamp = datetime.now ()
Etapa 18: monitoramento de vídeo ao vivo
O Impact Recorder também pode ser usado para monitorar o vídeo ao vivo, já que o vídeo pode ser iniciado a qualquer hora e em qualquer lugar por meio do MQTT
usaríamos o VLC player para transmitir vídeos, por padrão no último raspbian o VLC é pré-instalado, caso contrário, instale o vlc como em
Mais informações sobre a visualização do fluxo da rede podem ser acessadas através do fluxo da rede VLC
Obrigado por ler !!
O gravador de impacto pode fazer muito mais.
Cuidado com o próximo espaço para análise de campo magnético ao realizar o mapeamento de obstáculos
Recomendado:
Chaveiros para fuga de veículos de emergência: 11 etapas (com fotos)
Chave de fuga de veículos de emergência: acidentes de carro. Caramba! A melhor maneira de evitar um acidente é usar técnicas de direção segura e sempre prestar atenção para onde você está indo e para os outros carros ao seu redor. No entanto, apesar de seus melhores esforços, você não está no controle de outra unidade
Registrador de dados GPS DIY para sua próxima viagem / trilha de caminhada: 11 etapas (com fotos)
Registrador de dados GPS DIY para sua próxima viagem / trilha de caminhada: Este é um registrador de dados GPS que você pode usar para várias finalidades, digamos, se você deseja registrar sua longa viagem no fim de semana para verificar as cores do outono. ou você tem uma trilha favorita que visita durante o outono todos os anos e você vai
Sensor / medidor de temperatura do motor com sonda sem fio para veículos clássicos: 7 etapas
Sensor / medidor de temperatura do motor com sonda sem fio para veículos clássicos: Fiz esta sonda para o meu adorável Çipitak. Um carro fiat 126 com um motor de 2 cilindros refrigerado a ar sob o capô traseiro.Çipitak não tem medidor de temperatura mostrando o quão quente o motor está, então pensei que um sensor seria útil. Também queria que o sensor fosse de fio
Como fazer um registrador de dados para temperatura, pH e oxigênio dissolvido: 11 etapas (com fotos)
Como fazer um registrador de dados para temperatura, pH e oxigênio dissolvido: Objetivos: Fazer um registrador de dados ≤ $ 500. Ele armazena dados de temperatura, pH e OD com um carimbo de data / hora e usando comunicação I2C. Por que I2C (circuito integrado)? Pode-se empilhar tantos sensores na mesma linha, dado que cada um deles tem
Sistema anti-roubo GPS + GPRS para veículos baseado em Arduino completo: 5 etapas (com imagens)
Sistema anti-roubo GPS + GPRS para veículos baseado em Arduino completo: Olá a todos! Eu queria construir uma solução completa para um dispositivo anti-roubo GPS para veículos, que seria: o mais barato possível, o mais completo possível, pois ele simplesmente funciona -não há mais nada a fazer possível Então, acabei construindo uma solução baseada em Arduino