Smart House - Subtitle - Project Report SW504E14 Department of Computer Science Selma Lagerlöfs Vej 300 DK-9220 Aalborg Ø http://cs.aau.dk c Aalborg University 2014 Copyright Here you can write something about which tools and software you have used for typesetting the document, running simulations and creating figures. If you do not know what to write, either leave this page blank or have a look at the colophon in some of your books. Department of Computer Science Selma Lagerlöfs Vej 300 DK-9220 Aalborg Ø http://cs.aau.dk Title: Smart House Abstract: Here is the abstract Theme: Embedded Systems Project Period: Fall Semester 2014 Project Group: SW5504E14 Participant(s): David Junker Lasse E. Nielsen Mads Mikkelsen Martin Lykke Martin Z. Kristensen Søren B. Andersen Supervisor(s): Jiri Srba Copies: 1 Page Numbers: ?? Date of Completion: December 3, 2014 The content of this report is freely available, but publication (with reference) may only be pursued due to agreement with the author. Contents Preface ix 1 Introduction 1 2 Analysis 2.1 Home automation . . . . . . . . . . . . 2.1.1 Available features . . . . . . . . 2.1.2 Installation and Configuration 2.2 Current setup . . . . . . . . . . . . . . 2.3 Problem statement . . . . . . . . . . . 2.4 Equipment . . . . . . . . . . . . . . . 2.4.1 Arduino Mega Board . . . . . . 2.4.2 Arduino Ethernet Shield . . . . 2.4.3 LCD display . . . . . . . . . . 2.4.4 Buttons . . . . . . . . . . . . . 2.4.5 Relay module . . . . . . . . . . 2.4.6 Sound sensor . . . . . . . . . . 2.4.7 AD Keyboard module . . . . . 2.4.8 Motion Sensor . . . . . . . . . 2.4.9 Standard Buzzer Module . . . 2.4.10 Realtime clock . . . . . . . . . 2.4.11 Light dependent resistor . . . . 2.4.12 DC Voltage regulator . . . . . 2.4.13 Electric current measurement . 2.5 New setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 4 4 5 5 5 8 9 11 13 14 15 17 19 19 20 22 22 24 3 Design 3.1 Model Driven Software 3.2 System Description . . 3.2.1 Web Server . . 3.2.2 Clock . . . . . 3.2.3 Keypad . . . . 3.2.4 Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 27 28 29 29 29 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v . . . . . . . . . . . . . . . . . . vi Contents 3.3 3.4 3.5 3.6 Rules . . . . . . . . . . . . . . . . . . . . 3.3.1 Main loop for rules . . . . . . . . 3.3.2 Use case example . . . . . . . . . Remembering the state of lights . . . . . Implementation analysis . . . . . . . . . 3.5.1 Arduino C++ . . . . . . . . . . . 3.5.2 Embedded Java . . . . . . . . . . 3.5.3 Choice of programming language NilRTOS . . . . . . . . . . . . . . . . . 4 Architecture 4.1 NilRTOS . . . . . . . . . . . 4.2 Libraries . . . . . . . . . . . . 4.2.1 RelayManager . . . . 4.2.2 Running time analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 30 31 33 35 35 35 35 36 . . . . 37 37 38 38 38 5 Implementation 39 6 Conclusion 41 Bibliography 43 Jiris House 45 Todo list o Power wasted = (input voltage – output voltage) * load current - Help Jiri . o husk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o overvej om det lige er de tre komponenter der skal beskrives eller om det giver bedre mening at beskrive grupperne i diagrammet . . . . . . . . . . o hvad er den (worst-case), mere analyse af hardware vs limit, dynamisk etc. . vii 22 28 30 35 viii Contents Preface Here is the preface. Aalborg University, December 3, 2014 David Junker Lasse E. Nielsen <[email protected]> <[email protected]> Mads Mikkelsen Martin Lykke <[email protected]> <[email protected]> Martin Z. Kristensen Søren B. Andersen <[email protected]> <[email protected]> ix x Preface Chapter 1 Introduction The idea behind home automation is to improve the every-day life of people. Home automation is used to describe when components such as lighting, heating, ventilation, air conditioning, appliances, blinds and locks can be controlled and automated through electronic devices. This can provide improved comfort, energy efficiency and security in a house [Institut, 2013]. Automating different tasks could be a great help to the elderly and disabled, and also be a way to optimize energy consumption. The industry shows a great interest in home automation. In January 2014 Google bought Nest Labs, which is known for their smart thermostat and smoke alarm, for 3.2 billion dollars [Griffith, 2014]. However even though there is a interest in the technology some issues still remain. The task of configuring the different devices and get them to cooperate is difficult for the end-user and is currently maintained by domain experts. There have been different attempts to simplify the process but even after these the task of configuring and expressing the desired behavior still requires domain knowledge [Sørensen, 2014]. The objective of this project is to turn an old house into a modern smart house. The task is to be able to achieve an advanced control of the lights through different devices. Furthermore the end-user should be able to configure the house without requiring domain knowledge about the system. The project will be based on the house of our supervisor who got a traditional danish villa. 1 2 Chapter 1. Introduction Chapter 2 Analysis In this chapter home automation systems that are currently available is described and analyzed as a basis for developing a product that ameliorates the properties of existing home automation systems. Our supervisor’s house configuration will be described to identify any specific requirements for a home automation system. A problem statement will follow defining the issues that needs to be addressed. To address the issues a description and analysis of the hardware components needed for the home automation system will follow. 2.1 Home automation This section describes possible features, advantages and disadvantages in existing home automation solutions. 2.1.1 Available features Some of the features that are available in current home automation systems can be seen in Table 2.1. Some features such as light switches requires current components to be replaced by new components supported by the home automation system. Light control through light switches Blinds control Heating and cooling control Fan control Monitor the power consumption of the home Allow users to program sequences of tasks and buttons Allow users to schedule automated tasks Different house configurations such as home theater Simple configuration of devices through a network scan Table 2.1: Possible features in a home automation system [Gavazzi, 2014]. 3 4 Chapter 2. Analysis Typically a home automation system is based on modules which can be added to a head-unit and extend the existing features of a given home automation system. The features can be managed through different devices such as smartphones, tablets or Personal Computers (PC) with supported applications [Gavazzi, 2014]. 2.1.2 Installation and Configuration Home automation can be implemented in different ways. Some of the most common ways of installing a home automation system includes replacing the houses existing switches with new switches and devices that are plugged into existing switches and gives remote control of the connected device. Most systems1 contain components that require a certified technician to install and configure. A technician typically require about 10 % of the total price of the home automation system as payment. In these systems it is not possible for user to extend and configure the system, but requires a technician to do this should it be needed [Company, 2014]. Some systems such as Creston and Ninja Blocks include an application for the user to create rules and configure the system but they may prove too difficult for users without programming and hardware expertise to use. 2.2 Current setup To get a better understanding of how to transform the current house into a new smart house, we need to understand how the light installation of the house works. A figure illustrating the layout of the house can be seen in Appendix 6. The house have 16 relays each connected to buttons and lights. A section of these relays can be seen in figure 2.1. Each relay is connected to buttons and lights in the house. These relays work by receiving an impulse which switches them from on to off or the opposite. Figure 2.1 illustrates this by having the relay switch on either on (|) or off (o). Figure 2.1: Section of the 16 relays in the house. 1 Smart House, Crestron, AMX, SavantAV, Control4 and more 2.3. Problem statement 5 The current installation in the house causes some problems that must be considered. A button works by creating a circuit when pressed. This circuit makes it possible to provide the electrical impulse to the relay connected with the button. However the relays may only receive a very brief impulse since they will burn out if the duration of the impulse is too long. Therefore if a person on purpose or by accident makes a long press on the button the relay will burn out. Another problem is that sometimes the relay switch does not move from its current position when receiving the impulse. As the introduction states the project will aim at solving these problems with low budget devices and by making it possible for the user to configure the house without the need of external assistance. 2.3 Problem statement As described in section 2.1 the examined solutions are expensive, require a certified technician to install, maintain, extend and adjust. Furthermore some features can require existing components in the house to be removed. In this project we will try to remove these disadvantages while keeping the advantages of existing solutions. Our problem statement is: • How can a home automation system be build such that: – the solution is cheap? – it does not require a technician to install, maintain, extend and adjust? – it works with existing electrical components in the house? – the user can configure the system through several devices? – the user can trust that the configuration work? 2.4 Equipment To solve the problem statement various equipment is needed. The equipment has to be cheap and require no technician to install. The following sections describes the chosen equipment. 2.4.1 Arduino Mega Board The Arduino Mega Board consists of several components which are shown in Figure 2.2. ATMega2560 MCU: The Arduino Mega Board uses an ATmega2560 microcontroller unit (MCU). A feature of the ATmega2560 microcontroller is its 54 digital input/output pins. This makes it possible to connect a large number of components to the microcontroller. 6 Chapter 2. Analysis Figure 2.2: Arduino Mega Board [Arduino, 2014e] Serial-to-USB circuitry: An ATMega 16U2 microcontroller is also included and serves as an interface between a Universal Serial Bus (USB) cable and the serial USART pins on the main microcontroller used, among other things, for bootloading. USB connector: Allows a USB cable to be connected to the Arduino Mega Board to transfer compiled code to the bootloader. When the Arduino is connected to a device through the USB it will run on a power supply of 5 volt. MCU programming connector (ICSP): The ICSP is a hardware interface to the ATMega2560 MCU making it possible to program directly to the ATMega2560 MCU without the use of a bootloader. This makes it possible to take full advantage of the flash size of which the bootloader would use 8 KB. 6-20VDC input: When the Arduino is not connected through the USB connector, it can use an external power supply. The Arduino can operate on 6 to 20 volts but anything outside of 7 to 12 volts may prove unstable or damaging. Debug LED: The LED will flash when code is being uploaded and stay lit when the Arduino is running. It is connected to pin 13 making it possible to use the LED for other purposes. General I/O: These are digital input/output pins allowing the communication 2.4. Equipment 7 from and to connected components. The maximum DC current per I/O pin is 40 mA and 20 mA is recommended [Arduino.cc, 2014]. Pins on an Arduino have INPUT as default configuration. When a pin have the INPUT configuration, it is possible to get the status of the pin. The ATMega chip have 20 50 kOhms pullup resistors built into it that can be accessed from Arduino programs [Arduino, 2014f]. When a pin have the configuration INPUT_PULLUP, the behavior of it is reverted. The INPUT_PULLUP configuration is preferred to use because the INPUT configuration can pickup electronic noise from its surroundings, which makes it unpredictable [Arduino, 2014g]. Analog-to-Digital convert inputs: These are the same as the general I/O pins except they can also receive analog input from connected components. They convert the analog input ranging from 0 to 5 volt to a digital number ranging from 0 to 1023. Power and auxilary pins: These pins provide power to other components such as bread boards. Bootloader Ordinarily, ATMega microcontroller programs are written in C or Assembly and programmed via the In-circuit serial programming (ICSP)-interface using a dedicated programmer. The most important characteristic of an Arduino is that it got an USB interface. The interface makes it possible to upload code to the Arduino. This functionality is made possible by the Arduino bootloader. The bootloader is loaded onto the ATMega at the factory (using the ICSP header), which allows a serial Universal Synchronous/Asynchronous Receiver/Transmitter (USART) to load a program on the Arduino. Hereby knowledge about the ICSP interface is not needed [Blum, 2013]. When uploading a program to the Arduino it is saved to the flash, which on the ATMega 2560 used in this project has a size of 256 KB of which 8 KB is used for the bootloader. The bootloader is a chunk of code stored in a reserved space in the flash memory of the Arduino. At the first boot of the Arduino board, it enters the bootloader, which runs for a few seconds. If it receives a programming command via the USART it loads the program into the flash memory. If the bootloader does not receive a programming command, it starts running the program that resides in the flash memory, if any. When the Arduino receives an “upload” command, the USB-toserial chip, in this case an ATMega 16U2, is instructed to reset the main MCU, hence forcing it into the bootloader. Bootloaders are great because they enable simple programming via USB with no external hardware. However, they do have two downsides: • They take up valuable program space, in this case 8 KB. 8 Chapter 2. Analysis • Using the bootloader causes the program to be delayed by a few seconds at boot time as the bootloader checks for a programming request [Blum, 2013]. Programming an Arduino A program for Arduino is called a sketch. A sketch contains two phases: the setup phase and the loop phase. Setup phase: The setup phase is the first phase that is called when a sketch is executed. It is used to initialize variables, set the different pin modes, load libraries, etc. The setup phase will only run once every time the Arduino is booted [Arduino, 2014h]. Loop phase: The loop phase is called after the setup phase. This phase makes is possible for a program to respond and change to control the Arduino [Arduino, 2014d]. 2.4.2 Arduino Ethernet Shield The Arduino Ethernet Shield consists of several components which are shown in Figure 2.3. This section describes the different components. Ethernet port: The Arduino Ethernet Shield is connected to a network with the integrated RJ45 Ethernet jack. The Ethernet port has a connection speed of 10/100mb [Arduino, 2014c]. WIZnet w5100 Ethernet chip: The Arduino Ethernet Shield is based on the WIZnet w5100 Ethernet chip which is a single-chip Internet enabled 10/100 Ethernet controller. The following is cited from the WIZnet W5100 datasheet: "The W5100 is a full-featured, single-chip Internet-enabled 10/100 Ethernet controller designed for embedded applications where ease of integration, stability, performance, area and system cost control are required. The W5100 has been designed to facilitate easy implementation of Internet connectivity without OS. The W5100 is IEEE 802.3 10BASE-T and 802.3u 100BASE-TX compliant" [WIZnet, 2010]. The chip from WIZnet supports up to four socket connections at the simultaneously, by either UDP or TCP provided by a network stack [Arduino, 2014c]. The WIZnet 5100 chip has a internal buffer of 16Kbytes for data transmission [WIZnet, 2010]. micro-SD card slot: The Arduino Ethernet Shield has an onboard micro-SD slot which is compatible with the Arduino Mega board used in this project. The slot combined with a SD card makes it possible to store files and serving these on the network. The micro SD card is accessible with the SD library provided by the Arduino project [Arduino, 2014c]. 2.4. Equipment 9 Figure 2.3: Arduino Ethernet Sheild-R3, picture taken from [Arduino, 2014b] Reset Button: The Arduino Ethernet Shield has a reset button as seen in figure 2.3, which ensures that the W5100 chip is reset properly on power-up [Arduino, 2014c]. Digital pins: The digital pins on the Ethernet Shield are used for communication between the Shield and the attached Arduino. The Arduino Mega board is able to communicate with the Micro SD and the WIZnet w5100 Ethernet chip by using the SPI bus through the ICSP header. The Arduino Mega board uses pin 50,51,52. Furthermore pin 10 is used for selecting the W5100 chip and pin 4 is used for the SD card. Because of the fact that the WIZnet Ethernet chip and the SD card share the SPI bus only one of them can be active at same time. Both the WIZnet Ethernet chip and the SD card is active by default, to disable those pin 4 and 10 must be set as high output, for SD card and the Ethernet chip respectively [Arduino, 2014c]. 2.4.3 LCD display This component is a low power consumption character LCD module with a built in controller. The component can display 20 characters per line and is capable of displaying four lines. The LCD makes use of white text on a blue background. 10 Chapter 2. Analysis Furthermore the component needs a supply voltage of 5V. In order to swap information a common communication protocol must be used. There exist many protocols and each can be separated into one of two categories namely parallel or serial communication. Parallel interfaces transfer multiple bits at the same time, while serial interfaces stream their data one bit at a time. The LCD uses serial communication which makes it possible to transfer data using less wires than parallel communication, which can be seen in Figure 2.4. The LCD only needs 4 wires. Besides wires to GND and VCC a wire to the SDA (data line) pin and a wire to the SCL (clock line) pin is needed. A picture of the LCD display used in this project can be seen in Figure 2.5. Figure 2.4: A: An 8-bit data bus, controlled by a clock. Each out transfer a byte every clock pulse. B: A serial interface, one byte is transfered every clock pulse [Jimbo, 2014] 11 2.4. Equipment Figure 2.5: A picture of the LCD display 2.4.4 Buttons The buttons used in this project are two pins momentary on-off push buttons illustrated in Figure 2.6. Figure 2.6: Picture of a push button, from [CircuitSpecialists, 2014] The buttons work by changing from an open circuit or a closed circuit when the button is pushed. An open cirtuit is illustrated in Figure 2.7. Figure 2.7: Picture of an open circuit 12 Chapter 2. Analysis In this project the buttons are used to open relays described in section 2.4.5 and therefore the buttons are connected to the Arduino using a digital pin and a ground pin. Listening to the digital pin can then indicate if a button is being pushed. When the button is pushed the digital pin reads a 0. When the button is released the digital pin reads a 1. When reading the digital input received from the button the data looks very irregular as picture 2.8 illustrates. Figure 2.8: Button without resistor The graph was created by logging the digital input from the digital pin connected to the button, using the Arduino serial monitor. The button was pushed at the time where the graph flatlines at zero in the digital input axis. To get a precise reading of the input received on the digital pin an internal 20K Ω pull-up resistor on the Arduino is used. Figure 2.9 illustrates how the input received on the digital pin is changed using the internal resistor. Figure 2.9: Button with internal resistor 2.4. Equipment 2.4.5 13 Relay module A relay is a mechanical switch used to connect and disconnect electronic circuits. When the switch connects two circuits it is said to be normally opened and when it disconnects the circuits it is said to be normally closed. Figure 2.10: 5V Active Low 8 Channel Road Relay Module Control Board The relay used in this project is an eight channel relay interface board which can be controlled by microcontrollers such as the ones contained in Arduino boards, it is illustrated in Figure 2.10. It supports up to 5 volt and can output up to AC250V 10A and DC30V 10A making it applicable in a real house. It is an active-low relay meaning it is opened when receiving low or no voltage and closed when receiving a high voltage up to 5V. The relay needs continuous power to operate. There are three terminals on each relay: NO, COM and NC. The COM (Common) connection of the relay is the part of the relay that moves. When the relay is off, the COMMON is connected to the NC (Normally Closed). The NO (Normally Open) connection of the relay is not connected until the relay turns on. When the relay turns on, the COM move from NC to NO. The relay is mechanical and creates a clicking sound that indicates movement to the COMMON terminal [Devices, 2014]. 14 Chapter 2. Analysis 2.4.6 Sound sensor A sound sensor is capable of detecting pressure differences in the air and transform them into electric signals [Patarroyo, 2013]. The signal received from the sound sensor is usually too weak and has to be amplified to be utilized properly. The sound sensor used in this project can be seen in Figure 2.11. Figure 2.11: High Sensitivity Sound Microphone Sensor Detection. [Nakamura, 2014] The sound sensor module used in this project has two outputs: • Analog output - A real-time output voltage signal of the sensor • Digital output - Transmits a low and high signal when the sound intensity reaches a certain threshold. The sensor uses a 5V DC power supply. The following picture illustrates the recording of a human sound using the analog read with the sound sensor. Figure 2.12: Recording of a high pitched human sound The following picture illustrates the recording of a human clap using the analog read with the sound sensor. 15 2.4. Equipment Figure 2.13: Recording of a human clap According to the two pictures there is a distinct difference between the two sounds, this is important to distinguish between sounds. 2.4.7 AD Keyboard module The component has five buttons and uses one analog port. The keyboard has a standard voltage output of 5 volt and to determine which button is pressed, the buttons output different voltage ranging between 0 to 5 volt via the analog port. The component can be seen in Figure 2.14. Figure 2.14: AD Keyboard Electronic Blocks Simulate Five Key Module Figure 2.15 shows how the analog input is read with an Arduino Nano w/AT Mega2560. The diagram illustrates an integer value ranging from 0 to 1023, which is scaled from the voltage output ranging from 0V to 5V. The y-axis is the voltage output scaled to an integer value, and the x-axis is the time in milliseconds. As an example when the first button, SW1 is pressed the integer value outputted is zero. 16 Chapter 2. Analysis 800 600 400 200 0 SW1 SW2 SW3 SW4 SW5 Figure 2.15: Illustration of the different voltage output scaled to an integer ranging from 0 to 1023 The measured voltages and the corresponding integer values can be seen in Table 2.2. The voltage output and its scaled integer value was for each button very steady and only has a very small deviation. Button SW1 SW2 SW3 SW4 SW5 Output voltage 0.00 0.76 1.52 2.33 3.42 Integer scaled value 0 141-142 327-328 503 740 Table 2.2: Output voltage registered on button pushes 17 2.4. Equipment 2.4.8 Motion Sensor Figure 2.16: Front and back of the motion sensor. The sensor makes it possible to detect motion and is illustrated in Figure 2.16. The sensor is a Passive Infrared (PIR) sensor and its basic specifications can be seen in Table 2.3. A PIR is made of a pyroelectric sensor. This sensor detects the infrared (IR) radiation in an environment. The hotter something is the more radiation it gives. The sensor has two slots that each measure difference in IR levels. The reason for having to slots is to make it possible to detect motion [LadyAda, 2014]. When a human enters the sensing area it is first detected by one of the slots and then detected by the other slot when leaving the sensing area again. When one slot is sensing something and the other is not, a positive differential change between the two slots appears. When the other slot is sensing something the reverse happens and the sensor gives a negative differential change see Figure 2.17. These change pulses are what is detected [LadyAda, 2014]. A chip on the sensor takes the analog output of the sensor and transform it into a digital output. When the sensor detects motion the digital output is high and when no motion is detected the output is low see Figure 2.17. 18 Chapter 2. Analysis Figure 2.17: PIR diagram [LadyAda, 2014] Output Sensitivity range Power supply Delay time Blocking time Ampere usage Digital pulse high (3V) when triggered (motion detected) digital low when idle (no motion detected). Pulse lengths are determined by resistors and capacitors on the PCB. Up to 6 meters with a 110◦ × 70◦ dectecing area. 3V-9V input voltage. The ideal is 5V. Default 6 seconds. (5-300S). Default 2.5 seconds. less than 60uA. Table 2.3: Basic specifications of the motion sensor Testing the motion sensor A test were conducted to verify the accuracy of the sensor. It was conducted by fixating the sensor and then detecting motion from different distances. Each movement was a horizontal step and made while fronting the sensor. The number of movements at each distance was 30. 19 2.4. Equipment Distance 1m 2m 3m 4m 5m 6m Number of movements 30 30 30 30 30 30 Detected 30 28 30 29 28 30 Deviation 0% 6,67 % 0% 3,33 % 6,67 % 0% Table 2.4: Results of testing the motion sensor. The test results seen in Table 2.4 show that the motion sensor is accurate. There are some deviations, but the results show, that it is not due to the distance. The sensor is supposed to detect human movements. In the test the sensor only detected a single horizontally step, whereas in reality a human would make several movements when being in front of the sensor. Overall the accuracy of the sensor is good enough to be used to detect motion in a house since even though it can miss a single step, it does not miss several movements. 2.4.9 Standard Buzzer Module The module has a working voltage ranging from 3.5V to 5.5V. It is connected with a ground pin and either a digital or analog pin. The buzzer used in this project can be seen in Figure 2.18 Figure 2.18: Stanard Buzzer Module 2.4.10 Realtime clock A realtime clock keeps track of the current year, month, day and time. The module used in this project is called DS3231 and has a low-power consumption. It is a very accurate I2C realtime clock and it has an integrated temperature compensated crystal oscillator. It has two programmable time-of-day alarms. The clock can operate in either a 24-hour format or a 12-hour format with AM/PM indication. The real time clock makes use of serial communication through an I2C bidirectional bus to transfer data. 20 Chapter 2. Analysis A battery is integrated in the module. This makes it possible to maintain the accurate date and time when there are no power connected to the module. The longterm accuracy of the time and date is furthermore enhanced by the integrated crystal resonator. The module needs a supply voltage of 3.3V [DALAS, 2005]. The component can be seen in Figure 2.19 Figure 2.19: Realtime clock module 2.4.11 Light dependent resistor A light dependent resistor (LDR) is a small device used to measure light levels. Basically it is a resistor that changes its resistive value depending on the amount of the present light. The resistive value can be affected by temperature and the LDR is therefore not suited for a precise measurement of light. Furthermore there is a delay from measuring a change in the light level before the resistive value updates. When shifting from total darkness to light, the resistive value changes with latency up to 10 ms, and when going from light to total darkness the latency can be up to 1 second. To test the sensitivity of the LDR two tests were conducted. The desired result of the tests were to see if the resistive value had a tendency to drift and to see how much the deviation would be over time. The tests were performed by logging the resistive value for four minutes in a room with two light levels. One light level with the lights in the room turned off and a light level with the lights in the room turned on. The measured light resistance in the room with the lights turned off is illustrated in Figure 2.20. 21 2.4. Equipment Figure 2.20: LDR measurement in a dark room The measured light resistance in the room with the lights turned on is illustrated in Figure 2.21 Figure 2.21: LDR measurement in a bright room To get a feeling of the two light levels the Lux of the two rooms is calculated from the measured resistive values using the following equations. Vm = (Vt /1024) ∗ Ri RL = Rf (Vt − Vm )/Vm Lux = 500/RL 22 Chapter 2. Analysis In the first equation the measured voltage Vm is calculated by dividing the total voltage read on an analog pin on the Arduino by the 1024 units that the Arduino can read on an analog pin. Then the result is multiplied by the measured unit of the analog input. In the second equation the resistive value of the LDR is calculated by multiplying the resistive value of the resistor used with the subtraction of the total voltage and the measured voltage. The result is then divided by the measured voltage. From the resistive value measured with the LDR the Lux is calculated by dividing the value with 500. The Lux levels are illustrated in Table 2.5 Room Lights turned off Lights turned on Analog input (max) 286 781 Lux 19 159 Table 2.5: Table of calculated Lux levels The measurements shows that there is a significant difference in the measured resistive values with the two light levels. The deviation of the measurement in the room with the lights turned off has a deviation of 19 while the deviation in the room with the lights turned on was 55. To conclude the results the measurements deviate more the closer the resistive value is to the max of what the LDR can measure. It is unlikely that the LDR will be used in a room that maxes the analog input due to the fact that this will correspond to a Lux level of 51150. Even though there is a deviation the deviation is small compared to the difference in the measured values in the two light settings which was 495. So the conclusion is that the sensitivity of the sensor satisfies the needs of this project. 2.4.12 DC Voltage regulator The voltage regulator is used to ensure that the voltage output to the Arduino is correct. The recommended input Voltage of the Arduino is 7-12V and the output of the adapter used to power the Arduino outputs 18.5V. Therefore the regulator is used to decrease the output from 18.5V to 7V. The regulator has an output power of maximum 15 watts. Therefore the regulator can output the Arduinos with 15W / 7V = 2140 mA. Power wasted = (input voltage – output voltage) * load current - Help Jiri 2.4.13 Electric current measurement To ensure that the Arduino is supplied with sufficient power, the electric current used by each component is measured. Table 2.6 illustrates how much electric current each component consumes and how much the hardware consume together. The LEDs are a part of the dummy Arduino and therefore not included in the table. To measure the electric current consumed by each hardware component a voltmeter was used as shown in the following Figure 2.22. 23 2.4. Equipment Component Relay with one open gate LCD Display Ethernet Shield Motion sensor Sound sensor AD keyboard Standard active buzzer module Real-time clock Current per component (mA) 66.5 37.4 190 3.3 5.98 2.35 16.8 4.73 Amount 16 1 1 1 1 1 1 1 Total Max (mA) 1064 37.4 190 3.3 5.98 2.35 16.8 4.73 1324.56 Table 2.6: Electric current used by each component A Arduino Figure 2.22: Picture illustrating measurement of electric current. The maximum allowed current of the Arduino ATmega 2560 is 800 mA [Arduino.cc, 2014]. In the Table 2.6 the sum of the electric current is 1361.16 mA which is clearly above the allowed electric current. The most consumable is having all the relays opened at the same time. Without any relays opened, the used electric current is summed up to 260.56mA which means that another 800mA−260.56mA = 539.44mA electric current can be drawn from the Arduino. To ensure that the electric current does not exceed the limit of 800 mA, only eight relays can be open at the same time, see Equation 2.1. It should furthermore be possible to add new components which also uses electric current. A limit of two open relays is suitable. The limit will be controlled by a software safety feature on the Arduino which ensures that not more than two relays are open simultaneously. 539.44mA = 8.11 ≈ 8 Relays 66, 5mA (2.1) 24 2.5 Chapter 2. Analysis New setup In section 2.2 the current setup was explained. This section is dedicated to explain the new setup, which can be seen in Figure 2.23. The relays of the house will be connected to two Arduino Relay Boards (ARB). Each ARB has eight relays. This makes it possible for each relay in the house to have a corresponding Arduino relay. The impulse needed to switch the house relays from either on or off will be given through the ARBs. The relay board is connected to an Arduino with the Home automation system on. The buttons will now be connected to the Arduino board instead of the relays in the house. Each button has a input pin and share a common ground pin. By connecting the buttons to the Arduino it is possible for the user to configure the behavior of lights. As an example, if a user wants to turn on the light in another room from the bedroom, then the Arduino have to send a signal from the Arduino relay that corresponds to the house relay connected to the light in the hallway when a given button in the bedroom is pushed. Figure 2.23: The new house setup Chapter 3 Design In this chapter the model driven software development method will be described to give an overview of how a model created by an end user can be transformed with several purposes. The model created in this project is refered to as rules and is created using a web interface. The user has to be able to configure the behavior i.e. change the model of his house, therefore a description of the structure of the rules and its behavior has to be made. Furthermore programming languages suitable for the system is analyzed and discussed. A discussion of two different ways to implement scheduling of tasks follows. 3.1 Model Driven Software Design Model driven software design (MDSD) is a software design method based on the usage of models. Models used in MDSD do not constitute documentation, but is a foundation for code. The main objective in MDSD is to be able to express software structure and behavior in an efficient way. When a model is defined and described it can be transformed into executable code by model transformations [Tekinerdoğan, 2013]. Hereby the move from programming the solution, to modelling the solution with a human friendly abstraction the solution will be in favour of the end user. To implement this view of MDSD the actual code has to automate tasks for constructing and transforming the model [Sendall and Kozaczynski, 2003]. In this project the model that needs to be transformed is a model of rules that the user creates using a web interface. Three ways of transforming the model has been analyzed in this project. Code generation which transforms the model into executable Arduino code. This approach requires code to be uploaded to the Arduino. One way of uploading code without using extern resources can be done by uploading a hex file from an SD card on the Arduino. Hereby the code to be uploaded has to be in hex format, either written in hex or compiled to hex. If the code to be uploaded is not in hex format it needs to be compiled with an avr-gcc compiler [Arduino, 25 26 Chapter 3. Design 2014a]. Rule interpretation is in this project used by loading JSON files with rules defined in the model. The loaded JSON data is interpreted by the existing code uploaded to the arduino. In this way the model can be changed, transformed into JSON and then interpreted by the Arduino avoiding the neccesity to upload and compile code. This approach uses more ram and is less efficient than the previous mentioned Code generation strategy. Verification can be done using UPPAAL1 . UPPAAL is an integrated model tool environment that allows users to model, simulate and analyze the behavior of models (processes). UPPAAL consists of three parts: A description language, a simulator and a model checker. The above description of MDSD is illustrated in Figure 3.1 in proportion to this project with rules as the model. Simluation can be done using UPPAAL to examine the possible dynamic executions of the model. Hereby it can be used as a fault detection prior to the verification. The simulator in UPPAAL can also be used to visualise executions generated by the verifier [UPPAAL, 2014]. Figure 3.1: Illustration of Model Driven Design in our case 1 http://www.uppaal.com/admin/anvandarfiler/filer/uppaal-tutorial.pdf 27 3.2. System Description Cons Recompilation is required Rule Interpretation Pros Optimal executable code Minimal use of memory No recompilation Verification Ensures intended behaviour Time consuming Code Generation Uses up more ram Summary This section introduced the idea behind the Model Driven Software Design method. The MDSD method will be used in this project according to our model, which is rules for the behavior of the house. The rules describes the houses behavior and they are described in section ??. 3.2 System Description The system consists of five groups of elements. A diagram of the different components of the system can be seen in Figure 3.2. The control unit in our project is the ATmega2560 but it could be any other control unit (CU). The CU can receive input from the sensors. The sensors consist of components that register inputs but can not change their state e.g. a button can nothing else than register a push. When a sensor receives an input it will notify the CU and the CU will check with the virtual objects which action to execute. The virtual objects consist of rules which can trigger an event or change a mode. If the virtual object receives an input that conforms with a rule it will notify the CU that some hardware needs to change its state. Otherwise the virtual objects will periodically check if a rule has been fulfilled and send a notification to the CU. The CU will then change the state of relevant actuators. Actuators are any component which state can be changed by the CU. Aditionally the CU can receive the current state that an actuator is in. 28 Chapter 3. Design Figure 3.2: Overview of the system 3.2.1 Web Server The web server is used for most of the features of the system. The following features are possible through the web server: • Configuration of the different hardware of the system. husk – The CU needs to know which pins the different hardware are connected to the CU with. When the configuration is complete, the web server sends something to the CU. The CU then reads something, and creates the objects that are needed for the system to function. • Creating modes that are used to represent the state of the house. – Modes are used to ensure that different rules will only be triggered in desired modes. Some examples of modes could be night mode and vacation mode. The user has to create the different modes for the house on the website. • Creating rules to ensure a specific behavior for the system. – The rules require information about the state of the house, the relays and the different hardware added to the system. An example of a rule is to turn on the light in the kitchen when the clock is 7am. 3.2. System Description 29 • See and toggle the state of lights and modes. – This makes it possible for the user to turn lights on/off and set modes like vacation mode through the web server. 3.2.2 Clock The clock is used to check the current time. This is because the user can make modes and rules that requires the time be between some period. The clock works by periodically sending the time to the CU. The CU sends the time to the virtual objects which will then check if the CU needs to be notified of an event. 3.2.3 Keypad The keypad is used to communicate with the Arduino through the display. The display is used to show information about the house. It is possible for the user to configure some of the functionality of the system through the display. The features of the display are: • Start the setup phase. – Used to configure the relationship between buttons and relays. When the setup is activated, the system will turn a relay on and then wait for the user to push a button. When the user pushes a button the system will add an association between the relay and button. The user can then push another button to create another button association to the relay or push the same button to finish the configuration of the relay. This will continue until all the relays have an association to at least one button. • Set/show local time. • Display the status of the system such as the current states of lights. 3.2.4 Button The buttons have two purposes: The first purpose is to ensure the default behavior, where a given button turn on the relay(s) it is paired with. The second purpose is to trigger rules. The purpose of buttons with rules will be described below: • Buttons can be used as triggers for rules. In this way, a user can make a rule that turns off all the light in the house if the button at the front door is pushed. In our system, there are three different types of button push: – Short push: This works like a normal push of a button. – Double push: This works as two consecutive short pushes. – Long push: A long push is activated when the user pushes a button for more than 2 seconds. 30 overvej om det lige er de tre komponenter der skal beskrives eller om det giver bedre mening at beskrive grupperne i diagrammet 3.3 Chapter 3. Design Rules The rules for the house are used to ensure a specific behavior. The rules are based on events and IDs which are defined as finite sets. The state function is a mapping function from ID to a positive number 3.1. State ID → N0 (3.1) The positive number which the ID is mapped to is used to describe the state, e.g. the state of lights or the state of modes. A light can be either switched off or on and a more intelligent light could be switched off, dimmed and turned on. In this case the intelligent light would have three states, 0 = Off, 1 = Dimmed, 2 = On. The default state of every ID is 0. The abstract syntax is used to formally describe the syntax of the rules. The syntax is defined by assuming a collection of syntactic categories. Each category has a finite set of formation rules. Equation 3.2 shows the different elements of the finite sets defined in ??. P ∈ Prog R ∈ Rules id ∈ ID e ∈ Events (3.2) 0 w∈N d ∈ N ∪ {∞} m ∈ N0 The grammar in 3.3 describes how to formulate rules for the house. hPi ::= ε | hRi ; hPi hRi ::= if e when hC i then hAi hC i::= tt | id = m ∧ hC i hAi::= ε | hid = mi starting in w for d ; hAi 3.3.1 Main loop for rules In order to describe the behavior of the rules structure, an algorithm will be used which runs forever, the algorithm can be seen in Algorithm 1. 3.3. Rules 31 Data: E ⊆ Events Result: Manage rules Collect new events E forall the e’ ∈ E do forall the (if e when C then A) ∈ A do if e’ == e && C holds then forall the (id = m start in w for d) ∈ A do id.update(m, w, d) end end end end forall the id ∈ ID do set hardware to id.now end Algorithm 1: Rule algorithm 3.3.2 Use case example This subsection will give an example of how a user could configure the rules for a hallway in a house. The hallway has three buttons, a motion sensor and three lights, which can be seen in Figure 3.5. The user wants a certain behavior of the hallway at day and another at night. Therefore the user creates two modes namely a day and night mode. In day mode the user would like the light to follow him through the hallway when he pushes button “Button A”. To provide this functionality the user assumes it takes 10 seconds to enter the center of the hallway and another 20 seconds to go to either the kitchen or living room. At night the user wants to turn on all the lights in the hallway when motion sensor “Motion Sensor A” detects motion. The user then configures the desired rules on the home automation website. As mentioned in Section ?? the rules have a specific syntax which it needs to be defined in. First the user needs to specify an event that triggers the rules. The rule associated with “Button A” created using the web interface would be: 32 Chapter 3. Design Figure 3.3: Rule associated with Button A The rule associated with “Motion Sensor A” created using the web interface would be: Figure 3.4: Rule associated with Motion Sensor A 3.4. Remembering the state of lights 33 Figure 3.5: A hallway with three lights, three buttons and a motion sensor 3.4 Remembering the state of lights It is possible for the user, to turn on/off a light with a delay time and for a period. This behavior, and its problems, will be explained through an example. Example: The user has a light, L1 , a button, B1 and a rule, R1 with the following behavior: R1 : If B1 is pushed and L1 = 0 then set L1 = 1 in 4s for 1s. We assume that the default state of L1 = 0. The user pushes B1 , which means that R1 is triggered as seen in Figure 3.6. The user pushes the button at time 0s, so after 4 seconds L1 = 1 and after 5 seconds L1 = 0. In this example, the system has to remember one interval to function as wished. 34 Chapter 3. Design Figure 3.6: First example In the next example, the user pushes B1 again at time 2s. Now, L1 has to turn on at 4s, turn off at 5s, then turn on at 6s, and off at 7s. This example can be seen in Figure 3.7. In this example, the system has to remember two intervals to function as wished. Figure 3.7: Second example In the last example, the user pushes B1 at 0s, 1s and 2s. The behavior of this example can be seen in Figure 3.8. In this example, the system has to remember only one interval, because the button push at 1s connects the time where L1 = 1 from 4s to 7s. Figure 3.8: Third example Now the question arises, what is the maximum number of times the system has to remember for a specific light? A rule that turns a light on/off consists of a delay time w, and a duration d. A light can be turned on/off from m number of rules. We therefore have m amount of pairs consisting of w and d: (w1 , d1 ), . . . , (wm , dm ). As a start, the largest delay and the lowest duration must be found. This will be done by comparing all m and d, and then save the largest delay in mmax and the lowest delay dmin . The maximum amount of time the system has to know must be the largest delay added with the largest duration, such that maxtime = mmax + dmin . The system has to save the start and end time for every d. We know that dmin can appear a maximum num- 3.5. Implementation analysis 35 time ber of times in the time line, calculated as max dmin . Since every d has a start and maxtime end time, the system needs to save dmin × 2 for every light. In the worst case, mmax = 24h and dmin = 1s. This means that the system could potentially need to save 172,800 times which is unrealistic on the Arduino. Therefore a limitation must be set . The amount of times the system needs to save can vary a lot therefore a dynamic allocation of the times is preferable. 3.5 Implementation analysis A programming language for developing the home automation system has to be chosen. Two languages have been considered, Arduino C++ and an open source Java execution environment called HVM. 3.5.1 Arduino C++ C/C++ are the most common languages used for developing to an Arduino as the Arduino IDE uses the AVR Libc toolchain to compile C/C++/Ada and all Arduino libraries are written in C/C++. The toolchain makes use of the AVR GCC compiler which is a C/C++/Ada compiler targeting AVR devices. AVR GCC does not include the Standard C Library as some of the functions can cause problems on small embedded devices. However AVR Libc uses a library avr-libc that provides libraries specifically designed for use with an Arduino and its connected components as well as a subset of the Standard C Library. Most unofficial libraries are written in C/C++ as well making some development aspects easier by simply using an existing library [Boellmann et al., 2010].. 3.5.2 Embedded Java The HVM development environment allows the developer to write code in Java and to debug the code on an Arduino. HVM is capable of translating Java code to C code but also capable of interpreting bytecode. The advantage of translating the code into C is that it executes faster but interpreting the bytecode requires less memory. Executing code programmed with HVM is approximately three times slower than C/C++ [Korsholm, 2012]. HVM Java includes the whole standard library of Java but allows the developer to explicitly exclude parts of the library that is not used for the program [Korsholm, 2014]. However HVM Java does not provide additional libraries designed specificially for the Arduino environment. 3.5.3 Choice of programming language The lack of the avr-libc library and unofficial libraries and the slower execution are considered critical disadvantages if HVM Java were to be used in this system. The libraries available in C/C++ provides an interface between the Arduino and the developer which lets the developer abstract from the specific implementation of the hvad er den (worst-case), mere analyse af hardware vs limit, dynamisk etc. 36 Chapter 3. Design hardware. Using HVM the developer would have to write directly to the hardware components which is redundant compared to Arduino C++. The slower execution is critical since the home automation system is safety critical and therefore requires certain deadlines in the program to be successful. In terms of coding in Java and C++ they are both object-oriented programming languages with a high abstraction level. Because two drawbacks of HVM has been analysed and none of C++ has been found the home automation system will be built in C++. 3.6 NilRTOS In order to orchestrate the execution of the different tasks in the system a scheduler is needed. NilRTOS is a real-time OS (RTOS) library for scheduling tasks and communicating between them. The scheduler allows threads to be defined with priority and allows them to sleep when other threads need attention. The tasks may share resources which is managed by defining and using binary or counting semaphores. The library is made for use with AVR microcontrollers and is therefore developed to be a small and fast which is useful since the Arduino Mega does have limited amount of memory and the home automation system needs to meet the deadlines. Also the library almost only contains functionality that is needed for the home automation system [Sirio and Greiman, 2014]. Chapter 4 Architecture 4.1 NilRTOS In this section a short overview of how features of NilRTOS are implemented. A single thread is implemented as in Listing ??. 1 2 SEMAPHORE_DECL ( sem , 1) ; NIL_WORKING_AREA ( thread , 64) ; 3 4 5 6 7 8 9 10 NIL_THREAD ( Thread1 , arg ) { while ( TRUE ) { nilSemWait (& sem ) ; nilSemSignal (& sem ) ; nilThdSleep (1000) ; } } 11 12 13 14 N I L _ T H R E A DS _ TA BL E _B E GI N () N I L _ T H R E A DS _ TA BL E _E N TR Y ( " thread1 " , Thread1 , NULL , thread , sizeof ( thread ) ) N I L _ T H R E ADS _TABL E_EN D () Listing 4.1: Declaration of a single thread In line 2 a stack is declared with a size of 64 bytes in addition to the memory needed for context switch and interrupts. The thread function is defined in line 4 with a reference to the thread given as the first argument. In line 12 the thread table begins. Inside of it the threads are declared. In this case only one thread is declared. The first argument is the name of the thread which could also have been NULL to save RAM and since it is not going to be used anyway. Thread1 is used in line 4 so the program knows which thread belongs to which function. Fourth and fifth argument is the working area and the size of the working area which we defined in line 2. If more threads were to be added it would be done by creating a new working area, thread function and declaring the thread in the thread table. Then the thread table would define the priority of the threads by their position in the table. 37 38 Chapter 4. Architecture In Listing ?? a binary semaphore is declared in line 1. The second argument of the declaration defines the limit of the semaphore. In line 6 the thread tries to take the semaphore and if it succeeds the rest of the code will execute. If not it will wait for the semaphore to be released which is done as seen in line 7. Finally a thread can sleep which is done as in line 8 were the thread sleeps for one second to let threads with a lower priority execute. 4.2 Libraries 4.2.1 RelayManager 4.2.2 Running time analysis In order to make a real time scheduling analysis, the worst case execution time of our different libraries must be known. To find the execution time, each library must be run with a timer. We have decided to run each library X amounts of times, and then take the worst case. Chapter 5 Implementation Introduction to Implementation here 39 40 Chapter 5. Implementation Chapter 6 Conclusion Introduction to Conclusion here 41 42 Chapter 6. Conclusion Bibliography Arduino (2014a). Arduino build process. BuildProcess. Online accessed 04/11-2014. http://arduino.cc/en/Hacking/ Arduino (2014b). Arduino ethernet shield. http://arduino.cc/en/uploads/ Main/ArduinoEthernetShield_R3_Front.jpg. Onlie acced 16/09-2014, notations added to the picture. Arduino (2014c). Arduino ethernet shield. http://arduino.cc/en/Main/ ArduinoEthernetShield. Online accessed 16/09-2014. Arduino (2014d). Arduino loop phase. http://arduino.cc/en/Reference/loop. Online; accessed 16/10-2014. Arduino (2014e). Arduino mega 2560. https://arduino.cc/en/Main/ arduinoBoardMega2560. Online accessed 10/09-2014. Arduino (2014f). Arduino mega2560. http://arduino.cc/en/Main/ arduinoBoardMega2560. Online; accessed 20/11-2014. Arduino (2014g). Arduino mega2560. http://arduino.cc/en/Tutorial/ DigitalPins. Online; accessed 20/11-2014. Arduino (2014h). Arduino setup phase. http://arduino.cc/en/Reference/Setup. Online; accessed 16/10-2014. Arduino.cc (2014). Arduino atmega 2560 max current. http://playground. arduino.cc/Main/ArduinoPinCurrentLimitations. Online accessed 24/092014, notations added to the picture. R Tools and Techniques for Engineering WizBlum, J. (2013). Exploring Arduino: ardry. John Wiley & Sons, Inc. Boellmann, W., Camera, D., Conradie, P., Dean, B., Gudger, K., van Gulik, W., Haase, B., Haugen, S., Jansen, P., Jessich, R., Johansson, M., Kipp, H., Lamas, C., Lawson, C., Lipowski, A., Michalkiewicz, M., Miller, T. C., Neswold, R., O’Flynn, C., Paddock, B., Pashchenko, A., Patommel, R., Petrov, F.-V., Popov, A., Rickman, M., Roth, T. A., Schilling, J., Soeberg, P., Sokolov, A., Strom, N. K., 43 44 Bibliography Stumpf, M., Swanepoel, S., Wallner, H., Weddington, E. B., Wunsch, J., Xmelkov, D., Corporation, A., and egnite Software GmbH (2010). avr-libc. http://www. nongnu.org/avr-libc/user-manual/index.html. Online; accessed 19/10-2014. CircuitSpecialists (2014). Push button. http://www.circuitspecialists.com/ content/117382/r18-29a%20red-0.jpg. Online; accessed 14/09-2014. Company, H. A. (2014). How much does home automation really cost? http://www.homeautomationcompany.co.uk/blog/ how-much-does-home-automation-cost/. Online accessed 13/10-2014. DALAS (2005). Extremly Accurate I2C-integrated RTC/TCXO/Crystal. Dallas Semiconducor coperation, 120 San Grabiel Drive Sunnyvale CA. Devices, N. C. (2014). Relay logic. https://www.controlanything.com/Relay/ Device/RELAY_LOGIC. Online accessed 17/09-2014, notations added to the picture. Gavazzi, C. (2014). Solutions for home automation. Also available as http://smartbuilding.dk/smarthouse/download/brochurer/BRO_ HomeAutomation_EN_v03_1401.pdf. Griffith, E. (2014). Nest and beyond: A beginner’s guide to home automation. http: //www.pcmag.com/article2/0%2c2817%2c2410889%2c00.asp. Online; accessed 15/10-2014. Institut, T. (2013). Smart home teknologi (sht). Also available as http://www.digst.dk/~/media/Files/Velf%C3%A6rdsteknologi/Rapporter% 20og%20analyser/Bilag%201_Smarthometeknologi_Delrapport_fra_ Teknologisk_Institut.pdf. Jimbo (2014). Serial communication. https://learn.sparkfun.com/tutorials/ serial-communication. Online; accessed 15/10-2014. Korsholm, S. E. (2012). Java for Cost Effective Embedded Real-Time Software. Ph.d. dissertation, Department of Computer Science, Aalborg University. Korsholm, S. E. (2014). The hvm reference manual. http://icelab.dk/resources/ HVMRef.pdf. Online; accessed 24/09-2014. LadyAda (2014). Overview, pir motion sensor. https://learn.adafruit.com/ pir-passive-infrared-proximity-motion-sensor/overview. Online; accessed 21/09-2014. Nakamura, H. (2014). Arduino sound sensor. https://sites.google.com/site/ summerfuelrobots/arduino-sensor-tutorials/arduino-sound-sensor. Online; accessed 10/09-2014. Patarroyo, J. (2013). Sound sensors. Sensors. Online accessed 31/10-2014. http://wiki.wiring.co/wiki/Sound_ Bibliography 45 Sendall, S. and Kozaczynski, W. (2003). Model transformation – the heart and soul of model-driven software development. http://infoscience.epfl.ch/record/ 52559/files/IC_TECH_REPORT_200352.pdf. Online accessed 05/11-2014. Sirio, G. D. and Greiman, B. (2014). Nilrtos-arduino. https://github.com/ greiman/NilRTOS-Arduino. Online accessed 11/11-2014. Sørensen, M. G. (2014). Controller synthesis for home automation. Masters thesis, Department of Computer Science, Aalborg University. Tekinerdoğan, B. (2013). Cs 587 model-driven software development. http://www. cs.bilkent.edu.tr/~bedir/CS587-MDSD/. Online accessed 04/11-2014. UPPAAL (2014). Uppaal simulation. http://www.uppaal.com/index.php?sida= 216&rubrik=101. Online accessed 24/11-2014. WIZnet (2010). W5100 datasheet. Also available as http://www.wiznet.co.kr/ UpLoad_Files/ReferenceFiles/W5100_Datasheet_v1.2.2.pdf.
© Copyright 2024