29
Abstrac t The purpose of this product is to create an extremely energy efficient ceiling light /fan. This is accomplished using modern microcontroller implementation and a variety of sensors and actuators. The main aspect of the device is its ability to operate, without any human intervention, put itself in a mode that is most economical: no wastage. Introduction In recent times, energy has become quite an issue, and ways in which to save energy are becoming very important in all new devices created. Perhaps it’s the fact that it is rare to find any home without high power devices, or simply that oil prices are on the rise. No matter what the reason is, the necessity for everything to be energy efficient has become extremely important. One thing that has been kept, for the most part, manual over the years is lighting, except for the automatic on/off incorporated into many new systems. When tied into a ceiling fan fixture, it becomes very practical to make this hot item more economically feasible. There are two main ideas that are used to accomplish the task at hand in this product. The first deals with adjusting the light level based on the current lighting condition. The second deals with adjusting the fan speed based on the temperature. By realizing that people can end up staying in a room all day and do not always remember or care to adjust the lighting or fan speed, it was determined that this can save energy and therefore money for consumers. S ince in t he da y there is often enough light outside and at night it is not that hot, adjustments can be made without making the customer uncomfortable. Of course there are a number of other features such

Project 1 – Problem 1

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Abstrac t

The purpose of this product is to create an extremely energy efficient ceiling

light/fan. This is accomplished using modern microcontroller implementation and a

variety of sensors and actuators. The main aspect of the device is its ability to operate,

without any human intervention, put itself in a mode that is most economical: no wastage.

Introduction

In recent times, energy has become quite an issue, and ways in which to save

energy are becoming very important in all new devices created. Perhaps it’s the fact that

it is rare to find any home without high power devices, or simply that oil prices are on the

rise. No matter what the reason is, the necessity for everything to be energy efficient has

become extremely important. One thing that has been kept, for the most part, manual

over the years is lighting, except for the automatic on/off incorporated into many new

systems. When tied into a ceiling fan fixture, it becomes very practical to make this hot

item more economically feasible. There are two main ideas that are used to accomplish

the task at hand in this product. The first deals with adjusting the light level based on the

current lighting condition. The second deals with adjusting the fan speed based on the

temperature. By realizing that people can end up staying in a room all day and do not

always remember or care to adjust the lighting or fan speed, it was determined that this

can save energy and therefore money for consumers. S ince in the da y there is often

enough light outside and at night it is not that hot, adjustments can be made without

making the customer uncomfortable. Of course there are a number of other features such

as automatic on/off based on occupancy, fire sensing and alerting ability and safe

protection.

Implementation

The prototype of this device was made by using a Basic Stamp as a brain to

control the fixture by means of the PBasic programming language. Branching out from

the brain there are a number of secondary circuits to control a variety of functions. For

the light, a DS1804 digital potentiometer is used in conjunction with an amplifying

circuit as well as a relay for the on/off function. For the fan a DS 1804 is used to control

the pulse rate of a 555 timer which powers the fan through a MOSFET. For sensing

purposes a DS1620 is used for temperature sensing and a photo resistor/ capacitor pair for

light level sensing. To determine the occupancy of people, two infrared phototransistors

and a single infrared LED is employed to determine direction of movement.

Hardware Specifications

The hardware for this product is pretty complicated in the fact that there are a lot

of complex aspects that have to be considered. However, by using the microcontroller,

this is not too much of an issue. The schematic for the circuitry is displayed in the

appendix (3).

Light Sensor – The light sensor consists of a photo resistor and capacitor pair. As the

resistance value changes, the time constant (RxC) value changes. The capacitor value

used is .05 micro Farads in series with the photo resistor. The bridge be tween the two is

connected thorough a current limiting 470 ohm resistor to pin 11 of the Basic stamp. The

other end of the photo resistor is connected to ground, while the other end of the

capacitor is connected to pos itive 5 volts.

Occupancy Detection

– The occupancy detection circuit incorporates two infrared

phototransistors and a single infrared Light Emitting Diode. Both of the phototransistors

are connected in the same fashion. Positive 5 volts connects to the collector, while the

emitter is connected to ground through a 10 k Ohm resistor. The bridge of the resistor

and emitter are connected through a 470 ohm current limiting resistor to the Basic Stamp

(pin 14 and pin 15). The IR LED is simply connected through a 100 ohm resistor to 5

volts and ground, pointed at the two phototransistors. With this configuration, a blockage

of the phototransistor means a low to the basic stamp.

Light Control – The light control mechanism is created using a digital potentiometer, a

transistor and a relay with a transistor and diode attached. The digital potentiometer

(DS1804) is the part that does the analog control of the light. It is connected in a voltage

divider circuit with a 1 Mega Ohm resistor, as well as a 4.7 k ohm resistor connected in

parallel. This supplies a variable voltage to the base of a JFET that has its collector at 5

volts and its emitter connected in series through the relay to drive the light. The relay

(with a current spike protecting diode connected in parallel) is turned on and o ff by a BJT

that has a base voltage (0V or 5V) given by pin 5 of the basic stamp. The increment and

Up/Down inputs are given by pins 10 and 9 on the Basic Stamp respectively. As for the

reset, it is done using a selector circuit (explained later) so that the number of pins used

can be optimized. Pin 8 o n the DS1804 is connected to 5 volts. Pin 4 is connected to

ground. Pin 5 is connected to the other resistor to make the divider circuit.

Temperature Sensor

– The tempe rature sensor simply uses the DS1620 temperature

transducer to change the current temperature to a series of voltage pulses corresponding

to the number value of the temperature. Pin 8 of this is connected to both positive 5 volts

and through a .1 micro Farad capacitor to ground. Pin 4 is connected directly to ground.

The data and clock pins (1 and 2) are connected to the Basic Stamp pins 8 and 7

respectively. The reset pin, pin 3 is connected to the Basic Stamp via the selector circuit.

Fan Control – The fan control is accomplished by utilizing a 555 timer, DC1804

(potentiometer) and a MOSFET. Here, the main analog control is accomplished by using

the digital potentiometer; this is connected as a resistor for the 555 timer. Pin 6 of the

DS1804 is connected through a 15 k ohm resistor to pin 7 of the 555, which is shorted to

pin 2. Pin 5 and pin 8 on the pot are both connected to positive 5 volts. Pin 4 is

connected to ground and pin 7 to the selector circuit. The increment and Up/Down pins

(1 and 2) are connected to pins 10 and 9 respectively on the Basic Stamp. The 555 timer

has its pin 1 grounded and its pin 8 at positive 5 volts. Pin 2 and pin 6 are connected by a

short together while also being connected through a .01 micro Farad capacitor to ground.

The reset (pin 4 is connected to the Basic Stamp via pin 6 on the BS2. The output of the

555 (pin 3) is connected through a 1 k ohm resistor to the gate of the MOSFET. The

source is connected to ground, while the drain is connected to the motor that is connected

to positive 12 volts on the other end. And of course, there is a diode in parallel with the

motor to prevent any inductive kickback.

Selector Circuit

– The selector circuit is a way that was used in order to save pins on the

microcontroller. This became an important aspect of making the system efficient, it was

quickly determined that the only way to add some more features was to decrease the

amount of pins used. By making either a high or low from a single B.S. pin (pin 4),

different IC’s can be made to listen or ignore: very useful. This was done by using two

inverter circuits connected together (in our case actual NAND circuits with all inputs

br idged together). F irst, the signal from the BS2 was inverted; this goes to the fan circuit

digital pot. Then, this signal was inverted again, basically a buffer, this was fed to the

light circuit digital pot. and to the temperature transducer reset pin. Therefore, a high at

pin 4 of the basic stamp would enable the digital potentiometer controlling the light,

while a low at pin 4 would enable the digital potentiometer controlling the fan and the

temperature sensor(DS 1620).

User input – The user input is given by two buttons. One is for the light control and one

is for the fan control. With each, there are three levels for automatic control and two for

manual control. Each button is configured in normally open and active low mode (best

for least errors): a press at the button gives a low to the corresponding pin of the Basic

Stamp. One end of the button is connected to ground, while the other end is connected to

positive 5 volts through a 1 k ohm resistor and also to pins 12 and 13 on the Basic Stamp

through a 470 ohm current limiting resistor.

Fire detection and alarming - This circuitry is utilizing the existing temperature sensing

circuitry and an additional circuitry composed of a piezoelectric buzzer. Pin 3 of the basic

stamp is used and connected to the positive end of the buzzer. The negative end of the

buzzer was connected to the ground.

Electroc ut ion protection

– The safety protection feature is realized by implementing a

capacitance proximity sensor. The circuit is basically a RC circuit which connects to an

input pin on the basic stamp. The resistor selected has a value of 10 MΩ. The capacitor is

constructed such that one plate is made of a sheet of aluminum attached to the ceiling

where the fan/light device is, and another plate is human being who tries to touch the

light or fan.

Hardware Functionality

This system was designed so that it would function mainly by using a

microcontroller, which was intensively programmed. However the systems controlled

and the sensors used represent a major part of the system and are hardware, so the

functionality of these aspects are discussed here.

The light sensing circuitry controls the hardware that creates the optimum light

output level. As light values are sampled from the outside world, the values obtained are

compared to the value of light desired, and more or less current is allowed to flow

through the approximately 13 ohm light bulb by changing the value of the digital

potentiometer. The relay is turned on and o ff depending o n the condition of occupancy

and manual override. I f the button is pressed to be put in the 5th mode, the relay is

deactivated and the light is turned off. Also, if the occupancy detector says nobody is

inside the room, the relay is again deactivated. By using two phototransistors, the

direction of movement can be determined, and thus a counter can be established to

determine if there are people in the room. There are five user input modes. The first

three set three different light level conditions to be kept constant by the system. The 4th

is an override that makes the light stay at full power no matter what the current light level

in the room and the 5th

The temperature sensing circuitry controls the hardware that maintains the

optimum fan speed level. The fan speed is controlled using pulse width modulation. By

obtaining the current temperature value in the room and comparing it to how the fan

should react to different temperatures, based on the user input, the fan speed is increased

or decreased by means of changing the pulse duration by altering the digital

potentiometer value. By turning off the 555 timer (deactivating the reset pin), the fan can

be turned completely off. This is done if there is nobody in the room, the user manually

turns it off by the button or there is a fire [turning the fan off if there is a fire to prevent

spreading by those means (Prof. Kapila)]. The fan has 5 leve ls chosen by the button.

The first sets a range for the fan to be full blast at a lower temperature, the second at a

higher temperature and the third at an even higher temperature. The speed is controlled

based on the temperature depending on the mode it is in. The 4

turns off the light.

th level simply puts the

fan into its high state, while the 5th

The selector circuit is made so that when one circuit is ope rational, the other is

ignoring the input it is getting from the data pins.

turns it off.

The fire detection and alarming c ircuit is configured that when there is a fire, the

light will start blinking and the buzzer will start making high pitched noise. The

temperature sensing circuitry is constantly checking the temperature. When the

temperature measured is higher than the alarming temperature predefined by the

programmer, the light circuit and the buzzer circuit will be activated. A button is also

associated so that when it is pressed, the buzzer would stop producing sound and the light

would stop blinking. The system would then go into its original state, which constantly

waits for the entrance of people.

The safety protection feature of this device was designed to prevent human being

from being electrocuted. Whenever a person’s part of body is in a danger range which is

determined by the programmer, the power to the system will be disconnected by turning

off the 555 timer and the reed relay.

Software Specifications

The software for this system is an extremely important aspect; it is what allows

such a difficult task to be made simple without the need to use vast amounts of electronic

circuitry. The software used for the prototype is what came with the Basic Stamp, the

PBasic programming language. The program is not very advanced, b ut it does the job.

There are a number of special functions that were used for this task.

The Rctime command is one such function. It is a command that calculates the

amount of time a specified pin takes to change state. Basically, it calculates the time for

the pin to go from a logic low to a logic high state or vice versa. In the function, the pin,

end state and output variable must be given when using the command.

Another function that was used was the serial in/out command. This command

translates a stream of binary pulses into a numerical value. This is when it is used as

shiftin (gets an input of pulses). When used to output pulses (shiftout), it operates in the

opposite manner. The values that must be given to the command are the in/out pin to be

used, the clock pin, in what order the pulses will be sent and the variable or value to be

sent or received.

Another function used is the For Loop. This function simply repeats a specified

task, what is in the loop, over and over for a specified amount of times. The values that

are given to the function are the start and stop count for the number of cycles to run.

Although these are a few of the more advanced functions utilized, there are a

number of simple functions that were used that if not there would make it quite

impossible to accomplish the task at hand. On top o f this, an important thing that is

worth mentioning is the effort that was put into making the program shorter and run

faster and more efficiently. It might sometimes seem as if a lot was done in certain

places, however it is determined that these actions are necessary to make the system work

to its best capability. Often, it is necessary to determine the best size for each variable

declared; saving space while still keeping efficiency was a key.

Software Functionality

Since it is the brains of the entire operations, it is simple to realize that a lot of

time went into the design and implementation of the program. Problems were often

sought out and solutions found. Not to mention much had to be accounted for in order to

make the program operate fast enough so that the buttons and occupancy sensor would

instantly pick up any new activity. The program was split up into blocks in order to make

it easier to understand and therefore easier to improve upon it. The main program is

displayed in the appendix (1) and the secondary statistical program is also d isplayed there

(2).

Variable Declaration – Here all the variables were declared. The majority of these were

given names so that the value they store can be easily grasped. Also, the amount of space

that is allocated to each variable is important. If it is not necessary to use a word (16 bits),

then one should not be used. O ften variables as small as a nibble, only four bits, were

used.

Light Automation – This is the part in which the subroutine to make the lighting system

smart was put into operation. What is done here is to first look at what level of lighting

the user has defined. Based on this, a certain light level (amount of light that is to be

present in the room) is obt ained. This value is then compared with that of the current

light level in the room, received through the RCtime function from the light sensing

circuit. Depending on if the current light level is too b right or to dim, within a range, the

output light will be adjusted to reach that light level specified by utilizing a for loop to

control the digital pot connected to the light circuit. This subroutine is within a main

loop and therefore is continuously active.

Fan Automation – This part of the program is what automates the fan control and makes

it operate as a smart system. The entire algorithm depends on what temperature range the

current condition is in. After this is determined, based on the temperature, obtained by

the DS1620 while using the shiftin and shiftout commands, a value to change the fan

speed to is obtained. Using a comparison of the previous value to this new value based

on the range of the digital potentiometer, the speed of the motor is altered using a For

Loop to increment or decrement the resistance level of the DS1804. In this subroutine,

much effort is taken in order to minimize the use of redundant operations, such as going

through loops that are not necessary. The usefulness of past values should be quite

evident in this block.

Light Controlling Button – In this block the way in which the user is to gain control over

the system and give his/her input into the system is displayed. S imply seeing a button

press, forces the program to wait for the user to let go over the button in which case the

mode of the lighting condition is increased by one. It was debated of whether using some

sort of button debouncing algorithm was necessary. However, with the fact that without

any such algor ithm the program ran fine, it became evident that it would be unnecessary

and foolish to use. Perhaps it deals with the fact that the tact switches used are of good

quality, or that the PBasic programming language is not fast enough to see the bounce

anyway. No matter what the reason might be, no errors were attributed to button bounce

and therefore there was no reason to deal with it. Once the lighting mode is changed, the

level variable must be changed appropriately and anything else that is to be done must be

done. This new value is used to control the light value when it comes back around in the

loop.

Fan Control – This is the part of the program that allows the user to control the range in

which the fan operates. It also sets the new values that are also based on temperature for

the fan speed to seek out. First, of course the button must be pressed and released. Once

this happens, the program changes the mode of the fan, which in turn alters the speed at

which the fan rotates. Since this value also depends on the temperature, in an attempt to

conserve lines of code, the program is made to run through this subroutine regardless of

whether the button is pressed or not. The only difference is that if it is not pressed, the

mode is not changed.

Occupancy Detection

– The occupancy detection is done with the ut ilization of a

sophisticated algorithm that determines the direction of motion of a person. A counter is

made to keep track of the number of people in the room. Using a plethora of loops, it can

be made to work beautifully. First, the sensor sees which phototransistor is blocked first,

then waits until it is unblocked. After that, it waits until the next phototransistor is

blocked and then unblocked. This gives direction with a low occurrence of error.

Storing this in a counter and realizing when all people have left or somebody has entered

enables the program to act accordingly. An entrance by a person into the unoccupied

room causes the light to go on to a default middle state as well as initializing all variables

because the beginning of the adventure has just begun. Leaving the room forces

everything to turn off, thus saving energy. After this, the waiting procedure starts

looping again and waiting for any activity to occur.

Fire detection and alarming – As described above, the temperature sensing procedure is

constantly runni ng no matter if there is any pe rson in the room. When the conditional

statement which is used to compare the current temperature with the predefined

dangerous temperature is true, fire alarming routine will be activated. The routine

includes the constant blinking o f the light, which is realized by altering the level of

resistance in the digital potentiometer inside a for loop; the creation of high pitch noise

by the buzzer, which is implemented by setting the pin controlling it to high, and the

alarm override procedure which continuously checks if the overriding button is pressed.

If the button is pressed, program will jump out of the loop and resume normal operation.

Otherwise, the alarming features will keep in effect.

Safety protection – Whether the distance between the human bod y and the light /fan

system is considered safe or dangerous depends on the RCtime value obtained. Each

value is compared to the predefined value acquired under the condition prone to

electrocution. If the current RCtime value is smaller or equal to the predefined value, the

program will branch to a place where 555 timer and reed relay are turn off.

Statistical Temperature Data

– Another feature that has been installed is one in which a

number of samples of the temperature are taken. This data can be used for manipulation

and to show the trend of temperatures over time. It was chosen not to make the main

program more complicated by allowing the user to read the data, so this function is

displayed in a separate piece of code. The data is however read in the main program,

there is just no way to retrieve it, this is what the second program is for. The second

program just obtains a set of temperature values over a period o f time. When the user

presses the predefined button, the average is displayed on the screen.

Analysis

In the prototype, all components were selected based on their necessities,

functionalities, compatibility, and cost efficiency. As for the Occupancy detection, the

main reason for the IR detector/emitter was chosen mainly because of cost. The job,

detection of occupancy, is easily accomplished with reasonable results using IR

detectors/emitters. Infrared was chosen as it would not be seen and interference would

not be as common as would be from a visible light circuit. The digital potentiometers

were used due to its ease of implementation, as well as its low cost and no need for

complex circuitry. For the light it was used to control the voltage into the base of a JFET

transistor. The JFET was chosen because since no current is drawn there does not have

to be any calculations of voltage drops into the light. At first a BJT was used, but the

results were not that good. As for the relay, a reed relay was used, because of the limited

current through it, cheapness and longevity of life due to lacking of may mechanical parts.

As for the motor, PWM was used. This saves energy and allows the motor to always

operate in its ideal mode. To do this a 555 timer was used, as to not tie up the functions

of the Basic Stamp and a Power MOSFET was used because it draws no current and can

handle quite a bit of current. As for the light sensing c ircuit, it might be wondered why a

photo resistor is used in stead of the quicker photo diode. The main reason for this is

price, photo resistors are significantly cheaper. Also, since the point of the product is not

to deal with fast changing ambient levels, the necessity of a very fast quick circuit is not

necessary.

Mathematical Analysis

Mathematically, the circuit might seem very complex. However, since many

integrated circuits are used, an in depth analysis of these was not necessary and therefore

is not done. The main thing that had to be taken into account though was the amount of

current drawn or sunk by each pin and a ll pins in total. For each button, the maximum

current that will be sunk through the Basic Stamp is 2.5 mA. This was determined using

Ohms Law, V=IR. Here I = V/R = 5 / 2000. For light meter the maximum current that is

output or input to or from the Basic Stamp is 11 mA. This is again determined by Ohms

Law, I = 5 / 470. The only other place where a significant amount of current leaves or

enters the Basic Stamp is the Infrared photo transistors (occupancy detection). Here the

maximum current that can be sunk is 5 Volts / 1 k Ohms = 5 mA. All of these values are

well within the Basic Stamps ability to handle current. 20 mA for a single pin and 40 mA

for a group of 8 pins. The rest of the circuit elements either do not connect to the Basic

Stamp directly or are IC’s (these draw very little current from the pins connected to the

Basic Stamp). Of course resistors were added in places to make sure that current does

not go to high, however it was not done so stringently.

The power consumed by the prototype was determined by using the formula

Power = Voltage * Current. The power consumed by just the Basic Stamp and circuit,

the light and fan are off, is (80 * 10 -3) Amps * 5 Volts = .4 Watts. With the light on a

low condition, this goes to (223.4 * 10^-3) Amps * 5 Volts = 1.1 Watts. With the light

on a high condition, the power becomes (293.9 * 10^-3) Amps * 5 Volts = 1.5 Watts.

The Fan is what takes the most power and its readings are as follows. With the fan on a

low condition, .36 Amps are used making the Power = .36 Amps* 12 Volts = 4.32 Watts.

With the power on a high condition this becomes .56 Amps * 12 Volts = 6.72 Watts. So,

it can be concluded that when the prototype has everything on, 6.72 Watts + 1.5 Watts =

8.22 Watts is used. This is not that much for a prototype and most of it is from the fan

and some from the light. The circuitry barely uses any Power.

Results

The Prototype works as designed to and it works quite well. Everything that is

supposed to happen happens. When someone enters the room, the light turns on. The

light and fan operate as instructed to by the buttons. The light and fan also operate

automatically as they are supposed to. As the temperature increases the fan speed

increases and as the external light increases, the light output from the light decreases. In

add ition, when there is a fire in the room (intense heat) the fan turns off and the light

blinks along with a buzzer ringing. The approximate price list for the prototype is as

follows. Keep in mind that some items were on hand, such as power supplies, and

therefore are not on the list.

Basic Stamp with Board of Education kit ($100)

DC Fan ($20)

Light ($1)

DS1804, Digital Potentiometer ($2 X 2)

555 Timer ($2)

DC1620 Temperature Sensor ($2)

Power MOSFET ($2)

Reed Relay ($1)

Infrared LED ($2)

Infrared Phototransistor ($1X2)

Photoresistor ($1)

BJT and JFET ($2)

Other Components ($5)

--------------------------------------------------------------------------------------------------

Total Cost ( $144)

Actual Product

The actual product will have all the features of the prototype, but will be put

together in a nice package that is very aesthetically appealing. The final product will not

cost much more than ceiling fan/lights currently on the market today. The price for a

good ceiling fan/light is approximately $175. We have come to the conclusion that our

product will cost the consumer around $200. This will be done by using a PIC

microcontroller directly and buying electronics in bulk. This will lower the price and

make the fan very affordable. Although, the product will cost a little more, in the long

run much money will be saved and it will most certainly be worth it; that is the scheme

for which we plan to advertise for the sale of our product. This product is extremely

marketable because it can be used by the average consumer, as well as big corporations;

everybody wishes to save money and uses light. This product can be used in all climates.

Obviously, the lighting feature can be used by anyone no matter where they might be

located. It might be argued that in a hotter climate where air conditioning is prevalent, a

fan might not be necessary. This, however is not always the case because some people

like a breeze no matter what and even some might not always want to use A/C. With

these conclus ions and the fact that the finished product will have many user defined

levels, this smart ceiling fan/light combination will have a use and a market everwhere.

Conclusion

Since energy is a major issue in the present day, it was determined that

making a often used product more energy efficient would be very promising. The

product chosen was a simple ceiling fan/light combination that has found its way into

many homes. Using the simple yet modern concept of mechatronics and microcontroller

incorporation, this was easily accomplished. Many ideas for saving energy and adding

safety to the system were taken into account. S uch ideas as the auto turn off occupancy

detection and electroc ut ion protection were installed. For the prototype, this was all

housed in an open box made out of plastic, painted and shaped to mimic a room; however

it is not to scale. The prototype shows that the concept defiantly works. The only

problems with the prototype is the fact that the sensor tends to be right under the light

(the room is to small) and there are some loose wires in places and the fact that some

components come loose every once in a while. The wire and component problem deals

with the fact that this is only a prototype and not hardwired, for the actual product things

would be soldered together in a more permanent fashion. This product just touches the

surface of incorporating microcontrollers into the home. Using the idea of making

average household de vices energy efficient, there are many things out there to be

improved upon.

Appendix

(1)

'$STAMP BS2 'Variable declaration and initilization (outside the main loop) '************************************************************************************************************ light var word 'variable to store values from RCTIME (photoresistor) x var byte 'a dummy variable temp var byte 'variable to store modified values from the temperature sensor fromIC var byte 'variable to store unmodified values from the temperature sensor set var word 'current resistance level of the digital potentiometer set_prev var word 'previous resistance level of the digital potentiometer counter_l var nib 'count the number of times the botton for the light is pressed counter_f var nib 'count the number of times the botton for the fan is pressed level var word 'level of light intensity the light is trying to reach temp_h var byte 'upper boundary of the temperature setting temp_l var byte 'lower boundary of the temperature setting counter var byte 'count the number of people in the room ent_er var byte lea_er var byte big_count var word safety var byte safety_counter var byte alarm_override var bit log var byte(4) ptr var nib for ptr = 0 to 3 'initialize temp statistical variable log(ptr) = 0 next ptr=0 ‘initialize pointer variable for the statistics alarm_override = 0 ‘make fire alarm override variable reset (alarm will sound) counter=0 counter_f=5 set = 11 output 4 'reset pin for DS 1804 output 10 'increment pin for DS 1804 output 9 'up/down pin for DS 1804 output 5 'pin to control the relay output 7 'pin for the temperature sensor output 8 'pin for the temperature sensor output 6 'pin controlling the 555 timer input 14 'the right infrared LED input 15 'the left infrared LED input 12 'botton controlling the light input 0 'botton controlling the fan high 4 'turn on the DS 1804 controlling low 6 'turn on the 555 timer low 9 'initialize the DS 1804 to its lowest resistance for x=1 to 99 high 10 low 10 next high 9 'initialize the resistance level for the fan at full blast

for x = 1 to 11 high 10 low 10 next '****************************************************************************************** 'Light Automation '******************************************************************************************* flow_0: low 2 ‘rctime for electrocution sensor pause 2 rctime 2,0,safety debug ? safety safety_counter=0 if safety>60 then flow_3 if counter>0 AND counter_l <> 5 then relay_engage ‘makes sure light turns on after ‘ ‘electrocution sensor activates continue3: high 4 shiftout 8,7,lsbfirst,[238] 'initialize the temperature IC low 4 high 4 shiftout 8,7,lsbfirst,[170] 'get ready to send data shiftin 8,7,lsbpre,[fromIC] 'send data to basic stamp low 4 temp =fromIC/2 debug ? temp 'DISPLAY if alarm_override = 1 then keep_going 'if the manual alarm override is activated if temp > 80 then flow_3 'go to fire alarming mode keep_going: big_count = big_count + 1 ‘counter for fire alarm override reset and ‘ ‘ ‘statistical temperature data storage if big_count >= 500 then alarm_override_reset stat_temp: if big_count >= 500 then write_data continue2: debug ? counter, cr 'DISPLAY debug ? level, cr 'DISPLAY if counter=0 then flow_3 'no one is in the room, skip fan and light automation, go back to ‘infrared 'obstruction detection high 11 'Discharge the capacitor at the beginning pause 5 low 4 'activates the DS1804 controlling the light rctime 11,1,light debug ?light

if counter_l = 4 then flow_1 'at mode 4(full light), therefore, skip light automation if light<(level-20) then decrease if light>(level+20) then increase goto flow_1 decrease: high 9 for x=1 to 3 high 10 low 10 next goto flow_1 increase: low 9 for x=1 to 3 high 10 low 10 next goto flow_1 flow_1: '****************************************************************************************** 'Button controlling the fan '******************************************************************************************* second: if in0=0 then manual_adjust_2 'check for the button press goto fan_adjustment 'if no button press is detected, do nothing to the fan 'but still keep checking the room temperature manual_adjust_2: if in0=0 then manual_adjust_2 'check for the release of the button to complete

a valid ‘button press counter_f=counter_f+1 'counter value is the current mode 'Fan Adjustment fan_adjustment: set_prev=set debug ?set_prev 'DISPLAY debug ?counter_f, cr 'DISPLAY high 4 shiftout 8,7,lsbfirst,[170] 'get ready to send data shiftin 8,7,lsbpre,[fromIC] 'send data to basic stamp low 4 temp =fromIC/2 debug ? temp, cr if counter_f=1 then slowest if counter_f=2 then faster if counter_f=3 then fast if counter_f=4 then set_is_ninenine if counter_f=5 then set_is_eleven if counter_f=6 then reset_f

reset_f: counter_f=1 'if the counter is more than 6, go to the first mode goto slowest slowest: temp_h=35 temp_l=25 if temp<25 then set_is_eleven 'if the temp is greater than temp_h, just turn on if temp>35 then set_is_ninenine 'the fan to full blast set= (88*temp-2190)/10 debug ?temp_h 'DISPLAY debug ?temp_l 'DISPLAY debug ?set 'DISPLAY goto flow_4 faster: temp_h=30 temp_l=20 if temp<20 then set_is_eleven if temp>30 then set_is_ninenine 'if the temp is less than temp_l, just turn off the fan set= (88*temp-1750)/10 debug ?temp_h 'DISPLAY debug ?temp_l 'DISPLAY debug ?set 'DISPLAY goto flow_4 fast: temp_h = 25 temp_l = 15 if temp<15 then set_is_eleven if temp>25 then set_is_ninenine set= (88*temp-1310)/10 debug ?temp_h 'DISPLAY debug ?temp_l 'DISPLAY debug ?set 'DISPLAY goto flow_4 set_is_eleven: low 6 set=11 goto flow_4 set_is_ninenine: high 6 set=99 goto flow_4 '*********************************************************************************** 'Fan Automation '********************************************************************************** flow_4: high 4 'activate the DS1804 controlling the fan adjust: if set = set_prev then flow_2 'no temperature change, do nothing if set = 11 then halt if set = 99 then full if set_prev<=set then raise_speed

high 6 low 9 for x= 1 to set_prev-set high 10 low 10 next goto flow_2 raise_speed: high 6 high 9 for x=1 to set-set_prev high 10 low 10 next goto flow_2 full: high 6 high 9 for x=1 to 99 high 10 low 10 next goto flow_2 halt: low 6 low 9 for x=1 to 99 high 10 low 10 next for x = 1 to 11 high 10 low 10 next goto flow_2 flow_2: '******************************************************************************************* 'Button to control the light '******************************************************************************************* if in12=0 then manual_adjust goto flow_3 manual_adjust: if in12=0 then manual_adjust counter_l=counter_l+1 debug ? counter_l if counter_l=1 then dimmest if counter_l=2 then brighter if counter_l=3 then brightest if counter_l=4 then stay_bright if counter_l=5 then off_l if counter_l=6 then reset_l reset_l: counter_l=1 goto dimmest dimmest: high 5 'turn on the relay

level = 35000 goto flow_3 brighter: level=9000 goto flow_3 brightest: level=5000 goto flow_3 stay_bright: 'leave the light on at full intensity low 4 low 9 for x=1 to 99 high 10 low 10 next goto flow_3 off_l: low 5 'turn off the relay, therefore turn off the light goto flow_3 flow_3: debug ? safety '********************************************************************************************** 'Infrared detection '********************************************************************************************** debug ? big_count if in14=0 then wait_1 'check for entry of a person at the first receiver goto go_on wait_1: debug ? in14 if in14=0 then wait_1 'wait until the person unblocks the first receiver ent_er=0 wait_2: debug ? in14 ent_er=ent_er+1 'a time counter used in case the person is standing in front if ent_er > 50 then enter 'the second receiver and not leaving. when time expires, ‘ ‘just 'increment the counter if in15=1 then wait_2 'check for entry of the person at the second receiver receiver wait_3: if in15=0 then wait_3 'wait until the person unblocks the second receiver goto enter go_on: if in15=0 then wait_4 if alarm_override = 1 then flow_0 if temp>80 then flow_6 if safety>70 then safety_protection goto flow_0 wait_4: 'when a person leaves the room, the mechanism of checking debug ? in15 'him out is the same as the one of checking him in if in15=0 then wait_4 lea_er = 0 wait_5:

lea_er=lea_er+1 'a similar time counter used when a person is leaving if lea_er > 50 then leave if in14=1 then wait_5 wait_6: if in14=0 then wait_6 goto leave enter: counter=counter+1 if counter=1 then activate if alarm_override = 1 then flow_0 if temp>80 then flow_6 if safety>70 then safety_protection goto flow_0 activate: high 5 'activate the relay counter_l=2 'initialization of mode for fan and light counter_f=5 level = 6000 set=1 low 4 low 9 'the pulses cause the DS1804 to go "down", initialize the ‘ ‘DS1804 to have minimal resistance for x = 1 to 99 high 10 low 10 next if alarm_override = 1 then flow_0 if temp > 80 then flow_6 if safety>70 then safety_protection goto flow_0 leave: if counter=0 then continue 'to prevent counter to go below zero counter=counter-1 continue: if counter=0 then deactivate if alarm_override = 1 then flow_0 if temp>80 then flow_6 if safety>70 then safety_protection goto flow_0 deactivate: low 5 low 6 if alarm_override = 1 then flow_0 if temp>80 then flow_6 if safety>70 then safety_protection goto flow_0 '************************************************************************************************* 'Fire Alarm Scheme '************************************************************************************************* flow_6: if in12=0 then button1_press

debug ? in12 goto alarm button1_press: if in12=0 then button1_press alarm_override = 1 low 5 debug ? alarm_override goto flow_0 alarm: big_count = 0 low 6 'combined with the code below, accomplish blinking of light low 4 high 5 high 9 for x=1 to 99 high 10 low 10 next freqout 3,1000,4000 'make alarming noise low 9 for x=1 to 99 high 10 low 10 next pause 1000 debug ? counter goto flow_0 alarm_override_reset: alarm_override = 0 goto stat_temp '****************************************************************************************** 'Statistic '****************************************************************************************** write_data: ‘writes temperature data to the Basic Stamp big_count=0 if ptr > 3 then continue high 4 shiftout 8,7,lsbfirst,[170] 'get ready to send data shiftin 8,7,lsbpre,[fromIC] 'send data to basic stamp low 4 temp =fromIC/2 log(ptr)=temp ptr = ptr+1 goto continue2 '********************************************************************** 'Safety Protection '********************************************************************** safety_protection: safety_loop: safety_counter = safety_counter +1 low 2 pause 2 rctime 2,0,safety if safety>70 then safety_loop if safety_counter < 8 then flow_0

low 5 'turn off relay low 6 'turn off 555 goto flow_0 relay_engage: high 5 goto continue3

(2)

'$STAMP BS2 ptr var nib 'initialize all variables tempavg var byte temptot var word temp var byte big_count var word fromIC var byte big_count=0 log var byte(4) ptr=0 main: big_count = big_count+1 high 4 shiftout 8,7,lsbfirst,[238] 'initialize the temperature IC low 4 if ptr > 3 then continue 'prevents array overflow debug ? big_count high 4 shiftout 8,7,lsbfirst,[170] 'get ready to send data shiftin 8,7,lsbpre,[fromIC] 'send data to basic stamp low 4 temp=fromIC/2 if big_count => 200 then write_data 'counter to control when data is written continue: if in12 = 1 then main button1_press: 'if button is pressed display data if in12=0 then button1_press temptot = 0

for ptr = 0 to 3 temptot=temptot+log(ptr) 'gets total of all data next tempavg=temptot/4 'averages the total debug ? tempavg write_data: 'puts data into variable log(ptr) = temp 'resets and increments neccesary variables ptr = ptr+1 big_count=0 goto continue

Mechatronics

Final Project

Smart Ceiling Fan/Light Combination

ME 3484 - Group 4

Michael Roberts &

Yang Xiao