MOI UNIVERSITY SCHOOL OF INFORMATION SCIENCES (Department of Information Technology) DEVELOPMENT OF SIMPLE MOTION SENSING COMPONENT Supervisor, Dr. Austin Owino (Bsc. Msc. PhD) Submitted by, Ochieng, Francis Omondi IS/50/12 Monday, 16th May 2016 This research project is submitted in partial fulfilment of the requirements for the award of the degree of Bachelor of Science in Information Sciences of Moi University i DECLARATION OF ORIGINALITY This project, as presented in this report, is my original work and has not been presented for any other University award. Any works of other authors used in it are well acknowledged at the point of their use. No part of this thesis may be reproduced without the prior written permission of the author and/or Moi University. Ochieng, Francis Omondi Signature Date ………….. …………. Declaration by Supervisor This thesis has been submitted for examination with my approval as University Supervisor. Dr. Owino Moi University, Eldoret …………. …………… ii DEDICATION I dedicate this project to my family. I thank you all for walking with me to this far. Your innovative ideas and realistic relevant challenges you posed to me at all times made me think far in regard to my education. Your financial and spiritual support is highly appreciated throughout this period. May the Almighty bless you. iii ABSTRACT The detection of motion has its roots in astronomy. The necessity to have devices that can work on their own with minimal human control and at the same time can be controlled remotely inspired the development of a simple motion detector component. This component employs infrared technology for motion sensing. This project involves the implementation of software and hardware. For the hardware part, PIR sensor, Piezzo buzzer and a laptop are connected to each other by an ATMega328 on Arduino UNO microcontroller which acts as the central processing unit of the whole component. PIR sensor aids in detecting presence of someone, Piezzo buzzer is used as an alarm unit that beeps when someone is detected. The laptop is used to program the Arduino UNO but when the component is working as programmed, it is used to power the microcontroller and also as the status indicator module. For the software part, C programming language was used to program the microcontroller through the Arduino software. When motion is detected, the Piezzo buzzer beeps, the LED pin on the microcontroller lights and “MOTION DETECTED” message is printed on the laptop screen. The working of the piezzo buzzer and the LED is concurrent for five seconds and the message is printed once during the same time interval. When no motion is detected the devices remain mum as programmed. Communication between the Arduino UNO and other devices is through voltage signals which are carriers of information. The motion detector component that has been developed is very flexible and easy to use by users, who can as well customize and improve it further to satisfy their varying needs. Keywords Infrared, ATMega328, C, Arduino UNO, PIR sensor, Piezzo Buzzer iv TABLE OF CONTENTS DECLARATION OF ORIGINALITY i DEDICATION ii ABSTRACT iii TABLE OF CONTENTS iv LIST OF ABBREVIATIONS AND ACRONYMS vii LIST OF TABLES viii LIST OF FIGURES IX ACKNOWLEDGEMENT X CHAPTER ONE: INTRODUCTION 1 1.1 Background 1.2 Problem Statement 1.3 Aim of the Project 1.4 Objectives 1.5 Research Questions 1.6 Significance and Justification of the Study 1.7 The Proposed Solution 1 2 2 2 2 2 3 CHAPTER TWO: LITERATURE REVIEW 4 2.1 Introduction 2.2 Embedded Systems 2.2.1 Embedded Systems versus General Purpose Systems 2.2.2 Design Issues in Embedded Systems 2.2.3 Development Tool in Embedded Systems 2.2.4 Trends in Embedded Systems 2.2.4.1 Application Specific Integrated Circuits (ASIC) 2.2.4.2 Systems on a Chip (SOC) 2.2.5 Challenges with Embedded Systems Design 2.3 Motion Sensors 2.3.1 Types of Motion Sensors 2.3.1.1 Passive Infrared Type of sensors 2.3.1.2 Area Reflective Type of Sensors 2.4 Arduino UNO Microcontroller 2.4.1 Technical Specifications 2.4.2 Programming 2.4.3 Difference with other boards 2.4.4 Power 4 4 4 5 6 6 6 7 7 7 8 8 9 9 10 10 10 11 v 2.4.5 Memory 2.4.6 Input and Output 2.4.7 Communication 2.5 Embedded Development Cycle 11 12 13 13 CHAPTER THREE: METHODOLOGY 3.0 Introduction 3.1 Project Planning 3.2 Project Block Diagram 3.3 Project Description 3.4 The Sensor Module 3.5 The Motion Detector System 3.6 Software Development 3.7 Programming Tools 3.7.1 Connecting PIR Sensor to Arduino UNO 3.7.2 Connecting Piezzo Buzzer to Arduino UNO 16 16 16 18 18 19 19 20 21 25 25 CHAPTER FOUR: RESULTS AND DISCUSSION 4.1 Introduction 4.2 Testing Development 4.2.1 Testing the Sensor Module 4.2.2 Testing the Alarm Module 4.2.3 Testing the Status Indicator Module 4.3 Discussion 4.4 Project justification of Results 26 26 26 28 28 29 30 31 CHAPTER FIVE: CONCLUSION ND RECOMMENDATIONS 5.1 Conclusion 5.2 Obstacles Encountered in the Project 5.3 Recommendations for the Project 32 32 32 33 REFERENCES BIBLIOGRAPHY APPENDICES 34 35 36 vi LIST OF ABBREVIATIONS AND ACRONYMS EDA Electronic Design Automation ASIC Application Specific Integrated Circuits SOC Systems on a Chip PWM Pulse Width Modulation EEPROM Electrically Erasable Programmable Read Only Memory ADC Analog-Digital converter SRAM Static Random Access Memory GND Ground ROM Read Only Memory RAM Random Access Memory vii LIST OF TABLES Table 2.4.2: Technical specifications for Arduino UNO viii LIST OF FIGURES Figure 2.3.1.1.1: Graphical description of passive infrared type of sensors Figure 2.3.1.2.1: Graphical description of area reflective type of sensors Figure 2.4.1: Arduino UNO Rev3 microcontroller Figure 3.1.1: Project planning flowchart Figure 3.2.1: Block Diagram for Motion Detector System Figure 3.4.1: PIR Sensor Figure 3.6.1 Flowchart for the motion detector system Figure 3.7.1: Loading of Arduino Software Figure 3.7.2 Configuration for connecting Arduino UNO microcontroller with a computer Figure 3.7.3: Selecting the Arduino UNO Board Figure 3.7.4: Selecting COM29 port Figure 3.7.5: Programming Motion Detector system using Arduino Software Figure 3.7.6: Uploading the Source Code to the Arduino Figure 3.7.7: PIR Sensor and Piezzo Buzzer connected to the Arduino UNO Figure 3.7.2.1: Piezzo Buzzer Figure 4.1.1: The Motion Detector System Figure 4.2.1 Project testing flowchart Figure 4.2.1.2: Testing the PIR Sensor Figure 4.2.2.2: Testing the Piezzo Buzzer Figure 4.2.3.2: Motion detector system and serial monitor ix ACKNOWLEDGEMENT Hereby, I render my sincere gratitude to all who contributed towards the successful completion of this project. First, I thank the Almighty God for his divine mercy, graces, gift of life, strength and wisdom that enabled me come up with this project. To my academic supervisor, thanks for believing in this project from the start and also believing in me in pursuit for the development of the component above. I cannot forget to thank Mr. Titus Koech, a fifth year BEng. Electronics and Communications Engineering student for his immense support in understanding circuits and aid in acquisition of devices used in the project. To my classmates and friends, thank you for your expert advice and constructive criticism. 1 CHAPTER 1: INTRODUCTION 1.1 Background The detection of motion finds its roots in astronomy, which goes back thousands of years ago. Early farmers looked to the heavens and used the movement of stars to determine when to plant crops and when to harvest them. The first motion detection system; radar, was pioneered by Heinrich Hertz. Hertz studied the properties of waves and found that waves could bounce off of objects and had different speeds. This revelation was a breakthrough and as Furnish (2007) cites, the increased demand for detection and monitoring during World War II generated technological advances in motion sensing. And in 1940s, radar technology was sufficiently advanced that the military could detect attacks in advance and guide aircraft, Huebsch (2014). Although the development of radar systems was a great achievement, its applications were limited to military use, then. One of the first applications of motion sensing outside the military was developed by Samuel Bagno in the mid-1940s. Using his knowledge of radar and newly developed electrical components, Bagno began doing research on an ultrasonic alarm, which worked similarly to radar. His ultrasonic alarm created "a web of ultrasonic waves inside a room" and detected the motion of a person, Cerruti (1995). The invention of the ultrasonic alarm generated a demand for other non-military applications of this technology, especially infrared technology. Although infrared detection had been invented in the mid-1800s, its applications were limited to astronomy then, Cerruti (1995), but over time, its scope of application has grew tremendously. Passive Infrared, commonly known as PIR is the technology of motion detectors that is used to detect people by sensing the thermal infrared radiation emitted by the human body. PIR motion detectors always use thermal sensors, detecting the small temperature increase when the sensor element is exposed to radiation and absorbs it. 2 1.2 Problem Statement Automation is a field that incorporates computer science and electronics heavily. The growing need to have systems that can be controlled remotely and can be attached to almost every appliance and furniture has seen the development of new age of computing referred to as Internet of Things (I0T). People today need systems that can work independently and send feedback (results of processing; output) to them and can as well monitor various processes in their homes, offices etc. It is this need that inspires the development of a simple motion detection unit that its use can be customized to domestic usage for unique needs. 1.3 Aim of the project This project aims to develop a simple motion detector component that will in turn relay feedback immediately after motion is detected. 1.4 Objectives of the Project The following are the project objectives: a) To develop a system that utilizes infrared technology for motion detection b) To design the motion sensing component c) To program ATmega328 on Arduino Uno Rev3 Board microcontroller as the central processing unit of the component. 1.5 Research Questions The study shall be guided by the following research questions a) How does motion sensors work? b) How can one make several devices work simultaneously? c) Is motion sensing an effective way in security, tallying and remote distance processing 1.6 Significance and justification of the study Over time, there have been a growing need to have systems that can work independently and can be controlled remotely. Internet has contributed to this because of its ever decreasing cost on connection. Leased line connections such as fibre optic connections, as well as the ADSL (Asymmetric Digital Subscriber Line) connections tend to replace PSTN (Public Switched Telephone Network) and ISDN (Integrated Services Digital Network) connections for everyday use. 3 Previous studies have shown challenges in implementing intelligent embedded systems with human rights groups always on the watch out demanding for health implication of radiations that such devices emit when in operation. The motion sensor component being developed in this project will instead tap infrared radiations instead of generating them to detect motion. 1.7 The proposed solution The setup shall be able to detect movement of animals and inanimate objects then react by printing a message on a serial screen of a computer, switch on the buzzer and LED light already grounded on the Arduino Uno microcontroller. 4 CHAPTER 2: LITERATURE REVIEW 2.1 Introduction This chapter offers a brief background into the areas that are related to the research performed in this report as well as the areas that support the reasons for performing this research. The first section takes a look at embedded systems, the issues and tools involved in their design, current trends and the challenges in embedded systems design. The second section examines motion sensors and the Arduino UNO microcontroller. Section third which is also the final section of this chapter discusses embedded development cycle. Simply put, the proposed outcome of this chapter is a clearer understanding of the important variables of research as they relate to motion detection. 2.2 Embedded Systems Embedded systems have become a buzz word in the last five years. However, embedded systems and processors have been around for much longer than that, Stepner (1999). One only needs to look around to see embedded systems everywhere: cell phones, alarm clocks, personal data assistants (PDAs), automobile subsystems such as ABS and cruise control, etc. 2.2.1 Embedded Systems versus General Purpose Systems An embedded system is usually classified as a system that has a set of predefined, specific functions to be performed and in which the resources are constrained. Each embedded design satisfies its own set of functions and constraints. This is different from general purpose systems, such as the computer that sits on a desk in an office. The processor running that computer is termed a “general purpose” processor because it was “designed to perform many different tasks well,” Collins (2000) as opposed to an embedded system that has been built to perform a few specific tasks either very well or within very strict parameters. 5 2.2.2: Design Issues in Embedded Systems As mentioned above, embedded systems are defined by their functions and their constraints. These constraints are almost as varied as the number of embedded systems themselves, but a few of the more prevalent ones are response time accuracy, size, power consumption, and cost, Stepner (1999). All of these poses difficult decisions which an embedded system designer must make. Response time is a critical factor in many embedded systems; whether it is a specific time that an embedded system tasks needs to be run or the time between tasks that is important. The most difficult task for an embedded system designer to do is to quantify time deadlines, decide whether these deadlines are firm, and recognize what the consequences are if these deadlines are not met, Collins (2000). Size is also an important decision in many embedded systems. Many embedded systems designed today are bought and sold simply because they are smaller than the last implementation of that product. A living example is mobile phones. Another design issue concerning today’s embedded system designers is power consumption. Many of embedded systems are usually very small that are handheld devices that are made to be mobile hence; they must have a battery. Since the designer does not want the user to be forced to plug in or recharge the device every five minutes, the designer must make important choices in his design decisions and balance a feature’s merits against the power that the feature will consume, Collins (2000). A final consideration that embedded designers need to deal with is cost. Regardless of any choice of the above issues made, an embedded product is not going to sell if its cost is exorbitant. Most end users will sacrifice a small amount of performance, or a slightly less amount of battery time, for an embedded product that is less costly than all of its competitors. This demands that the designer must consider the cost of adding a particular modification to the design and whether or not the end user will be willing to pay that additional cost for that additional feature, Collins (2000). 6 2.2.3: Development Tools in Embedded Systems Embedded development tools have traditionally been behind the tools for the development of general systems as stated by Stepner (1999). Distinct to general systems, the design space for embedded systems is extremely large making it a challenge to contain all the facilities required to specify, design, and test embedded systems. However, there is hope in embedded systems development because they have garnered more interest in the research community as well as their increased need. Microprocessor companies are now delving into this interesting field. Intel, a leading processor manufacturer has a keen eye in embedded systems that has seen it manufacture varied microcontrollers and sponsoring research towards the realisation of Internet of Things (IoT). This is a motivation to embedded designers because embedded systems tools are now catching up with regular system design tools, and they have become more readily available and diverse in their area of coverage, Stepner (1999). Stepner (1999) opens further by stating that tools that were not available five to ten years ago are now available as part of “common EDA development suites”. Also, there are tools that are now available for the development of embedded system application software as well as the development of real-time operating systems in normal computer programming languages with C Language taking the lead. 2.2.4 Trends in Embedded System With the increasing interest and research, embedded systems are experiencing a plethora of new design trends. Five years from today, embedded systems of that time won’t bear much resemblance to the systems of today other than their basic functionalities, which may even be replaced in prospective times. Two of the trends currently hot in the world of embedded systems that are discussed here are that of application specific integrated circuits (ASICs) and systems on a chip (SOC). 2.2.4.1 Application Specific Integrated Circuits Smith (1997) suggests that the best way to define an application specific integrated circuit (ASIC) is by saying what it is not: “an integrated circuit designed for multiple 7 uses. Like the title suggests, this is an IC that has been designed for a specific application”. Examples of ICs that are not ASICs are standard computer parts such as RAM, ROM, multiprocessors, etc. Examples of ICs that are ASICs are a chip designed for a toy robot or a chip designed to examine sun spots from a satellite, Smith (1997). 2.2.4.2 System on a Chip System on a chip (SOC) is exactly what it sounds like i.e. “hardware designers have taken the normally separate pieces of a complete system; the CPU, memory controller, main memory, I/O control, and the various buses and interconnects, and placed many or all of them on a single piece of silicon” Collins (2000). This explains why there is reduction in size, power, cost and drop time delay. 2.2.5 Challenges with Embedded System Design One of the problems with embedded systems, and more specifically ASICs and SOCs, is that it is no longer possible to obtain debug information that was readily available in systems with discrete components. Those signals that are contained only in the silicon, such as information across the memory bus, never leave the silicon. The only way to debug them is to either probe the silicon itself, or to add additional logic to the chip that brings the signal off the chip, and even that option is limited by the number of physical pins that can be put on a chip and spared for simple debug and evaluation purposes. Also, with the speeds that some of today’s embedded processors are running, it becomes difficult to find a logic analyser that can keep up with the processors, not to mention costing tens to hundreds of thousands of dollars, Gwennap (1998) and Kozyrakis (1997). If there were another method to test these systems, both valuable time and money could be saved. 2.3 Motion sensors A motion sensor is an infrared human detection sensor, which, as opposed to factory automation sensors that are used with factory equipment, is designed to be incorporated into various devices that exist around us in daily life. 8 Motion sensing systems involve processing of analog data to digital data for an efficient relevant mechanical output. Therefore, they belong to a certain category of information systems. 2.3.1 Types of motion sensors Motion sensors are divided into two parts i) Passive infrared type ii) Area reflective type sensors. 2.3.1.1 Passive infrared type Designed to cover a wide area, this sensor detects human presence. The sensor, rather than emitting light such as from LEDs, detects the amount of change in infrared rays that occurs when a person (object), whose temperature is different from the surroundings, moves. Figure 2.3.1.1.1 Graphical description of passive infrared type of sensors. (Source: Google Images) All objects on the earth emit light in accordance with their temperature and surface characteristics. Naturally, light (infrared radiation) is also emitted from our bodies. (This radiation is emitted from the body surface, and is centred on a wave-length of 10μm.) When a person enters the detection area of the sensor, the amount of infrared radiation incident on the sensor varies by the amount corresponding to the difference in temperature between the body surface and background. These sensors detect the human body by detecting the change in incident infrared radiation. That is, the sensor is actuated by the difference in 9 temperature between human body (which is a heat source) and floor, walls and other objects forming the background. The same also applies to inanimate objects such as rolling ball. This is because, when those objects move, friction acts on them thus generating heat. This heat emits infrared radiation which the passive infrared type can detect. 2.3.1.2 Area reflective type of sensors These sensors detect the human body via the area reflection system. Figure 2.3.1.2.1 Graphical description of area reflective type of sensors. (Source: Google Images) The sensor sends out a ray of light toward the human body from an LED then uses the reflected light to measure the distance and determine whether the person is within a given distance of the sensor. If the sensor decides that there is a person within the given distance, it sets an output non-contact switch to ON. 2.4 Arduino Uno Microcontroller Figure 2.4.1: Arduino UNO Rev3 microcontroller (Source: www.ardino.cc) 10 The Arduino UNO is the best board to get started with electronics and coding. It has 14 digital input/output pins (of which 6 can be used as PWM outputs), 6 analog inputs, a 16 MHz quartz crystal, a USB connection, a power jack, an ICSP header and a reset button. It contains everything needed to support the microcontroller i.e. it can simply be connected to a computer with a USB cable or powered with an AC-to-DC adapter or battery to get started. As found in Arduino forum, Arduino UNO microcontroller has the following specifications: 2.4.1 Technical Specifications Table 2.4.1 Technical specifications for Arduino UNO Source: Arduino Forum (www.arduino.cc) 2.4.2 Programming The Uno can be programmed with the Arduino software. The ATmega328 on the Uno comes pre-programmed with a boot-loader that allows one to upload a new code to it without the use of an external hardware programmer. The Uno has a resettable poly-fuse that protects the user’s computer's USB ports from shorts and overcurrent. Although most computers provide their own internal protection, the fuse provides an extra layer of protection. If more than 500 mA is applied to the USB port, the fuse will automatically break the connection until the short or overload is removed. 2.4.3 Differences with other boards The UNO differs from all preceding boards in that it does not use the FTDI USB-to-serial driver chip. Instead, it features the Atmega16U2 (Atmega8U2 up to version R2) programmed as a USB-to-serial converter. 11 2.4.4 Power The Uno board can be powered via the USB connection or with an external power supply. The power source is selected automatically. External (non-USB) power can come either from an AC-to-DC adapter (wall-wart) or battery. The adapter can be connected by plugging a 2.1mm centre-positive plug into the board's power jack. Leads from a battery can be inserted in the GND and Vin pin headers of the POWER connector. The board can operate on an external supply from 6 to 20 volts. If supplied with less than 7V, however, the 5V pin may supply less than five volts and the board may become unstable. If using more than 12V, the voltage regulator may overheat and damage the board. The recommended range is 7 to 12 volts. The power pins are as follows: Vin: The input voltage to the Uno board when it's using an external power source (as opposed to 5 volts from the USB connection or other regulated power source). You can supply voltage through this pin, or, if supplying voltage via the power jack, access it through this pin. 5V: This pin outputs a regulated 5V from the regulator on the board. The board can be supplied with power either from the DC power jack (7 - 12V), the USB connector (5V), or the VIN pin of the board (7-12V). Supplying voltage via the 5V or 3.3V pins bypasses the regulator, and can damage your board. We don't advise it. 3V3: A 3.3 volt supply generated by the on-board regulator. Maximum current draw is 50 mA. GND: Ground pins. IOREF: This pin on the Uno board provides the voltage reference with which the microcontroller operates. A properly configured shield can read the IOREF pin voltage and select the appropriate power source or enable voltage translators on the outputs to work with the 5V or 3.3V. 2.4.5 Memory The ATmega328 has 32 KB (with 0.5 KB occupied by the boot-loader. It also has 2 KB of SRAM and 1 KB of EEPROM. 12 2.4.6 Input and Output Each of the 14 digital pins on the Arduino Uno can be used as an input or output, using: pinmode(), digitalwrite(), and digitalread() functions. They operate at 5V. Each pin can provide or receive 20mA as recommended operating condition and has an internal pull-up resistor (disconnected by default) of 20-50k ohm. A maximum of 40mA is the best value that must not be exceeded on any I/O pin to avoid permanent damage to the microcontroller. In addition, some pins have specialized functions: Serial: Pins 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data. These pins are connected to the corresponding pins of the ATmega8U2 USB-to-TTL Serial chip. External Interrupts: Pins 2 and 3. These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value. PWM: Pins 3, 5, 6, 9, 10, and 11. They provide 8-bit PWM output with the analogWrite() function. SPI: Pins 10, 11, 12 and 13. These pins support SPI communication using the SPI library. LED: Pin 13. There is a built-in LED driven by digital pin 13. When the pin is HIGH value, the LED is on, when the pin is LOW, it's off. TWI: Pins A4 or SDA pin and A5 or SCL pin. Support TWI communication using the Wire library. The Arduino UNO has 6 analog inputs, labelled A0 through A5, each of which provide 10 bits of resolution (i.e. 1024 different values). By default they measure from ground to 5 volts, though it is possible to change the upper end of their range using the AREF pin and the analogReference() function. Other pins on the board include: AREF Reference voltage for the analog inputs. Used with analogReference(). Reset. Bring this line LOW to reset the microcontroller. Typically used to add a reset button to shields which block the one on the board. 13 2.4.7 Communication Arduino UNO has a number of facilities for communicating with a computer, another Uno board, or other microcontrollers. The ATmega328 provides serial communication, which is available on digital pins 0 (RX) and 1 (TX). An ATmega16U2 on the board channels this serial communication over USB and appears as a virtual com port to software on the computer. The 16U2 firmware uses the standard USB COM drivers thus reducing the need for an external driver. The Arduino Software (IDE) includes a serial monitor which allows simple textual data to be sent to and from the board. The RX and TX LEDs on the board will flash when data is being transmitted via the USB-to-serial chip and USB connection to the computer. However, this may not happen (serial communication) for on pins 0 and 1. 2.5 Embedded Development Cycle According to Byte Craft Ltd, which is a software development company specializing in embedded systems software development tools for single-chip microcomputers, the development process for embedded software follows a seven stage cycle which are: 1. Problem specification 2. Tool/chip selection 3. Software plan 4. Device plan 5. Code/debug 6. Test 7. Integrate Problem Specification It is a statement of the problem that your program will solve without considering any possible solutions. Its main objective is explaining in detail what the program will do. Once the specification of the problem is complete, the developer must examine the system as a whole. It is at this point that the developer considers specific needs such as those of interrupt driven or timing-critical systems. 14 Tool/Chip Selection At this stage, informed on the need, a chip is selected based on memory size, speed, special feature availability. Issues such as cost and availability are also investigated at this stage. Availability of tools impacts the decision to develop with a certain microcontroller. It is essential to determine if the development decisions a developer makes are possible with the device he or she is considering. For example, if one wishes to use C language, it is fruitful to select a device that has a C language compiler. It is also useful to investigate the availability of emulators, simulators and debuggers. Software Plan The first step in the software plan is to select an algorithm which solves the problem specified in the problem specification stage. It is advisable to consider and compare in terms of code side, speed, difficulty, and ease of maintenance different algorithms. Once a basic algorithm is chosen the overall problem should be broken down into smaller problems which are then solved by different devices (modular programming). Device Plan At this stage, the routines for hardware specific features are planned. These routines include: 1) Set up the reset vector 2) Set up the interrupt vectors 3) Watch the stack (hardware or software) 4) Interact with peripherals such as timers, serial ports, and analog-digital converters (ADC). 5) Work with I/O ports Code/Debug The modules from the software plan stage are coded in the project language. The coded modules are compiled or assembled and all syntactic error are repaired. Testing Each module should be tested to ensure that it is functioning properly. Testing is done using simulators and/or emulators. It is also important to test the hardware to be used. This is easily done by writing small programs which test the devices. 15 Integrate This is the last stage of embedded development cycle. At this stage, the modules are combined to create a functioning program. At this point, it is important to test routines which are designed to respond to specific conditions. These routines include interrupt service and watchdog support routines. The entire program is thoroughly tested. 16 CHAPTER 3: METHODOLOGY 3.0 Introduction This chapter consists of project planning, project block diagrams and project description. In this chapter also, all the methods that were used to implement the project is described. 3.1 Project Planning The progress and development of the project consists of four main parts. The first part focuses on detailed literature review regarding the sensor system used in this project, ATmega328 microcontroller and anything related to motion detection. The next part focuses on hardware, software and the component and equipment that will be used in this project. And the third part of this chapter dwells on the programming that will be used for co-ordinated functions of the piezzo buzzer, LED and the serial monitor with the Arduino Uno (ATmega328 microcontroller). The last part is on modelling for prototyping and test the system to get the result and fix it if it the results not just like we want. 17 Literature Review for devices used in the project Finding information on PIR sensor, piezzo buzzer and Arduino UNO microcontroller Develop source code on Arduino for the sensor system, alarm system and status indicator Development of the prototype Modelling Study on hardware used (equipments and component) System Testing Study C language to write a program Figure 3.1.1: Project planning flowchart 18 3.2 Project Block Diagram Figure 3.2.1: Block Diagram for Motion Detector System 3.3 Project Description This is an endeavour to develop a motion detector component that will be core to further enhancements for relevance applicability by any user. PIR Sensor, piezzo buzzer and a computer by use of connectors and a USB cable respectively will be connected to the Arduino UNO microcontroller. Piezzo buzzer and the serial monitor will be the output devices for the motion detector as the Arduino Uno board becomes the central processing module. PIR sensor is the input component. The serial monitor becomes the status indicator module. 19 Hardware implementation in this project consists of PIR Sensor, piezzo Buzzer, Arduino UNO microcontroller and a computer. The Atmega328 acts like the interface between the PIR sensor and the piezzo buzzer, computer and the LED on pin 13 of the Arduino UNO microcontroller because it is the central processing unit that controls the flow of operation between the input and output modules. For the software implementation of this project, Arduino software version 1.5.6-r2 has been used as programming editor to develop a command to the microcontroller to control the piezzo buzzer, the LED on the microcontroller and the expected message on the serial monitor. Arduino software allows a user to program the microcontroller by using the C language. 3.4 The sensor module The sensor module developed in this project is aimed at extending the ability of the overall motion detector system by detecting abnormal activities happening within the environment of the module. PIR sensor has been picked to implement this project. This is because it allows one to sense motion, by detecting whether a human has moved in or out of the sensors range. They are small, inexpensive, low-power, easy to use and don't wear out. Figure 3.4.1: PIR Sensor (Source: Google Images) This sensor has a sensitivity range of up to 20feet (6 metres) and a 110°X70° detection range making it a wide lens detection sensor. This means it can measure 110° vertically (from top) and 70° horizontally (from left to right). However, the PIR sensor can’t count how many people are around it or how close they are to the sensor because the lens is often fixed to a certain sweep. 3.5 The Motion Detector System The motion sensing system consists of all modules that have been developed; the sensor system, alarm system and the status indicator system. The serial monitor will be used for status reporting. The alarm module can be connected either along the board or some distance away from the microcontroller. The alarm subsystem consists of a piezzo buzzer to make a noise and LED to give some visual indicator to the user. 20 3.6 Software Development Figure 3.6.1 below is the flow chart of how the motion detector will work in its programming. The program will have a continuous looping and will continue to execute according to the flow chart. The program will initialize at first to make sure all the system ready to be function. The first program to be executed sensor system then followed by the alarm and status indicator module which will be executed concurrently. START Initialize the Motion Detector System Motion Detected? NO YES Piezzo buzzer beep LED Light ON Print on Serial Monitor STOP Figure 3.6.1 Flowchart for the motion detector system 21 3.7 Programming Tools The software design for the motion detector system was programed by use of Arduino 1.5.6-r2 software. The software was first downloaded from the Arduino website (www.arduino.cc) and was then installed. See Figure 3.7.1 below. Figure 3.7.1: Loading of Arduino Software Arduino UNO microcontroller was then connected to the computer via a USB cable, then followed selection of the microcontroller from the ‘Tools Tab’ and lastly selection of COM 29 from the same tab as shown below in Figure 3.7.2, Figure 3.7.3 and Figure 3.7.4 respectively. Figure 3.7.2 Configuration for connecting the Arduino UNO microcontroller with a computer. (Source: Google Images) 22 Figure 3.7.3: Selecting the Arduino UNO Board Figure 3.7.4: Selecting COM29 port Thereafter, an Arduino program was loaded on the microcontroller so as to test its functionality as shown in Figure 3.7.5. 23 Figure 3.7.5: Programming Motion Detector system using Arduino Software The figure above shows the source code that I developed using the Arduino software. I used C programming language because it’s easy to understand and that it’s also easier detect a mistake from the program. In comparison to Assembly language that requires the programmer to know the inside structure of the microcontroller, C language offers more specific coding and programs that run on C language are a lot faster than using assembly language. The advantage with Arduino software is, it can support either Assembly language or C language thereby giving the user an opportunity to choose the language he or she wants to use. What followed next was loading the source code to the Arduino UNO by clicking the ‘Upload’ button on the Arduino Software as shown below. 24 Figure 3.7.6: Uploading the Source Code to the Arduino When upload was successful, the LED on Pin 13 on the Arduino UNO board blinked twice. Thereafter, I connected the PIR Sensor, piezzo buzzer to the Arduino UNO board. I powered the Arduino UNO via the USB cable connecting the computer and the board. Figure 3.7.7: PIR Sensor and Piezzo Buzzer connected to the Arduino UNO 25 3.7.1 Connecting PIR sensor to the Arduino UNO Board Pin1 of the PIR Sensor is connected to the 5V DC voltage terminal of the Arduino UNO. Pin3 is connected to the ground (GND) pin of the Arduino UNO. Pin2 connects to digital Pin D3. Here, Pins 1 and 3 are powered with 5V by the Arduino UNO, i.e. it is through these pins connections that the PIR sensor gets the 5V that it needs to power on and operate. It is through Pin2 that that the Arduino UNO receives output from the PIR sensor. 3.7.2 Connecting the Piezzo buzzer to the Arduino UNO The anode terminal (Red cable) of the buzzer is connected to Pin13 of the Arduino UNO whereas its cathode (black) is connected to the ground (GND) pin of the buzzer. Figure 3.7.2.1: Piezzo Buzzer Source: Google Images Piezzo buzzer has the capability of reading analog signals through its analog-digital convertor (ADC). 26 CHAPTER 4: RESULTS AND DISCUSSION 4.1 Introduction This chapter contains the results and discussion from the hardware and software part of the project that have been implemented on the motion detector system. Figure 4.1.1 below shows the overall system that has been integrated together. Figure 4.1.1: The Motion Detector System 4.2 Testing development After successful implementation of the sensor module and the alarm module, with the Arduino UNO microcontroller to make the motion detector system, the project continued to the next stage; the testing phase. Project testing will concentrate on several aspects according to functionality and reliability. This facet is of importance to this project because it will determine whether this project has achieved its objective or not. This testing development unit will also involve hardware and software part of the project. Figure 4.2.1 below show the flowchart for testing phase of the project. 27 Start Initialize motion detector system Is the sensor system working? NO Fix coding and connection for the PIR Sensor YES Is the alarm system working? NO Fix coding and connection for the Piezzo Buzzer YES Is the status indicator system working? NO Fix coding of serial monitor YES End Testing Figure 4.2.1 Project testing flowchart 28 4.2.1 Testing the sensor module The PIR sensor was connected on the Arduino UNO microcontroller board as stated in section 3.7.1 above. Thereafter, a USB cable was used to connect the Arduino UNO microcontroller to the computer. A sample code to test the functionality of the PIR sensor was uploaded to the microcontroller. Whenever motion was detected, the LED Pin on the Arduino UNO microcontroller blinked for five seconds before going off. When no motion was detected, the LED pin did not light. Figure 4.2.1.2: Testing the PIR Sensor. Note that the black cable of the Piezzo Buzzer isn’t connected to the Arduino UNO 4.2.2 Testing the alarm module The piezzo buzzer was connected on the Arduino UNO microcontroller as stated in section 3.7.2 in the methodology chapter. Thereafter, a USB cable was used to connect the Arduino UNO microcontroller board to the computer. A sample code to test the functionality of the buzzer was uploaded to the microcontroller to test its functionality in seamless concurrence with the PIR Sensor. Again, whenever motion was detected, the piezzo buzzer beeped for five seconds before going off. At LED Pin also lit for five seconds. When no motion was detected, it didn’t beep and the LED Pin didn’t light. 29 Figure 4.2.2.2: Testing the Piezzo Buzzer 4.2.3 Testing the status indicator module To enhance the efficiency and effectiveness of the system, a status indicator component was needed. To achieve this, a serial monitor ability from the Arduino software was employed. The serial monitor acts as a virtual monitor to the Arduino UNO microcontroller making it print a pre-programmed message on it. Only the printing command was added to the existing source code. The program was later uploaded to the Arduino UNO board. As programmed, anytime motion was detected, the piezzo buzzer beeped for five seconds, the LED pin on the Arduino UNO board lit for the same time and “MOTION DETECTED” message was printed on the serial monitor once. When no motion was detected, the piezzo buzzer didn’t beep, the LED on the Arduino UNO board did not light and no message was printed on the serial monitor. 30 Figure 4.2.3.2: Motion detector system and serial monitor 4.3 Discussion When the PIR sensor detects an obstacle within its detection range, it picks the analog signal then converts it to a digital signal which it then passes it to the Arduino Uno board as a voltage signal. The received digital signal, whose status is HIGH (3volts), triggers the LED installed on its Pin13 to light and the piezzo buzzer connected on the same pin to buzz. At the same time, the message ‘MOTION DETECTED’ is printed on the serial monitor once. When no motion is detected, the output from the PIR Sensor is low and gives off practically no voltage signal. It is through Pin2 of the PIR Sensor that the Arduino receives output from the PIR sensor in form of an electric signal. The lines of code below controls the behaviour of the LED pin, piezzo buzzer and the serial monitor: void loop() { value = digitalRead(switchPin); if (HIGH == value) { digitalWrite(ledPin, HIGH); digitalWrite (buzzerPin,HIGH); Serial.println ("MOTION DETECTED"); delay (10000); counter++; Serial.println(counter); } Serial.println (“MOTION DETECTED”); else { digitalWrite(ledPin, LOW); } 31 I used C programming language because it’s easy to understand and that it’s also easier detect a mistake from the program. In comparison to Assembly language that requires the programmer to know the inside structure of the microcontroller, C language offers more specific coding and programs that run on C language are a lot faster than using assembly language. The advantage with Arduino software is, it can support either Assembly language or C language thereby giving the user an opportunity to choose the language he or she wants to use. 4.4 Project Justification of Results From the results above i.e. from the sensor module, alarm module and status indicator module that I got after testing the motion detector system, I can conclude that the development of simple motion detector component was successful. Even though I encountered some problems in testing the system, the flow chart that I developed for testing the system was very useful as it gave me less time to debug the system. Also, the flow chart gave me an easier way to detect any mistake and corrected it relevantly. 32 CHAPTER 5: CONCLUSION AND RECOMMENDATIONS 5.1 Conclusion The task for developing the motion sensor system using infrared technology was successful and achieved the objective for the overall project. From this project, I can confirm that infrared technology is key in motion sensing. The alarm module and the status indicator component helped make the system more efficient as the Arduino UNO microcontroller played the central processing unit (CPU) role. To enable coordinated functioning of the various components of the system, the microcontroller ATmega328 on the Arduino UNO microcontroller board was programmed to execute commands for the piezzo buzzer, LED pin and the serial monitor. The potential application of this technology in future is relevant in security, tallying and can be enhanced further into imaging technology at a more reliable and cheaper cost. The serial monitor in the project was as a platform to give readable notifications. 5.2 Obstacles encountered in the project. When making something new, it’s obvious that one faces several problems. The first problem that I encountered was making the PIR Sensor work with the Arduino UNO board and also making all the components work in a coordinated manner. The hardest part on the project was in the programming part because I ventured into embedded programming, a fact that made me to tirelessly read and practice this unique, fairly hard but interesting nerve of systems development. It was a challenge making mechanical devices work and on several occasions I had to consult Titus Koech, a friend who takes BEng. Electrical and Communications Engineering from the School of Engineering in order to understand circuits. 33 It was a challenge working on the project with borrowed devices from a friend who at the same time was also working on his project. This is because of the cost, especially of the Arduino UNO board as very few retailers of electronics are aware of it and they only make few purchases thus making them increase its buying price. 5.3 Recommendations for the project. With the results that have successfully been got after testing the system, there are several recommendations that can make the motion detector system more reliable and efficient for the future. 1. Use of GSM Modem: This will increase the ability of remotely receiving a notification and controlling a set of actions. For example, if used in a home, the user can make the system switch on a CD player that will create an impression that someone is inside the house. 2. Making GUI (Graphical User Interface): To make this motion sensor system more user friendly. 3. Using a more powerful sensor: It will enhance the system by giving it the counting ability. 4. Using spy Cameras: For taking pictures that will be sent to the user in order to know the kind of object that has been detected within the detection range. 5. Using an ultrasonic-sensor: For distance measuring capability. 34 REFERENCES Byte Craft Limited. First Steps in Embedded Systems, Ontario: 2002. Available www.bytecraft.com 18th April, 2016. Collins, M., “An Evaluation of Embedded System Behavior Using Full-System Software Emulation” Msc. Thesis. University of Maryland, College Park, 2000. Gwennap, L., "New Processor Paradigm: V-IRAM." Journal of Microprocessor Report, Vol. 12, No. 3 (1998) pp. 17-19. Kozyrakis, C., et al. "Scalable Processors in the Billion-Transistor Era: IRAM." IEEE Computer, Vol. 30, No. 9, (1997) pp. 75-78. Smith, M.. Application-Specific Integrated Circuits. Addison-Wesley: Reading, Massachusetts, 1997. Stepner, D., et al. “Embedded application design using a real-time OS.” DAC 99: New Orleans LA, 1999. Internet Sources Cerruti, L.,"Dante's Bones." Archimedes; The Sciences in the European Periphery During the Enlightenment, (1995) pp. 95-178. Motion Sensors. Illumin. Hp. 2007. Motion Sensors. Furnish, T., Available www.illumin.usc.edu 9th Dec.2015 History of Motion Detectors. Hp. 2014. Heubsch, Russel., Available www.ehow.com/about_5516868_history-motion-detectors.html 11th Dec 2015 www.media.digikey.com/pdf/data%20sheets/panasonic%20electric%20works%20pdfs/amn %20design%20manual.pdf www.arduino.cc 35 BIBLIOGRAPHY Abeni, L., and Buttazzo, G., "Integrating multimedia applications into hard real-time systems." In Proc. IEEE Real-Time Systems Symposium (RTSS), 1998. Adafruit Learning Systems. PIR Motion Sensor Created by Lady Ada. Available www.learn.adafruit.com 30th March, 2016. Ball. S., Embedded Microprocessor Systems: Real-World Design. Newnes: ButterworthHeinemann, Boston MA, 1996. Ganssle, J. G., "The challenges of real-time programming." Embedded Systems Programming, Vol. 11, No. 7, (1997) pp. 20-26. Kalinsky, D., "A survey of task schedulers." In Embedded Systems Conference. San Jose CA, 1999. Lee, A., and Seshia, A., Introduction to Embedded Systems: A Cyber-Physical Systems Approach. UC Berkley, 2011. Available www.leeseshia.org 16th March 2016. Liu, J., Real-Time Systems. Prentice Hall: Upper Saddle River NJ, 2000. Samingan B.L., “Radio Frequency Identification and Global System for Mobile Communication Application for Anti- Theft Car Security System”. Bsc. Thesis. Universiti Teknologi Malaysia, Skudai, 2014. 36 APPENDICES APPENDIX I: System Source Code /*Motion Detector Code Developed by Francis Omondi Bsc. Information Sciences For more information, Call 0728 521 742 or Email [email protected] */ int ledPin = 13; // Pin 13 is set as output.default LED pin of ArduinoUno int switchPin = 2; //Pin 2 is set asINPUT pint for motion detected. int buzzerPin=13; // Pin 13 is set as output terminal. Buzzer connected here int value = 0; // Initialization i.e no motion detected int counter; // variable for counting the number of times motion is detected void setup() { // Setup code for the system. Runs once only pinMode(ledPin, OUTPUT); // output point of LED in this case Pin 13 pinMode(switchPin, INPUT); // Input point of PIR sensor pinMode (buzzerPin, OUTPUT); // output point of Piezzo Buzzer Serial.begin (9600); } /* This loop part will run over and over again as long as the Arduino has power*/ /* this block of code reads the input value and assigns it to the integer value.*/ void loop() { value = digitalRead(switchPin); if (HIGH == value) { // HIGH means motion detected digitalWrite(ledPin, HIGH); // LED Lights for 5 seconds digitalWrite (buzzerPin,HIGH); // Buzzer buzzes for 5 seconds Serial.println ("MOTION DETECTED"); delay (10000); //Waits for 10seconds but is adjustable. Syntax 1000ms=1sec counter++; Serial.println(counter); } else { digitalWrite(ledPin, LOW); //LOW means no motion detected, LED & Buzzer off } } 37 APPENDIX II: SOURCE CODE TO TEST PIR SENSOR int ledPin = 13; int switchPin = 2; int value = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(switchPin, INPUT); } void loop() { value = digitalRead(switchPin); if (HIGH == value) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } APPENBIX III: SOURCE CODETO TEST PIEZZO BUZZER int ledPin = 13; int switchPin = 2; int buzzerPin=13; int value = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(switchPin, INPUT); pinMode (buzzerPin, OUTPUT); } void loop() { value = digitalRead(switchPin); if (HIGH == value) { digitalWrite(ledPin, HIGH); digitalWrite (buzzerPin,HIGH); //Buzzer buzzes for 5 seconds } else { digitalWrite(ledPin, LOW); } } 38 APPENDIX IV: CIRCUIT DIAGRAM OF FULL CONNECTION APPENDIX V: SERIAL MONITOR SHOWING SEVEN COUNTS OF MOTION DETECTION