Introduction: EF 230: Home System 3000 Instructable
The Home System 3000 is a device that uses an Arduino, a temperature sensor, a piezo buzzer, an optical detector/phototransistor, and a servo to display ways to improve home energy efficiency.
Step 1: Temperature Sensor
· Run your power and ground wires from
the micro controller to the side of the bread board
· Place the temperature sensor into the bread board, and run the corresponding power and ground wires accordingly
· Notice that the temperature sensor has three prongs, and the middle prong has a wire that runs from the port "A0".
· Code for temperature sensor:
answer = questdlg('Please run arduino and servo start code','response','Ok','Ok')
prompt = 'Press any key to begin'
pause
prompt1 = 'Set minimum temperature'
x = input(prompt1)
prompt2 = 'Set maximum temperature'
y = input(prompt2)
prompt3 = 'press any key to begin'
pause
figure
h = animatedline;
ax = gca;
ax.YGrid = 'on';
ax.YLim = [65 85];
stop = false;
startTime = datetime('now');
while ~stop
% Read current voltage value
v = readVoltage(a,'A0');
% Calculate temperature from voltage (based on data sheet)
TempC = (v - 0.5)*100;
TempF = 9/5*TempC + 32;
% Get current time
t = datetime('now') - startTime;
% Add points to animation
addpoints(h,datenum(t),TempF)
% Update axes
ax.XLim = datenum([t-seconds(15) t]);
datetick('x','keeplimits')
drawnow
% Check stop condition
stop = readDigitalPin(a,'D12');
Step 2: Buzzer
· Wire in the buzzer that will be used to signal an extreme high or extreme low temperature reading
· No wire is run from the positive column to the positive side of the buzzer
· Instead a wire is run from the positive side of the buzzer to a port labeled "11"
This will be used later to call the location of the buzzer in the written code.
· Code for buzzer:
if TempF >= y
disp('close door it''s hot')
playTone(a,'D11',500,1)
elseif TempF <= x
disp('close door it''s cold')
playTone(a,'D11',250,1)
end
end
Step 3: Optical Detector/Phototransistor
· This sensor requires resisters unlike the others
· Make sure all four prongs of the sensor are included in the loop after plugging in the wires
· The sensor detects a change in light, representing motion, and records it as an input
· Code for Optical Detector/Phototransistor:
clear a
a = arduino('/dev/tty.usbserial-DN01DVI2', 'Uno', 'Libraries', 'Servo');
prompt = 'Set light level threshold'
z = input(prompt)
lightLevel = 0
while lightLevel ~= -1
lightLevel = readVoltage (a,'A1')
if lightLevel >= z
answer = questdlg('would to like to alter AC?','Yes','No')
switch answer
case 'Yes'
answer2 = questdlg('Turn AC up or down?','response','Down','Up','Up')
switch answer2
case 'Down'
s = servo(a, 'D10');
for angle = 0:.1:.5
writePosition(s, angle);
current_position = readPosition(s);
current_position = current_position * 180;
% print current position of servo motor
fprintf('Current position is %d\n', current_position);
% small delay is required so that servo can be positioned at the
% angle told to it.
pause(2);
end
% bring back motor to 0 angle position
writePosition(s, 0);
clear s
prompt = 'Press any key to continue'
questdlg('AC turned down','response','Ok','Ok')
case 'Up'
s = servo(a, 'D10');
for angle = .5:.1:1
writePosition(s, angle);
current_position = readPosition(s);
current_position = current_position * 180;
% print current position of servo motor
fprintf('Current position is %d\n', current_position);
% small delay is required so that servo can be positioned at the
% angle told to it.
pause(2);
end
Step 4: Servo
· The servo represents
an air conditioner, and is an output of the motion detection input
· It requires a positive wire, ground wire, and a wire from port "D9" to the servo
· Code for servo:
% bring back motor to 0 angle position
writePosition(s, 0);
clear s
prompt = 'Press any key to continue'
questdlg('AC turned up','response','Ok','Ok')
end
end
pause
break
end
end
*Special note: some of the code for the servo is integrated with the code for the optical detector/phototransistor.
2 Comments
2 years ago
This is so cool! How long did it take you to develop the program?
Reply 2 years ago
@tomatoskins Thank you. This was a project taken on as a part of a class that we had about a month to work on. It took several weeks because we were balancing other classes along with this project. However, it wouldn't have taken that long if we only had the project to work on.