Índice:

Rastreie e rastreie para pequenas lojas: 9 etapas (com fotos)
Rastreie e rastreie para pequenas lojas: 9 etapas (com fotos)
Anonim
Rastreie e rastreie para pequenas lojas
Rastreie e rastreie para pequenas lojas

Este é um sistema feito para pequenas lojas que devem ser montadas em e-bikes ou e-scooters para entregas de curta distância, por exemplo, uma padaria que deseja entregar doces.

O que significa Track and Trace?

Track and trace é um sistema usado por transportadoras ou empresas de courier para registrar a movimentação de pacotes ou itens durante o transporte. Em cada local de processamento, as mercadorias são identificadas e os dados retransmitidos para o sistema de processamento central. Esses dados são então usados para fornecer status / atualização da localização das mercadorias aos remetentes.

O sistema que faremos também mostrará a rota percorrida e a quantidade de choques e solavancos recebidos. Este instructables também pressupõe que você tenha um conhecimento básico de raspberry pi, python e mysql.

nota: isso foi feito para um projeto escolar, portanto, devido à limitação de tempo, há muito espaço para melhorias

Suprimentos

-Raspberry Pi 4 modelo B

-Raspberry PI T-cobbler

-4x 3, baterias de íon-lítio de 7 V

-2x porta-bateria duplo

- Conversor Abaixador DC Buck 5v

-2x grandes leds laranja

- interruptor liga / desliga / liga

-botão

-adafruit ultimate gps v3

-mpu6050

Display lcd 16x2

- motor servo

Etapa 1: Alimentação do circuito e Pi

Alimentação do circuito e Pi
Alimentação do circuito e Pi
Alimentação do circuito e Pi
Alimentação do circuito e Pi

Quando se trata de alimentar o circuito pi com uma bateria, você tem algumas opções de como fazê-lo.

Você poderia usar um powerbank e alimentar o pi via USB, talvez esteja montando o dispositivo em uma e-bike ou e-scooter com porta USB, talvez você tenha uma bateria de telefone de 5 V esperando para ser usada ou você poderia usar 2 conjuntos de baterias de 3,7 V em paralelo com um conversor redutor, como mostrado nas fotos

Tudo está bem, desde que possa fornecer 5 V contínuos e tenha uma vida útil na qual você esteja feliz.

Etapa 2: O MPU6050

O MPU6050
O MPU6050

Introdução O módulo sensor MPU6050 é um dispositivo de rastreamento de movimento de 6 eixos integrado.

  • Tem um giroscópio de 3 eixos, acelerômetro de 3 eixos, processador de movimento digital e um sensor de temperatura, tudo em um único IC.
  • Vários parâmetros podem ser encontrados lendo valores de endereços de certos registros usando comunicação I2C. Leitura de giroscópio e acelerômetro ao longo dos eixos X, Y e Z estão disponíveis na forma de complemento de 2.
  • As leituras do giroscópio são em unidades de graus por segundo (dps); As leituras do acelerômetro são em unidades g.

Habilitando I2C

Ao usar um MPU6050 com um Raspberry Pi, devemos garantir que o protocolo I2C no Raspberry Pi esteja ativado. Para fazer isso, abra o terminal do pi por meio de massa ou outro software e faça o seguinte:

  1. digite "sudo raspi-config"
  2. Selecione Configurações de Interface
  3. Na opção de interface, selecione "I2C"
  4. Habilitar configuração I2C
  5. Selecione Sim quando for solicitado a reinicializar.

Agora, podemos testar / escanear qualquer dispositivo I2C conectado à nossa placa Raspberry Pi instalando ferramentas i2c. Podemos obter ferramentas i2c usando o gerenciador de pacotes apt. Use o seguinte comando no terminal Raspberry Pi.

"sudo apt-get install -y i2c-tools"

Agora conecte qualquer dispositivo baseado em I2C à porta de modo de usuário e faça a varredura dessa porta usando o seguinte comando, "sudo i2cdetect -y 1"

Em seguida, ele responderá com o endereço do dispositivo.

Se nenhum endereço for retornado, certifique-se de que o MPU6050 está conectado corretamente e tente novamente

Fazendo funcionar

agora que temos certeza que o i2c está habilitado e o pi pode alcançar o MPU6050, vamos instalar uma biblioteca usando o comando "sudo pip3 install adafruit-circuitpython-mpu6050".

se fizermos um arquivo de teste Python e usarmos o seguinte código, podemos ver se está funcionando:

tempo de importação

placa de importação

importar busi

oimport adafruit_mpu6050

i2c = busio. I2C (placa. SCL, placa. SDA)

mpu = adafruit_mpu6050. MPU6050 (i2c)

enquanto verdadeiro:

print ("Aceleração: X:%. 2f, Y:%.2f, Z:%.2f m / s ^ 2"% (mpu.acceleration))

print ("Gyro X:%. 2f, Y:%.2f, Z:%.2f degrees / s"% (mpu.gyro))

print ("Temperatura:%.2f C"% mpu.temperatura)

imprimir("")

tempo.sono (1)

quando agora queremos a aceleração no eixo X / Y / Z, podemos usar o seguinte:

accelX = mpu.acceleration [0] accelY = mpu.acceleration [1] accelZ = mpu.acceleration [2]

combinando isso com uma instrução if simples em um loop constante, podemos contar a quantidade de choques em uma viagem

Passo 3: O Adafruit Ultimate Breakout GPS

O Adafruit Ultimate Breakout GPS
O Adafruit Ultimate Breakout GPS

Introdução

O breakout é construído em torno do chipset MTK3339, um módulo GPS prático e de alta qualidade que pode rastrear até 22 satélites em 66 canais, tem um excelente receptor de alta sensibilidade (-165 dB de rastreamento!) E uma antena embutida. Ele pode fazer até 10 atualizações de localização por segundo para alta velocidade, registro ou rastreamento de alta sensibilidade. O consumo de energia é incrivelmente baixo, apenas 20 mA durante a navegação.

A placa vem com: um regulador de queda ultrabaixa de 3,3 V para que você possa alimentá-la com 3,3-5 VCC, entradas seguras de nível 5 V, O LED pisca a cerca de 1 Hz enquanto está procurando por satélites e pisca uma vez a cada 15 segundos quando uma correção é encontrado para conservar energia.

Testando GPS com Arduino

Se você tiver acesso a um arduino, é uma boa ideia testar o módulo com ele.

Conecte o VIN ao + 5VConnect GND ao GroundConnect GPS RX (dados no GPS) ao Digital 0Connect GPS TX (dados de saída do GPS) ao Digital 1

Basta executar um código de arduino em branco e abrir o monitor serial em 9600 baud. Se você obtiver dados GPS, seu módulo GPS funcionará. Observação: se seu módulo não for corrigido, tente colocá-lo por uma janela ou em um terraço.

Fazendo funcionar

Comece a instalar a biblioteca adafruit gps usando o comando "sudo pip3 install adafruit-circuitpython-gps".

Agora podemos usar o seguinte código Python para ver se podemos fazer funcionar:

import timeimport board import busioimport adafruit_gpsimport serial uart = serial. Serial ("/ dev / ttyS0", baudrate = 9600, tempo limite = 10)

gps = adafruit_gps. GPS (uart, debug = False) gps.send_command (b'PMTK314, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ') gps.send_command (b'PMTK220, 1000')

enquanto verdadeiro:

gps.update () embora não gps.has_fix:

print (gps.nmea_sentence) print ('Aguardando correção…') gps.update () time.sleep (1) continuar

print ('=' * 40) # Imprime um separador line.print ('Latitude: {0:.6f} graus'.format (gps.latitude)) print (' Longitude: {0:.6f} graus'.format (gps.longitude)) print ("Corrigir qualidade: {}". format (gps.fix_quality))

# Alguns atributos além de latitude, longitude e carimbo de data / hora são opcionais # e podem não estar presentes. Verifique se eles são Nenhum antes de tentar usar! Se gps.satellites não for Nenhum:

imprimir ("# satélites: {}". formato (gps.satellites))

se gps.altitude_m não for Nenhum:

print ("Altitude: {} metros".format (gps.altitude_m))

se gps.speed_knots não for Nenhum:

print ("Velocidade: {} nós".format (gps.speed_knots))

se gps.track_angle_deg não for Nenhum:

print ("Track angle: {} degrees".format (gps.track_angle_deg))

se gps.horizontal_dilution não for Nenhum:

print ("Diluição horizontal: {}". formato (gps.horizontal_dilution))

se gps.height_geoid não for Nenhum:

print ("ID geo de altura: {} metros".format (gps.height_geoid))

tempo.sono (1)

Etapa 4: O LCD 16x2

O LCD 16x2
O LCD 16x2

Introdução

Módulos LCD são muito comumente usados na maioria dos projetos embarcados, o motivo é seu preço barato, disponibilidade e programador amigável. A maioria de nós teria se deparado com esses monitores em nossa vida cotidiana, seja no PCO ou nas calculadoras.16 × 2 LCD é assim chamado porque; possui 16 colunas e 2 linhas. Existem várias combinações disponíveis, como 8 × 1, 8 × 2, 10 × 2, 16 × 1, etc., mas a mais usada é o LCD 16 × 2. Portanto, terá (16 × 2 = 32) 32 caracteres no total e cada personagem será composto de 5 × 8 Pixel Dots.

Instalando smbus

O System Management Bus (SMBus) é mais ou menos um derivado do barramento I2C. O padrão foi desenvolvido pela Intel e agora é mantido pelo SBS Forum. A principal aplicação do SMBus é monitorar parâmetros críticos em placas-mãe de PC e em sistemas embarcados. Por exemplo, há muitos monitores de tensão de alimentação, monitor de temperatura e ICs de monitor / controle de ventilador com uma interface SMBus disponível.

A biblioteca que usaremos requer que o smbus também seja instalado. Para instalar o smbus no rpi, use o comando "sudo apt install python3-smbus".

Fazendo funcionar

primeiro instale a biblioteca RPLCD usando o comando "sudo pip3 install RPLCD".

agora testamos o lcd exibindo o ip usando o seguinte código:

de RPLCD.i2c import CharLCDimport socket

def get_ip_address ():

ip_address = '' s = socket.socket (socket. AF_INET, socket. SOCK_DGRAM) s.connect (("8.8.8.8", 80)) ip_address = s.getsockname () [0] s.close () return ip_address

lcd = CharLCD ('PCF8574', 0x27)

lcd.write_string ('endereço IP: / r / n' + str (get_ip_address ()))

Etapa 5: Servo, Leds, Botão e Switch

Servo, Leds, Botão e Switch
Servo, Leds, Botão e Switch

Introdução

Um servo motor é um atuador rotativo ou motor que permite um controle preciso em termos de posição angular, aceleração e velocidade, capacidades que um motor normal não possui. Ele faz uso de um motor normal e o emparelha com um sensor para feedback de posição. O controlador é a parte mais sofisticada do servo motor, pois é projetado especificamente para essa finalidade.

LED abreviação de diodo emissor de luz. Dispositivo semicondutor eletrônico que emite luz quando uma corrente elétrica passa por ele. Eles são consideravelmente mais eficientes do que as lâmpadas incandescentes e raramente queimam. Os LEDs são usados em muitas aplicações, como monitores de vídeo de tela plana e, cada vez mais, como fontes gerais de luz.

Um botão ou simplesmente botão é um mecanismo de interruptor simples para controlar algum aspecto de uma máquina ou processo. Os botões são normalmente feitos de material rígido, geralmente plástico ou metal.

Um interruptor liga / desliga / liga tem 3 posições, onde o meio é o estado desligado; esses tipos são usados principalmente para controle de motor simples, onde você tem um estado para frente, desligado e reverso.

Fazendo funcionar: o servo

O servo usa um sinal PWM para determinar em que ângulo ele precisa estar, felizmente para nós GPIO tem esse recurso embutido. Portanto, podemos simplesmente usar o seguinte código para controlar o servo: import RPi. GPIO as GPIOimport time

servo_pin = 18duty_cycle = 7.5

GPIO.setmode (GPIO. BCM)

GPIO.setup (servo_pin, GPIO. OUT)

pwm_servo = GPIO. PWM (servo_pin, 50) pwm_servo.start (duty_cycle)

enquanto verdadeiro:

duty_cycle = float (input ("Enter Duty Cycle (Left = 5 to Right = 10):")) pwm_servo. ChangeDutyCycle (duty_cycle)

Fazendo funcionar: o led e o switch

Devido à forma como conectamos os leds e o interruptor, não precisamos controlar ou ler os leds e trocar a si mesmo. Simplesmente enviamos pulsos para o botão que, por sua vez, direcionará o sinal para o led que desejamos.

Fazendo funcionar: o botão

Para o botão, faremos nossa própria classe simples desta maneira, facilmente veremos quando ele é pressionado, sem precisar adicionar uma detecção de evento a ele cada vez que o usarmos. Faremos o arquivo classbutton.py usando o seguinte código:

de RPi import GPIOclass Button:

def _init _ (self, pin, bouncetime = 200): self.pin = pin self.bouncetime = bouncetime GPIO.setmode (GPIO. BCM) GPIO.setup (pin, GPIO. IN, GPIO. PUD_UP) @property def pressionado (self):

ingedrukt = GPIO.input (self.pin) return not ingedrukt

def on_press (self, call_method):

GPIO.add_event_detect (self.pin, GPIO. FALLING, call_method, bouncetime = self.bouncetime)

def on_release (self, call_method):

GPIO.add_event_detect (self.pin, GPIO. RISING, call_method, bouncetime = self.bouncetime)

Etapa 6: O circuito completo

O Circuito Completo
O Circuito Completo
O Circuito Completo
O Circuito Completo

Agora que examinamos todos os componentes, é hora de combiná-los.

Enquanto as imagens mostram os componentes mostram tudo na placa de ensaio em si, é melhor ter o lcd, GPS adafruit e botão conectado usando fios fêmea para macho. Apenas tenha o t-cobbler e o mpu6050 em uma placa de ensaio. use fios mais longos para ter certeza de que consegue alcançar as barras intermitentes e a barra de direção.

Etapa 7: O Código

Para manter esta instrução limpa, eu forneci um repositório github com os arquivos de backend e frontend. Basta colocar os arquivos na pasta frontend na pasta / var / www / html e os arquivos na pasta backend em uma pasta em / home / Pasta [nome de usuário] / [nome da pasta]

Etapa 8: o banco de dados

O banco de dados
O banco de dados

Devido à forma como este sistema é configurado, há uma loja online simples configurada usando uma lista de produtos em um banco de dados, além disso, temos todos os pontos de caminho e pedidos salvos aqui. Um script de criação pode ser encontrado no repositório github vinculado no Próxima Etapa

Etapa 9: o caso

O caso
O caso

Assim que conhecermos o funcionamento da eletrônica, podemos colocá-los em uma caixa. Você pode ter alguma liberdade criativa com isso. Antes de construí-lo, basta pegar uma caixa de papelão que você não precisa mais, como uma caixa de cereal vazia, por exemplo, e cortá-la, colá-la e dobre-a até ter algo de que goste. Meça e desenhe sua caixa em um pedaço de papel e faça-a de um material mais resistente como madeira ou, se não for sua opção, imprima-a em 3D. Apenas certifique-se de que todos os componentes eletrônicos cabem dentro e você tem orifícios para o botão, o fio que vai para o interruptor, os leds e o lcd. Depois de fazer sua capa, é só uma questão de encontrar uma maneira de montá-la em sua bicicleta ou scooter.

Recomendado: