Índice:

Módulo de rastreamento para ciclistas: 5 etapas
Módulo de rastreamento para ciclistas: 5 etapas

Vídeo: Módulo de rastreamento para ciclistas: 5 etapas

Vídeo: Módulo de rastreamento para ciclistas: 5 etapas
Vídeo: 10 Funções SECRETAS do WAZE que Você Precisa Conhecer! 2024, Julho
Anonim
Módulo de rastreamento para ciclistas
Módulo de rastreamento para ciclistas

Este módulo de rastreamento para ciclistas é um módulo que detecta automaticamente colisões em uma corrida e que detecta uma avaria mecânica ao tocar um sensor de toque. Quando um desses eventos acontece, o módulo envia o evento para um banco de dados em um raspberry pi via LoRa. Este evento será mostrado em um display LCD e em um site. Você também pode pesquisar no site por uma corrida de ciclismo específica com os eventos e adicionar corridas de ciclismo ou ciclistas ao banco de dados. Fiz este projeto porque tenho muito interesse em Ciclismo e IOT, então combinar esses dois assuntos foi muito emocionante para mim.

Antes de fazer um módulo de rastreamento para ciclistas, você precisa coletar seus materiais. Você pode encontrar as ferramentas e suprimentos nas listas abaixo, ou você pode baixar o BOM (Build Of Materials).

Suprimentos:

  • vidro plexi (56 mm x 85 mm)
  • Parafusos 10 x 2M de 10 mm e porcas
  • Parafusos 10 x 3M de 10 mm e porcas
  • 2 parafusos X 3M de 50 mm e porcas
  • PLA Filament para imprimir em 3D sua caixa de LCD
  • termoretráctil
  • Cabos macho para fêmea
  • Um PCB básico
  • Cabeçalhos masculinos
  • A Raspberry Pi 3b +
  • Um cartão SD de 16GB
  • Um LCD sparkfun 4X20
  • Um sensor de toque capacitivo
  • Uma campainha
  • Um acelerador de 3 eixos + giroscópio
  • Um módulo GPS
  • Uma placa SODAQ Mbili
  • Um módulo LoRa WAN
  • Uma bateria 3,7V 1000mAh
  • Uma fonte de alimentação Raspberry Pi 3b +

Ferramentas:

  • Lata de solda
  • Ferro de solda
  • Pinças
  • Chaves de fenda
  • Serra de vaivém
  • Furadeira
  • Brocas 2,5 e 3,5
  • Isqueiro / pistola de ar quente

Se você precisar comprar todos os suprimentos, precisará de um orçamento de 541,67 €. Este projeto é muito caro porque usei um kit de desenvolvimento LoRa rappid que custa € 299 (tive a oportunidade de usar este kit da minha escola). Você sempre pode usar um Arduino normal e economizar muito dinheiro, mas os programas serão diferentes então.

Etapa 1: Esquema de Fritzing

Esquema de Fritzing
Esquema de Fritzing
Esquema de Fritzing
Esquema de Fritzing

O primeiro passo é construir os circuitos. Para este projeto, temos 2 circuitos elétricos, um com um Raspberry Pi e outro com uma placa SADAQ Mbili. Começaremos com o circuito Raspberry Pi.

Esquema Raspberry Pi Fritzing:

O esquema do Raspberry Pi é bastante simples, a única coisa que conectamos com o Pi é um display LCD Sparkfun 4X20. O Display funciona com comunicação serial, SPI ou I2C. O protocolo de comunicação que você usa depende de você. Usei o protocolo SPI porque é muito simples. Se você usa o SPI como eu, precisa das seguintes conexões:

  • VCC LCD VCC Raspberry Pi
  • GND LCD GND Raspberry Pi
  • SDI LCD MOSI (GPIO 10) Raspberry Pi
  • SDO LCD MISO (GPIO 9) Raspberry Pi
  • SCK LCD SCLK (GPIO 11) Raspberry Pi
  • CS LCD CS0 (GPIO 8) Raspberry Pi

No esquema Fritzing, você verá que o display LCD é um display 2X16. Isso ocorre porque eu não encontrei um LCD 4X20 em frizz. No entanto, todas as conexões são algumas, então isso realmente não importa.

Esquema SODAQ Mbili Fritzing:

Iremos conectar 4 componentes eletrônicos com a placa SODAQ Mbili, então este esquema elétrico também é muito simples. Começaremos com a conexão do sensor de toque Capactive. O pino de SAÍDA deste sensor será ALTO quando o sensor for tocado e, caso contrário, estará BAIXO. Isso significa que o pino OUT é uma saída digital que podemos conectar com uma entrada digital da placa Mbili. As conexões são as seguintes:

  • Sensor de toque OUT D5 Mbili
  • Sensor de toque VCC 3.3V Mbili
  • GND Touch sensor GND Mbili

O segundo componente é o sensor Triplo acces + giroscópio. Usei a placa GY-521 que usa o protocolo I2C para se comunicar com a placa Mbili. Observe que o pino AD0 da placa GY-521 precisa ser conectado ao VCC da placa Mbili! Isso ocorre porque a placa Mbili possui um clock com o mesmo endereço I2C da GY-521. Ao conectar o pino AD0 ao VCC, mudamos o endereço I2C da GY-521. As conexões são as seguintes:

  • VCC GY-521 3,3 V Mbili
  • GND GY-521 GND Mbili
  • SCL GY-521 SCL Mbili
  • SDA GY-521 SDA Mbili
  • AD0 GY-521 3,3 V Mbili

Depois disso, conectaremos o Buzzer. Eu uso a campainha padrão que emite um som quando há uma corrente. Isso significa que podemos simplesmente conectar a campainha a um pino digital da placa Mbili. As conexões são as seguintes:

  • + Buzzer D4 Mbili
  • - Buzzer GND Mbili

Por último, mas não menos importante, conectaremos o módulo GPS. O módulo GPS se comunica via RX e TX. As conexões são as seguintes:

  • VCC GPS 3.3V Mbili
  • GND GPS GND Mbili
  • TX GPS RX Mbili
  • RX GPS TX Mbili

Etapa 2: banco de dados normalizado

Banco de dados normalizado
Banco de dados normalizado

A segunda etapa é projetar um banco de dados normalizado. Eu projetei meu ERD em Mysql. Você verá que meu banco de dados está escrito em holandês, explicarei as tabelas aqui.

Tabela 'ploeg':

Esta tabela é uma tabela para os clubes de ciclismo. Ele contém um ID do clube de ciclismo e um nome do clube de ciclismo.

Tabela 'renners':

Esta tabela é uma tabela para os ciclistas. Cada ciclista tem um LoRaID que também é a chave primária da tabela. Eles também têm um sobrenome, nome, país de origem e um ID do clube de ciclismo que está vinculado à tabela do clube de ciclismo.

Tabela 'plaatsen':

Esta tabela é uma tabela que armazena os locais na Bélgica onde uma corrida de ciclismo pode acontecer. Contém o nome da cidade (que é a chave primária) e a província onde a cidade está situada.

Tabela 'wedstrijden':

Esta tabela armazena todas as corridas de ciclismo. A chave primária da tabela é um ID. A tabela também contém o nome da corrida de ciclismo, a cidade da corrida que está associada à tabela de lugares, a distância da corrida, a categoria dos ciclistas e a data da corrida.

Tabela 'gebeurtenissen':

Esta tabela armazena todos os eventos que acontecem. Isso significa que, quando um ciclista se envolve em uma colisão ou tem uma pane mecânica, o evento será armazenado nesta tabela. A chave primária da tabela é um ID. A tabela também contém a data e hora do evento, a latitude da posição, a longitude da posição, o LoRaID do ciclista e o tipo de evento (colisão ou avaria mecânica).

Tabela 'wedstrijdrenner':

Esta tabela é necessária para um relacionamento muitos para muitos.

Etapa 3: registre seu módulo LoRa

Registre Seu Módulo LoRa
Registre Seu Módulo LoRa

Antes de começar com o código, você precisa registrar seu módulo LoRa em um gateway LoRa. Usei uma empresa de telecomunicações na Bélgica chamada 'Proximus' que organiza a comunicação para o meu módulo LoRa. Os dados que envio com meu nó LoRa são coletados no site da AllThingsTalk. Se você também deseja usar a API AllThingsTalk para coletar seus dados, você pode se registrar aqui.

Depois de se registrar no AllThingsTalk, você precisa registrar seu nó LoRa. Para fazer isso, você pode seguir estes passos ou você pode olhar na imagem acima.

  1. Vá em 'Dispositivos' no menu principal
  2. Clique em 'Novo Dispositivo'
  3. Selecione o seu nó LoRa
  4. Preencha todas as chaves.

Agora você está pronto! Todos os dados que você enviar com seu nó LoRa aparecerão em seu fabricante AllThingsTalk. Se você tiver qualquer problema com o registro, pode sempre consultar a documentação do AllThingsTalk.

Etapa 4: O Código

O código
O código
O código
O código
O código
O código
O código
O código

Para este projeto, precisaremos de 5 linguagens de codificação: HTML, CSS, Java Script, Python (Flask) e a linguagem Arduino. Primeiro vou explicar o programa Arduino.

O programa Arduino:

No início do programa, declaro algumas Variáveis Globais. Você verá que uso SoftwareSerial para a conexão com meu GPS. Isso ocorre porque a placa Mbili possui apenas 2 portas seriais. Você pode conectar o GPS ao Serial0, mas não poderá usar o terminal Arduino para depuração. Esta é a razão pela qual uso um SoftwareSerial.

Após as Variáveis Globais, declaço algumas funções que facilitam a leitura do programa. Eles lêem as coordenadas do GPS, fazem a campainha soar, enviam valores via LoRa, …

O terceiro bloco é o bloco de configuração. Este bloco é o início do programa que configura os pinos, a comunicação serial e a comunicação I2C.

Após o bloco de configuração, vem o programa principal. No início deste loop principal, eu verifico se o touchsensor está ativo. Em caso afirmativo, faço soar a campainha, obtenho os dados do GPS e envio todos os valores via LoRa ou Bluetooth para o Raspberry PI. Após o sensor de toque, li os valores do acelerômetro. Com uma fórmula, calculo o ângulo exato dos eixos X e Y. Se esses valores forem muito grandes, podemos concluir que o ciclista caiu. Quando ocorre um travamento, torno a tocar a campainha, pego os dados do GPS e envio todos os valores via LoRa ou Bluetooth para o Raspberry PI.

Você provavelmente está pensando: 'Por que você usa bluetooth e LoRa?'. Isso ocorre porque tive alguns problemas com a licença do módulo LoRa que usei. Então, para fazer o programa funcionar nas minhas demos, tive que usar o Bluetooth por um tempo.

2. O back-end:

O back-end é um pouco complexo. Eu uso o Flask para as minhas rotas que são acessíveis para o front end, eu uso o socketio para atualizar algumas das páginas do front end automaticamente, eu uso os pinos GPIO para mostrar mensagens em um display LCD e receber mensagens via Bluetooth (não necessário se você usar LoRa) e eu uso Threading e Timers para ler regularmente a API AllThinksTalk e iniciar o servidor de flask.

Eu também uso o banco de dados SQL para armazenar todos os acidentes de percurso, ler os dados pessoais dos ciclistas e os dados das corridas. Este banco de dados está conectado ao back-end e também roda no Raspberry Pi. Eu uso uma classe 'Database.py' para interagir com o banco de dados.

Como você sabe do esquema Fritzing, o lcd é conectado ao Raspberry Pi por meio do protocolo SPI. Para tornar um pouco mais fácil, escrevi uma classe 'LCD_4_20_SPI.py'. Com esta classe você pode alterar o contraste, alterar a cor da luz de fundo, escrever mensagens na tela,…. Se quiser usar o Bluetooth, você pode usar a classe 'SerialRaspberry.py'. Esta classe rege a comunicação serial entre o módulo Bluetooth e o Raspberry Pi. A única coisa que você precisa fazer é conectar um módulo Bluetooth ao Raspberry Pi conectando o RX ao TX e vice-versa.

As rotas para o front end são escritas com a regra @ app.route. Aqui você pode fazer sua própria rota personalizada para inserir ou obter dados de ou para o banco de dados. Certifique-se de sempre ter uma resposta no final do percurso. Sempre retorno um objeto JSON ao front end, mesmo quando ocorre um erro. Você pode usar uma variável no url colocando ao redor da variável.

Eu uso o socketio para a página da web com travamentos de uma corrida. Quando o Raspberry Pi falha, emito uma mensagem para o front end via socketio. O front end sabe que deve ler o banco de dados novamente porque ocorreu um novo travamento.

Você verá que no meu código as comunicações LoRa são definidas no comando. Se você quiser usar LoRa, você precisa iniciar um cronômetro que envia uma solicitação repetitiva para a API AllThinksTalk. A partir desta API, você receberá os valores do sensor (GPS, tempo, tipo de falha) que são enviados por um nó LoRa específico. Você pode usar esses valores para inserir uma falha no banco de dados.

3. A extremidade da folhagem:

A extremidade da folhagem consiste em 3 idiomas. HTML para o texto do site, CSS para a marcação do site e JavaScript para a comunicação com o back end. Tenho 4 páginas de site para este projeto:

  • O index.html onde você pode encontrar todas as corridas de ciclismo.
  • Uma página com todos os travamentos e avarias mecânicas para uma corrida especial.
  • Uma página onde você pode adicionar cilindros ao banco de dados e editar sua equipe.
  • Uma página onde você pode adicionar uma nova corrida com todos os seus participantes ao banco de dados.

Como você os projeta depende totalmente de você. Você pode se inspirar no meu site se quiser. Infelizmente meu site é feito em holandês, sinto muito por isso.

Tenho um arquivo CSS separado e um arquivo JavaScript para cada página. Todo arquivo JavaScript usa fetch para obter os dados do banco de dados por meio do back end. Quando o script recebe os dados, o html muda dinamicamente. Na página onde você pode encontrar as falhas e quebras mecânicas, você encontrará um mapa onde todos os eventos aconteceram. Usei folheto para mostrar este mapa.

Você pode ver todos os meus códigos aqui no meu Github.

Etapa 5: construir as construções

Construir as construções
Construir as construções
Construir as construções
Construir as construções
Construir as construções
Construir as construções

Antes de iniciarmos a construção, certifique-se de ter todos os materiais da lista de materiais ou da página 'Ferramentas + suprimentos'.

Raspberry Pi + LCD

Começaremos com o case do Raspberry Pi. Você sempre pode imprimir um caso em 3D, essa também foi minha primeira ideia. Mas como meu prazo estava muito próximo, decidi fazer um caso simples. Peguei a caixa padrão do Raspberry Pi e fiz um orifício na caixa para os fios do meu monitor LCD. Para fazer isso, basta seguir estas etapas simples:

  1. Faça um furo na tampa da caixa. Fiz isso com uma broca de 7 mm na lateral da tampa. Você pode ver isso na imagem acima.
  2. Pegue os fios do display LCD e deslize uma cabeça encolhida sobre os fios.
  3. Use um isqueiro ou uma pistola de ar quente para fazer o encolhimento da cabeça encolher.
  4. Puxe os fios com o encolhimento da cabeça através do orifício na caixa e conecte-os de volta no LCD.

Agora que você está pronto com o case do Raspberry Pi, pode começar com o case do display LCD. Imprimi em 3D a caixa do meu monitor LCD porque encontrei uma caixa online neste link. Eu só tive que fazer uma pequena mudança na altura da caixa. Quando você achar que está desenhando bem, pode exportar os arquivos e começar a imprimir. Se você não sabe como imprimir em 3D, você pode seguir as instruções sobre como imprimir em 3D com o fusion 360.

Construção SODAQ MBili

Eu realmente não defendi a placa SODAQ Mbili. Usei um vidro plexi para colocar meus componentes sem uma caixa em volta da construção. Se você também quiser fazer isso, siga estas etapas:

  1. Assine o plexiglass com as dimensões da placa SODAQ Mbili. As dimensões são: 85 mm X 56 mm
  2. Corte o acrílico com um quebra-cabeças.
  3. Coloque os componentes eletrônicos no plexiglass e feche os buracos com um lápis.
  4. Faça os furos que você acabou de assinar e os furos para os espaçadores com uma broca de 3,5 mm.
  5. Monte todos os componentes eletrônicos no plexiglass com os parafusos e porcas 3M de 10 mm.
  6. A última etapa é montar o plexiglass acima da placa Mbili. Você pode fazer isso com espaçadores, mas usei dois parafusos 3M 50 mm e 8 porcas 3M para montar o acrílico acima da placa.

Recomendado: