I have started migrating content to my Hugo blog at https://blog.cavelab.dev, already migrated pages will redirect there.

Lights and relays controller with 3 channels

From CaveLab
This page is kept for historical interest. It may document projects or methods that are obsolete and/or no longer relevant. The information here is not kept up-to-date.

This module was part of the rack box project — which was terminated when I moved out of my first apartment.
LCU installed in the Rack box

Control three lights or relays, with toggle switches and status LEDs. Uses an AVR ATtiny2313 microcontroller.


This was one of the first modules installed in the rack box project, I used it to control some lights and the sub-woofer in my old apartment. It had three operator panels; in the living room, entryway and as part of the status panel for Rack box project. Momentary switches were used to either show the status, or if held for more than one second, toggle the outputs.

The goal of this lights and relay controller was very simple; allow control of the lights and sub-woofer from more than one location and by using automation. When receiving an switch input pulse longer than one second, the controller would toggle that respective output and show the current state on the status LED. This made it very easy to connect multiple switches, since they didn't need to know anything about the current state. For automation purposes however the output status also had to be read, either using the status signal for that output, or the output itself. The output state was stored in EEPROM, and restored when the module powered up.

The status LEDs were only enabled when a switch input was active, and two seconds after. So during normal operation all status LEDs would be turned off. That way the current state could be checked by an switch input pulse shorter than one second, without toggling the output.

In my old apartment; I used this module to control:

  • Living room lights
  • Sound system sub-woofer
  • Computer desk lights

Delayed all-off

45 seconds after the delayed all-off input was triggered; all outputs were turned off. During that countdown all the status LEDs were flashing, and the flashing pattern speed increased for the last 10 seconds. By activating any of the switch inputs the all-off countdown was aborted.

Auto light

The auto light input was used by the Intruder alarm system controller to turn on the lights when someone enter the apartment. The IR sensor input were used so that the lights would stay on as long as there was movement. Two minutes after the movement stopped the lights would turn off.

Operator panels

I had three operator panels;

  • In the living room, used to control the living room lights and sub-woofer.
  • On the computer desk, as part of the status panel for Rack box project, this could control all three outputs.
  • In the entryway, used to control the living room and desk lights, and activate the delayed all-off function.

By using two-way momentary toggle switches, I could control two outputs using the same switch.


220VAC relays were used turn the lights and sub-woofer on and off. I made short extension cables though the relay, and thin signal cables going from the controller module activated the relays.


  1. Lamp living room
  2. Subwoofer
  3. Lights and printer on desk
  4. Lights living room (handled by Multi-purpose module 1)



  1. Switch channel 1
  2. Switch channel 2
  3. Switch channel 3
  4. IR Sensor (from Multi-purpose module 1)
  5. Lights out 45 sec
  6. Auto light 2 min
  7. Lights out


  1. Relay 1
  2. Relay 2
  3. Relay 3
  4. LED 1
  5. LED 2
  6. LED 3
  7. Lifelight
  8. Lifesignal (to Module stability monitoring unit 2)



  • Red +5V
  • Black 0V
  • Brown Lifesignal
  • White IR sensor
  • Green Lights out 45 sec
  • Orange Auto light 2 min
  • Blue Lights out


  • White Switch 1
  • Orange Switch 2
  • Green Switch 3
  • Yellow Relay 1
  • Blue Relay 2
  • Red Relay 3
  • Brown LED1
  • Black LED2
  • White (clear) LED3



  • Blue LED 1 -
  • Purple LED 2 -
  • Red LEDs +
  • Yellow Switch 1 -
  • Green Switch 2 -
  • Black Switch lights out 45 sec
  • White Switches common

Living room

  • Red +12V
  • Black 0V
  • Yellow Relay subwoofer -
  • Green Switch lamp
  • White Switch subwoofer
  • Orange LED lamp
  • Brown LED subwoofer
  • Blue Relay living room lights - (N.C)

Source code

Bascom-AVR source is available in a git repository:


Schematic drawing


Parts list

Qty. Part
1 × AVR ATtiny2313-20PU, DIL-20, 20 MHz, 18 I/Os
1 × Capacitor, aluminium electrolytic, 10 µF, 25V
2 × Capacitor, ceramic, 22 pF, 100V
1 × Capacitor, ceramic, 1 nF, 100V
1 × DIL socket, 20-pin, 7.62mm
1 × Enclosure, plastic (1591), 100x50x25mm
1 × LED 5mm coloured clear, Green, 2.1V, 20mA, 30mcd, 10°
1 × LED holder 5mm, RTC51, black plastic
32 cm2 PCB, stripboard, 100x160mm, 160cm2
1 × Quartz crystal oscillator, 4 MHz
8 × Resistor, carbon film, 0.25W, 330 Ω, 5%
8 × Resistor, carbon film, 0.25W, 4.7 kΩ, 5%
7 × Resistor, carbon film, 0.25W, 10 kΩ, 5%
7 × Transistor, NPN, 100 mA, 45V, 0.5W, BC547B