Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Smart Aquarium System ME3484 Project Report Group 6 HyungMo Kang Joel Aurelus Manuel Cruz Ameer Burnett Page 1 of 22 Table of Contents Introduction………………………………………………………………………….2 Components………………………………………………………………………3-12 Food Dispenser…………………………………………………………..3-4 Water Level Sensor…..……………………………………………….4-8 Temperature Sensor…………………………………………………….9 Manual Shutdown Switches…………………………………………11 Water Heater……………………………………………………………….11 Project Code……………………………………………………………………13-19 Cost Estimate………………………………………………………………….19-20 Conclusion…………………………………………………………………………….20 Page 2 of 22 Introduction The Smart Aquarium is a simple, cost-effective product that automates nearly all needs of aquatic life and reduces what were once daily tasks, to simple weekly ones. It is a self regulating system capable of monitoring and maintaining desired water level and tank temperature as well as distributing food at a specified time everyday. The Smart Aquarium system implements feedback sensors and actuators in order to attain continuous information on the status of the fish tank environment and assure proper dispensing of food. Integrated pumps and heaters regulate temperature and water level while the automatic feed consists of an intelligent tray feature which allows not only for timed dispensing, but also for accurate amounts of food to be delivered every time, avoiding over/underfeeding of the aquatic life being cared for. What makes this product such a vital implementation to the maintenance of aquariums is the reduction of required labor and cost by allowing for the smart aquarium to take care of daily tasks normally monitored by employees. This is especially useful where there are multiple tanks to be cared for and would normally take up a long time to check up on all of them. Its versatility allows for implementation in not only small aquariums, but to be adapted for any aquatic life that can safely reside in enclosed region. Page 3 of 22 Components Food Dispenser The automatic Food Dispenser component consists of a pair of interlinked servo motors coupled with tray-mounted light emitting diode (LED) and photo-resistor to monitor and dispense the proper amount of food at any given time. Controlling the time when the food is dispensed is an internal timer within the Basic Stamp that is preset to the desired time and self increments as other features of the Smart Aquarium are executed. The setup of the Food Dispenser consists of self-retracting gate and tray that react according to the information received by the Basic Stamp from the photo-resistor and LED as to how much food has been deposited in it. The gate will open allowing food to drop into the tray as long as the photo-resistor sees that a specified amount of light (mostly from LED) is detected. Once the light level drops below the preset value, the Basic Stamp will close the gate stopping more food from being deposited on the tray and following this action, it will direct the tray to open and allow the food to drop down to the tank. Once the food is dropped, the tray returns to its original position and the photoresistor and LED are both deactivated. Figure 1: Circuitry used for LED and photoresistor Page 4 of 22 Figure 2: Circuitry used for servomotors Water Level Sensor The water level sensor uses the changing level in of water in a tube inserted into the aquarium in order to determine the water-level in the tank itself. Attached to opposite ends of the tube are two strips of aluminum foil tape. The two strips of tape serve as capacitive plates. The rising and falling of the water-level inside of the tube serves as a changing dielectric inside of a capacitor. Thus, the capacitance value between the two strips of aluminum foil tape on opposing sides of the plastic tube changes with water level, and can be used to determine water level. 5 voilts Fish Tank Capacitor 1 Kiloohm P9 30 Megaohm Figure 3: Circuitry used for water-level sensing After the capacitive sensor was set up and initiated so that the water level changes within the capacitor tubing according to the actual water level in the tank, the basic stamp is utilized to detect capacitance changes throughout the sensor with the use of an RC circuit and RCTIME. Due to the oscillating nature of the discharge time of the capacitor caused by the floating point limitation on the BS2, multiple RCTIME reading were taken Page 5 of 22 and compared to ensure that the proper level was being read and to decrease spikeinduced errors. RCTIME was run two consecutive times. The first was given a discharge time of 1 millisecond and the second 2 milliseconds. Once these two values were acquired, a third RC value was constructed by calculating the average of the two; due to the truncation of decimals, these three values were utilized to get more specific ranges and further restrict a water level setting to a more unique range and increase accuracy. These three values were recorded with the use of Stamp Plot Lite and their oscillation ranges for each water level were compared. The results of these plots allow for each level to be quickly recognized and compensate for errors. What were noticed after all three trials were run and all graphs plotted with occasional erroneous data spikes was a definitive range of values which only a certain water level would produce. Where the medium and minimum levels were found to have very similar discharge responses, the maximum level was able to provide distinguishable values and vice versa. The three different rctime values were able to be used to positively identify each level and based on all three measurements create a function with PBasic that would utilized the conclusions drawn from these values and then go on to monitor the fish tank level with respect to the desired level and temperature. Plots of all three tests and the different oscillations along with their definitive ranges can be seen in the following pages. Page 6 of 22 Calibration Graphs for the Maximum Water Level: RCT1 for Maximum Level 2000 RCTime Values 1800 1600 1400 1200 y = -0.2362x + 1350.3 1000 800 1 61 121 181 241 301 361 421 481 541 Tim e (Se c) RCT2 for M aximum Le v e l RCTime Values 1500 1400 1300 y = 0.1274x + 1306.4 1200 1100 1000 1 61 121 181 241 301 361 421 481 541 601 661 721 Time (Sec) RCTavg for Maximum Level 550 RCTime Values 500 450 400 y = -0.0424x + 395.21 350 300 250 200 1 61 121 181 Time (Sec) Figure 4 241 301 361 781 Page 7 of 22 Calibration Graphs for Medium Water Level: RCTime Values RCT1 for Medium Level 1700 1600 1500 1400 1300 1200 1100 1000 900 800 y = -0.1404x + 1182.6 1 61 121 181 241 301 361 421 Time (Sec) RCT2 for Medium Level 1600 RCTime Values 1500 1400 y = -0.3448x + 1296.4 1300 1200 1100 1000 1 61 121 181 241 301 361 421 481 Time (Sec) RCTavg for Medium Level 350 RCTime Values 340 330 320 y = -0.084x + 334.47 310 300 290 280 1 61 121 181 241 Time (Sec) Figure 5 301 361 421 Page 8 of 22 Calibration Graphs for Minimum Water Level: RCT1 for M inimum Le v e l 6000 RCTime Values 5000 4000 3000 y = 0.0937x + 1132.1 2000 1000 0 1 40 79 118 157 196 235 274 313 352 391 430 469 508 547 Tim e (Se c) RCT2 for M inimum Le v e l RCTime Values 1600 y = 0.0248x + 1339.7 1500 1400 1300 1200 1100 1000 1 61 121 181 241 301 361 421 481 541 Time (Sec) RCTav g for M inimum Lle v e l RCTime Values 390 370 350 330 y = -0.0258x + 338.16 310 290 270 1 61 121 181 241 301 Time (Sec) Figure 6 361 421 481 541 Page 9 of 22 Comparison of Ranges Calibration Graphs: RCT1 Comparative Values RCT Value 2000 1861 16991719 1500 Maximum Water Level 871 839 773 1000 Medium Water Level Minimum Water Level 500 0 1 2 Max / Min RCT Value RCT2 Comparison 1800 1600 1400 1200 1000 800 600 400 200 0 1495 1547 1460 1130 1032 1144 Highest Middle Low est 1 2 Max / Min RCTavg Comparison RCT value 450 400 415 392 350 317 350 300 250 281 280 Maxim um Medium 200 150 100 Minim um 50 0 1 2 Max / Min Figure 7 Page 10 of 22 Temperature sensor The 592 temperature probe is used as an analog sensor. The temperature probe’s primary job is to take temperature readings of the water in the aquarium. The temperature probe acting as a thermometer is wired in the circuitry shown in figure below. Figure 8: Circuitry for the temperature probe The circuit shown is known as a RC circuit. The temperature transducer is electrically a current source, which is also a special type of regulated resistor. The temperature probe is acting as the resistor in the circuit. A certain discharge time is given by the capacitor based on the resistance of the probe, which is influenced by the temperature. The discharge time is captured by the basic stamp using RCTIME. The name RCTIME comes from R for resistance, C for capacitance, and the time it takes for a resistor to charge the capacitor. The temperature probe calibration is based on the RCTIME value. It is assumed that temperature increases linearly; so an “equation of a line formula” was implemented to calibrate a linear temperature reading. The calibrated formula was found to be: TC = Kal/rct*10 + (Kal//rct*10/rct) - 273 which is expressed in Celsuis. The temperature probe mainly worked in conjunction with the temperature potentiometer. The temperature potentiometer is implemented so that the user can set the desired temperature inside the tank. If the temperature inside the tank is greater than the set temperature desired by the user, the water-pumps (in the Figure below) would be activated. There are two pumps; one is placed inside the tank, and the other outside the tank. To lower the temperature to the desired temperature set by the user, the warmer water inside the tank is pumped out at the same rate as cooler water is being pumped inside the tank. This process maintains the desired water level. It continues until the desired temperature is reached. If the temperature reading inside the tank is lower than the desired temperature set by the user, the water heater inside the tank is activated to increase the temperature to the desired temperature set. Once the temperature inside the tank is the same as the potentiometer temperature setting, there is no activation of either the pumps or water heart. Page 11 of 22 Figure 9: Water-pump circuitry The motor in the pump draws 300ma and 3volts, therefore the transistor is used to amplify the current available from basic stamp. The emitter follower transistor is used in this circuit. The voltage at the emitter follows the voltage at the base. When pin 0 and 1 goes high, the base sees 5 volts, the emitter collector current is there after activated, and the 300mA need to turn on the motor is driven by the transistor. When the pins go low the voltage at the base is 0volts and the motor turns off. Figure 10: Temperature - Potentiometer circuitry The circuit above shows the potentiometer circuitry. The potentiometer shown above is used to set the desired temperature in the tank. The potentiometer, like the temperature probe operates, in a RC circuit. 5 volts is provided by pin 5 when it is driven Page 12 of 22 high. It forces the capacitor to be in a discharged state (same potential across both plates of the capacitor). Having discharged the capacitor the RCTIME command switches pin 5 from output to input. When pin 5 crosses transition from high to low (1.4V), the time taken to do so is captured using a variable in the RCTIME command. The time taken for the circuit to move from high to low is controlled by the potentiometer; changing the resistor value changes the RCTIME value. The calibrated formula of the potentiometer is given as: setTemp = (2*setTemp/3 + 22219)/1000, which is also in Celsius. The linear line equation was used as basis for the calibration. Y = mX + b, the potentiometer was adjusted to its 2 extremes. The RCTIME value at those extremes was noted and used for y values. The x values were the ranges in temperature values attainable by the temperature probe. Eg.(x1, y1,), (x2,y2), => (37Celcius, 123RCTIME), (22Celcius, 23RCTIME). Using these points the slope and yintercept was found. The formula : setTemp = (2*setTemp/3 + 22219)/1000 is the linear line equation. Automatic Shutdown Switches There are two shutdown features in the smart aquarium design. One shutdown switch is used to terminate the system, while the other switch is used to stop automatic feeding. The need for the automatic shutdown can be for emergency reasons, so that the user can disable the system immediately and at will. The toggle switch used to shutdown the system also turns it back on. The second shutdown switch is being used to stop automatic feeding option programmed into the system. If the user desires not to have an automatic feeding system, he or she has the discretion to disable that feature rather than taking it apart. The same switch can also be used to enable automatic feed without reprogramming. The figure below shows the wiring for both switch circuitries. Figure 11: Circuitry for the toggle switches Pin 2 and 3 goes high when the switch is open. They are then pulled up to the 10k resistor connected to the Vdd, which limits the current to 0.5mA. Pin 2 and 3 goes low when the switch becomes closed. Page 13 of 22 Water Heater The solid state relay we utilized requires 3 volts control voltage, and it can supply output voltage of up to 240VAC and output current of up to 1A. The water heater requires 120VAC and 0.5A in order to activate, thus the solid state relay gives enough voltage and current to activate it. The water heater is controlled by the solid state relay, and the relay is activated when pin 6 from Basic Stamp 2 (BS2) goes high (5V). To ensure the safety of BS2, 1k ohm resistor is connected in series with the pin, which allows maximum of 5mA of current flow. 120 V AC Hot wire j 1 kohm P6 Solid State Relay Water Heater Neutral Wire Figure 12: Relay / Water Heater circuitry Project Code The software used for the project was designed to manage first the water level in the tank, then the temperature, and lastly the feeding procedure. The program consists of two main segments and 3 functions. One of the main segments is designated to sensing the current water level and obtaining the value of the desired (user-defined) water-level. Similarly, the other main segment is for obtaining the desired temperature value and sensing the present temperature inside of the tank. Two of the three functions manipulate the two water pumps, which are used for both temperature and water-level control. The third function implements the feeding process. potvalue measTemp measTemp2 TC setTemp rct result s water_level value var word ' an array of potentiometer values for the temperature var word ' a variable that will hold temperatures being set var byte ' a variable to check multiple reading the actual temp var word ' degrees Celsius var word ' temp set var word ' this is the variable for the thermometer var word ' rctime value of photoresistor var byte ' condition variable var word ' value used to recieve water level var nib ' this will controle the "FOR" loop for the shutdown loop in_level phase rct1 rct2 rctavg var bit pumpin Pumpout con 0 con 1 var word var word var word ' controls whether or not the program is in the water-level setting ' variable used in the calibration of water-level sensor ' variable used in the calibration of water-level sensor ' variable used in the calibration of water-level sensor ' pin value ' pin value Page 14 of 22 potmeter con 5 ' pin value pin used for rctime calculations for the setting of desired temperature capsensor con 9 ' pin value connected to capacitive sensor and use for rctime in turnonpump photo con 8 ' pin value Relaystate con 6 ' pin value control signal for the ssr used to control 120V water heater ledon con 11 ' pin value used to power the LED in the light sensing system used to feed the fish thermometer con 10 ' pin value pin used in rctime to find the current temperature value feeder con 13 ' pin value connected to servo motor to control the food tray ramp con 15 ' pin value connected to servo motor to control the food door Kal con 6300 ' constant to be determined FeedConst con 5000 input 2 ' used to shutoff automatic feedfish function input 3 ' used to put program in suspend mode Figure 11 Above is a list of all of the variables used in creating the program, together with a description of their individual functions. '****************************** Start of the Program ************************************ START: x=0 '****************************** Beginning of Water-Level Sensing ************************ LEVEL: debug "in level",cr high capsensor pause 1 rctime capsensor,1,rct1 'debug dec rct1,cr pause 2000 high capsensor pause 2 rctime capsensor,1,rct2 'debug dec rct2,cr pause 1000 rctavg = (rct1 +rct2)/20 'debug dec rctavg,cr pause 1000 low capsensor if rct1<1862 and rct1>870 and rctavg<416 and rctavg>318 then highest_water_level if rct1<1700 and rct1>838 and rctavg<351 and rctavg>280 then medium_water_level if rct1<1720 and rct1>774 and rctavg<393 and rctavg>279 then lowest_water_level highest_water_level: value = 13 goto end1 medium_water_level: value = 39 goto end1 lowest_water_level: value=65 end1: high 12 pause 2000 rctime 12, 1, water_level water_level=water_level/100 low 12 debug ?water_level, cr Page 15 of 22 IF in3 = 0 THEN SHUTDOWN 'SHUT DOWN THE SYSTEM set_level: if value>=(water_level-13) and value<=(water_level+13) then exit if value<water_level then waterin if value>water_level then waterout goto level '----------------------------------------- End of Water Level Sensing ------------------Figure 12 exit: debug "in exit", cr in_level=in_level+1 goto feedfish At the start of the program, the variable x is set equal to zero. The variable is increased throughout the program. It’s used to determine whether or not the automatic feeding process should take place. The feeding procedure will occur when the value of x is 24 and the program is sent to the “feedfish” function (as shown on the last line of the above section of code). The label LEVEL in the code above marks the beginning of the water-level section of the program. The water level sensor is able to detected and maintain the water at 3 different levels of depth: low, medium, and high. The first three RCTIME values are used together in the calibration of the capacitive sensor. The three IF statements following the RCTIME commands are used to determine the value of the variable ‘value’, which could be either 13, 39, or 65. The next IF statement determines whether or not the value of pin 3 is zero, at which point the program will go into shutdown/suspend mode. These IF statements / shutdown checks are placed in strategic locations throughout the program. The next RCTIME command uses pin 12 to obtain the value of the desired water level. That value is stored in the variable ‘water_level’. The three IF statements under the label ‘set_value’ are used to determine whether or not the actual water level is in an acceptable range of the desired water level, and sends the program to the appropriate functions. The program only leaves the water level segment when the variable ‘value’ is within 13 of the value ‘water_level’; in other words, it stops monitoring the level of water in the tank when the actual level in the tank is within a specific range of the user defined water level. This occurs when the first of the three IF statements under the label ‘set_value’ is true, at which point program is sent to the label ‘exit’. In exit, the bit variable ‘in_level’ is set to the value 1. The value of in_level is one at this point because it was previously unassigned, and all unassigned variables have a default value of zero. The changing of the variable can be thought of as a way to let the actuating functions know whether or not they are being used to regulate water level or temperature. Note that all of the pins used to put pins set to high for the RCTIME command used in this section of code are then set low. This is to guarantee that the Basic stamp doesn’t exceed it’s source current limitations. Page 16 of 22 '**************************** Beginning of Temperature Sensing ************************** TEMP_CHECK: debug "in temp_check", cr pause 2000 x = x+2 setTemp = 0 for j=0 to 2 High potmeter pause 1000 rctime potmeter,1, potvalue debug ?setTemp,cr setTemp = setTemp + potvalue x=x+1 next setTemp = (2*setTemp/3 + 22219)/1000 debug "The value is ", ?setTemp,?x, cr debug? potvalue low potmeter if in3 = 0 then shutdown 'SHUT DOWN THE SYSTEM debug "In the temp_check function", cr 'Initializations measTemp2 = 0 ' Checking the current Temperature for i=0 to 4 low thermometer ' discharge the capacitor RCtime thermometer,0,rct ' time for the volts to rise to 1.3 next TC = Kal/rct*10 + (Kal//rct*10/rct)-307 ' calculate Celsius temperature low thermometer debug ?rct,?thermometer,?setTemp,?TC,cr if TC > setTemp then waterin goto heateron IF in3 = 0 THEN SHUTDOWN 'SHUT DOWN THE SYSTEM '---------------------------- End of Temparature Sensing -------------------------------Figure 13 The above section of code is the segment of the program that senses actual temperature inside of the tank and receives the desired temperature value from the user. In the first half of the segment the variable ‘setTemp’ is being used to obtain the desired value of temperature. “Calibration Formula.” In the next section of code, a current temperature reading is obtained using the pin specified by the name thermometer, which is connected to an RC circuit containing the AD 592 temperature probe. Another RCTIME calculation is performed in order to obtain a value that is related to the current temperature value in the tank. The readings are calibrated according the formula TC = Kal/rct*10 + (Kal//rct*10/rct)-307. ???? Like the water-sensing portion of the code, the value temperature portion obtains the desired value of the temperature first, senses the actual temperature in the tank second, and lastly sends the program to the appropriate actuating function. Again, each pin that is turned high in the temperature portion of the code is then turned low. Page 17 of 22 '************************************** Essential Functions ***************************** WATERIN: debug cls,"Pumping water in.", cr high pumpin pause 5000 low pumpin pause 2000 x = x+12 debug ?x,cr if in_level=1 then waterout IF in3 = 0 THEN SHUTDOWN 'SHUT DOWN THE SYSTEM goto level WATEROUT: debug "Pumping water out.",cr high pumpout pause 10000 low pumpout pause 2000 x = x+7 IF in3 = 0 THEN SHUTDOWN goto level 'SHUT DOWN THE SYSTEM HEATERON: if TC >= setTemp then end3 High Relaystate pause 9000 x = x+9 debug ?x, "heater on", cr IF in3 = 0 THEN SHUTDOWN 'Activate the Relay 'SHUT DOWN THE SYSTEM end3: low Relaystate goto temp_check IF in3 = 0 THEN SHUTDOWN 'SHUT DOWN THE SYSTEM Figure 14 The first essential function is the ‘WATERIN’ function, in which water is pumped into the tank. Water could be pumped into the tank to regulate either water level or temperature. If water is being pumped in to regulate temperature, then the program must remove some water to compensate for the added water; the program must go to water out. The value of the variable in_level determines whether or not the program jumps to the WATEROUT label after WATERIN or to LEVEL. In the WATEROUT label, water is pumped out of the tank and the program is sent to the label LEVEL. The program only arrives at the HEATERON label when the temperature in the tank is below the temperature value sensed in the TEMP_CHECK label. In this label, the pin represented by the tag name ‘Relaystate’ is set high. Setting this pin high turns on the water heater in the tank. The command ‘low Relaystate’ given after the label end3 is declared, meaning that the heater is only turned off when the temperature sensed in TEMP_CHECK is equal to or greater than the user-input temperature value. '****************************************Feedfish Function******************************* FEEDFISH: debug "Feeding Function" for s = 0 to 25 Page 18 of 22 pause 10 pulsout ramp,500 pause 10 next s=0 for s = 0 to 25 pause 10 pulsout feeder,500 pause 10 next 'servo-motor preparing to open if x<24 then continue if in2=1 then continue x=0 debug ?x for s=0 to 25 'open ramp pulsout ramp, 860 pause 10 debug "doing the loop",cr next debug cls,"ramp is open",cr low ledon 'turn on led loop1: low photo pause 1000 rctime photo,0, result debug cls, ?result if (result-20000) < 15000 then loop1 debug "Now closing ramp.",cr for s=0 to 25 pulsout ramp, 500 pause 10 next 'closing ramp debug "Dispensing Food",cr for s=0 to 25 'open feeder pulsout feeder, 1000 pause 10 next pause 3000 high ledon 'Giving the food time to fall 'turn off led for s=0 to 25 'closing feeder pulsout feeder, 500 pause 10 next continue: if in3 = 0 then shutdown 'SHUT DOWN THE SYSTEM goto temp_check ----------------------------------------------------------------------------------------Figure 15 The first three “For” loops in the feedfish functions are there to ensure that the function servo-motors have the ramp and feeder sufaces of the fish-feeder in a closed position. In the following IF statements the program checks to make sure that x has a value that is at least 24 and that the digital voltage value at input pin 2 isn’t one. If either of the conditions are true, then the program skips to the label ‘continue’, which is at the end of the function. Page 19 of 22 If both of the IF statements return false, then the program proceeds to open the ramp. Under the label named loop1 the program uses the RCTIME command again to determine whether or not the resistance value of the photo-resistor used in the feeder mechanism is high. In other words it checks to determine if light is being blocked by food. If the RCTIME value, which is stored in the variable ‘result’ is high, then the program proceeds to the next for loop, which closes the ramp. The for loop after that opens the feeder and dispenses the food. After three seconds, the program goes to the next for loop, which closes the feeder. At the end of the feedfish function, the program goes to the TEMP_CHECK label. '************************************Shutdown / Suspend Function************************* end SHUTDOWN: low Relaystate low potmeter low capsensor low pumpin low pumpout high ledon low 12 SUSPEND: debug cls,"IN SUSPEND MODE",cr pause 1000 if in3 = 0 then suspend goto start Figure 16 In the shutdown/suspend function, the every one of the pins used to control an actuator is turned low to ensure minimum energy consumption/loss in suspend mode. The program then enters the loop under the label SUSPEND and will not come out of the loop until the voltage at input pin 3 is high, or until the toggle switch connect to pin 3 is flipped. Cost Estimate Below is a chart itemizing the cost of building the aquarium prototype -Prototype: Basic Stamp 2 & Board of Education Automatic Food Dispenser Water Heater Solid State Relay Water Tank Water Tank Cover The Water Tubes & Aluminum Tape with Insulator Electrical Box Multiple Power Connectors Toggle Switches $100 $40 $20 $14 $11 $8 $7 $5 $4 $4 Total Cost $213 Page 20 of 22 -Mass Production: The BS2 and Board of Education will not be used in mass production. The $100 cost of the stamp and board of education will be replaced by a $5 cost for a PIC type controller with the aquarium program installed. PIC with Aquarium program installed Automatic Food Dispenser Heater (with appropriate power depending on tank size) Solid State Relay (depending on type of heater) Water Tubes & Aluminum Tape with Insulator Water Pump Electrical Box to secure wiring $5 $40 $25 $15 $10 $60 $5 Total Cost $160 Conclusion The Smart Aquarium is a cost-effective system that is capable of not only having real market value and potential, but also truly utilizes the meaning of smart appliance. It creates for itself marketability by replacing or reducing virtually all tasks that are tied into caring for aquatic life such as fishes. The Smart Aquarium is incredibly versatile as well as fully upgradeable, enabling it to be suited for larger animals such as seals and whales. The mass production cost of this device is moderate enough to accommodate budgets of small pet shops looking to maintain a small employee roster. The Smart Aquarium is compact and self contained, not requiring constant surveillance. Future upgrades for the Smart Aquarium such as multiple tank stability through a single system and interactive alarms can further enhance the role of this system in caring for aquatic animals as more customized customer needs arise. Overall, this system is very capable of meeting and surpassing all expectations with many ways of it improving and expanding it over time. Page 21 of 22