สารบัญ:

Track&trace สำหรับร้านค้าขนาดเล็ก: 9 ขั้นตอน (พร้อมรูปภาพ)
Track&trace สำหรับร้านค้าขนาดเล็ก: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Track&trace สำหรับร้านค้าขนาดเล็ก: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Track&trace สำหรับร้านค้าขนาดเล็ก: 9 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: ใบกํากับภาษีอิเล็กทรอนิกส์ e-Tax Invoice ผู้ขายรายเล็กๆที่จดVATแล้ว ก็สามารถออกได้ มาดูทำวิธีกัน 2024, พฤศจิกายน
Anonim
ติดตาม&ติดตามสำหรับร้านค้าขนาดเล็ก
ติดตาม&ติดตามสำหรับร้านค้าขนาดเล็ก

นี่คือระบบที่สร้างขึ้นสำหรับร้านค้าขนาดเล็กที่ควรติดตั้งบน e-bikes หรือ e-scooters สำหรับการจัดส่งระยะสั้น เช่น ร้านเบเกอรี่ที่ต้องการส่งขนมอบ

Track and Trace หมายถึงอะไร

ติดตามและติดตามเป็นระบบที่ใช้โดยผู้ให้บริการหรือบริษัทจัดส่งเพื่อบันทึกการเคลื่อนไหวของพัสดุหรือรายการระหว่างการขนส่ง ที่สถานที่ประมวลผลทุกแห่ง สินค้าจะถูกระบุและส่งต่อข้อมูลไปยังระบบประมวลผลกลาง ข้อมูลนี้จะใช้เพื่อแจ้งสถานะ/อัปเดตตำแหน่งสินค้าแก่ผู้ส่งสินค้า

ระบบที่เราจะสร้างจะแสดงเส้นทางที่ใช้และจำนวนการกระแทกและการกระแทกที่ได้รับ คำแนะนำนี้ยังถือว่าคุณมีความรู้พื้นฐานเกี่ยวกับ raspberry pi, python และ mysql

หมายเหตุ: สิ่งนี้ทำขึ้นสำหรับโครงการของโรงเรียน ดังนั้นเนื่องจากข้อจำกัดด้านเวลา จึงมีช่องว่างให้ปรับปรุงอีกมาก

เสบียง

-Raspberry Pi 4 รุ่น B

-ราสเบอร์รี่ PI T-cobbler

-4x3, แบตเตอรี่ Li-ion 7V

-2x ที่ใส่แบตเตอรี่สองเท่า

-DC Buck Step-down Converter 5v

-2x ไฟ LED สีส้มขนาดใหญ่

-สวิตช์เปิด/ปิด/เปิด

-ปุ่ม

-adafruit สุดยอด gps v3

-mpu6050

-16x2 จอ LCD

-เซอร์โวมอเตอร์

ขั้นตอนที่ 1: เปิดวงจรและ Pi

การจ่ายไฟให้กับวงจรและ Pi
การจ่ายไฟให้กับวงจรและ Pi
การจ่ายไฟให้กับวงจรและ Pi
การจ่ายไฟให้กับวงจรและ Pi

เมื่อพูดถึงการจ่ายไฟให้กับวงจร pi ด้วยแบตเตอรี่ คุณมีตัวเลือกสองสามวิธีในการดำเนินการ

คุณสามารถใช้ powerbank และจ่ายไฟให้กับ pi ผ่าน USB บางทีคุณอาจกำลังติดตั้งอุปกรณ์บน e-bike หรือ e-scooter ที่มีพอร์ต USB บางทีคุณอาจมีแบตเตอรี่โทรศัพท์ 5V วางอยู่รอบๆ เพื่อรอใช้งานหรือคุณสามารถใช้ 2 ชุดแบตเตอรี่ 3.7V แบบขนานพร้อมตัวแปลงสเต็ปดาวน์ตามภาพ

อะไรๆก็ดีตราบใดที่มันสามารถให้ 5V ต่อเนื่องและมีชีวิตที่คุณมีความสุข

ขั้นตอนที่ 2: MPU6050

MPU6050
MPU6050

บทนำโมดูลเซ็นเซอร์ MPU6050 เป็นอุปกรณ์ติดตามการเคลื่อนไหวแบบ 6 แกนในตัว

  • มี Gyroscope 3 แกน, Accelerometer 3 แกน, Digital Motion Processor และเซ็นเซอร์อุณหภูมิ ทั้งหมดใน IC เดียว
  • พารามิเตอร์ต่างๆ สามารถพบได้โดยการอ่านค่าจากที่อยู่ของรีจิสเตอร์บางตัวโดยใช้การสื่อสาร I2C การอ่านค่าไจโรสโคปและมาตรความเร่งตามแกน X, Y และ Z มีให้ในรูปแบบเสริมของ 2
  • การอ่านค่า Gyroscope มีหน่วยเป็นองศาต่อวินาที (dps) การอ่านค่าความเร่งอยู่ในหน่วย g

เปิดใช้งาน I2C

เมื่อใช้ MPU6050 กับ Raspberry Pi เราควรตรวจสอบให้แน่ใจว่าโปรโตคอล I2C บน Raspberry Pi เปิดอยู่ เมื่อต้องการทำสิ่งนี้ให้เปิดเทอร์มินัลของ pi ผ่านสีโป๊วหรือซอฟต์แวร์อื่น ๆ แล้วดำเนินการดังต่อไปนี้:

  1. พิมพ์ "sudo raspi-config"
  2. เลือกการกำหนดค่าการเชื่อมต่อ
  3. ในตัวเลือกการเชื่อมต่อ เลือก "I2C"
  4. เปิดใช้งานการกำหนดค่า I2C
  5. เลือกใช่เมื่อระบบขอให้รีบูต

ตอนนี้ เราสามารถทดสอบ/สแกนหาอุปกรณ์ I2C ใดๆ ที่เชื่อมต่อกับบอร์ด Raspberry Pi ของเราโดยการติดตั้งเครื่องมือ i2c เราสามารถรับเครื่องมือ i2c ได้โดยใช้ตัวจัดการแพ็คเกจ apt ใช้คำสั่งต่อไปนี้ในเทอร์มินัล Raspberry Pi

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

ตอนนี้เชื่อมต่ออุปกรณ์ที่ใช้ I2C กับพอร์ตโหมดผู้ใช้และสแกนพอร์ตนั้นโดยใช้คำสั่งต่อไปนี้

"sudo i2cdetect -y 1"

จากนั้นจะตอบกลับด้วยที่อยู่อุปกรณ์

หากไม่มีการส่งคืนที่อยู่ ตรวจสอบให้แน่ใจว่าได้เชื่อมต่อ MPU6050 อย่างถูกต้องแล้วลองอีกครั้ง

ทำให้ได้ผล

ตอนนี้เราแน่ใจว่าเปิดใช้งาน i2c แล้วและ pi สามารถเข้าถึง MPU6050 ได้ เราจะติดตั้งไลบรารีโดยใช้คำสั่ง "sudo pip3 install adafruit-circuitpython-mpu6050"

ถ้าเราสร้างไฟล์ทดสอบ python และใช้รหัสต่อไปนี้ เราจะเห็นว่ามันใช้งานได้หรือไม่:

เวลานำเข้า

นำเข้าบอร์ด

นำเข้าธุรกิจ

นำเข้า adafruit_mpu6050

i2c = busio. I2C (บอร์ด SCL, บอร์ด SDA)

mpu = adafruit_mpu6050. MPU6050(i2c)

ในขณะที่จริง:

พิมพ์ ("อัตราเร่ง: X:%.2f, Y: %.2f, Z: %.2f m/s ^ 2" % (mpu.acceleration))

พิมพ์ ("Gyro X:%.2f, Y: %.2f, Z: %.2f องศา/วินาที" % (mpu.gyro))

พิมพ์ ("อุณหภูมิ: %.2f C" % mpu.temperature)

พิมพ์("")

เวลานอน(1)

เมื่อเราต้องการความเร่งในแกน X/Y/Z เราสามารถใช้สิ่งต่อไปนี้:

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

การรวมสิ่งนี้กับคำสั่ง if อย่างง่ายในลูปคงที่เราสามารถนับจำนวนแรงกระแทกในการเดินทางได้

ขั้นตอนที่ 3: Adafruit Ultimate Breakout GPS

Adafruit Ultimate Breakout GPS
Adafruit Ultimate Breakout GPS

บทนำ

การฝ่าวงล้อมถูกสร้างขึ้นรอบ ๆ ชิปเซ็ต MTK3339 ซึ่งเป็นโมดูล GPS คุณภาพสูงที่ไร้สาระซึ่งสามารถติดตามดาวเทียมได้มากถึง 22 ดวงใน 66 ช่องสัญญาณมีเครื่องรับความไวสูงที่ยอดเยี่ยม (การติดตาม -165 dB!) และเสาอากาศในตัว. สามารถอัปเดตตำแหน่งได้สูงสุด 10 ตำแหน่งต่อวินาทีสำหรับการบันทึกหรือติดตามความเร็วสูง ความไวสูง การใช้พลังงานต่ำอย่างเหลือเชื่อ เพียง 20 mA ระหว่างการนำทาง

บอร์ดมาพร้อมกับ: ตัวควบคุม 3.3V แบบ dropout ที่ต่ำเป็นพิเศษ เพื่อให้คุณสามารถจ่ายไฟด้วยอินพุต 3.3-5VDC, อินพุตที่ปลอดภัยระดับ 5V, ไฟ LED จะกะพริบที่ประมาณ 1Hz ขณะที่กำลังค้นหาดาวเทียมและจะกะพริบทุกๆ 15 วินาทีเมื่อมีการแก้ไข พบว่าเป็นการประหยัดพลังงาน

ทดสอบ gps ด้วย arduino

หากคุณมีการเข้าถึง Arduino คุณควรทดสอบโมดูลด้วย

เชื่อมต่อ VIN กับ +5VConnect GND กับ GroundConnect GPS RX (ข้อมูลเข้าสู่ GPS) กับ Digital 0Connect GPS TX (ข้อมูลจาก GPS) เป็น Digital 1

เพียงเรียกใช้โค้ด Arduino เปล่าและเปิดมอนิเตอร์แบบอนุกรมบน 9600 บอด หากคุณได้รับข้อมูล gps โมดูล gps ของคุณก็ใช้งานได้ หมายเหตุ: หากโมดูลของคุณไม่ได้รับการแก้ไข ให้ลองวางโมดูลนั้นออกไปนอกหน้าต่างหรือบนระเบียง

ทำให้ได้ผล

เริ่มการติดตั้งไลบรารี adafruit gps โดยใช้คำสั่ง "sudo pip3 install adafruit-circuitpython-gps"

ตอนนี้เราสามารถใช้โค้ด python ต่อไปนี้เพื่อดูว่าเราสามารถทำให้มันทำงานได้หรือไม่:

นำเข้า timeimport board นำเข้า 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')

ในขณะที่จริง:

gps.update() ในขณะที่ไม่ใช่ gps.has_fix:

พิมพ์(gps.nmea_sentence)พิมพ์('กำลังรอการแก้ไข…')gps.update()time.sleep(1)ดำเนินการต่อ

print('=' * 40) # พิมพ์ตัวคั่น line.print('Latitude: {0:.6f} degrees'.format(gps.latitude))print('Longitude: {0:.6f} degrees'.format (gps.longitude))print("แก้ไขคุณภาพ: {}".format(gps.fix_quality))

# คุณลักษณะบางอย่างที่อยู่นอกเหนือละติจูด ลองจิจูด และการประทับเวลาเป็นตัวเลือก # และอาจไม่มีอยู่ ตรวจสอบว่าไม่มีหรือไม่ก่อนที่จะลองใช้! ถ้า gps.satellites ไม่ใช่ไม่มี:

พิมพ์ ("# ดาวเทียม: {}".format(gps.satellites))

ถ้า gps.altitude_m ไม่ใช่ไม่มี:

print("ระดับความสูง: {} เมตร".format(gps.altitude_m))

ถ้า gps.speed_knots ไม่มี:

พิมพ์ ("ความเร็ว: {} นอต".format(gps.speed_knots))

ถ้า gps.track_angle_deg ไม่ใช่ไม่มี:

print("ติดตามมุม: {} องศา".format(gps.track_angle_deg))

ถ้า gps.horizontal_dilution ไม่มี:

พิมพ์ ("การเจือจางในแนวนอน: {}".format(gps.horizontal_dilution))

ถ้า gps.height_geoid ไม่มี:

print("ความสูง geo ID: {} เมตร".format(gps.height_geoid))

เวลานอน(1)

ขั้นตอนที่ 4: จอ LCD ขนาด 16x2

จอ LCD 16x2
จอ LCD 16x2

บทนำ

โมดูล LCD มักใช้ในโครงการฝังตัวส่วนใหญ่ เนื่องจากราคาถูก ความพร้อมใช้งาน และโปรแกรมเมอร์ที่เป็นมิตร พวกเราส่วนใหญ่จะเคยเจอจอภาพเหล่านี้ในชีวิตประจำวันของเรา ไม่ว่าจะเป็นที่ PCO หรือเครื่องคิดเลข จอ LCD ขนาด 16 × 2 ได้รับการตั้งชื่อเช่นนั้นเพราะ; มี 16 คอลัมน์ 2 แถว มีหลายแบบให้เลือก เช่น 8×1, 8×2, 10×2, 16×1 เป็นต้น แต่ชุดที่ใช้มากที่สุดคือ LCD 16×2 ดังนั้นมันจะมีทั้งหมด (16×2=32) อักขระทั้งหมด 32 ตัว และแต่ละตัวจะทำด้วยจุดพิกเซล 5×8

กำลังติดตั้ง sbus

System Management Bus (SMBus) เป็นอนุพันธ์ของบัส I2C ไม่มากก็น้อย มาตรฐานได้รับการพัฒนาโดย Intel และขณะนี้ได้รับการดูแลโดย SBS Forum แอปพลิเคชันหลักของ SMBus คือการตรวจสอบพารามิเตอร์ที่สำคัญบนเมนบอร์ดพีซีและในระบบฝังตัว ตัวอย่างเช่น มีมอนิเตอร์แรงดันไฟ ตัวตรวจสอบอุณหภูมิ และไอซีควบคุมพัดลม/ควบคุมที่มีอินเทอร์เฟซ SMBus มากมาย

ไลบรารีที่เราจะใช้ต้องมีการติดตั้ง smbus ด้วย ในการติดตั้ง smbus บน rpi ให้ใช้คำสั่ง "sudo apt install python3-smbus"

ทำให้ได้ผล

ขั้นแรกให้ติดตั้งไลบรารี RPLCD โดยใช้คำสั่ง "sudo pip3 install RPLCD"

ตอนนี้เราทดสอบ LCD โดยแสดง IP โดยใช้รหัสต่อไปนี้:

จาก RPLCD.i2c นำเข้า 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() ส่งคืน ip_address

จอแอลซีดี = CharLCD('PCF8574', 0x27)

lcd.write_string('ที่อยู่ IP:\r\n'+str(get_ip_address()))

ขั้นตอนที่ 5: Servo, Leds, Button และ Switch

เซอร์โว ไฟ LED ปุ่มและสวิตช์
เซอร์โว ไฟ LED ปุ่มและสวิตช์

บทนำ

เซอร์โวมอเตอร์คือตัวกระตุ้นแบบโรตารี่หรือมอเตอร์ที่ช่วยให้สามารถควบคุมได้อย่างแม่นยำในแง่ของตำแหน่งเชิงมุม ความเร่ง และความเร็ว ความสามารถที่มอเตอร์ปกติไม่มี ใช้มอเตอร์ปกติและจับคู่กับเซ็นเซอร์เพื่อป้อนกลับตำแหน่ง ตัวควบคุมเป็นส่วนที่ซับซ้อนที่สุดของเซอร์โวมอเตอร์ เนื่องจากได้รับการออกแบบมาโดยเฉพาะเพื่อวัตถุประสงค์นี้

LED สั้นสำหรับไดโอดเปล่งแสง อุปกรณ์เซมิคอนดักเตอร์อิเล็กทรอนิกส์ที่เปล่งแสงเมื่อมีกระแสไฟฟ้าไหลผ่าน มีประสิทธิภาพมากกว่าหลอดไส้และไม่ค่อยเกิดการเผาไหม้ ไฟ LED ถูกใช้ในแอพพลิเคชั่นมากมาย เช่น จอวิดีโอจอแบน และใช้เป็นแหล่งกำเนิดแสงทั่วไปมากขึ้นเรื่อยๆ

ปุ่มกดหรือปุ่มง่าย ๆ เป็นกลไกการสลับอย่างง่ายในการควบคุมบางแง่มุมของเครื่องหรือกระบวนการ กระดุมมักจะทำจากวัสดุแข็ง ปกติแล้วจะเป็นพลาสติกหรือโลหะ

สวิตช์เปิด/ปิด/เปิดมี 3 ตำแหน่ง โดยตำแหน่งตรงกลางเป็นสถานะปิด ส่วนใหญ่จะใช้สำหรับการควบคุมมอเตอร์อย่างง่าย ซึ่งคุณมีสถานะเดินหน้า ปิด และถอยหลัง

ทำให้มันใช้งานได้: เซอร์โว

เซอร์โวใช้สัญญาณ PWM เพื่อกำหนดมุมที่จำเป็นสำหรับเรา GPIO มีคุณสมบัตินี้ในตัว ดังนั้นเราจึงสามารถใช้รหัสต่อไปนี้เพื่อควบคุมเซอร์โว: นำเข้า RPi. GPIO เป็น GPIO เวลานำเข้า

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 = float(อินพุต("เข้าสู่รอบการทำงาน (ซ้าย = 5 ไปขวา = 10):"))pwm_servo. ChangeDutyCycle(duty_cycle)

ทำให้มันใช้งานได้: ไฟ LED และสวิตช์

เนื่องจากวิธีที่เราต่อสาย LED และสวิตช์ เราจึงไม่จำเป็นต้องควบคุมหรืออ่านไฟ LED และสวิตช์เอง เราเพียงแค่ส่งพัลส์ไปยังปุ่มที่แม่มดจะส่งสัญญาณไปยังไฟ LED ที่เราต้องการ

ทำให้มันใช้งานได้: ปุ่ม

สำหรับปุ่ม เราจะสร้างคลาสแบบง่ายของเราเอง ด้วยวิธีนี้เราจะเห็นได้ง่ายเมื่อกดโดยไม่ต้องเพิ่มการตรวจจับเหตุการณ์ในแต่ละครั้งที่เราใช้งาน เราจะสร้างไฟล์ classbutton.py โดยใช้รหัสต่อไปนี้:

จาก RPi นำเข้าปุ่ม GPIOclass:

def _init_ (ตัวเอง, พิน, เวลาตีกลับ = 200): self.pin = พิน self.bouncetime = เวลาตีกลับ GPIO.setmode (GPIO. BCM) GPIO.setup (พิน, GPIO. IN, GPIO. PUD_UP)@property def กด (ตัวเอง):

ingedrukt = GPIO.input(self.pin) คืนค่าไม่ ingedrukt

def on_press(ตัวเอง, call_method):

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

def on_release (ตัวเอง, call_method):

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

ขั้นตอนที่ 6: วงจรเต็ม

ครบวงจร
ครบวงจร
ครบวงจร
ครบวงจร

ตอนนี้เราได้ดูส่วนประกอบทั้งหมดแล้ว ถึงเวลารวมส่วนประกอบทั้งหมดเข้าด้วยกัน

ในขณะที่รูปภาพแสดงส่วนประกอบต่างๆ แสดงทุกอย่างบนเขียงหั่นขนมเอง ดีกว่าที่จะมี LCD, adafruit GPS และปุ่มที่เชื่อมต่อโดยใช้สายตัวเมียกับตัวผู้ มีเพียง t-cobbler และ mpu6050 บนเขียงหั่นขนมเท่านั้น เมื่อพูดถึงไฟ LED และสวิตช์ ใช้สายไฟที่ยาวขึ้นเพื่อให้แน่ใจว่าคุณจะไปถึงแถบไฟเลี้ยวและพวงมาลัยได้

ขั้นตอนที่ 7: รหัส

เพื่อให้คำแนะนำนี้สะอาด ฉันได้จัดเตรียมที่เก็บ github ที่มีทั้งไฟล์แบ็กเอนด์และฟรอนท์เอนด์ เพียงแค่ใส่ไฟล์ในโฟลเดอร์ฟรอนท์เอนด์ในโฟลเดอร์ /var/www/html และไฟล์ในโฟลเดอร์แบ็กเอนด์ในโฟลเดอร์ใน /home/ [ชื่อผู้ใช้]/[ชื่อโฟลเดอร์] โฟลเดอร์

ขั้นตอนที่ 8: ฐานข้อมูล

ฐานข้อมูล
ฐานข้อมูล

เนื่องจากวิธีการตั้งค่าระบบนี้ จึงมีการตั้งค่าเว็บช็อปอย่างง่ายโดยใช้รายการผลิตภัณฑ์ในฐานข้อมูล นอกจากนี้เรายังมีจุดและคำสั่งซื้อทั้งหมดที่บันทึกไว้ที่นี่ สคริปต์การสร้างสามารถพบได้ในที่เก็บ github ที่เชื่อมโยงใน ขั้นตอนต่อไป

ขั้นตอนที่ 9: กรณี

กรณี
กรณี

เมื่อเรารู้วิธีการทำงานของอุปกรณ์อิเล็กทรอนิกส์แล้ว เราก็สามารถบรรจุมันลงในกล่องได้ คุณสามารถใช้เสรีภาพในการสร้างสรรค์กับสิ่งนี้ ก่อนที่จะสร้างมัน เพียงแค่หยิบกล่องกระดาษแข็งที่คุณไม่ต้องการอีกต่อไป เช่น กล่องซีเรียลเปล่า แล้วตัด ติดเทป แล้วพับจนได้ของที่ชอบ วัดและวาดเคสของคุณบนกระดาษแล้วทำจากวัสดุที่ทนทานกว่า เช่น ไม้ หรือถ้านั่นไม่ใช่สิ่งที่คุณชอบก็พิมพ์ 3 มิติ เพียงตรวจสอบให้แน่ใจว่าอุปกรณ์อิเล็กทรอนิกส์ทั้งหมดพอดีภายในและ คุณมีรูสำหรับปุ่ม ลวดไปที่สวิตช์ ไฟ LED และ LCD เมื่อคุณสร้างเคสของคุณแล้ว ก็แค่หาวิธีติดตั้งบนจักรยานหรือสกู๊ตเตอร์ของคุณ

แนะนำ: