Mục lục:

Bàn cà phê LED tương tác Arduino: 6 bước (có hình ảnh)
Bàn cà phê LED tương tác Arduino: 6 bước (có hình ảnh)

Video: Bàn cà phê LED tương tác Arduino: 6 bước (có hình ảnh)

Video: Bàn cà phê LED tương tác Arduino: 6 bước (có hình ảnh)
Video: Top 10 Dự án Arduino HOT nhất 2023 - Tự học lập trình Arduino | Top 10 Arduino projects 2024, Tháng bảy
Anonim
Image
Image
Bàn cà phê LED tương tác Arduino
Bàn cà phê LED tương tác Arduino

Tôi đã tạo một bàn cà phê tương tác có thể bật đèn led bên dưới một vật thể, khi vật thể đó được đặt trên bàn. Chỉ các đèn led nằm dưới vật thể đó mới sáng. Nó thực hiện điều này bằng cách sử dụng hiệu quả các cảm biến độ gần và khi cảm biến độ gần nhận thấy rằng một đối tượng ở đủ gần, nó sẽ phát sáng một nút bên dưới đối tượng đó. Nó cũng sử dụng Arduino để đưa vào các hình ảnh động không cần cảm biến khoảng cách, nhưng thêm hiệu ứng thực sự thú vị mà tôi yêu thích.

Cảm biến tiệm cận được tạo thành từ các điốt quang và bộ phát hồng ngoại. Các bộ phát sử dụng ánh sáng hồng ngoại (mà mắt người không thể nhìn thấy) để chiếu ánh sáng ra khỏi bàn và các điốt quang nhận ánh sáng hồng ngoại phản xạ từ một vật thể. Càng nhiều ánh sáng phản xạ (càng gần vật), thì điện áp dao động từ các điốt quang càng nhiều. Điều này được sử dụng như một chỉ báo để cho biết nút nào sẽ sáng lên. Các nút là tập hợp của đèn led ws2812b và cảm biến khoảng cách.

Video đính kèm trình bày toàn bộ quá trình xây dựng, trong khi tôi phác thảo thêm các chi tiết bên dưới.

Quân nhu

  1. Bóng đèn LED ws2812b -
  2. Nguồn điện 5V -
  3. Bất kỳ Arduino nào tôi đã sử dụng 2560 -
  4. Điốt quang
  5. Bộ phát hồng ngoại
  6. Điện trở 10 Ohms
  7. 1 Điện trở MOhms
  8. Tụ điện 47 pF
  9. Bộ ghép kênh CD4051B
  10. SN74HC595 Thanh ghi ca
  11. ULN2803A Mảng Darlington
  12. Bất kỳ chất nền nào để sử dụng làm bảng lớn cho đèn led, tôi đã sử dụng bảng tổng hợp giấy từ kho nhà

Bước 1: Tạo bảng và lắp đèn LED

Tạo bảng và chèn đèn LED
Tạo bảng và chèn đèn LED
Tạo bảng và chèn đèn LED
Tạo bảng và chèn đèn LED
Tạo bảng và chèn đèn LED
Tạo bảng và chèn đèn LED
Tạo bảng và chèn đèn LED
Tạo bảng và chèn đèn LED

Điều đầu tiên tôi làm là tạo bảng chứa các đèn led mà chúng tôi sẽ đặt bên trong bàn cà phê. Tôi sử dụng một mảnh bìa giấy ghép từ kho nhà và cắt nó theo kích thước thích hợp cho chiếc bàn cà phê mà tôi có. Sau khi cắt bảng theo kích thước, tôi khoan tất cả các lỗ cho vị trí của các đèn led. Bản thân bảng có 8 hàng và 12 cột của đèn led ws2812b cách nhau 3 inch và chúng được gắn theo kiểu ngoằn ngoèo. Tôi đã sử dụng keo nóng để cố định chúng tại chỗ.

Tôi cũng phải khoan các lỗ ở trung tâm của cái sẽ trở thành nút: 4 đèn LED ws2812b tạo thành một hình vuông, 2 điốt quang và 2 bộ phát IR trong một hình vuông nhỏ hơn ở trung tâm của nó. 4 lỗ ở trung tâm của nút này sẽ là điểm cho các điốt quang và bộ phát bức xạ (mỗi cái 2 cái). Tôi xen kẽ chúng để đảm bảo độ phơi sáng tối đa và đặt chúng cách nhau khoảng 1 inch ở trung tâm của mỗi nút. Tôi không cần phải dán keo nóng những thứ này vào vị trí, tôi chỉ uốn cong các dây dẫn ở phía bên kia để đảm bảo chúng không bị bung ra phía bên kia. Tôi cũng đảm bảo uốn cong các đầu cực dương và cực âm theo các hướng nhất định để chúng được định hướng chính xác trong mạch. Tất cả các đạo trình dương nằm ở phía bên trái của mặt sau của bảng, trong khi tất cả các đạo trình tiêu cực nằm ở phía bên phải của bảng.

Bước 2: Hiểu về mạch

Hiểu mạch
Hiểu mạch
Hiểu mạch
Hiểu mạch
Hiểu mạch
Hiểu mạch

Lưu ý: Tất cả các bản vẽ hoạt hình không chính xác để thực hiện (một số chân arduino khác nhau, và tôi tạo chuỗi một vài, nhiều hơn về điều đó sau). Kết quả cuối cùng hơi khác một chút do độ phức tạp của mạch, nhưng tất cả các mạch hoạt hình đều đóng vai trò là cơ sở tuyệt vời để hiểu cách tạo nguyên mẫu từng phần. Sơ đồ thông thường và sơ đồ mạch giống như trên PCB được sử dụng trong dự án.

Bạn có thể tìm thấy mã PCB chứa dự án KiCad và các tệp Gerber tại đây: https://github.com/tmckay1/interactive_coffee_tabl…, trong trường hợp bạn muốn tự đặt mua PCB và tạo một dự án tương tự. Tôi đã sử dụng NextPCB để tạo bảng.

Về cơ bản có ba mạch khác nhau tạo nên bảng này. Đầu tiên chúng ta sẽ không đi vào chi tiết và là một mạch đơn giản cung cấp năng lượng cho đèn led ws2812b. Tín hiệu dữ liệu PWM được gửi từ Arduino đến bóng đèn led ws2812b và điều khiển màu sắc nào được hiển thị ở đâu. Chúng tôi đang sử dụng đèn led ws2812b vì chúng có thể được định địa chỉ riêng lẻ, vì vậy chúng tôi sẽ có thể kiểm soát đèn led nào sẽ bật và tắt đèn led nào. Đèn led ws2812b được cấp nguồn từ nguồn điện bên ngoài 5V, do riêng arduino không đủ nguồn để bật tất cả các đèn. Trong sơ đồ hoạt hình đính kèm, họ sử dụng một điện trở kéo lên là 330 Ohms, tuy nhiên tôi không sử dụng nó trong bản dựng của mình.

Mạch thứ hai bật các bộ phát IR. Mạch này sử dụng một thanh ghi dịch chuyển để điều khiển một mảng darlington gửi điện đến các bộ phát IR. Thanh ghi dịch chuyển là một mạch tích hợp có thể gửi tín hiệu CAO và THẤP đến nhiều chân chỉ từ một lượng nhỏ chân. Trong trường hợp của chúng tôi, chúng tôi sử dụng thanh ghi dịch chuyển SN74HC595 có thể được điều khiển từ 3 đầu vào, nhưng điều khiển tối đa 8 đầu ra. Lợi ích của việc sử dụng điều này với arduino là bạn có thể tạo chuỗi tối đa 8 thanh ghi dịch chuyển liên tiếp (arduino chỉ có thể xử lý tối đa 8 thanh ghi trong số đó). Điều này có nghĩa là bạn chỉ cần 3 chân từ arduino để bật và tắt 64 bộ phát IR. Dãy darlington cho phép bạn cấp nguồn cho thiết bị từ nguồn bên ngoài nếu tín hiệu đầu vào CAO hoặc tắt nguồn cho thiết bị đó nếu tín hiệu đầu vào THẤP. Vì vậy, trong ví dụ của chúng tôi, chúng tôi sử dụng mảng darlington ULN2803A, cho phép nguồn điện bên ngoài 5V bật và tắt tối đa 8 bộ phát IR. Chúng tôi sử dụng một điện trở 10 Ohm với các bộ phát IR mắc nối tiếp để có được cường độ dòng điện cực đại từ các bộ phát IR.

Mạch thứ ba sử dụng bộ ghép kênh để nhận nhiều đầu vào từ các điốt quang và gửi đầu ra dưới dạng tín hiệu dữ liệu. Bộ ghép kênh là một thiết bị được sử dụng để lấy nhiều đầu vào mà bạn muốn đọc và chỉ cần một vài chân để đọc từ các đầu vào đó. Nó cũng có thể làm ngược lại (phân kênh), nhưng chúng tôi không sử dụng nó cho ứng dụng đó ở đây. Vì vậy, trong trường hợp của chúng tôi, chúng tôi sử dụng bộ ghép kênh CD4051B để nhận tối đa 8 tín hiệu từ các điốt quang và chúng tôi chỉ cần 3 đầu vào để đọc từ các tín hiệu đó. Thêm vào đó, chúng ta có thể tạo chuỗi tối đa 8 bộ ghép kênh (arduino chỉ có thể xử lý tối đa 8 bộ ghép kênh trong số đó). Điều này có nghĩa là arduino có thể đọc từ 64 tín hiệu photodiode chỉ từ 3 chân kỹ thuật số. Điốt quang được phân cực ngược định hướng, có nghĩa là thay vì được định hướng theo hướng bình thường với dây dẫn dương được gắn vào nguồn điện áp dương, chúng tôi gán dây dẫn âm cho nguồn điện áp dương. Điều này có hiệu quả biến các điốt quang thành điện trở quang, điện trở này thay đổi tùy thuộc vào lượng ánh sáng mà nó nhận được. Sau đó, chúng tôi tạo một bộ chia điện áp để đọc điện áp phụ thuộc vào điện trở thay đổi của các điốt quang bằng cách thêm một điện trở 1 MOhms có điện trở cao vào đất. Điều này cho phép chúng tôi nhận điện áp cao hơn và thấp hơn cho arduino phụ thuộc vào lượng ánh sáng hồng ngoại mà điốt quang nhận được.

Tôi đã theo dõi hầu hết thiết kế này từ một người khác đã làm điều này tại đây: https://www.instructables.com/Infrared-Proximity-S… Trong thiết kế đó, họ cũng thêm một tụ điện 47pF, giống như chúng tôi, đối diện với điện trở 1 MOhm được sử dụng để tạo ra bộ phân áp với các điốt quang. Lý do anh ấy nói thêm là vì anh ấy đang bật và tắt các bộ phát IR bằng tín hiệu PWM và làm điều này đã thu hút một sự sụt giảm điện áp nhỏ từ các điốt quang khi các bộ phát IR được bật ngay lập tức. Điều này làm cho điốt quang thay đổi điện trở ngay cả khi nó không nhận thêm ánh sáng IR từ một vật thể vì bộ phát hồng ngoại chia sẻ cùng nguồn điện 5V với điốt quang. Tụ điện được sử dụng để đảm bảo không bị sụt áp khi bật và tắt bộ phát hồng ngoại. Ban đầu tôi dự định thực hiện cùng một chiến lược này, nhưng đã hết thời gian để kiểm tra nó, vì vậy thay vào đó tôi luôn bật các bộ phát IR. Tôi muốn thay đổi điều này trong tương lai, nhưng cho đến khi tôi thiết kế lại mã và mạch, ngay bây giờ PCB được thiết kế để luôn bật đèn IR và tôi vẫn giữ các tụ điện. Bạn không cần tụ điện nếu bạn đang sử dụng thiết kế PCB này, nhưng tôi sẽ giới thiệu một phiên bản khác của PCB chấp nhận đầu vào bổ sung vào thanh ghi dịch chuyển cho phép bạn điều chỉnh bật và tắt bộ phát IR. Điều này sẽ giúp tiết kiệm rất nhiều điện năng tiêu thụ.

Bạn có thể kiểm tra các sơ đồ hoạt hình đính kèm để biết thiết lập nguyên mẫu để thử nghiệm trên arduino của bạn. Ngoài ra còn có một sơ đồ màu chi tiết hơn cho mỗi mạch phác thảo cách thiết lập và hướng của các thiết bị điện tử. Trong sơ đồ PCB đính kèm, chúng ta có 4 mạch tổng, 2 mạch được sử dụng để bật bộ phát IR và 2 mạch để đọc từ các điốt quang. Chúng được định hướng trên 2 nhóm PCB cạnh nhau với một nhóm bao gồm 1 mạch phát IR và 1 mạch photodiode, để 2 cột 8 nút có thể được đưa vào một PCB duy nhất. Chúng tôi cũng nối hai mạch với nhau, vì vậy ba chân từ arduino có thể điều khiển hai thanh ghi dịch chuyển và 3 chân bổ sung có thể điều khiển hai bộ ghép kênh trên bảng. Có một tiêu đề đầu ra bổ sung để có thể kết nối chuỗi với các PCB bổ sung.

Dưới đây là một số tài nguyên mà tôi đã theo dõi để tạo mẫu:

  • https://lastminuteengineers.com/74hc595-shift-regi…
  • https://techtutorialsx.com/2016/02/08/using-a-uln2…
  • https://tok.hakynda.com/article/detail/144/cd4051be…

Bước 3: Hàn dây tới nút

Hàn dây đến nút
Hàn dây đến nút
Hàn dây đến nút
Hàn dây đến nút
Hàn dây đến nút
Hàn dây đến nút
Hàn dây đến nút
Hàn dây đến nút

Bây giờ bạn đã hiểu mạch được tạo ra như thế nào, hãy tiếp tục và hàn dây vào từng nút. Tôi hàn song song các điốt quang (dây màu vàng và xám) và các bộ phát xạ mắc nối tiếp (dây màu cam). Sau đó, tôi hàn một dây màu vàng dài hơn với các điốt quang song song sẽ được gắn vào nguồn điện 5V và một dây màu xanh lam sẽ được gắn vào đầu vào điốt quang của pcb. Tôi đã hàn một dây dài màu đỏ vào mạch phát IR sẽ được sử dụng để kết nối với nguồn điện 5V và một dây đen sẽ kết nối với đầu vào phát IR của PCB. Tôi thực sự đã làm cho các dây ngắn hơn một chút và hết thời gian, vì vậy cuối cùng tôi chỉ có thể kết nối 5 trong số các nút trong mỗi cột (thay vì 7). Tôi có kế hoạch sửa chữa điều này sau.

Bước 4: Hàn các thành phần PCB và gắn nó vào bo mạch

Hàn các thành phần PCB và gắn nó vào bo mạch
Hàn các thành phần PCB và gắn nó vào bo mạch
Hàn các thành phần PCB và gắn nó vào bo mạch
Hàn các thành phần PCB và gắn nó vào bo mạch
Hàn các thành phần PCB và gắn nó vào bo mạch
Hàn các thành phần PCB và gắn nó vào bo mạch

Lưu ý: PCB trong hình đính kèm là phiên bản đầu tiên tôi tạo ra không có đầu vào và đầu ra nguồn và cũng có một chuỗi daisy out cho mỗi mạch bên trong. Thiết kế PCB mới đã sửa chữa sai lầm này.

Ở đây bạn chỉ cần làm theo sơ đồ PCB để hàn các thành phần vào PCB và sau đó khi hoàn tất, hãy hàn PCB vào bo mạch. Tôi sử dụng bảng mạch bên ngoài để gắn tín hiệu nguồn 5V, tôi đã phân phối cho tất cả các dây màu vàng và màu đỏ. Theo nhận thức cuối cùng, tôi không cần dây màu đỏ và vàng dài như vậy và có thể đã kết nối các nút với nhau (thay vì kết nối chúng với một bảng mạch bên ngoài thông thường). Điều này sẽ thực sự làm giảm số lượng lộn xộn ở mặt sau của bảng.

Vì tôi có 8 hàng led ws2812b và 12 cột, tôi đã kết thúc với 7 hàng và 11 cột nút (tổng số 77 nút). Ý tưởng là sử dụng một mặt của PCB cho một cột các nút và mặt còn lại cho cột kia. Vì vậy, vì tôi có 11 cột, tôi cần 6 PCB (cột cuối cùng chỉ cần một nhóm thành phần). Vì tôi làm dây quá ngắn, tôi chỉ có thể kết nối 55 nút, 11 cột và 5 hàng. Bạn có thể thấy trong hình, tôi đã mắc lỗi và hàn dây thô vào bo mạch, điều này sẽ ổn nếu dây đủ mỏng, nhưng trong trường hợp của tôi thì chúng quá dày. Điều này có nghĩa là tôi đã có các đầu dây bị sờn rất gần nhau cho mỗi đầu vào bộ phát IR và đầu vào điốt quang, vì vậy có rất nhiều lỗi xảy ra từ tất cả các lỗi ngắn dây. Trong tương lai, tôi sẽ sử dụng các đầu nối để kết nối PCB với các dây dẫn trên bo mạch để tránh ngắn và dọn dẹp mọi thứ.

Vì Arduino chỉ có thể tạo chuỗi tối đa 8 thanh ghi dịch chuyển và bộ ghép kênh, tôi đã tạo hai chuỗi riêng biệt, một chuỗi chiếm 8 cột đầu tiên và một chuỗi khác chiếm 3 cột còn lại. Sau đó, tôi gắn từng chuỗi vào một pcb khác chỉ có 2 bộ ghép kênh, để tôi có thể đọc từng chuỗi tín hiệu dữ liệu bộ ghép kênh từ hai bộ ghép kênh đó vào arduino. Hai bộ ghép kênh này cũng được xâu chuỗi bằng daisy. Điều đó có nghĩa là có tổng cộng 16 tín hiệu đầu ra và 2 đầu vào tương tự được sử dụng trong arduino: 1 tín hiệu đầu ra để điều khiển đèn led ws2812b, 3 tín hiệu đầu ra cho chuỗi thanh ghi dịch đầu tiên, 3 tín hiệu đầu ra cho chuỗi bộ ghép kênh đầu tiên, 3 tín hiệu đầu ra cho chuỗi thanh ghi dịch chuyển thứ hai, 3 tín hiệu đầu ra cho chuỗi bộ ghép kênh thứ hai, 3 tín hiệu đầu ra cho 2 bộ ghép kênh tổng hợp từng tín hiệu dữ liệu PCB và cuối cùng là 2 đầu vào tương tự cho mỗi tín hiệu dữ liệu từ 2 bộ ghép kênh tổng hợp.

Bước 5: Xem lại mã

Lưu ý: Ngoài mã tương tác bên dưới, tôi đã sử dụng thư viện của bên thứ 3 để tạo hoạt ảnh cho đèn led ws2812b. Bạn có thể tìm thấy điều đó tại đây:

Bạn có thể tìm thấy mã tôi đã sử dụng tại đây:

Ở trên cùng, tôi xác định các chân arduino sẽ kết nối với từng phần của PCB. Trong phương pháp thiết lập, tôi đặt các chân đầu ra cho bộ ghép kênh, bật bộ phát IR, đặt mảng baseVal theo dõi việc đọc ánh sáng xung quanh cho mỗi điốt quang và khởi tạo FastLED sẽ ghi vào đèn led ws2812b. Trong phương pháp vòng lặp, chúng tôi đặt lại danh sách các đèn led được chỉ định để bật trong dải ws2812b. Sau đó, chúng tôi đọc các giá trị từ các điốt quang trong chuỗi bộ ghép kênh và đặt các đèn led ws2812b trên đó được cho là bật nếu số đọc từ điốt quang trong nút vượt quá một ngưỡng xác định nhất định từ giá trị cơ bản của số đọc ánh sáng xung quanh. Sau đó, chúng tôi kết xuất các đèn LED nếu có bất kỳ thay đổi nào trong nút cần bật. Nếu không, nó sẽ tiếp tục lặp lại cho đến khi có thứ gì đó thay đổi để tăng tốc độ.

Mã có thể được cải thiện và tôi đang tìm cách thực hiện điều này, nhưng có độ trễ khoảng 1-2 giây kể từ khi đèn bật lên sau khi một đối tượng được đặt trên bàn. Tôi tin rằng vấn đề cơ bản là FastLED mất một thời gian để hiển thị 96 đèn led trên bảng và mã phải lặp lại và đọc 77 đầu vào từ bảng. Tôi đã thử mã này với 8 đèn LED và thấy nó gần như ngay lập tức, nhưng tôi đang xem xét điểm hấp dẫn của đèn LED sẽ hoạt động với mã này và gần như ngay lập tức, cũng như cải thiện mã.

Bước 6: Bật Arduino

Bật Arduino!
Bật Arduino!
Bật Arduino!
Bật Arduino!
Bật Arduino!
Bật Arduino!

Bây giờ tất cả những gì bạn cần làm là bật arduino lên và xem chức năng bảng! Sử dụng thư viện hình ảnh động đã đề cập trước đó, bạn có thể đặt một số hình ảnh động led ws2812b thú vị hoặc bạn có thể đặt mã bàn cà phê và thấy nó sáng lên trong mỗi phần. Vui lòng bình luận bất kỳ câu hỏi hoặc ý kiến nào, và tôi sẽ cố gắng liên hệ lại với bạn một cách kịp thời. Chúc mừng!

Đề xuất: