Interactive Wall
Motivation
Design a piece of 70" x 120" digital interactive wall art with a high level of detail and finish quality
Explore novel methods for human-computer interaction
Practice new firmware design techniques, specifically:
The challenge of synchronizing a mesh of microcontrollers each interfaced to a plurality of sensors
Use an ALS to control hue/luminosity of LEDs based on ambient conditions
Create a scalable design for both HW and SW
Panelized Design
Each PCB is 10" x 10" with board-to-board connections
Grid of 7 columns by 12 rows (84 total interconnected PCBs)
PCBs are mounted behind frosted white-translucent polycarbonate
Hardware Block Diagram
Sensors
1x Broadcom APDS-9999 Digital Proximity and RGB ALS Sensor [i2c]
1x ST VL53L1 Time of Flight Sensor [i2c]
9x Capacitive Touch Buttons [analog]
1x Knowles SPU0410LR5H-QB Microphone [analog]
Outputs
16x Reverse Mount SK6812 RGB LED [UART]
Communication
MCU to MCU via CAN bus
LEDs can be controlled in central or in distributed configuration
1x XBee Bluetooth will be used to control panel once it is installed [UART]
MCU / Memory
1x STM32F072 Microcontroller
1x Winbond W25Q128JV [SPI]
Firmware Design Overview
main.cpp
Sleep state until interrupt from ALS/ToF
Wake state services sensors via round robin polling
Sensors added/removed from service queue based on activity levels in room
Pertinent sensor data shared to CAN bus after filtering in sense.h
LEDs updated either due to local activity or data received over CAN bus
sense.h
Manages the reading of sensor data
Determines if LEDs should be triggered due to interaction
ALS.h / CAP.h / ToF.h / Mic.h
Device specific drivers
draw.h / LED.h
Controls LED animation routines
Device specific driver for LED
can_comm.h / bt_comm.h
Provide bidirectional endpoints to CAN and Bluetooth