Mục lục:

Mô-đun theo dõi cho người đi xe đạp: 5 bước
Mô-đun theo dõi cho người đi xe đạp: 5 bước

Video: Mô-đun theo dõi cho người đi xe đạp: 5 bước

Video: Mô-đun theo dõi cho người đi xe đạp: 5 bước
Video: Xe Đạp Điện Lướt Sóng Trên Đường #shorts 2024, Tháng bảy
Anonim
Mô-đun theo dõi cho người đi xe đạp
Mô-đun theo dõi cho người đi xe đạp

Mô-đun theo dõi dành cho người đi xe đạp này là mô-đun tự động phát hiện tai nạn trong một cuộc đua và phát hiện sự cố cơ học bằng cách chạm vào cảm biến cảm ứng. Khi một trong những sự kiện này xảy ra, mô-đun sẽ gửi sự kiện đó đến cơ sở dữ liệu trên raspberry pi thông qua LoRa. Sự kiện này sẽ được hiển thị trên màn hình LCD và trên một trang web. Bạn cũng có thể tìm kiếm trên trang web về một cuộc đua xe đạp cụ thể với các sự kiện và thêm các cuộc đua xe đạp hoặc người đi xe đạp vào cơ sở dữ liệu. Tôi thực hiện dự án này vì tôi rất hứng thú với môn Đi xe đạp và IOT, vì vậy việc kết hợp hai môn học này thực sự rất thú vị đối với tôi.

Trước khi có thể tạo mô-đun theo dõi cho người đi xe đạp, bạn cần thu thập tài liệu của mình. Bạn có thể tìm thấy các công cụ và nguồn cung cấp trong danh sách bên dưới hoặc bạn có thể tải xuống BOM (Build Of Materials).

Quân nhu:

  • kính plexi (56mm X 85mm)
  • 10 X 2M bu lông 10mm và đai ốc
  • 10 X bu lông 3M 10mm và đai ốc
  • 2 X bu lông 3M 50mm và đai ốc
  • PLA Filament để in 3D hộp màn hình LCD của bạn
  • nhiệt co lại
  • Cáp nam đến nữ
  • Một PCB cơ bản
  • Tiêu đề nam
  • Một Raspberry Pi 3b +
  • Một thẻ SD 16GB
  • Một màn hình LCD 4X20 sparkfun
  • Một cảm biến cảm ứng điện dung
  • Một tiếng còi
  • Máy đo gia tốc 3 trục + con quay hồi chuyển
  • Một mô-đun GPS
  • Một bảng SODAQ Mbili
  • Mô-đun LoRa WAN
  • Pin 3.7V 1000mAh
  • Một bộ nguồn Raspberry Pi 3b +

Công cụ:

  • Thiếc hàn
  • Hàn sắt
  • Lưỡi
  • Tua vít
  • Ghép hình
  • Máykhoan
  • Khoan 2,5 và 3,5
  • Súng thổi hơi nóng / nhẹ hơn

Nếu bạn cần mua tất cả các nguồn cung cấp, bạn sẽ cần một khoản ngân sách € 541,67. Dự án này rất tốn kém vì tôi đã sử dụng bộ công cụ phát triển LoRa rappid có giá € 299 (tôi đã có cơ hội sử dụng bộ công cụ này từ trường của mình). Bạn luôn có thể sử dụng Arduino bình thường vì tiết kiệm được rất nhiều tiền, nhưng các chương trình sẽ khác sau đó.

Bước 1: Fritzing Scheme

Fritzing Scheme
Fritzing Scheme
Fritzing Scheme
Fritzing Scheme

Bước đầu tiên là xây dựng các mạch. Đối với dự án này, chúng tôi có 2 mạch điện, một với Raspberry Pi và một với bảng SADAQ Mbili. Chúng ta sẽ bắt đầu với mạch Raspberry Pi.

Đề án Raspberry Pi Fritzing:

Sơ đồ Raspberry Pi khá đơn giản, thứ duy nhất chúng tôi kết nối với Pi là màn hình LCD Sparkfun 4X20. Màn hình hoạt động với giao tiếp nối tiếp, SPI hoặc I2C. Bạn sử dụng giao thức giao tiếp nào là tùy thuộc vào bạn. Tôi đã sử dụng giao thức SPI vì nó rất đơn giản. Nếu bạn sử dụng SPI như tôi, bạn cần các kết nối sau:

  • 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

Trên lược đồ Fritzing, bạn sẽ thấy rằng màn hình LCD là màn hình 2X16. Điều này là do tôi không tìm thấy màn hình LCD 4X20 trên màn hình. Tuy nhiên, tất cả các kết nối là một số nên nó không thực sự quan trọng.

Sơ đồ SODAQ Mbili Fritzing:

Chúng tôi sẽ kết nối 4 thành phần điện tử với bảng SODAQ Mbili, vì vậy sơ đồ điện này cũng rất đơn giản. Chúng ta sẽ bắt đầu với việc kết nối cảm biến Capactive touch. Chân OUT của cảm biến này sẽ CAO khi chạm vào cảm biến và sẽ ở mức THẤP nếu không. Điều này có nghĩa là chân OUT là đầu ra kỹ thuật số mà chúng ta có thể kết nối với đầu vào kỹ thuật số của bảng Mbili. Các kết nối như sau:

  • OUT cảm biến cảm ứng D5 Mbili
  • Cảm biến cảm ứng VCC 3.3V Mbili
  • GND Cảm biến cảm ứng GND Mbili

Thành phần thứ hai là Triple acces + cảm biến con quay hồi chuyển. Tôi đã sử dụng bảng GY-521 sử dụng giao thức I2C để giao tiếp với bảng Mbili. Lưu ý rằng chân AD0 của bảng GY-521 cần được kết nối với VCC của bảng Mbili! Điều này là do bảng Mbili có đồng hồ có cùng địa chỉ I2C như GY-521. Bằng cách kết nối chân AD0 với VCC, chúng tôi thay đổi địa chỉ I2C của GY-521. Các kết nối như sau:

  • VCC GY-521 3.3V Mbili
  • GND GY-521 GND Mbili
  • SCL GY-521 SCL Mbili
  • SDA GY-521 SDA Mbili
  • AD0 GY-521 3.3V Mbili

Sau đó, chúng tôi sẽ kết nối Buzzer. Tôi sử dụng bộ rung tiêu chuẩn phát ra âm thanh khi có dòng điện. Điều này có nghĩa là chúng ta chỉ có thể kết nối bộ rung với một chân kỹ thuật số của bảng Mbili. Các kết nối như sau:

  • + Buzzer D4 Mbili
  • - Buzzer GND Mbili

Cuối cùng nhưng không kém phần quan trọng, chúng tôi sẽ kết nối mô-đun GPS. Mô-đun GPS giao tiếp qua RX và TX. Các kết nối như sau:

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

Bước 2: Cơ sở dữ liệu chuẩn hóa

Cơ sở dữ liệu chuẩn hóa
Cơ sở dữ liệu chuẩn hóa

Bước thứ hai là thiết kế một Cơ sở dữ liệu chuẩn hóa. Tôi đã thiết kế ERD của mình trong Mysql. Bạn sẽ thấy cơ sở dữ liệu của tôi được viết bằng tiếng Hà Lan, tôi sẽ giải thích các bảng ở đây.

Bảng 'ploeg':

Bàn này là bàn dành cho các câu lạc bộ đua xe đạp. Nó chứa ID câu lạc bộ đi xe đạp và tên câu lạc bộ đi xe đạp.

Bảng 'renners':

Bàn này là bàn dành cho người đi xe đạp. Mỗi người đi xe đạp đều có LoRaID wich cũng là Khóa chính của bảng. Họ cũng có họ, tên, Quốc gia origen và ID câu lạc bộ đạp xe được liên kết với bảng câu lạc bộ đạp xe.

Bảng 'plaatsen':

Bảng này là bảng lưu trữ các địa điểm ở Bỉ có thể diễn ra một cuộc đua xe đạp. Nó chứa tên của thành phố (là Khóa chính) và tỉnh nơi thành phố đặt trụ sở.

Bảng 'wedstrijden':

Bảng này lưu trữ tất cả các cuộc đua xe đạp. Khóa chính của bảng là một ID. Bảng cũng chứa tên cuộc đua xe đạp, thành phố của cuộc đua được liên kết với bảng địa điểm, quãng đường của cuộc đua, danh mục của những người đi xe đạp và ngày của cuộc đua.

Bảng 'gebeurtenissen':

Bảng này lưu trữ tất cả các sự kiện xảy ra. Điều này có nghĩa là, khi một người đi xe đạp bị va chạm hoặc bị hỏng máy móc, sự kiện sẽ được lưu trữ trong bảng này. Khóa chính của bảng là một ID. Bảng cũng chứa ngày giờ của sự kiện, Vĩ độ của vị trí, Kinh độ của vị trí, LoRaID của người đi xe đạp và loại sự kiện (tai nạn hoặc sự cố cơ học).

Bảng 'wedstrijdrenner':

Bảng này là một bảng cần thiết cho mối quan hệ nhiều người.

Bước 3: Đăng ký Mô-đun LoRa của bạn

Đăng ký mô-đun LoRa của bạn
Đăng ký mô-đun LoRa của bạn

Trước khi có thể bắt đầu với mã, bạn cần đăng ký mô-đun LoRa của mình trong cổng LoRa. Tôi đã sử dụng một công ty viễn thông ở Bỉ có tên là 'Proximus' để sắp xếp giao tiếp cho mô-đun LoRa của tôi. Dữ liệu mà tôi gửi bằng nút LoRa của mình thu thập trên trang web từ AllThingsTalk. Nếu bạn cũng muốn sử dụng API AllThingsTalk để thu thập dữ liệu của mình, bạn có thể đăng ký tại đây.

Sau khi bạn đăng ký trên AllThingsTalk, bạn cần đăng ký nút LoRa của mình. Để làm điều này, bạn có thể làm theo các bước sau hoặc bạn có thể xem trên hình trên.

  1. Chuyển đến 'Thiết bị' trong menu chính
  2. Nhấp vào 'Thiết bị mới'
  3. Chọn nút LoRa của bạn
  4. Điền vào tất cả các phím.

Bây giờ bạn đã hoàn thành! Tất cả dữ liệu bạn gửi bằng nút LoRa sẽ xuất hiện trong trình tạo AllThingsTalk của bạn. Nếu bạn gặp bất kỳ vấn đề nào với việc đăng ký, bạn luôn có thể tham khảo tài liệu của AllThingsTalk.

Bước 4: Mã

Mật mã
Mật mã
Mật mã
Mật mã
Mật mã
Mật mã
Mật mã
Mật mã

Đối với dự án này, chúng tôi sẽ cần 5 ngôn ngữ mã hóa: HTML, CSS, Java Script, Python (Flask) và ngôn ngữ Arduino. Đầu tiên tôi sẽ giải thích về chương trình Arduino.

Chương trình Arduino:

Trong phần đầu của chương trình, tôi đã khai báo một số Biến toàn cục. Bạn sẽ thấy rằng tôi sử dụng SoftwareSerial cho kết nối với GPS của mình. Điều này là do bo mạch Mbili chỉ có 2 cổng nối tiếp. Bạn có thể kết nối GPS với Serial0, nhưng bạn sẽ không thể sử dụng thiết bị đầu cuối Arduino để gỡ lỗi sau đó. Đây là lý do tại sao tôi sử dụng SoftwareSerial.

Sau Biến toàn cục, tôi khai báo một số hàm giúp dễ đọc chương trình. Họ đọc ra các cordinate GPS, tạo ra âm thanh bộ rung, gửi các giá trị qua LoRa,…

Khối thứ ba là khối thiết lập. Khối này là phần khởi đầu của chương trình thiết lập các chân, giao tiếp nối tiếp và giao tiếp I2C.

Sau khi khối thiết lập đến chương trình chính. Trong phần đầu của vòng lặp chính này, tôi kiểm tra xem bộ cảm ứng có hoạt động hay không. Nếu vậy, tôi tạo ra âm thanh buzzer, lấy dữ liệu GPS và gửi tất cả các giá trị qua LoRa hoặc Bluetooth đến Raspberry PI. Sau khi cảm biến chạm, tôi đọc ra các giá trị của Gia tốc kế. Với một công thức, tôi tính toán góc chính xác của trục X và Y. Nếu những giá trị này lớn, chúng ta có thể kết luận rằng người đi xe đạp đã bị rơi. Khi sự cố xảy ra, tôi sẽ phát ra âm thanh của bộ rung trở lại, lấy dữ liệu GPS và gửi tất cả các giá trị qua LoRa hoặc Bluetooth tới Raspberry PI.

Có thể bạn đang nghĩ: 'Tại sao bạn lại sử dụng bluetooth và LoRa?'. Điều này là do tôi đã gặp một số rắc rối với giấy phép của mô-đun LoRa mà tôi đã sử dụng. Vì vậy, để làm cho chương trình hoạt động cho bản demo của tôi, tôi đã phải sử dụng Bluetooth trong một thời gian.

2. Mặt sau:

Kết thúc sau là một chút phức tạp. Tôi sử dụng Flask cho tuyến đường của mình có thể truy cập được cho giao diện người dùng, tôi sử dụng socketio để cập nhật tự động một số trang giao diện người dùng, tôi sử dụng các chân GPIO để hiển thị tin nhắn trên màn hình LCD và nhận tin nhắn qua Bluetooth (không cần thiết nếu bạn sử dụng LoRa) và tôi sử dụng Threading và Timmers để đọc thường xuyên API AllThinksTalk và khởi động máy chủ bình.

Tôi cũng sử dụng cơ sở dữ liệu SQL để lưu trữ tất cả các sự cố sắp xảy ra, đọc dữ liệu cá nhân của người đi xe đạp và dữ liệu cuộc đua. Cơ sở dữ liệu này được kết nối với back-end và cũng chạy trên Raspberry Pi. Tôi sử dụng một lớp 'Database.py' để tương tác với cơ sở dữ liệu.

Như bạn đã biết từ lược đồ Fritzing, màn hình LCD được kết nối với Raspberry Pi thông qua giao thức SPI. Để làm cho nó dễ dàng hơn, tôi đã viết một lớp 'LCD_4_20_SPI.py'. Với lớp này bạn có thể thay đổi độ tương phản, thay đổi màu đèn nền, viết tin nhắn trên màn hình,…. Nếu bạn muốn sử dụng Bluetooth, bạn có thể sử dụng lớp 'SerialRaspberry.py'. Lớp này quy định giao tiếp nối tiếp giữa mô-đun Bluetooth và Raspberry Pi. Điều duy nhất bạn cần làm là kết nối mô-đun Bluetooth với Raspberry Pi bằng cách kết nối RX với TX và ngược lại.

Các tuyến đường cho giao diện người dùng được viết bằng quy tắc @ app.route. Tại đây, bạn có thể tạo lộ trình tùy chỉnh của riêng mình để chèn hoặc lấy dữ liệu vào hoặc từ cơ sở dữ liệu. Đảm bảo rằng bạn luôn có phản hồi ở cuối lộ trình. Tôi luôn trả lại một đối tượng JSON cho giao diện người dùng, ngay cả khi xảy ra lỗi. Bạn có thể sử dụng một biến trong url bằng cách đặt arround biến.

Tôi sử dụng socketio cho trang web có sự cố của một cuộc đua. Khi Raspberry Pi gặp sự cố, tôi gửi một thông báo đến giao diện người dùng qua socketio. Giao diện người dùng sau đó biết rằng họ phải đọc lại cơ sở dữ liệu vì có một sự cố mới.

Bạn sẽ thấy rằng trong mã của tôi, giao tiếp LoRa được thiết lập trong lệnh. Nếu bạn muốn sử dụng LoRa, bạn cần bắt đầu một bộ hẹn giờ lặp đi lặp lại gửi một yêu cầu đến API AllThinksTalk. Từ API này, bạn sẽ nhận được các giá trị cảm biến (GPS, Thời gian, Loại sự cố) được gửi bởi một nút LoRa cụ thể. Bạn có thể sử dụng các giá trị này để chèn sự cố vào cơ sở dữ liệu.

3. Kết thúc cuối cùng:

Phần cuối gồm có 3 ngôn ngữ. HTML cho văn bản trang web, CSS cho đánh dấu trang web và JavaScript để giao tiếp với back end. Tôi có 4 trang web cho dự án này:

  • Index.html nơi bạn có thể tìm thấy tất cả các cuộc đua xe đạp.
  • Một trang với tất cả các sự cố và sự cố máy móc cho một cuộc đua spicific.
  • Một trang nơi bạn có thể thêm các trụ vào cơ sở dữ liệu và chỉnh sửa nhóm của họ.
  • Một trang nơi bạn có thể thêm một cuộc đua mới với tất cả những người tham dự vào cơ sở dữ liệu.

Bạn thiết kế chúng như thế nào là hoàn toàn tùy thuộc vào bạn. Bạn có thể lấy một số cảm hứng từ trang web của tôi nếu bạn muốn. Rất tiếc, trang web của tôi được làm bằng tiếng Hà Lan, tôi xin lỗi vì điều đó.

Tôi có một tệp CSS và tệp JavaScript riêng cho mỗi trang. Mọi tệp JavaScript đều sử dụng tìm nạp để lấy dữ liệu từ cơ sở dữ liệu thông qua back end. Khi script nhận được dữ liệu, html sẽ tự động thay đổi. Trong trang nơi bạn có thể tìm thấy các sự cố và sự cố cơ học, bạn sẽ tìm thấy bản đồ nơi tất cả các sự kiện đã xảy ra. Tôi đã sử dụng tờ rơi để hiển thị bản đồ này.

Bạn có thể xem tất cả mã của tôi ở đây trên Github của tôi.

Bước 5: Xây dựng công trình

Xây dựng các công trình
Xây dựng các công trình
Xây dựng các công trình
Xây dựng các công trình
Xây dựng các công trình
Xây dựng các công trình

Trước khi chúng tôi có thể bắt đầu xây dựng, hãy đảm bảo rằng bạn có tất cả các tài liệu từ BOM hoặc từ trang 'Công cụ + Vật tư'.

Raspberry Pi + LCD

Chúng tôi sẽ bắt đầu với trường hợp cho Raspberry Pi. Bạn có thể in 3D một chiếc ốp lưng, đây cũng là ý tưởng đầu tiên của tôi. Nhưng vì thời hạn của tôi đang đến rất gần, nên tôi quyết định làm một trường hợp đơn giản. Tôi lấy hộp đựng tiêu chuẩn từ Raspberry Pi và tôi đã khoan một lỗ trên vỏ cho dây dẫn từ màn hình LCD của mình. Để làm điều này, bạn chỉ cần làm theo các bước đơn giản sau:

  1. Khoan một lỗ vào nắp của hộp đựng. Tôi đã làm điều này với một mũi khoan 7mm ở cạnh bìa. Bạn có thể thấy điều này trong hình trên.
  2. Lấy dây từ màn hình LCD và trượt một đầu co lại trên dây.
  3. Dùng bật lửa hoặc súng thổi hơi nóng để làm cho đầu co rút lại.
  4. Kéo các dây có đầu co lại qua lỗ trong hộp và kết nối chúng trở lại trên màn hình LCD.

Bây giờ bạn đã sẵn sàng với vỏ cho Raspberry Pi, bạn có thể bắt đầu với vỏ cho màn hình LCD. Tôi đã in 3D vỏ cho Màn hình LCD của mình vì tôi đã tìm thấy một vỏ trực tuyến trên liên kết này. Tôi chỉ phải thực hiện một thay đổi nhỏ về chiều cao của hộp đựng. Khi bạn nghĩ rằng mình vẽ tốt, bạn có thể xuất tệp và bắt đầu in. Nếu bạn không biết cách in 3D, bạn có thể làm theo hướng dẫn này về cách in 3D với fusion 360.

SODAQ MBili xây dựng

Tôi đã không thực sự tạo ra một trường hợp cho hội đồng quản trị SODAQ Mbili. Tôi đã sử dụng một tấm kính plexi để đặt các thành phần của mình lên mà không có hộp bao quanh công trình. Nếu bạn cũng muốn làm điều này, bạn có thể làm theo các bước sau:

  1. Kí hiệu tấm kính bằng các dimesnion của bảng SODAQ Mbili. Kích thước là: 85mm X 56mm
  2. Cắt tấm kính bằng ghép hình.
  3. Đặt các linh kiện điện tử lên tấm kính và dùng bút chì xóa các lỗ.
  4. Khoan các lỗ bạn vừa ký và các lỗ cho giá đỡ bằng mũi khoan 3,5mm.
  5. Gắn tất cả các thành phần điện tử lên tấm thủy tinh bằng bu lông và đai ốc 3M 10mm.
  6. Bước cuối cùng là gắn tấm kính lên trên bảng Mbili. Bạn có thể làm điều này với standoffs, nhưng tôi đã sử dụng hai bu lông 3M 50mm và 8 đai ốc 3M để gắn tấm kính phía trên bảng.

Đề xuất: