Skip to content

Laurowd/Grow-Led-BitDogLab

Repository files navigation

Grow LED BitDogLab

Firmwares para Raspberry Pi Pico W/BitDogLab que simulam o controle de um grow LED para um projeto de cultivo indoor desenvolvido na residencia EmbarcaTech.

O projeto usa duas placas:

  • grow_led_bitdoglab: placa sensora, le luminosidade e temperatura, calcula a potencia do grow LED e publica os dados via MQTT.
  • receptor_mqtt: placa receptora, assina o topico MQTT, mostra os dados no OLED e replica a potencia na matriz WS2812.

A matriz WS2812 representa visualmente uma iluminacao do tipo grow light: quanto mais luz solar o sensor detecta, menor e a intensidade emitida pela matriz; quanto menos luz solar e detectada, maior e a intensidade dos LEDs.

Recursos

  • Leitura de luminosidade com sensor BH1750 via I2C.
  • Leitura de temperatura pelo sensor interno do RP2040 na placa sensora.
  • Media movel de 10 amostras para reduzir variacao da leitura.
  • Controle proporcional inverso entre luz ambiente e intensidade da matriz.
  • Simulacao visual de grow light em matriz WS2812 5x5 via PIO.
  • MQTT entre placa sensora e placa receptora no topico fazenda/sensores.
  • Display OLED 128x64 via I2C com lux atual, temperatura, potencia do grow LED e barra de intensidade.
  • Saida serial via USB para monitoramento.
  • Modo de seguranca: se o BH1750 falhar, os LEDs ficam em 100%.

Contexto

Este projeto foi feito como uma simulacao embarcada para um sistema maior de cultivo em ambiente residencial/controlado. A ideia e demonstrar a logica de controle de iluminacao suplementar:

  • sol forte: a matriz reduz a emissao;
  • sol fraco ou ambiente escuro: a matriz aumenta a emissao;
  • falha de leitura do sensor: a matriz assume potencia maxima.

Observacao: a matriz WS2812 RGB simula visualmente a cor/intensidade de grow LEDs. Para uma aplicacao agricola real, o espectro luminoso deve ser validado com LEDs apropriados e datasheet do fabricante.

Hardware

O projeto usa pico_w como placa padrao no CMake.

Modulo Barramento / sinal Pino
BH1750 I2C0 SDA GP0
BH1750 I2C0 SCL GP1
BH1750 Endereco I2C 0x23
OLED SSD1306 I2C1 SDA GP14
OLED SSD1306 I2C1 SCL GP15
OLED SSD1306 Endereco I2C 0x3C
Matriz WS2812 5x5 Dados GP7

As duas placas usam a mesma pinagem para OLED e matriz. A placa sensora tambem usa o BH1750 em GP0/GP1.

Diagrama de Conexoes

flowchart LR
    Pico["Raspberry Pi Pico W / BitDogLab"]
    BH["BH1750\nSensor de luz"]
    OLED["OLED SSD1306\n128x64"]
    LEDS["Matriz WS2812\n5x5"]

    Pico -- "GP0 / I2C0 SDA" --> BH
    Pico -- "GP1 / I2C0 SCL" --> BH
    Pico -- "GP14 / I2C1 SDA" --> OLED
    Pico -- "GP15 / I2C1 SCL" --> OLED
    Pico -- "GP7 / PIO data" --> LEDS
Loading

Logica de Controle

Os limites atuais estao definidos em grow_led_bitdoglab.c:

#define LUX_SOL_FRACO 50
#define LUX_SOL_FORTE 800
  • <= 50 lux: grow LED em 100%.
  • >= 800 lux: grow LED em 0%.
  • Entre esses valores: potencia proporcional inversa.

Requisitos

  • Raspberry Pi Pico SDK 2.2.0 ou compativel.
  • Toolchain arm-none-eabi.
  • CMake e Ninja ou Make.
  • picotool opcional, para gravar via linha de comando.

Configuracao local

As credenciais de Wi-Fi e o endereco do broker MQTT ficam em secrets.h, que nao e versionado.

Antes de compilar, copie o exemplo e ajuste os valores:

cp secrets.example.h secrets.h
#define WIFI_SSID "sua_rede"
#define WIFI_PASS "sua_senha"
#define MQTT_BROKER "192.168.0.100"

Build

Se o ambiente do Pico SDK ja estiver configurado:

cmake -S . -B build
cmake --build build

Se precisar informar o SDK manualmente:

cmake -S . -B build -DPICO_SDK_PATH=/caminho/para/pico-sdk
cmake --build build

Os firmwares serao gerados em:

build/grow_led_bitdoglab.uf2
build/receptor_mqtt.uf2

Grave grow_led_bitdoglab.uf2 na placa sensora e receptor_mqtt.uf2 na placa receptora.

Para compilar apenas um deles:

cmake --build build --target grow_led_bitdoglab
cmake --build build --target receptor_mqtt

Gravacao

Modo BOOTSEL

  1. Segure o botao BOOTSEL da placa.
  2. Conecte a placa ao USB.
  3. Copie o UF2 desejado para o volume USB que aparecer.

Picotool

Com a placa em modo BOOTSEL:

picotool load build/grow_led_bitdoglab.uf2 -fx

Para a placa receptora:

picotool load build/receptor_mqtt.uf2 -fx

Monitor Serial

A saida serial USB e habilitada no CMake:

pico_enable_stdio_usb(grow_led_bitdoglab 1)
pico_enable_stdio_uart(grow_led_bitdoglab 0)
pico_enable_stdio_usb(receptor_mqtt 1)
pico_enable_stdio_uart(receptor_mqtt 0)

A placa sensora publica payloads MQTT como:

{"lux":450,"temp":26.4,"led":55}

A placa receptora espera esse payload no topico fazenda/sensores. A temperatura exibida no receptor vem da placa sensora pelo campo temp.

Os firmwares imprimem leituras como:

Wi-Fi:conectado (10.101.105.184) | MQTT:conectado | LUX:123.4 | TEMP:26.4 C | LED:90%

Estrutura

.
|-- CMakeLists.txt
|-- grow_led_bitdoglab.c
|-- receptor_mqtt.c
|-- lwipopts.h
|-- pico_sdk_import.cmake
|-- secrets.example.h
`-- ws2812.pio

Observacoes

  • O display OLED e o BH1750 usam barramentos I2C diferentes.
  • A ordem fisica da matriz WS2812 e tratada em zigue-zague pela funcao matrix_index.
  • Nao ha mais leitura/publicacao de umidade neste projeto.
  • O arquivo secrets.h e local e fica ignorado pelo Git.

About

Firmware para Raspberry Pi Pico W/BitDogLab que simula um grow LED inteligente, ajustando uma matriz WS2812 conforme a luminosidade medida por BH1750 e exibindo dados em OLED.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors