"Fiat Lux - Hãy có ánh sáng": (Phần 2) Viết code BLINK thần thánh cho neopixel WS2812

Mô tả dự án: 

Đây là phần 2 cho tutorial hướng dẫn cách lập trình LED 3 màu neopixel WS2812. Vì mỗi module LED là 1 mạch IC nên cách sử dụng hơi rắc rối hơn so với LED thông thường. Các bạn chú ý nha!

Tiếp nối:

Các bạn có thể xem phần trước tại đây để thuận tiện hợn cho cuộc chiến laugh Tại Đây

Phần cứng:

Mỗi module neopixel có 4 chân:

  • 5V: Nối với nguồn 5V 
  • GD: Nối đất
  • DIN: nối với bất kỳ digital pin nào của Arduino (pin 6 trong phần code dưới)
  • DOUT: nối với DIN của module neopixel kế tiếp (hoặc bỏ trống)

Ngoài ra bạn nên gắn thêm 1 tụ 1000 microFarad 6,3V giữa 2 chân 5V và GD để ngăn dòng lớn khi mới gắn nguồn vào module. Ngoài ra, bạn cũng nên gắn nối tiếp 1 trở 300 đến 500 Ohm giữa Arduino pin và DIN để bảo vệ DIN của neopixel. 

 

 

Phần mềm:

Bước 1: Bạn vào trang đây và tải thư viện về.

Bước 2: Code thoai:

#include <Adafruit_NeoPixel.h>

#define PIN 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);

void setup(){  

    strip.begin();  
    
    strip.show();
}

void loop(){

    strip.setPixelColor(0,50,0,0);
    
    strip.show(); delay(1000);
    
    strip.setPixelColor(0,0,50,0);
    
    strip.show(); delay(1000);
    
    strip.setPixelColor(0,0,0,50);
    
    strip.show();
    
    delay(1000);

}

 

Hướng dẫn phần cơ bản của code

Đầu tiên là phần khai báo lớp:

Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);

Ở đây 1 là số pixel bạn muốn điều khiển. Ví dụ bạn có vòng 24 LED trong phần trước thì sửa 1 thành 24.

strip.setPixelColor(0,50,0,0)

Đây là câu quan trọng nhất:

  • Biến đầu tiên là số thứ tự LED bạn muốn điều khiển, tính từ zero. Ví dụ: bạn muốn điều chỉnh màu của LED thứ 3 thì câu lệnh sẽ là strip.setPixelColor(2,x,x,x)
  • Ba biến cuối là độ sáng của màu đỏ, lục, lam (từ 0 đến 255). Ví dụ: bạn muốn chỉnh LED thứ 2 sang màu tím hường (đỏ + lam) thì câu lệnh sẽ là strip.setPixelColor(1, 255,0,255). 

Cuối cùng là câu lệnh bắt buộc để bắt Arduino gửi xung ra lệnh cho neopixel thực hiện việc đổi màu:

strip.show()

Nếu không có câu này thì sẽ không có gì xảy ra đâu nhé!

Mẹo vặt

  • Nếu bạn thích 1 màu mà không biết mã RGB của nó là gì, bạn có thể vào trang sau để tìm: http://www.psyclops.com/tools/rgb/
  • Bạn có thể gán 1 biến uint32_t cho 1 màu nào đó rồi sau này gọi lại cho tiện. Ví dụ: bạn có thể sửa LED thứ 6 thành màu hường bằng cách sau:
uint32_t magenta = strip.Color(255, 0, 255); 

strip.setPixelColor(5, magenta); 

strip.show();
  • Mỗi neopixel xơi khoảng 3 bytes RAM nên bạn nhớ lựa em Arduino nào khỏe khỏe 1 xí nếu bạn dùng nhiều pixel.

Gợi ý nâng cao:

  • Viết lại code trong bài làm đèn xe cảnh sát pikachu trong bài http://arduino.vn/bai-viet/227-lam-den-nhap-nhay-tren-xe-canh-sat với 1 neopixel duy nhất.
  • Viết code hiệu ứng cầu vồng trong bài http://arduino.vn/bai-viet/530-lam-nao-de-dieu-khien-led-rgb-led-3-mau. cho 1 neopixel.

Bài kế tiếp tui sẽ viết tiếp hướng dân làm mood lamp (đèn tự kỷ) với neopixel. wink

lên
22 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Hướng dẫn sử dụng cảm biến nhiệt độ DS18B20 (-55°C đến +125°C) sai số ±0.5°C

Lại quay về vấn đề đo nhiệt độ, như ở bài trước, mình đã dùng cả LM35, cả TMP36. Nhưng rốt cuộc vẫn không hiệu quả, lần này mình đang sử dụng con DS18B20 này và cảm thấy khá ổn hơn so với lần trước. Nhiệt độ ít bị chênh lệch hơn và như quảng cáo là chỉ có sai số ±0.5°C thôi (nếu nhiệt độ trong phạm vi -10°C to +85°C, đáng để thử phải không nào?

lên
18 thành viên đã đánh giá bài viết này hữu ích.

Hướng dẫn sử dụng cảm biến nhiệt độ TMP36 - Khoảng đo từ -40 đến 125 độ C

Mình thấy cảm biến nhiệt độ LM35 rất rẻ và hoạt động cũng tương đối chính xác. Tuy nhiên, độ bền của nó không cao vì mình thấy mình chỉ dùng cảm biến LM35 trong khoảng thời gian 3 tháng, sau đó phải thay cảm biến khác (để đo nhiệt độ luộc gà). Bản thân mình không thích điều đó nên thử dùng một cảm biến khác cũng có chức năng tương tự là TMP36 và thấy nó hoạt động bền hơn (đã đến tháng thứ 4 nhưng chưa hư). Mình xin chia sẻ với các bạn nhé. Loại này hơi khó tìm và không thông dụng, nhưng nó bền hơn hẳn LM35 các bạn nhé.

lên
10 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

"Fiat Lux - Hãy có ánh sáng": Giới thiệu về Neopixel WS2812

Đây là chuỗi bài viết về 1 loại bóng LED RGB (WS2812) mà tui chưa thấy ai viết trên cộng đồng. Hôm nay, bạn sẽ biết được vì sao người ta lại có thể điều khiển nhiều LED RGB thế trong khi nó đến 3 chân xung.

lên
25 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 

Raspberry Pi Thiên Lý Nhãn (Phần 1): Time-Lapse

Trong bài "Đi học thoai" (Phần 3) (http://arduino.vn/bai-viet/994-di-hoc-thoai-phan-3-time-lapse-cuoi-ngay-...) tui có hướng dẫn các bạn làm hiệu ứng time-lapse với Raspberry Pi camera. Tuy nhiên giá 1 module camera khá chát so với túi tiền sinh viên. Nếu bạn có 1 cái webcam không sử dụng đâu đó trong nhà thì vẫn có thể làm được, có điều là độ phân giải thấp hơn nhiều thôi. (đa phần webcam có độ phân giải khoảng 1MP trở xuống, trong khi Pi Camera có độ phân giải 5 đến 8 MP tùy phiên bản).

lên
12 thành viên đã đánh giá bài viết này hữu ích.