Spisu treści:

Track&trace dla małych sklepów: 9 kroków (ze zdjęciami)
Track&trace dla małych sklepów: 9 kroków (ze zdjęciami)

Wideo: Track&trace dla małych sklepów: 9 kroków (ze zdjęciami)

Wideo: Track&trace dla małych sklepów: 9 kroków (ze zdjęciami)
Wideo: Oceniam Sklepy Widzów - Co Warto Wypróbować, a Czego Unikać? 2024, Listopad
Anonim
Track&trace dla małych sklepów
Track&trace dla małych sklepów

Jest to system stworzony z myślą o małych sklepach, które mają montować na e-rowerach lub e-skuterach w przypadku dostaw o krótkim zasięgu, na przykład piekarni, która chce dostarczać ciastka.

Co oznacza śledzenie i śledzenie?

Track and trace to system wykorzystywany przez przewoźników lub firmy kurierskie do rejestrowania ruchu paczek lub przedmiotów podczas transportu. W każdym miejscu przetwarzania towar jest identyfikowany, a dane przekazywane do centralnego systemu przetwarzania. Dane te są następnie wykorzystywane do nadania statusu/aktualizacji lokalizacji towarów spedytorom.

System, który stworzymy, pokaże również przebytą trasę i ilość otrzymanych wstrząsów i wstrząsów. Ta instrukcja zakłada również, że masz podstawową wiedzę na temat raspberry pi, python i mysql.

uwaga: zostało to wykonane na potrzeby szkolnego projektu, więc ze względu na ograniczenia czasowe jest dużo miejsca na ulepszenia

Kieszonkowe dzieci

-Malina Pi 4 model B

-Malinowy PI T-szewc

-4x 3,7 V akumulatory litowo-jonowe

-2x podwójny uchwyt baterii

-Konwerter obniżający napięcie DC Buck 5v

-2x duże pomarańczowe diody LED

-włącz/wyłącz/włącz

-przycisk

-adafruit ostateczny gps v3

-mpu6050

-16x2 wyświetlacz lcd;

-siłownik

Krok 1: Zasilanie obwodu i Pi

Zasilanie obwodu i Pi
Zasilanie obwodu i Pi
Zasilanie obwodu i Pi
Zasilanie obwodu i Pi

Jeśli chodzi o zasilanie obwodu pi baterią, masz kilka opcji, jak to zrobić.

Możesz użyć powerbanku i zasilać pi przez USB, może montujesz urządzenie na e-roweru lub e-skuterze, który ma port USB, być może masz baterię telefonu 5 V, która czeka na użycie lub możesz użyć 2 zestawy akumulatorów 3,7 V równolegle z konwerterem obniżającym napięcie, jak pokazano na zdjęciach;

Wszystko jest w porządku, o ile może zapewnić ciągłe 5 V i ma żywotność, z której jesteś zadowolony.

Krok 2: MPU6050

MPU6050
MPU6050

WprowadzenieModuł czujnika MPU6050 to zintegrowane 6-osiowe urządzenie do śledzenia ruchu.

  • Posiada 3-osiowy żyroskop, 3-osiowy akcelerometr, cyfrowy procesor ruchu i czujnik temperatury, wszystko w jednym układzie scalonym.
  • Różne parametry można znaleźć, odczytując wartości z adresów niektórych rejestrów za pomocą komunikacji I2C. Odczyty żyroskopu i akcelerometru wzdłuż osi X, Y i Z są dostępne w postaci uzupełnienia do dwóch.
  • Odczyty żyroskopu są wyrażone w stopniach na sekundę (dps); Odczyty akcelerometru podane są w jednostkach g.

Włączanie I2C

Używając MPU6050 z Raspberry Pi, powinniśmy upewnić się, że protokół I2C na Raspberry Pi jest włączony. Aby to zrobić otwórz terminal pi przez putty lub inne oprogramowanie i wykonaj następujące czynności:

  1. wpisz "sudo raspi-config"
  2. Wybierz konfiguracje interfejsu
  3. W opcji interfejsu wybierz „I2C”
  4. Włącz konfigurację I2C
  5. Wybierz Tak, gdy pojawi się prośba o ponowne uruchomienie.

Teraz możemy testować/skanować w poszukiwaniu dowolnego urządzenia I2C podłączonego do naszej płyty Raspberry Pi, instalując narzędzia i2c. Możemy uzyskać narzędzia i2c za pomocą menedżera pakietów apt. Użyj następującego polecenia w terminalu Raspberry Pi.

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

Teraz podłącz dowolne urządzenie oparte na I2C do portu trybu użytkownika i zeskanuj ten port za pomocą następującego polecenia, "sudo i2cdetect -y 1"

Następnie odpowie adresem urządzenia.

Jeśli adres nie zostanie zwrócony, upewnij się, że MPU6050 jest prawidłowo podłączony i spróbuj ponownie

Sprawiając, że to działa

teraz, gdy jesteśmy pewni, że i2c jest włączone, a pi może dotrzeć do MPU6050, zainstalujemy bibliotekę za pomocą polecenia „sudo pip3 install adafruit-circuitpython-mpu6050”.

jeśli zrobimy plik testowy Pythona i użyjemy następującego kodu, możemy sprawdzić, czy działa:

czas importu

importuj tablicę

importuj firmę

oimportuj adafruit_mpu6050

i2c = busio. I2C(płytka. SCL, płyta. SDA)

mpu = adafruit_mpu6050. MPU6050(i2c)

podczas gdy prawda:

print("Przyspieszenie: X:%.2f, Y: %.2f, Z: %.2f m/s^2" % (mpu.przyspieszenie))

print("Żyroskop X:%.2f, Y: %.2f, Z: %.2f stopnie/s" % (mpu.żyro))

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

wydrukować("")

czas.sen(1)

gdy chcemy teraz przyspieszyć w osi X/Y/Z, możemy użyć:

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

łącząc to z prostym stwierdzeniem if w stałej pętli możemy policzyć ilość wstrząsów podczas podróży

Krok 3: GPS Adafruit Ultimate Breakout

Adafruit Ultimate Breakout GPS
Adafruit Ultimate Breakout GPS

Wstęp

Breakout jest zbudowany wokół chipsetu MTK3339, bezsensownego, wysokiej jakości modułu GPS, który może śledzić do 22 satelitów na 66 kanałach, ma doskonały odbiornik o wysokiej czułości (śledzenie -165 dB!) oraz wbudowaną antenę. Może wykonać do 10 aktualizacji lokalizacji na sekundę, aby uzyskać szybkie rejestrowanie lub śledzenie z dużą czułością. Zużycie energii jest niewiarygodnie niskie, tylko 20 mA podczas nawigacji.

Płytka jest wyposażona w: regulator o bardzo niskim spadku napięcia 3,3 V, dzięki czemu można go zasilać za pomocą wejścia 3,3-5 VDC, bezpieczne wejścia na poziomie 5 V, Dioda LED miga z częstotliwością około 1 Hz podczas wyszukiwania satelitów i miga raz na 15 sekund, gdy jest ustalona poprawka stwierdzono, że oszczędza energię.

Testowanie gps z arduino

Jeśli masz dostęp do arduino, dobrym pomysłem jest przetestowanie modułu z nim.

Podłącz VIN do +5V Podłącz GND do GroundConnect GPS RX (dane do GPS) do Digital 0 Podłącz GPS TX (dane z GPS) do Digital 1

Po prostu uruchom pusty kod arduino i otwórz monitor szeregowy z prędkością 9600 bodów. Jeśli otrzymasz dane GPS, twój moduł GPS działa. Uwaga: jeśli twój moduł nie zostanie naprawiony, spróbuj wystawić go przez okno lub na zewnątrz na tarasie

Sprawiając, że to działa

Rozpoczęcie instalacji biblioteki gps adafruit za pomocą polecenia "sudo pip3 install adafruit-circuitpython-gps".

Teraz możemy użyć następującego kodu Pythona, aby sprawdzić, czy możemy to zrobić:

import timeimport board import busioimport adafruit_gpsimport serial uart = serial. Serial("/dev/ttyS0", baudrate=9600, timeout=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')

podczas gdy prawda:

gps.update(), podczas gdy nie gps.has_fix:

print(gps.nmea_sentence)print('Oczekiwanie na naprawę…')gps.update()time.sleep(1)continue

print('=' * 40) # Wydrukuj separator line.print('Szerokość: {0:.6f} stopni'.format(gps.latitude))print('Długość: {0:.6f} stopni'.format (gps.longitude))print("Jakość poprawki: {}".format(gps.fix_quality))

# Niektóre atrybuty poza szerokością geograficzną, długością geograficzną i znacznikiem czasu są opcjonalne# i mogą nie być obecne. Sprawdź, czy to None przed próbą użycia! Jeśli gps.satellites nie jest None:

print("# satelity: {}".format(gps.satelity))

jeśli gps.altitude_m nie jest Brak:

print("Wysokość: {} metrów".format(gps.altitude_m))

jeśli gps.speed_knots nie jest Brak:

print("Prędkość: {} węzłów".format(gps.speed_knots))

jeśli gps.track_angle_deg nie ma wartości Brak:

print("Kąt ścieżki: {} stopni".format(gps.track_angle_deg))

jeśli gps.horizontal_dilution nie ma wartości Brak:

print("Rozcieńczenie poziome: {}".format(gps.rozcieńczenie_poziome))

jeśli gps.height_geoid nie jest Brak:

print("Identyfikator geograficzny wysokości: {} metrów".format(gps.height_geoid))

czas.sen(1)

Krok 4: Wyświetlacz LCD 16x2

Wyświetlacz LCD 16x2
Wyświetlacz LCD 16x2

Wstęp

Moduły LCD są bardzo powszechnie stosowane w większości projektów wbudowanych, ze względu na ich niską cenę, dostępność i przyjazność programistom. Większość z nas spotkałaby się z tymi wyświetlaczami w naszym codziennym życiu, zarówno w PCO, jak i kalkulatorach. Wyświetlacz LCD 16 × 2 został tak nazwany, ponieważ; ma 16 kolumn i 2 rzędy. Dostępnych jest wiele kombinacji, takich jak 8×1, 8×2, 10×2, 16×1 itd., ale najczęściej używany jest wyświetlacz LCD 16×2. Tak więc będzie miał łącznie (16×2=32) 32 znaki, a każdy znak będzie składał się z 5×8 pikseli.

Instalowanie SMBUS

Magistrala zarządzania systemem (SMBus) jest mniej więcej pochodną magistrali I2C. Standard został opracowany przez firmę Intel i jest obecnie utrzymywany przez SBS Forum. Głównym zastosowaniem SMBus jest monitorowanie krytycznych parametrów na płytach głównych komputerów PC oraz w systemach wbudowanych. Na przykład dostępnych jest wiele monitorów napięcia zasilania, monitorów temperatury i układów scalonych monitorujących/sterujących wentylatorami z interfejsem SMBus.

Biblioteka, której użyjemy, wymaga również zainstalowania smbus. Aby zainstalować smbus na rpi, użyj polecenia "sudo apt install python3-smbus".

Sprawiając, że to działa

najpierw zainstaluj bibliotekę RPLCD za pomocą polecenia "sudo pip3 install RPLCD".

teraz testujemy lcd, wyświetlając adres IP za pomocą następującego kodu:

z RPLCD.i2c importuj gniazdo importu CharLCD

def pobierz_adres_ip():

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 adres_ip

lcd = CharLCD ('PCF8574', 0x27)

lcd.write_string('Adres IP:\r\n'+str(get_ip_address()))

Krok 5: Serwo, diody, przycisk i przełącznik

Serwo, diody, przycisk i przełącznik
Serwo, diody, przycisk i przełącznik

Wstęp

Silnik serwo to siłownik lub silnik obrotowy, który pozwala na precyzyjne sterowanie pod względem położenia kątowego, przyspieszenia i prędkości, czego nie ma zwykły silnik. Wykorzystuje zwykły silnik i łączy go z czujnikiem w celu uzyskania informacji zwrotnej o położeniu. Sterownik jest najbardziej zaawansowaną częścią serwonapędu, ponieważ został specjalnie zaprojektowany do tego celu.

Dioda LED zwarta dla diody elektroluminescencyjnej. Elektroniczne urządzenie półprzewodnikowe, które emituje światło, gdy przepływa przez nie prąd elektryczny. Są znacznie wydajniejsze niż żarówki żarowe i rzadko się przepalają. Diody LED są używane w wielu zastosowaniach, takich jak płaskie ekrany wideo, a coraz częściej jako ogólne źródła światła.

Przycisk lub po prostu przycisk to prosty mechanizm przełączający do sterowania pewnym aspektem maszyny lub procesu. Guziki są zazwyczaj wykonane z twardego materiału, zwykle plastiku lub metalu.

Przełącznik on/off/on ma 3 pozycje, w których środkowa jest stanem wyłączonym. Te typy są najczęściej używane do prostego sterowania silnikiem, gdzie masz stan do przodu, wyłączony i wsteczny.

Jak to działa: serwo

Serwo wykorzystuje sygnał PWM do określenia, pod jakim kątem musi być na szczęście dla nas GPIO ma wbudowaną tę funkcję. Dlatego możemy po prostu użyć następującego kodu do sterowania serwo: import RPi. GPIO jako GPIOimport time

serwo_pin = 18 cykl_pracy = 7,5

GPIO.setmode(GPIO. BCM)

GPIO.setup(servo_pin, GPIO. OUT)

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

podczas gdy prawda:

duty_cycle = float(input("Wprowadź cykl pracy (od lewej = 5 do prawej = 10):"))pwm_servo. ChangeDutyCycle(duty_cycle)

Sprawia, że działa: dioda i przełącznik

Ze względu na sposób, w jaki okablowaliśmy diody i przełącznik, nie musimy kontrolować ani odczytywać diod i samego przełącznika. Po prostu wysyłamy impulsy do przycisku, który z kolei przekieruje sygnał do wybranej diody.

Sprawienie, by to działało: przycisk

Dla przycisku stworzymy naszą własną prostą klasę w ten sposób, że łatwo zobaczymy, kiedy jest wciśnięty, bez konieczności dodawania do niego zdarzenia wykrywania za każdym razem, gdy go użyjemy. Utworzymy plik classbutton.py za pomocą następującego kodu:

z RPi import GPIOclass Przycisk:

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 wciśnięty(self):

ingedrukt = GPIO.input(self.pin) return nie 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)

Krok 6: Pełny obwód

Pełny obwód
Pełny obwód
Pełny obwód
Pełny obwód

Teraz, gdy omówiliśmy wszystkie komponenty, nadszedł czas, aby je wszystkie połączyć.

O ile na zdjęciach widać, że podzespoły pokazują wszystko na płytce stykowej, lepiej mieć LCD, GPS adafruit i przycisk podłączony przewodami żeńskimi do męskich Na płytce stykowej tylko t-cobbler i mpu6050. Jeśli chodzi o diody i przełącznik użyj dłuższych przewodów, aby mieć pewność, że możesz dosięgnąć kierunkowskazów i kierownicy.

Krok 7: Kodeks

Aby utrzymać tę instrukcję w czystości, udostępniłem repozytorium github z plikami backendu i frontendu. Po prostu umieść pliki w folderze frontend w folderze /var/www/html, a pliki w folderze backend w folderze w /home/ [nazwa użytkownika]/[nazwa folderu] folder

Krok 8: Baza danych

Baza danych
Baza danych

Ze względu na sposób, w jaki ten system jest skonfigurowany, można skonfigurować prosty sklep internetowy za pomocą listy produktów w bazie danych, ponadto mamy tutaj zapisane wszystkie punkty drogi i zamówienia. Skrypt tworzenia można znaleźć w repozytorium github połączonym w Następny krok

Krok 9: Sprawa

Walizka
Walizka

Kiedy już wiemy, że elektronika działa, możemy wepchnąć je do pudełka. Dzięki temu możesz mieć trochę twórczej swobody. Przed zbudowaniem po prostu weź kartonowe pudełko, którego już nie potrzebujesz, na przykład puste pudełko po płatkach śniadaniowych i wytnij je, zaklej taśmą i złóż go, aż będziesz miał coś, co ci się podoba. Zmierz i narysuj obudowę na kawałku papieru i zrób ją z mocniejszego materiału, takiego jak drewno, a jeśli to nie jest twoja sprawa, wydrukuj to w 3D. Tylko upewnij się, że cała elektronika pasuje do środka i masz otwory na przycisk, przewód biegnący do przełącznika, diody LED i lcd. Po założeniu obudowy wystarczy znaleźć sposób zamontowania jej na rowerze lub skuterze

Zalecana: