Introduction: Arduino: Pushing the Limits || Power-plugin Timer.

About: motaz bany-amer!! jordan 2/7/1994 Yarmouk university - jordan work at Genotronex lab, IEEE YU Robotics Team, YES yarmouk engineering students, hijjawy art engineers. =-=-=-=-=-=-=-=-=-=-=-=-=-=-= facebookhtt…

Once I had a problem with charging my laptop while I'm sleeping, the laptop is fully charged within about 3Hrs , It's kind of dangerous to let the charged pluged the whole night, and there is some chance to damage the laptop battery. (most laptops now have system prevent the over charging, but it still wise move to not connect the charger to any device for long time)

I came up with this idea, to make a power plug with timer, that will disconnect the power from the plug, do the charger is not connected to any power any more, and you are safe!

This instructable shows how to make your own timed plug_In , so that you can control the time the power is delivered to the plug and the device pluged to it. you can program the project with any setting you want as your needs, in this project I have set the time to 6 options (1-6 Hours). the timer basicly depends on the arduino and its timers to achive the time needed.

this project can be usefull in many cases, for examle if you want to charge your phone or laptop at night for some duration, or use it for any other device that should be turned off after some specific time.

here I will show how to simply make your own timed plug. with 6 options for timing ..


1. arduino uno
2. atmega 328p (arduino uno mcu)
3. 7segmants display(you can use 2 or 3 if you want to be more specific in showng time , or simply an LCD)
4. small breadboard(any one should do of course).. or you can use solder-prototyping board.
5. 5v-DC source (I have used an old phone charge, and you can use a 9V battery with [8705]-voltage regulator )
6. power plug-in
7. two pushbuttons(for this example, and you can use as your application needs)
8. 16MHZ crystal
9. two 22pF capacitors.
10. wires and jumbers (better use short ones or 22g wire and cut it off to peices as your connections )
11.relay with rating 220V or 110V as your country supply, or highr as your applicatin needs. ( the rule is ti use a relay with voltage and current ratings that will handle power needs.)

Step 1: Project Theory

in this step I will show what this project do with some technical details.

the project uses arduino uno controller (atmega328p) with with a relay, to connect or disconnect the power of a plug, when you need to use the plug, you set the timer to some duration (2 Hrs for example, as you need to) and you connect the device to the plug. after (2Hrs) the power will be disconnected automatically from the device even if its pluged in. there are 2 buttons, one to set the time(increas duration to the next level), the other to reset time from 0.

a seven segment displsy used here to show the time left in Hrs . you can use two, to show more detailed time , or even an LCD or any display type you want.

the whole timing process is based on the arduino timers, I used arduino timer 1 to make a counter that increases within some duration, whith the increasing duration known, and the counts known, you can make a timer for specific time. the procedure will be explained in next steps.

of course arduino can't handle 220V or 110V line, or any voltage higher than 5V. to give the arduino the ability to handle such a high voltage, we will use a relay.
the relay is a high voltage electromagnetic switch, it can control a high voltage line with a low voltage input. the aduino will suply the relay with a 5v digital signal, to make it close or open the high voltage line.

after the relay terminal, the line will be connected to the plug, if the arduino give a signal to the relay to open the circuit the plug will have no power to supply to any device connected, when the arduino give the reality a signal to choose the line, the relay swich eill close and the plug can spit power then!

the system will have power from a 5v charger, the charger will be connected directly to the line, and the 5v output will be supplied to the system.

Step 2: First Prototyping - Controller Side, Theory.

in this step i will show the assembly of the arduino with the 7 segment , and the 2 buttons, then i will show how we can use the arduino microcontroller alone without the arduino board, the purpose of that is to reduce the space of the final assembly so you can inclose it within plug house.

we will use in this step a breadboard, just to insure the system works fine! then we will use a solder prototyping board, to make the system as small as possible, this thing is optional and it will be explained in next step, and i will provide another option for who don't have the ability of making it.

first connect the 7 seg to the arduino. I will suppose you know how to use it, because my target is to show an application.
follow the connection in the pictures. of course you can make your own connection, and you need to keep in minde the pins you connected the 7seg to them, because you will reconnect the same connection two more times!

now connect the buttons with the arduino, as shown in the pictures.

now you are ready to upload the code..
to the next step..

Step 3: First Prototyping - Controller Side, Code Implementation.

now we will make a solder less standard prototype of the project, we will use a medium size breadboard, with all part on it, we will connect them with the Arduino directly, just to see how our product works. This step will be important to any one who has his first time working with the Atmega328 directly without the Arduino uno development board, you can skip this step and go directly to the next step if you are familiar with the connecting the circuits to the atmega or simply you don’t want to do this step, HOWEVER, you need to see the illustration of the working principle from this step! LET’s START:

Let’s start with the timer, you can see this instructable to learn about Arduino timers and how to setup them, of course I have posted the code for the project, I just want to show how to build such thing and maybe you want to modify the project to fit your needs.

In this project I used Arduino Uno timer1 to make a 1Hz frequency ISR, this means the ISR will happen every 1 second, we can start from this point! Making a counter in the ISR, that will count the seconds, will give us the ability to count the time with minuets/Hours/Days or any duration of time, by counting the seconds!

Let’s make a counter named secondsCounter. well, we can find the number of seconds in a Hour by multiplying: 1Hour * 60minuit * 60 seconds, that give us 3600. Now if we give this number to a counter inside a timer, that we already know that it clocks every 1 second, and tell the counter inside its ISR to decrease by 1 every time it clocks, then, the timer will reach 0 after 1 Hour, so when it reaches 0, we know that we have a 1 hour passed! And that what we want!

Now let’s multiply this number by, 2,3,4,5,6. the resulting numbers will give us the number that should be inside the counter to make it count the time for 2,3-6 Hours, and that what we want. In these simple tricks our program now can know Hours!

You can see how I have implemented this idea in the code attached to this step, and you can see my instructable about timers to learn how to do it!

For now, we learned how the timer program will work and count hours! Now, we will setup two buttons, one will activate the timer, the other will stop and reset the timer. The loop () for now is empty, and our main program has no instruction to follow, this benefit came from the timer feature, that give us the ability to add functions the loop without fearing the time functions (delay for example or a while loop that will prevent the program from responding to the functions) the point is, WE CAN ADD IF STATEMENTS INSIDE THE LOOP AND BE SURE OUR PROGRAM RESPOND TO IT IN REAL TIME, so we need to add if statements for the set and reset buttons. In my code, I’ve setup the pins handling the buttons, to INPUT PULLUP mode, this will let us connect the buttons without resistors and expecting 0 state to activate the If statement, if this point is not clear, please read about the INPUT PULLUP mode in the Arduino, and see the code to know what have I done, and of course in your code, you can do whatever you see best.

Inside the Set control statement, we will do the next steps:

1. We will make a variable that will handle the Hours number, and increase it by 1, inside the if statement. And we will make sure the counter will not exceed the maximum time your timer will reach, I setup my timer to 6 hours max, and you can change this as you like, with the appropriate changes)

2. Now we have the Hourse number, lets make a variable that will handle the number of seconds every Hour-number represents, and store in it the right number of seconds the duration needs.(see the code to get this point clear).

3. Now pass that number to the seconds counter in the timer.

4. One last important thing, ACTIVATE THE TIMER, by set 1 inside TOIE1 bit (see the the instructable posted in first step to learn about timers).

Inside the reset control statement, we will reset all variables and objects to the initial state, so the timer will start working the next time you run it, from the starting point, and of course, YOU NEED TO DISABLE THE TIMER, by clear the TOIE1 bit (see the code and the instructable about timer)

The tings still we have to do is very simple, now we know the Hours, when the timer is activated.

The timer is activated when you press the set button, so, the relay, and an indication LED will have their signals (digital 1 or 0 depending on your connections) to work ( in mine, a digital 1 lights the LED, and a digital 0 connects the relay).

The LED and the relay will turn off, when a reset is called, or when 0 Hours (the seconds counter reach 0 )

Finally, the last thing to do is to show the Hours left, we setup the 7seg display in functions that call a number, then we call the function in when the timer counter reach its seconds value. This is shown in the code, it will be more clear.

NOW, This is the code :

Please let me know in a comment if there is a problem or something wrong or unclear in the code or this step.

This code is developed to a project : Timer Power Plug. puplished on instructables created by : Motaz Bany-Amer 2/9/2016 */ /* this code will derive an arduino uno(or mega) with the components : ~common_cathode 7Seg ~LED ~2push buttons ~relay and ~external power plug. the product will connect/disconnect the power to a ~plug connected to the ~relay the user will be abel to connect/disconnect the power to the ~plug with specific durations the duration (in Hours) will be shown on a ~7Seg display, and can be set will a 2 ~pushbuttons a ~pushbutton to set the time, the other to reset the timer.

The prograram uses the arduino timer 1 to achive 1Hz frequancy interrupt (overflow interrupt) by adding some counters, it can manage the time with hours. the code is commented with max possible details. and it can be modified easly. */ //*******************************************

//duration initialization #define hour0 0 //0 Hour in Seconds #define hour1 3600 //1 Hour in Seconds #define hour2 7200 //2 Hours in Seconds #define hour3 10800 //3 Hours in Seconds #define hour4 14400 //4 Hours in Seconds #define hour5 18000 //5 Hours in Seconds #define hour6 21600 //6 Hours in Seconds

//7Seg pins #define a 2 #define b 3 #define c 4 #define d 5 #define e 6 #define f 7 #define g 8

#define del 250 //deboncing delay

#define indicationLed 13 //to indicate the timer is active #define timeSettingBtnPin 11 //connect setting Button Input to this pin #define timeResetBtnPin 12 //connect reset Button Input to this pin #define relayPin 9 //connect the relay input to this pin

//7Seg show num functions /* please note that these functions are valid for a coomon cathode 7seg display these functions can be used with a common anode display by reversing 0's and 1's i.e common cathode : digitalWrite(a,1); common anode : digitalWrite(a,0); */ void num0() { digitalWrite(a, 1); digitalWrite(b, 1); digitalWrite(c, 1); digitalWrite(d, 1); digitalWrite(e, 1); digitalWrite(f, 1); digitalWrite(g, 0); } void num1() { digitalWrite(a, 0); digitalWrite(b, 1); digitalWrite(c, 1); digitalWrite(d, 0); digitalWrite(e, 0); digitalWrite(f, 0); digitalWrite(g, 0); } void num2() { digitalWrite(a, 1); digitalWrite(b, 1); digitalWrite(c, 0); digitalWrite(d, 1); digitalWrite(e, 1); digitalWrite(f, 0); digitalWrite(g, 1); } void num3() { digitalWrite(a, 1); digitalWrite(b, 1); digitalWrite(c, 1); digitalWrite(d, 1); digitalWrite(e, 0); digitalWrite(f, 0); digitalWrite(g, 1); } void num4() { digitalWrite(a, 0); digitalWrite(b, 1); digitalWrite(c, 1); digitalWrite(d, 0); digitalWrite(e, 0); digitalWrite(f, 1); digitalWrite(g, 1); } void num5() { digitalWrite(a, 1); digitalWrite(b, 0); digitalWrite(c, 1); digitalWrite(d, 1); digitalWrite(e, 0); digitalWrite(f, 1); digitalWrite(g, 1); } void num6() { digitalWrite(a, 1); digitalWrite(b, 0); digitalWrite(c, 1); digitalWrite(d, 1); digitalWrite(e, 1); digitalWrite(f, 1); digitalWrite(g, 1); }

//counters /* the volatile key word, is prefered to be used in any program, specially where there an ISR in your code the function of this key word, is to teel the compiler that this variable, is very important, so it does not delete it or miss with it unless the code tell it so. you can see arduino referance, or any c/c++ referance available, to learn more about it. any way, I ADVICE TO USE IT. */ volatile long secondsCounter = 0; //this counter will count the seconds the timer steps volatile byte hoursCounter = 0; //this counter will count the hourse every time the second counter reachs 3600 volatile long secondsNeeded = 0; // volatile byte hoursSetting = 0; //a variable to handle the user input, to set the time wanted.

volatile boolean timeSettingBtnState = 0; //hold the state of the pin 1/0 volatile boolean timeResetBtnState = 0; //hold the state of the pin 1/0

void setup() { //Buttons pins setup /* set them to pullup mode so we dont have to use an external resistor of curse the input signal will have to be digial 0 (PULLUP INPUT MODE) */ pinMode(timeSettingBtnPin, INPUT_PULLUP); pinMode(timeResetBtnPin, INPUT_PULLUP); //7 segmant pins setup pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); //indication Led on pin 13, to indicate the timer is activated. //IT's NOT ESSENTIAL, YOU CAN DELETE IT IF YOU WANT, i just like to add it in my timer. pinMode(indicationLed, OUTPUT); //set the indicationLed to OUTPUT state to derive the LED pinMode(relayPin, OUTPUT); //set the relayPin to OUTPUT state to derive the relay

//timer setup noInterrupts(); // disable all interrupts TCCR1A = 0; TCCR1B = 0; TCNT1 = 3036; // preload timer 65536-16MHz/256/1Hz TCCR1B |= (1 << CS12); // 256 prescaler TIMSK1 &= ~(1 << TOIE1); //disable timer interrupt interrupts(); // enable all interrupts //Serial setup /* Serial monitor is just used for debigging and monitorring variables values IT IS NOT ESSENTIAL, YOU GET RED OF IT,IF YOU WANT! AND EVERY SERIAL COMMAND IN THIS CODE AS WILL. */ Serial.begin(9600); //initial state of the timer /* the initial state is, the timer is set is 0 the timer is disabled and the indicationLed is turned off */ secondsCounter = 0; num0(); digitalWrite(indicationLed, 0); /* the relay has two outputs terminals, NC (normally closed) NO(normaaly opened. the state of the IN to the relay defines where the relay is connected I have connected my plug to NO terminal, and these settings work for me you can change(reverse) these setting as your relay or connection you can use an LED with a Resistor to check the settings(connect 5v with a RES to COM, and a LED to NO, when you OUTPUT digital 0 on the relay IN pin, the LED is ON) */ digitalWrite(relayPin, 1); } ISR(TIMER1_OVF_vect) // interrupt service routine that wraps a user defined function supplied by attachInterrupt { //every 1 hour, the value shown on the 7 seg, decreased. if (secondsCounter == hour0) //when the counter reach 0, show 0 and turn off led. { num0(); //turn off every thing digitalWrite(indicationLed, 0); digitalWrite(relayPin, 1); //set all variables to initial state, because the counter has finished hoursCounter = 0; hoursSetting = 0; secondsNeeded = 0; } if (secondsCounter == hour1)//when the counter reach hour1 seconds value, show 1. { num1(); } if (secondsCounter == hour2) { num2(); } if (secondsCounter == hour3) { num3(); } if (secondsCounter == hour4) { num4(); } if (secondsCounter == hour5) { num5(); } if (secondsCounter == hour6) { num6(); }

secondsCounter--; //decrease the counter every second Serial.println(secondsCounter); //debugging TCNT1 = 3036; // preload timer, to ensure the ISR run every 1secound } void loop() { //update the state of the leds timeSettingBtnState = digitalRead(timeSettingBtnPin); timeResetBtnState = digitalRead(timeResetBtnPin);

if (!timeSettingBtnState) //seting button presed { delay(del); //debouncing hoursSetting++; //increase the time setting by 1 if (hoursSetting > 6) //the max hours the timer can be set to is 6 { hoursSetting = 0; } //debuging Serial.print("H : "); Serial.println(hoursSetting);

digitalWrite(indicationLed, 1); //turn on the led, to indicate the timer is active digitalWrite(relayPin, 0);

//setting options conditions if (hoursSetting == 0) { secondsNeeded = hour0; } if (hoursSetting == 1) { secondsNeeded = hour1; } if (hoursSetting == 2) { secondsNeeded = hour2; } if (hoursSetting == 3) { secondsNeeded = hour3; } if (hoursSetting == 4) { secondsNeeded = hour4; } if (hoursSetting == 5) { secondsNeeded = hour5; } if (hoursSetting == 6) { secondsNeeded = hour6; } //after the setting is sellected, activate timer,and set the second counter value //after seetting the timer value, it will start dicreasing every 1second, in the ISR //every 1 hour, the 7SEG displays a different value secondsCounter = secondsNeeded; TIMSK1 |= (1 << TOIE1); // enable timer overflow interrupt } if (!timeResetBtnState) //reset button presed { delay(del); //debouncing //return all variables and objecs to initial state TIMSK1 &= ~(1 << TOIE1); //disable timer interrupt secondsCounter = 0; hoursCounter = 0; hoursSetting = 0; secondsNeeded = 0; digitalWrite(indicationLed, 0); digitalWrite(relayPin, 1); num0(); } }

the connection is the next step.

Step 4: First Prototyping - Controller Side, Connection.

The connection for this project is quite simple, perhaps every one of us has used a 7Seg, and of course connected buttons and LEDs, now we just will combine them together, the connection schematic is shown in the pictures, I will just put some notes.

You can follow the connection and the will work fine, the better thing to do, is to follow the connection from the code, you can see in the header of the code, all the pins set are defined, the 7seg a,b-g are connected to pins 2-7, the pins 0,1 are not used here because in my program I added some debugging lines that uses serial port, the serial is not essential, you can delete them if you need, then you can use the pins 0 and 1.

The relay is connected to pin9, please note that in my connection I have connected the relay input pin, to pin10, but in the code, it’s set to pin 9, so you need to change the pin in the code, or simply connect the relay to pin 9.

An indication LED is connected to Pin 13, Its not essential to use the LED, I just wanted to use one. And don’t forget the resistor please. (in the connection I forgot it).

The two buttons are connected to the pins 12 (reset), and 11(set).

You can change these pins to whatever you want, by modifying the code.

Step 5: Main Prototyping, Atmega328 Connection

In this step, we will make a better prototype, we will use the Arduino Uno board controller, Atmega 328p, and we do such thing for a good reason, economical reason, the atmega328p is cheaper that the Arduino board of course, the second reason, is the size! The Arduino board is large and can’t be used for small products. Please note, for more realistic product, cheaper, and smaller, you will need to use an appropriate MCU and components, you can derive the 7Seg by a shift register, or simply you can use a BCD 7Seg, then you will be able to use a smaller and cheaper MCU, like AtTiny AVR MCU from Atmel, and you can simply convert the Arduino code to an AVR code or re implement it.

Let’s now connect our atmega328p, after we have uploaded the code into our Arduino, the code is saved in the flash memory of the controller of the Arduino, Atmega328p, now we can get the controller off the chip, and connect it to our prototype, the code will be already uploaded, now connect the circuit.

First you need to see a picture (can be found on google image search easily) that show the Arduino pins and where they are connected on the atmega board. Then we will do the same connection from the code. See the schematic in the pictures.

When you use the atmega at its own, you need to put a crystal with the speed of 16Mhz, with two 22pF capacitors (to filter the signal out from the crystal).

You need to supply the atmega from a 5V volts DC sources, and a GND, to the pins 7,8 of the atmega. For now, we will get these from the Arduino board, just for testing and see our product works fine!

In the next step, we will use a solder prototyping or the circuit, it’s better to the final product , more tidy and better sized. But if you don’t want to use it, you can use 2 tiny sized breadboard, you will need to put the atmega on one of them, and the components on the other, then you use wires to connect the two sizes. One more way, is to use a medium sized breadboard, and put the connecting on it.

Step 6: Best Prototype - Prototyping Board (Perfboard)

The prototyping board is a perfect tool to prototype a product with its final assembly, it produces a small sized, steady, and neat prototype of something. but it will be little hard and unlikely to edit, so we don’t make such thing until we got our final connection and assembly.

We will use soldering gun with soldering iron. To connect the circuit, don’t forget to connect a crystal with capacitors to ground.

I prefer to use a socket for the atmega328p (or any MCU, or chip) in this way, we can easily get it off the board if we need, to update the program or something. (or just return to Arduino if needed).

For the power input, it will be best if you used a connecter or something, that let you connect ot disconnect the power as you want, it will be perfect if you connect a toggle switch that will turn on/off the device when you want to.

For the relay, you can connect its pins directly to the atmega pins and power pins, but I prefer to use a bridge or any technique that let you connect or disconnect it freely (the relay will be usually of board because you are using a live voltage line (220 or 110 V) the board will be dangerous place to handle such a voltage between a lot of soldering iron around and electronic component, the point is, you can put it on-board but I prefer not to.

Step 7: PCB

I have made a simple 2-Layers PCB for the product, it would be best and safest to make it real and use it.

the design is made with EAGLE software.

you can edit on the board and make it as you like to fit your needs.

the board is designed and checked according to spark fun design rules(attached with this step) with spark fun eagle libraries, and I have not fabricated it I just wanted to share it, so please let me know if there is any problem with the design, and if you have it fabricated and worked fine ( yes test it for me :p :3 )

Note : I got all the libraries from this article on spark fun :

Step 8: Relay Side, Connecting the Power.

The relay side is very simple, but its little dangerous, please don’t do this step alone unless you know what you are doing, you can ask for someone who can handle houses electricity, it’s not hard to deal with it, but you need to be careful.

Any electrical circuit must have +ve and –ve terminals, without them no voltage difference will be applied and the circuit will not run. The house power networks are not deferent, it has a 220V or 110 Volts (depending on the country policy) and a GND line, any plug, Light, Fan, TV or any other device, must have the two lines, just like any other circuits.

A normal plug, has two those two lines connected to it, when your plug-in advice, its terminals will be connected to those terminals. What we going to do, is to put a switch before the plug, the switch is a relay, one terminal of the switch will be connected to the line, the other will be connected to the plug, when the switch is closed, the Line power is delivered to the plug, otherwise, the plug has no power. and this is the working principle.

A lot of relays, have to 3 high voltage terminals and 3 low voltage terminals, if you look to the design of the relay, you will see it is a switch, that is controlled by a magnet, derived by electric signal. The high voltage side, consist of, NC terminal (normally closed), NO terminal (normally opened), COM terminal(common), we will connect the line to the COM, the come has the switch on it, the switch is changing between NC and NO terminals, from the name of the terminals, we can tell that the witch is closed to the NC terminal by default. The plug terminal will be connected to NC or NO, it’s your choice to set it to NC, or NO, but you will need to modify the code to run your choice, in my code and project, I connected it to NO terminal. Please note that it is commented in the code, how to connect it to NC terminal, put I believe it is better to connect it to NO, it’s up to you.

The switch is derived by the LOW VOLTAGE side pins, the low voltage side pins have three pins, a VCC, GND, and IN. please note that, these pins are valid to a relay module not a normal relay, if you want to use a normal relay, you should see a tutorial on how to use it, it will not be hard, and there is no difference in the code. The VCC and GND pins are clearly will be connected to 5V and GND of the Arduino power, the IN pin is the pin who Is responsible for controlling the switch, and will be connected to a digital pin to send it signals to work, please note that the signal is a continuous not pulse or something, that means, while you are setting a 0 signal for example, the switch will be switch to NO for example, when you send 1 it will back to NC.

Please note that in my project I have used a 4channels relay module, it is the same as the 1 channel but it has four IN pins named, IN1, IN2 ..., if you use a relay module with more than 1 channel, you connect the plug to 1 of them, and connect the related IN pin to the Arduino or the controller.

Step 9: Power Supply

We need to supply an external, 5V, DC source to the product, we can get battery with 5 volts with sufficient current, the we don't need large amount of current I think 300mA will be good, but the battery is not the best idea, you will need to take care to replace it or recharge it. it will be better to use constant source, a charger, you can use any old phone charger or buy new one, with 5v output, you may get one with higher voltage but you will need a regulator to convert the voltage to 5V .
if you used an old phone charger , you need to cut the cable, you will see 2 wires, usually red and black, or white and black, the red/white is the +5V wire, the black is the GND. if you can't tell what wire is +ve and the -ve , use an LED with a resistor (see the pictures).
for better assembly, open the charger and take the board inside it. you will need to solder two wires on the board, to supply it with 220/110 voltage, the other wires (low voltage) is connected to the product.
see the pictures to see how have i done this.

Step 10: Possible Upgrades

For a better and more realistic product, you can use a different appropriate MCU, as mentioned before.

You can make a system who will handle the time for more than one plug.

You can setup a better display, in my tutorial I just wanted to show the idea and the principle, but in yours, you maybe want to add another 7Seg or two for the minutes, or get an LCD.

It’s not convince to use a system that will monitor your timer via internet :p , but you can do it if needed or if you want to.

Hope this instructable was helpful, joyful, worth reading and making, and clear.

Please let me know if there is any problem or question. I would be happy to help.

Please let me know if you made it :D I will be very happy :D

Sorry if my English was unclear.

good luck.

Lamps and Lighting Contest 2016

Participated in the
Lamps and Lighting Contest 2016