My new project is a Internet of Things kitchen counter LED light strip. The goal was to implement a 21st century light switch using bright and energy efficient LED lights. This required the replacement the mechanical switch with a hand-motion proximity sensor for on and off. Other features include:

  • ESP-01 microprocessor and web server to control the light – an important maker CPU
  • Motion sensor to turn off the light, when the kitchen is unoccupied for a user defined time interval
  • 12 volt power with MOSFET (Adafruit IRLB8721) switch for the LEDs and a 3.3 volt switching regulator for the system components
  • The user interface was to be a simple Web site for status, clock and system configuration, and remote light control, that could also update the ESP-01’s  EEPROM
  • OLED 128×64 display for system status, debug stuff and Wi-Fi network information

The ESP-01 presents a couple of problems, because it only has two GPIO ports. I needed to use the I2C bus to communicate with the OLED, which used both GPIO. So I decided to use an MCP23008 IC to handle interrupts (INPUT) and to control the MOSFET (OUTPUT). This enabled me to use I2C bus and added 8 more GPIO ports.

I used two two proximity devices on this project. The first is the PIR motion sensor. I really like the Parallax, Inc. PIR Sensor – Rev B, because it can operate on 3.3 volts and has a red LED to indicate detection of motion. The second proximity sensor is the Adafruit, VCNL4010 Proximity/Light sensor. It measures both near proximity and ambient light. The VCNL4010 uses the I2C bus to communicate data and it has a configurable interrupt signal.  I used the MCP23008 to handle both interrupts – PIR and VNCL4010.


Breadboard prototype

I added a cool on/off switch from Adafruit as the final touch. The Rugged Metal On/Off Switch with Blue LED Ring – 16mm Blue On/Off looks great.

The software features included: (a) NTP time set, (b) AP mode when the ESP-01 could not connect to its predefined SSID/password, (c) defaults in EEPROM, (d) my version of the VNCL4010 library, (e) my MCP23008 library with interrupt handling, and (f)  RESTful interface for the website configuration stuff.

The next step was to fit everything in a small wooden box that I would mount on the wall.


Beta version in a small wooden box

I had a lot of trouble with the VNCL4010 when it was installed in the box. I need to spend time determining how much of the PCB board needs to be exposed from a hole or mount in the box.  My first attempt blinked on and off after a couple of minutes.

Below is a short video of the light working. I’m planning to move everything to an Adafruit proto-board and finding a smaller box.

Next steps in a couple of weeks.