Mục lục:

ColorPicker: 10 bước
ColorPicker: 10 bước

Video: ColorPicker: 10 bước

Video: ColorPicker: 10 bước
Video: Pickr - An Awesome Color Picker for your next Project! 2024, Tháng mười một
Anonim
ColorPicker
ColorPicker

Mục tiêu của dự án này là đo màu và chuyển chúng sang các hệ màu khác. Chỉ sử dụng các giá trị RGB do cảm biến cung cấp, bạn có thể dịch sang HSL, CYMK, HEX và cả mã RAL gần nhất (tiêu chuẩn được sử dụng cho sơn). Dự án này yêu cầu kiến thức cơ bản về Python, MySQL, Linux và Javascript.

Nếu bạn cũng đã quen với khung công tác Flask và SocketIO, thì mã cho dự án này sẽ dễ hiểu đối với bạn.

Dự án này có thể được sử dụng bởi các họa sĩ, nhà thiết kế nội thất hoặc chỉ cho bất kỳ ai cần đo màu sắc.

Dự án này không quá đắt và chi phí ước tính khoảng _ euro, chưa bao gồm phí vận chuyển.

Quân nhu

Chúng ta có thể chia phần này thành hai phần:

  • Phần cứng
  • Phần mềm

Phần cứng

Chúng tôi sử dụng các thành phần sau

  • HC04: Cảm biến khoảng cách, chúng ta đang đo bao xa từ vật thể
  • Màn hình LCD 2x16
  • Mô-đun LCD I2C (HW061)
  • TCS34725 Mô-đun cảm biến màu (Adafruit)
  • LED trắng
  • Raspberry Pi 3 (Bất kỳ Raspberry Pi nào cũng nên hoạt động)
  • Điện trở 5x 1k Ohm
  • Điện trở 1x 220 hoặc 330 Ohm
  • Thẻ SD 16GB (14,4GB)

Phần mềm

  • Python IDE, như Mã trực quan hoặc Pycharm (Pycharm được sử dụng ở đây)
  • MySQL Workbench
  • Putty (Tải xuống Putty)
  • Rufus hoặc bất kỳ đầu ghi thẻ SD nào khác (Tải xuống Rufus)

Định giá

Dự án này khá rẻ, nếu bạn đã có Rapsberry Pi.

  • HC04: Bắt đầu khoảng € 2,5 euro (Trung Quốc) và lên đến € 6 cho nhiều cửa hàng địa phương hơn.
  • LCD: Khoảng 6-8 euro.
  • Mô-đun I2C: Rẻ dưới € 1 (Trung Quốc), nhưng lên đến € 4 cho nhiều cửa hàng địa phương hơn.
  • TCS34725: Khoảng € 9-12 €. Phần đắt nhất (Không bao gồm RPi)
  • Đèn LED trắng: Mua với số lượng lớn, 20 LEDS với giá thấp nhất là € 1
  • Raspberry Pi: Tùy thuộc vào phiên bản nào, khoảng € 40 €
  • Điện trở: € 0,10 cho một điện trở
  • Thẻ SD: khoảng € 8

Bộ chuyển đổi nguồn cho Raspberry Pi được loại trừ trong giá thành, vì bộ chuyển đổi này khá phổ biến.

Phạm vi giá tổng quát: khoảng 70 €, nếu bạn đã bao gồm Raspberry Pi và vỏ cho dự án.

Để chế tạo vỏ máy, tôi đã sử dụng gỗ mỏng nhẹ. Tôi đã tái chế gỗ này từ đồ nội thất. Vật liệu cho trường hợp là tùy thuộc vào bạn.

Bước 1: Bước 1: Cài đặt hệ điều hành RPi, định cấu hình SSH và truy cập Internet

Bước 1: Cài đặt hệ điều hành RPi, định cấu hình SSH và truy cập Internet
Bước 1: Cài đặt hệ điều hành RPi, định cấu hình SSH và truy cập Internet
Bước 1: Cài đặt hệ điều hành RPi, định cấu hình SSH và truy cập Internet
Bước 1: Cài đặt hệ điều hành RPi, định cấu hình SSH và truy cập Internet
Bước 1: Cài đặt hệ điều hành RPi, định cấu hình SSH và truy cập Internet
Bước 1: Cài đặt hệ điều hành RPi, định cấu hình SSH và truy cập Internet
Bước 1: Cài đặt hệ điều hành RPi, định cấu hình SSH và truy cập Internet
Bước 1: Cài đặt hệ điều hành RPi, định cấu hình SSH và truy cập Internet

Bước 1.1: Cài đặt hình ảnh

Tải xuống hình ảnh từ trang web chính thức của Raspberry Pi. Nó không thực sự quan trọng bạn cài đặt hình ảnh nào. Đối với dự án này, GUI là không cần thiết, vì chúng tôi sẽ chỉ kết nối bằng SSH.

Ghi hình ảnh vào thẻ SD (trống) (Tất cả các tệp trên thẻ sẽ bị xóa).

Để ghi mọi thứ vào thẻ SD, chúng tôi sẽ sử dụng một công cụ có tên là 'Rufus'. Sau khi tải xuống hình ảnh, mở Rufus và chọn tệp hình ảnh. Chọn ổ đĩa đích và ghi hình ảnh vào ổ đĩa. Điều này có thể mất một thời gian.

> Rufus

Bước 1.2: Cài đặt SSH

Bước tiếp theo là tạo kết nối với thẻ SD. Để làm được điều đó, chúng ta cần bật SSH.

Để làm điều đó mà không cần sử dụng màn hình, hãy mở trình khám phá tệp của bạn và mở phân vùng khởi động của thẻ SD. Tạo một tệp trống có tên "ssh", không có phần mở rộng tệp.

Ngoài ra, hãy mở "cmdline.txt"

Thêm "169.254.10.1" vào cuối tệp và lưu nó.

Rút thẻ SD và lắp vào Raspberry Pi.

Bây giờ chúng ta có thể kết nối Raspberry Pi với nguồn điện và khởi động và kết nối bằng SSH.

Để kết nối bằng SSH, chúng tôi sử dụng chương trình "Putty". Kết nối RPi và PC của bạn bằng cáp ehternet trước khi thực hiện việc đó. Mở Putty và chuyển đến tab SSH và điền vào IP này: 169.254.10.1. Nhấp vào 'kết nối' và bạn sẽ được kết nối.

> Bột trét

Thông tin đăng nhập mặc định được Raspberry Pi sử dụng là 'pi' làm tên người dùng và 'raspberry' cho mật khẩu.

Bước 1.3: Kết nối không dây

Raspberry Pi của bạn hiện đã được bật.

Chúng tôi cũng muốn kết nối với RPi bằng Wifi, theo cách đó chúng tôi không cần cáp ethernet nữa.

Thực hiện dòng sau:

'sudo nano /etc/wpa_supplicant/wpa_supplicant.conf'

Thao tác này sẽ mở trình soạn thảo văn bản 'nano' với các quyền nâng cao.

Thêm các dòng sau vào tệp:

mạng = {

ssid = "SSID"

psk = "Mật khẩu"

}

Thay thế "SSID" bằng SSID của mạng Wifi của bạn

Thay thế "Mật khẩu" bằng mật khẩu của bạn.

Sau đó, thực hiện Ctrl + X và chọn tùy chọn 'có'. Tập tin bây giờ sẽ được lưu.

Bây giờ chúng ta cần khởi động lại dịch vụ mạng

Thực hiện các lệnh sau:

  • 'sudo -i'
  • 'sudo systemctl khởi động lại mạng'

Bạn có thể kiểm tra kết nối internet của mình bằng lệnh wget.

Ví dụ: 'wget google.com'

> Lệnh Wget

Bước 2: Bước 2: Cài đặt phần mềm trên RPi

Đối với dự án này, chúng tôi cần cài đặt một vài thư viện.

  • Mariadb: Cơ sở dữ liệu MySQL (sudo apt-get install mariadb-server)
  • Thư viện Adafruit cho cảm biến màu: Đo màu (pip3 install adafruit-circuitpython-tcs34725)
  • PHPmyAdmin: ('sudo apt install phpmyadmin', chọn máy chủ web apache)

Cũng cài đặt các thư viện pip sau:

  • flask_socketio
  • bình giữ nhiệt
  • flask_cors
  • bảng
  • busio
  • netifaces

Bước 3: Bước 3: Kết nối với Cơ sở dữ liệu MySQL, Tạo Cơ sở dữ liệu

Bước 3: Kết nối với Cơ sở dữ liệu MySQL, Tạo Cơ sở dữ liệu
Bước 3: Kết nối với Cơ sở dữ liệu MySQL, Tạo Cơ sở dữ liệu
Bước 3: Kết nối với Cơ sở dữ liệu MySQL, Tạo Cơ sở dữ liệu
Bước 3: Kết nối với Cơ sở dữ liệu MySQL, Tạo Cơ sở dữ liệu
Bước 3: Kết nối với Cơ sở dữ liệu MySQL, Tạo Cơ sở dữ liệu
Bước 3: Kết nối với Cơ sở dữ liệu MySQL, Tạo Cơ sở dữ liệu

Bước tiếp theo, là kết nối với cơ sở dữ liệu MySQL bằng bàn làm việc MySQL.

> IP a

Thực hiện lệnh 'ip a', như được hiển thị trong hình trên (Nhấp vào liên kết)

Trong hầu hết các tình huống, sẽ có 3 mục được hiển thị. Chúng tôi cần mục nhập 'wlan0'. Sao chép IP bên cạnh 'inet' hoặc trong ví dụ này là '192.168.1.44'

. >> Tạo kết nối mới

Như được hiển thị trong hình trên, hãy tạo một kết nối mới với các tham số sau (Hình ảnh bên dưới cho các tham số)

> Thông số kết nối

Nhấp đúp vào kết nối mới được tạo để kết nối.

Nếu có lời nhắc xuất hiện, hãy nhấp vào 'Có'.

Đây vẫn là một cơ sở dữ liệu trống, vì vậy hãy thêm một số bảng.

Đầu tiên, hãy tạo một lược đồ, để làm điều đó, ở phía bên trái, 'nhấp chuột phải' và chọn 'tạo lược đồ'.

Đặt tên cho lược đồ và xác nhận.

Bây giờ chúng ta cần thêm bảng. Mở rộng lược đồ và 'nhấp chuột phải', 'bảng'.

Tạo lược đồ sau:

> Bảng 1: Màu sắc

> Bảng 2: Các loại cảm biến

> Bảng 3: Các phép đo (Trong hình, 'metingen' được sử dụng, tiếng Hà Lan để đo)

> Bảng 4: Dữ liệu trang web || Bảng 4 dưới cùng

MySQL là một hệ thống cơ sở dữ liệu quan hệ, có nghĩa là chúng ta có thể tạo quan hệ giữa các bảng.

Mối quan hệ đầu tiên mà chúng tôi phải tạo là giữa 'loại_cảm biến' và "phép đo".

Như trong hình, liên kết hai phím.

> Chỉnh sửa bảng và các phím liên kết

Đừng quên lưu các thay đổi bằng cách nhấp vào 'Áp dụng' ở góc dưới cùng.

Đồng thời chỉnh sửa bảng 'website_data' và liên kết 'MetingID'.

Bây giờ chúng ta đã hoàn tất việc tạo các bảng và tạo các mối quan hệ.

Thêm dữ liệu:

Bảng RALcolors là một bảng cố định, nơi các giá trị sẽ không bao giờ thay đổi. Chúng tôi có thể thêm các giá trị này

rất dễ dàng.

> Tải xuống tệp Excel

Tải xuống tệp excel ở trên và chọn tất cả dữ liệu và 'sao chép'. Làm như trong hình ảnh

> Hiển thị bảng

'nhấp chuột phải' vào bảng và chọn 'Dán các hàng'. 'nhấp vào' 'áp dụng' ở góc dưới cùng để thêm dữ liệu.

Bây giờ tất cả các màu RAL được lưu trong cơ sở dữ liệu.

Bây giờ chúng ta chỉ cần thêm sensor_type vào cơ sở dữ liệu.

> Dữ liệu loại cảm biến

Lưu ý: Mô tả của cảm biến bằng 'tiếng Hà Lan'

Bước 4: Bước 4: Filezilla

Bước 4: Filezilla
Bước 4: Filezilla

Để dễ dàng kết nối với Raspberry Pi và chuyển các tập tin, chúng ta có thể sử dụng Filezilla.

> Tải xuống Filezilla

Nộp thông tin chi tiết về kết nối và kết nối. Ở phía bên phải, giờ đây bạn có thể chuyển tệp bằng cách kéo chúng vào.

> Nguồn github

Tải xuống các tệp từ nguồn github ở trên.

Bước 5: Bước 5: Tạo trang web

Bước 5: Tạo trang web
Bước 5: Tạo trang web
Bước 5: Tạo trang web
Bước 5: Tạo trang web

Để lưu trữ trang web, chúng tôi sử dụng PHPmyAdmin và Apache2.

Máy chủ web trên Raspberry Pi sử dụng thư mục '/ var / www / html' làm thư mục gốc.

Nếu bạn đặt tệp của mình ở đó, chúng sẽ được lưu trữ trên IP của Raspberry Pi. (IP = xem 'ip a')

Bạn có thể tải xuống các tệp cần thiết từ repo github của tôi (bước trước)

Trong '/ var / www / html /', dán tất cả các tệp từ thư mục 'Giao diện người dùng'.

> / var / www / html /

Bước 6: Bước 6: Tạo chương trình phụ trợ (Bình)

Phần phụ trợ của trang web dựa trên Flask.

Tất cả các tệp có thể được tìm thấy tại github repo.

Sao chép tất cả các tệp vào bất kỳ thư mục nào trên Raspberry Pi.

Ví dụ: '/ home / pi / colorpicker.

Để tạo một thư mục, hãy điều hướng đến thư mục đích bằng cách sử dụng 'cd', sau đó thực thi 'mkdir'.

Đó là tất cả cho bây giờ. Mã sẽ được giải thích trong các bước tiếp theo.

Bước 7: Bước 7: Phần cứng

> Tải xuống lược đồ

Tạo lược đồ như được hiển thị trong tài liệu ở trên.

LƯU Ý: Cũng thêm một đèn LED màu trắng, với một điện trở (220 hoặc 330 Ohms).

Giải thích phần cứng

HC04

Cảm biến HC04 phát ra sóng, sóng phản xạ và được cảm biến thu lại.

Bằng cách tính toán khoảng thời gian giữa phát và nhận, chúng ta có thể tính được khoảng cách.

Khoảng cách = ((Timestamp_recieve - Timestamp_emit) / tốc độ âm thanh) / 2

Chúng ta chia cho hai vì sóng phản xạ, nghĩa là nó đi được quãng đường hai lần.

LCD

Chúng tôi sử dụng màn hình LCD để hiển thị RGB và HEX, cũng như kết nối IP khi chương trình bắt đầu.

Đối với màn hình LCD này, tôi đã mua một mô-đun I2C. Bây giờ chúng ta chỉ cần 4 dây. SDA, SCL, GND, VCC

Để sử dụng màn hình LCD này, tôi đã viết một lớp Python để dễ sử dụng hơn.

TCS34725

Cảm biến này cho phép bạn đo màu sắc. Chúng tôi sử dụng một thư viện để đo giá trị RGB.

Bước 8: Bước 8: Giải thích mã

Bước 8: Giải thích mã
Bước 8: Giải thích mã
Bước 8: Giải thích mã
Bước 8: Giải thích mã
Bước 8: Giải thích mã
Bước 8: Giải thích mã
Bước 8: Giải thích mã
Bước 8: Giải thích mã

Giao diện người dùng

Giao diện người dùng tồn tại trong ba phần chính.

Đầu tiên là các tệp html, tạo cấu trúc trang web của chúng tôi, nhưng không chứa hoặc bố cục tối thiểu.

Thứ hai, chúng tôi có các tệp css, hoặc tệp kiểu, tạo kiểu và bố cục trang web của chúng tôi.

Cả hai đều khá dễ đọc và dễ hiểu, đó là lý do tại sao tôi sẽ không giải thích chúng.

Cuối cùng, chúng tôi có Javascript, với hai thư viện.

Hai thư viện được sử dụng là SocketIO và URLSearchParams.

SocketIO cho phép bạn gửi tin nhắn từ backend đến frontend và ngược lại.

Tin nhắn có thể được gửi cho một khách hàng, nhưng cũng có thể gửi cho nhiều khách hàng (Phát sóng)

> Socket IO Javascript

> Ổ cắm IO Python

Trong các hình ảnh trên, bạn có thể thấy một trong các kết nối Socket được thực hiện trong dự án này.

Lệnh gửi tin nhắn là 'phát ra', việc nhận được thực hiện bởi 'bật'.

URLSearchParms cho phép bạn nhận các giá trị từ một chuỗi truy vấn một cách dễ dàng.

Chuỗi truy vấn mẫu: example.com/index.html?id=1

URLSearchParams sẽ trả lại cho bạn: {'id' = '1'}

> Ví dụ về URLSearchParams

Chương trình phụ trợ

Phần phụ trợ được viết hoàn toàn bằng Python, với một loạt các thư viện.

Thư viện đầu tiên chúng tôi nhập là 'Flask'. Thư viện này là cần thiết để tạo một API, để thực hiện tất cả các hành động CRUD cho cơ sở dữ liệu MySQL. CRUD là viết tắt của Create Read Update Delete.

> Bình

Hình ảnh trên cho thấy một vài 'tuyến đường' của Flask. Bằng cách lướt đến một tuyến đường, bạn sẽ tự động thực hiện phương thức 'GET', mã sẽ thực thi và bạn sẽ nhận được giá trị từ phương thức trả về. Ngoài ra còn có các phương pháp khác, như 'ĐĂNG' và 'XÓA'. Để kiểm tra các phương pháp như vậy, bạn sẽ cần một chương trình như Postman.

Thư viện nhập tiếp theo là SocketIO, mà tôi đã giải thích trong phần giao diện người dùng.

Tiếp theo là GPIO.

Điều này cho phép bạn điều khiển các chân GPIO của Rapsberry Pi.

Các lệnh quan trọng nhất là:

  • GPIO.setmode (GPIO. BCM) Chọn cấu hình của các chân.
  • GPIO.output (, GPIO. LOW hoặc GPIO. HIGH) Ghi giá trị THẤP hoặc CAO vào một chốt.
  • GPIO.setup (,) Xác định mã PIN làm đầu vào hoặc đầu ra hoặc kéo xuống hoặc kéo lên

Tiếp theo chúng ta có phân luồng.

Các lệnh duy nhất chúng tôi sử dụng là:

  • Chủ đề (target =)
  • .bắt đầu()

Sử dụng các luồng, chúng ta có thể chạy nhiều trường hợp mã cùng một lúc. Bằng cách này, chúng tôi có thể đo khoảng cách và đồng thời, nghe các tin nhắn socket io đến.

Lệnh đầu tiên Thread (target =) sẽ tạo một lớp Thread, ngay khi bắt đầu sử dụng 'start ()', sẽ chạy hàm trong từ khóa 'target', được cung cấp khi tạo lớp.

Tiếp theo, chúng ta có thư viện của bộ tạo màu, khá thẳng về phía trước. Tôi sẽ không giải thích thư viện này, bởi vì các phương pháp rất rõ ràng và được giải thích trong mã.

Cuối cùng chúng tôi có các giao diện mạng. Điều này cho phép chúng tôi truy xuất địa chỉ IP mà chúng tôi sử dụng cho kết nối Không dây và Có dây.

Cuối cùng, tôi đã tự mình thực hiện một số lớp học cho cảm biến khoảng cách, đèn LED và màn hình LCD.

Tôi sẽ không giải thích chúng hoạt động như thế nào.

Bước 9: Bước 9: Tạo trường hợp

Bước 9: Tạo trường hợp
Bước 9: Tạo trường hợp
Bước 9: Tạo trường hợp
Bước 9: Tạo trường hợp
Bước 9: Tạo trường hợp
Bước 9: Tạo trường hợp

Đối với dự án này, tôi đã tạo một vỏ gỗ.

Gỗ nhẹ, mỏng và giá thành không cao.

Như các thứ nguyên tôi đã sử dụng:

  • Chiều cao: 5 cm
  • Chiều rộng: 10,5cm
  • Chiều dài: 12,5cm

Đối với các cảm biến, bạn cần thêm 2 lỗ và đặt chúng cạnh nhau.

Sau khi tạo vỏ, hãy lắp các cảm biến, đèn LED và màn hình LCD.

Bước 10: Các bước cuối cùng

Mọi thứ về cơ bản đã xong.

Bây giờ chúng tôi chỉ phải đảm bảo rằng mã của chúng tôi bắt đầu, thời điểm chúng tôi cắm vào nguồn điện.

Có rất nhiều phương pháp để làm điều này.

> Ví dụ

Chúng tôi sẽ sử dụng phương pháp đầu tiên:

Thực thi dòng này: 'sudo nano /etc/rc.local'

Thêm lệnh của bạn để chạy mã: 'sudo python3'

Lưu tệp bằng Ctrl-X.

Nếu bạn gặp vấn đề khi chỉnh sửa. Thực hiện lại bước này, nhưng trước tiên hãy thực thi 'sudo -i'.

Đề xuất: