Sunday, May 13, 2012

Home Alarm System using Netduino Plus (HomeAlarmPlus project)

Latest update: Sunday, April 1, 2013

This is a simple alarm monitoring system using Netduino Plus and a typical alarm panel. This implementation could be used in conjunction with the PC5010 Digital Security Controls (DSC) PowerSeries Security System control panel and sensors.  Tested with .NET Micro Framework 4.2 (QFE1 and QFE2).

Objective
Use full capabilities of Netduino Plus to monitor home alarm system and report any sensor/motion detector activities via email (using Simple Mail Transfer Protocol (SMTP)), local web server and Pachube (now Cosm).

Programming Languages and Web Development

  • C# for Netduino Plus
  • HTML for Web Server with Cascading Style Sheets (CSS)
  • JavaScript for Web Server


  • Warning
    This code contains information related to a typical home alarm systems.  Please, be aware that this procedure may void any warranty.  Any alarm system of any type may be compromised deliberately or may fail to operate as expected for a variety of reasons.

    The author, Gilberto García, is not liable for any System Failures such as: inadequate installation,  criminal knowledge, access by intruders, power failure, failure of replaceable batteries, compromise of Radio Frequency (Wireless) devices, system users, smoke detectors, motion detectors, warning devices (sirens, bells, horns), telephone lines, insufficient time, component failure, inadequate testing, security and insurance (property or life insurance).

    One last thing:
    DISCONNECT AC POWER AND TELEPHONE LINES PRIOR TO DOING ANYTHING.


    Required Hardware

    • Micro SD Card 
    • SD Card Adapter
    • 3mm green Light Emitting Diode (LED) per alarm zone and motion detector. 
    • 330 ohm for each LED.
    • 5600 ohm resistor per alarm zone and motion detector.
    • Schottky diode per alarm zone.  Schottky diode should have low forward voltage drop like the SBR10U40CT.
    • Sparkfun ProtoScrewShield (sku: DEV-09729).  Other shields that will work are: Proto-Screwshield (Wingshield) kit from Adafruit or WingShield Industries.


    Optional Hardware

    • USB Ruggedized / Waterproof Panel Connector (RR-211300-30)

    Circuitry
    The following Fritzing diagram shows how the Netduino plus, LEDs and the alarm zones (or motion detector) are wired.  LCD circuitry reference from Szymon Kobalczy.

    HomeAlarmPlus connection diagram (basic circuit) Rev-


    HomeAlarmPlus connection diagram (basic circuit) RevA


    HomeAlarmPlus connection diagram (enhanced circuit) RevG

    Zone/Sensor connection

    Keep in mind that one or more zone consist in the following:
    a) 1 Normally Open contact and 1 Normally closed contact with End Of Line (EOL) resistor.
    b) Double EOL circuit, 1 Normally closed contact with 5.6kohm EOL resistor and Schottky diode.  This will bring the protection needed for the Netduino or Arduino.
    c) Each ground zone should be connected to the  ProtoScrewShield GND.


    Netduino/ProtoScrewShield Pin
    Description
    A0 Zone #1
    A1 Zone #2
    A2 Zone #3
    A3 Zone #4
    A4 Sensor #1 [Motion Detector]
    D2 LED Zone #1
    D3 LED Zone #2
    D4 LED Zone #3
    D5 LED Zone #4
    D6 or D7 LED Sensor #1 [Motion Detector]


    HomeAlarmPlus schematic (basic circuit)

    References
    • Simple Mail Transfer Protocol (SMTP) based on BanskySPOTMail by: Pavel Bánský.

    • Web Server based on MFToolkit library by: Michael Schwarz.

    • Pachube Embeddable Graph Generator (Beta) by: Pachube, adapted by Gilberto García.

    • NTP Server and Extensions class based on a post/implementation by: Valkyrie-MT.

    • StopWatch class based on a post/implementation by: Chris Walker.

    • LCD display using uLiquidCrystal library.

    Web server options


    Web Server snapshot


    Options
    Description
    /Root page
    /openOpen last file on SD card.
    /sdcardList files on SD card.
    /suSuper user. Shows additional options.
    /pachubeShows Pachube activity per zone/Datastream.
    /aboutApplication credits and version.
    /delete-confirmDelete last file on SD card [confirm window].
    /delete-lastDelete last file on SD card [no confirm window].
    /diagnosticsFor now, displays available memory on Netduino and forces to clear the garbage collector.


    Code
    Config.ini file should be copied to the root directory on the SD Card. The purpose of this file is to customize parameters on SD Card and avoid minimal source code modification.  CSS files (header_style.css and table_style.css) should be located in WebResources folder.

    microSD directory structure


    Config.ini content:
     ;AlarmByZones - Programmed for Netduino by Gilberto García - 5/9/2012  
     ;Feel free to customize this file with your own definitions.  
     ;[NETDUINO_PLUS_HTTP_PORT] HTTP server port.  
     ;[ALARM_ZONES] should match with ACTIVE_ZONES constant defined in AlarmByZones.cs and Definitions.cs .  
     ;[SENSORS] should match with MOTION_SENSORS constant defined in AlarmByZones.cs and Definitions.cs .  
     ;[USE_EMAIL] Activate/Deactivate email option. Y or N arguments expected.  
     ;[EMAIL_FREQ] Email frequency in minutes when the alarm/sensor is active.   
     ;       This will define EMAIL_FREQUENCY in ConfigDefault.cs .  
     ;[STORE_LOG] Saves alarm/sensor log. Y or N arguments expected.  
     ;[STORE_EXCEPTION] Saves Netduino exceptions. Y or N arguments expected.  
     ;[USE_PACHUBE] Activate/Deactivate Pachube option. Y or N arguments expected.  
     ;  
     ;  
     ;  
     [NETDUINO_PLUS_HTTP_PORT]  
     8080  
     [ALARM_ZONES]  
     Zone1=FIRST FLOOR - Living room windows, Dining room windows, Porch (sliding doors), Garage door access.  
     Zone2=SECOND FLOOR - Master Bedroom and Bathroom Windows.  
     Zone3=FIRST FLOOR - Master Bedroom windows.  
     Zone4=SECOND FLOOR - Bedroom 2 and bathroom windows.  
     [SENSORS]  
     Sensor1=Main door access  
     [USE_EMAIL]  
     Y  
     [EMAIL_FREQ]  
     10  
     [STORE_LOG]  
     Y  
     [STORE_EXCEPTION]  
     N  
     [USE_PACHUBE]  
     Y  
    

    Architecture of AlarmByZones (main)


    Declaration
        /// <summary>  
         /// Alarm zones (Analog Input)  
         /// </summary>  
         static SecretLabs.NETMF.Hardware.AnalogInput[] Zones = new SecretLabs.NETMF.Hardware.AnalogInput[Alarm.User_Definitions.Constants.ACTIVE_ZONES];  
         /// <summary>  
         /// Alarm zones LEDs (Digital Output)  
         /// </summary>  
         static Microsoft.SPOT.Hardware.OutputPort[] AlarmLeds = new Microsoft.SPOT.Hardware.OutputPort[Alarm.User_Definitions.Constants.ACTIVE_ZONES];  
         /// <summary>  
         /// Motion detector sensors (Analog Input)  
         /// </summary>  
         static SecretLabs.NETMF.Hardware.AnalogInput[] Sensors = new SecretLabs.NETMF.Hardware.AnalogInput[Alarm.User_Definitions.Constants.MOTION_SENSORS];  
         /// <summary>  
         /// Motion detector LEDs (Digital Output)  
         /// </summary>  
         static Microsoft.SPOT.Hardware.OutputPort[] MotionLeds = new Microsoft.SPOT.Hardware.OutputPort[Alarm.User_Definitions.Constants.MOTION_SENSORS];  
         /// <summary>  
         /// Gets the total elapsed time measured by the current instance of each alarm zone.  
         /// </summary>  
         static System.Diagnostics.Stopwatch[] stopwatchZones = new Stopwatch[Alarm.User_Definitions.Constants.ACTIVE_ZONES];  
         /// <summary>  
         /// Gets the total elapsed time measured by the current instance of each motion detector sensor.  
         /// </summary>  
         static System.Diagnostics.Stopwatch[] stopwatchSensors = new Stopwatch[Alarm.User_Definitions.Constants.MOTION_SENSORS];  
         /// <summary>  
         /// Flag for detected zones when trigger.  
         /// </summary>  
         static bool[] detectedZones = new bool[Alarm.User_Definitions.Constants.ACTIVE_ZONES];  
         /// <summary>  
         /// Flag for detected sensors when is trigger.  
         /// </summary>  
         static bool[] detectedSensors = new bool[Alarm.User_Definitions.Constants.MOTION_SENSORS];  
         /// <summary>  
         /// Email  
         /// </summary>     
         /// <example> SMTPClient.Email("mail.gmx.com", 587, "user@gmx.com", "destination@email.com", "user password");   
         /// </example>  
         static SMTPClient.Email email = new SMTPClient.Email(Alarm.UserData.Email.host, Alarm.UserData.Email.port,  
           Alarm.UserData.Email.From, Alarm.UserData.Email.To, Alarm.UserData.Email.smtpPassword);  
         /// <summary>  
         /// SD Card Event Logger  
         /// </summary>  
         public static EventLogger SdCardEventLogger = new EventLogger();  
    
    
    
    Delegates
         /// <summary>  
         /// Monitor zones delegate  
         /// </summary>  
         public delegate void MonitorZonesDelegate();  
         /// <summary>  
         /// Monitor motion sensor delegate  
         /// </summary>  
         public delegate void MonitorMotionSensorDelegate();  
    

    Main
          public static void Main()  
         {  
           Zones[0] = new SecretLabs.NETMF.Hardware.AnalogInput(SecretLabs.NETMF.Hardware.NetduinoPlus.Pins.GPIO_PIN_A0);  
           Zones[1] = new SecretLabs.NETMF.Hardware.AnalogInput(SecretLabs.NETMF.Hardware.NetduinoPlus.Pins.GPIO_PIN_A1);  
           Zones[2] = new SecretLabs.NETMF.Hardware.AnalogInput(SecretLabs.NETMF.Hardware.NetduinoPlus.Pins.GPIO_PIN_A2);  
           Zones[3] = new SecretLabs.NETMF.Hardware.AnalogInput(SecretLabs.NETMF.Hardware.NetduinoPlus.Pins.GPIO_PIN_A3);  
           AlarmLeds[0] = new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D2, false);        
           AlarmLeds[1] = new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D3, false);  
           AlarmLeds[2] = new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D4, false);  
           AlarmLeds[3] = new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D5, false);  
           Sensors[0] = new SecretLabs.NETMF.Hardware.AnalogInput(SecretLabs.NETMF.Hardware.NetduinoPlus.Pins.GPIO_PIN_A4);  
           MotionLeds[0] = new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D7, false);  
           MonitorZonesDelegate monitorZones = new MonitorZonesDelegate(MonitorZones);  
           MonitorMotionSensorDelegate monitorMotion = new MonitorMotionSensorDelegate(MonitorSensors);  
           //based on a post by Valkyrie-MT  
           //http://forums.netduino.com/index.php?/topic/475-still-learning-internet-way-to-grab-date-and-time-on-startup/  
           Console.DEBUG_ACTIVITY("Setting NTP-time");  
           SetTime();  
           SdCardEventLogger.parseConfigFileContents(Alarm.User_Definitions.Constants.ALARM_CONFIG_FILE_PATH);  
           InitArrays();  
           Console.DEBUG_ACTIVITY(Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IPAddress);  
           SdCardEventLogger.SDCardAccess();  
           new Thread(Alarm.ProtoScrewShield_LED.Blink).Start();        
           new Thread(Alarm.WebServer.startHttp).Start();  
           if (Alarm.ConfigDefault.Data.USE_PACHUBE)  
           {  
             Pachube.PachubeLibrary.InitPachubleLibrary(SdCardEventLogger.IsSDCardAvailable(), Alarm.ConfigDefault.Data.STORE_EXCEPTION);  
             new Thread(Pachube.PachubeLibrary.PachubeConnect).Start();  
           }  
           while (true)  
           {  
             Debug.Print("Memory available: " + Debug.GC(true));  
             monitorZones();  
             monitorMotion();  
             Thread.Sleep(Alarm.Common.Alarm_Constants.ALARM_DELAY_TIME);  
           }  
         }  
    

    Main Methods
          /// <summary>  
         /// Loops thru each alarm zone  
         /// </summary>  
         static void MonitorZones()  
         {  
           for (int i = 0; i < Zones.Length; i++)  
           {  
             int vInput = Zones[i].Read();  
             float volts = ((float)vInput / 1024.0f) * 3.3f;  
             string strZoneDescription = "N/A"; //If zone description is not found on SD Card N/A is default description.  
             Console.DEBUG_ACTIVITY("Zone " + (i + 1).ToString() + ": Volts: " + volts);  
             //format:                //Zone number, voltage  
             Pachube.PachubeLibrary.statusToPachube = i == 0 ? (i + 1).ToString() + "," + volts : (i + 1).ToString() + "," + volts + "\r\n" + Pachube.PachubeLibrary.statusToPachube;  
             AlarmLeds[i].Write(volts >= 3);  
             //elapsed seconds  
             double eSeconds = stopwatchZones[i].ElapsedSeconds;  
             //elapsed minutes  
             double eMinutes = stopwatchZones[i].ElapsedMinutes;  
             Console.DEBUG_ACTIVITY("stopwatch[" + i.ToString() + "] = " + eSeconds.ToString() + " seconds");  
             Console.DEBUG_ACTIVITY("stopwatch[" + i.ToString() + "] = " + eMinutes.ToString() + " minutes\n");  
             if (volts >= 3 )  
             {  
               /*  
                Case #1:  
                 !detectedZones[i] = not triggered before. This is the first time in this cycle and first email to send.  
                Case #2:  
                 detectedZones[i] && eMinutes >= EMAIL_FREQUENCY = triggered before and time is up for sending another email.             
                */  
               if (!detectedZones[i] || (detectedZones[i] && eMinutes >= Alarm.ConfigDefault.Data.EMAIL_FREQUENCY))  
               {  
                 if (Alarm.Common.Alarm_Info.zoneDescription.Count>0)  
                 {  
                   if (Alarm.Common.Alarm_Info.zoneDescription.Contains("Zone" + (i + 1).ToString()))  
                   {  
                     strZoneDescription = (string)Alarm.Common.Alarm_Info.zoneDescription["Zone" + (i + 1).ToString()];  
                   }  
                 }  
                 string info = "Zone " + (i + 1).ToString() + " " + strZoneDescription;  
                 stopwatchZones[i] = Stopwatch.StartNew();  
                 detectedZones[i] = true;  
                 email.SendEmail("Alarm Trigger!", info);  
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("<tr>");
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("<td><center>" + DateTime.Now.ToString() + "</center></td> ");
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("<td><center> Zone " + (i + 1).ToString() + "</center></td>");
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("<td><center>" + strZoneDescription + "</center></td>");
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("</tr>");             if (Alarm.ConfigDefault.Data.USE_PACHUBE)  
                 {  
                   //supress timer and update Pachube with new status  
                   Pachube.PachubeLibrary.forceUpdate = true;  
                 }  
                 if (SdCardEventLogger.IsSDCardAvailable() && Alarm.ConfigDefault.Data.STORE_LOG)  
                 {  
                   SdCardEventLogger.saveFile(DateTime.Now.ToString("d_MMM_yyyy--HH_mm_ss") + ".log", info, "Log");  
                 }  
               }  
             }  
             else  
             {  
               detectedZones[i] = false;  
             }  
           }  
         }  
         /// <summary>  
         /// Loops thru each sensor  
         /// </summary>  
         static void MonitorSensors()  
         {    
           for (int i = 0; i < Sensors.Length; i++)  
           {  
             int vInput = Sensors[i].Read();  
             float volts = ((float)vInput / 1024.0f) * 3.3f;  
             string strSensorDescription = "N/A"; //If sensor description is not found on SD Card N/A is default description.  
             Console.DEBUG_ACTIVITY("Sensor " + (i + 1).ToString() + ": Volts: " + volts);  
             MotionLeds[i].Write(volts >= 3);  
             double eSeconds = stopwatchSensors[i].ElapsedSeconds;  
             double eMinutes = stopwatchSensors[i].ElapsedMinutes;  
             Console.DEBUG_ACTIVITY("stopwatch[" + i.ToString() + "] = " + eSeconds.ToString() + " seconds");  
             Console.DEBUG_ACTIVITY("stopwatch[" + i.ToString() + "] = " + eMinutes.ToString() + " minutes\n");  
             if (volts >= 3)  
             {  
               /*  
                Case #1:  
                 !detectedZones[i] = not triggered before. This is the first time in this cycle and first email to send.  
                Case #2:  
                 detectedZones[i] && eMinutes >= EMAIL_FREQUENCY = triggered before and time is up for sending another email.             
                */  
               if (!detectedSensors[i] || (detectedSensors[i] && eMinutes >= Alarm.ConfigDefault.Data.EMAIL_FREQUENCY))  
               {  
                 if (Alarm.Common.Alarm_Info.sensorDescription.Count > 0)  
                 {  
                   if (Alarm.Common.Alarm_Info.sensorDescription.Contains("Sensor" + (i + 1).ToString()))  
                   {  
                     strSensorDescription = (string)Alarm.Common.Alarm_Info.sensorDescription["Sensor" + (i + 1).ToString()];  
                   }  
                 }  
                 string info = "Sensor " + (i + 1).ToString() + " " + strSensorDescription;  
                 stopwatchSensors[i] = Stopwatch.StartNew();  
                 detectedSensors[i] = true;  
                 email.SendEmail("Alarm Trigger!", info);  
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("<tr>");
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("<td><center>" + DateTime.Now.ToString() + "</center></td> ");
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("<td><center> Sensor " + (i + 1).ToString() + "</center></td>");
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("<td><center>" + strSensorDescription + "</center></td>");
                 Alarm.Common.Alarm_Info.sbActivity.AppendLine("</tr>");  
                 if (Alarm.ConfigDefault.Data.USE_PACHUBE)  
                 {  
                   //supress timer and update Pachube with new status  
                   Pachube.PachubeLibrary.forceUpdate = true;  
                 }  
                 if (SdCardEventLogger.IsSDCardAvailable() && Alarm.ConfigDefault.Data.STORE_LOG)  
                 {  
                   SdCardEventLogger.saveFile(DateTime.Now.ToString("d_MMM_yyyy--HH_mm_ss") + ".log", info, "Log");  
                 }  
               }  
             }  
             else  
             {  
               detectedSensors[i] = false;  
             }  
           }  
         }  
         /// <summary>  
         /// Synchronize Netduino time with NTP Server  
         /// </summary>  
         public static void SetTime()  
         {  
           //based on a post from user "Valkyrie-MT" at http://forums.netduino.com/index.php?/topic/475-still-learning-internet-way-to-grab-date-and-time-on-startup/  
           Extension.SetFromNetwork(DateTime.Now, new TimeSpan(-5, 0, 0));  
         }  
         /// <summary>  
         /// Initializes stopwatch and alarms/sensors arrays  
         /// </summary>  
         private static void InitArrays()  
         {  
           for (int i = 0; i < Alarm.User_Definitions.Constants.ACTIVE_ZONES; i++)  
           {  
             stopwatchZones[i] = Stopwatch.StartNew();  
             detectedZones[i] = false;  
           }  
           for (int i = 0; i < Alarm.User_Definitions.Constants.MOTION_SENSORS; i++)  
           {  
             stopwatchSensors[i] = Stopwatch.StartNew();  
             detectedSensors[i] = false;  
           }  
         }  
    

    Cosm, formerly Pachube, Alarm Console

    Final Product
    LCD and WiFi Internet Adapter
    Alarm Panel with Netduino Plus, LCD and WiFi Internet Adapter

    Comments from Netduino Community
    http://forums.netduino.com/index.php?/topic/4202-home-alarm-system-using-netduino-plus-homealarmplus-project/

    Base Code Repository
    https://github.com/ferraripr/HomeAlarmPlus

    Video

    YouTube video

    40 comments:

    1. A simple security system can go a long way toward preventing burglaries. Security light systems are a common deterrent,
      but be sure they cover the breadth of your property to ensure maximum effectiveness.
      Motion activated sensors are a cheap and effective way to brighten areas and reduce cover.

      ReplyDelete
    2. Thank you for your interest and commenting about this project. I have a long way to go with this project. As of December 18, 2012 software version is 25 and circuit revision is A (revision B is coming soon). Also, I agree with you, at this moment I am experimenting with PIR motion sensor and redundant security using other micro-controller. Cameras are also in the near future.

      ReplyDelete
    3. Hi, really interesting project. I plan to install it on my new house and implement new features as well. Is the github aligned with your changes?do you plan some sharing of code for contribution?
      Cheers

      Manuel

      ReplyDelete
      Replies
      1. Hi Manuel. Feel free to modify and contribute to the code in github. I need to add the CSS files used for the Web server. The system its been stable for almost a year now with 24 hour monitoring. The only change I did was the WiFi Internet Adapter, which currently is the IOGEAR GWU627. It is more compact in size than Netgear WNCE3001. I will be updating this page for your benefit.

        Delete
      2. Manuel, I have updated github with the files you need to add to the SD Card. Keep in mind that the software is solid using .NET Framework 4.2 QFE1. I am right now testing QFE2.

        Delete
    4. Do you have diagrams which show how connections to the control panel and sensors? Any pointers to details on how sensors and panels work?

      ReplyDelete
      Replies
      1. Greg, Thank you for your interest. I will be adding more details to this project.

        Delete
    5. Thanks a lot to inform us about ACS.Business Home Alarm Systems.
      Home Alarm Systems

      ReplyDelete
    6. This is an informative post review. I am so pleased to get this post article. I was looking forward to get such a post which is very helpful to us. A big thank for posting this article in this website. Keep it up.
      Alarm Monitoring

      ReplyDelete
      Replies
      1. Thank you Sabiha. More modifications are coming up. I am currently testing with notification service, ATtiny85 for multi-threading and code optimization. The reason for this changes is to free up RAM and code storage.

        Delete
    7. Therefore glad I found your website searching for shoes.
      This is great information at any given time when the internet is full
      of falsehoods. Keep up the task in "Link to another good article from Allen Wright" and that i can
      come back often.

      ea3ltd.com

      ReplyDelete
    8. How goes the testing? Have you stress-tested the system yet? How does it fare in terms of false positives and false negatives?

      Good read! The step-by-step procedure helps so that I don’t overshoot the settings. Might try this when I have the time to tinker with the security system. :)

      Odessa Hanton

      ReplyDelete
      Replies
      1. Thank you Odessa Hanton, from the circuit stand point it seems that the 4.7kohm resistors (recommended by the manufacturer) and diodes minimized a lot of problems found at the beginning. False positive/negative : A task on agenda is adding an RF receiver like http://www.adafruit.com/products/1097 and modify webserver to arm or disarm. I sort of mentioned what I am working right now actually :) .

        Delete
    9. I just bought a house with this same security system that I was looking to integrate with a Netduino. The circuit diagrams are helpful, but how did you connect it to your existing PC5010, or did you just use the sensor loops? Did your setup also integrate with fire alarms?

      ReplyDelete
      Replies
      1. CD Waddell, you are right. For now I am just using the sensors and experimenting with the alarm speaker (SD 15W-ULF) which came with my home. That speaker can be activated with 5V easily. The system just send notification of events and function as a webserver. I did not integrated the fire alarm with the netduino plus. You can do this project just remember to connect for example your Zone 1 (GREEN and RED) in analog input and Zone 1 common (YELLOW and BLACK) in ground. Please share your results or let me know if you have more questions.

        Delete
    10. Alarm System Report brings forth well researched alarm system reviews, which offer reliable information about various alarm systems. Best alarm systems can be chosen conveniently.

      ReplyDelete
    11. Nice job! Indeed, having an alarm system is pretty handy. However, some alarm systems only make an annoying sound that can scare the burglar away. However, that doesn’t mean it’s pretty effective, right? For me, one alarm system must have the capability to alarm police department. Also, having surveillance cameras with motion sensors installed on every angle of the home’s surroundings can be more appropriate. It will alarm you immediately and give you the chance to figure out what to do.

      ReplyDelete
    12. This is so informative! However, the problem is I don’t have the guts to try it out. I might mess things up for I have strong ESD in my body. Nevertheless, I’m absolutely sure that your project is very useful.

      ReplyDelete
      Replies
      1. Alexander, ESD mat and wrist straps solves this problem. I do too have this problem and bought an anti-static kit. Anyways, you can do this project. I will be updating code and posting a video this week after several weeks of testing. Feel free to ask.

        Delete
      2. Alezander, here is the video as promised: http://youtu.be/8BVISWQhfTw

        Delete
    13. I have read above given information that as very informative for security system.I have bought this type curcuit board for more security.thank for sharing this effective information for me.

      alarm home monitoring

      ReplyDelete
    14. Τα άρθρο σας για curcuit είναι πολύ ενδιαφέρων σας ευχαριστούμε πολύ για της πληροφορίες.
      συναγερμοι

      ReplyDelete
    15. It's very interesting presentation of the system is very good congratulations your job.http://www.kameres.com/

      ReplyDelete
    16. Great project!

      I've created a similar alarm system based on Arduino.

      More info here :
      http://dev.kprod.net/?q=aalarm-v2-intrusion-detection-using-arduino-alarm-with-django-and-perl-en

      ReplyDelete
    17. It is another unique home alarm system that I've ever seen. The creation of this gadget is quite complicated though.

      ReplyDelete
    18. Nowadays, lot of DIY tutorial about on how to create a home-made home security system are now can be found over internet.

      ReplyDelete
    19. Good Job! I enjoyed enough reading your latest article to read it again and again! It was so helpful. Waiting for your next entry.

      Alarm Systems Melbourne

      ReplyDelete
    20. hey, i am doing motion sensor as my school project and have some queries for the work. i wonder if you could help me as i was desperate looking for a solution.

      This is the storyline for my project.
      I want to create a motion sensor for security purpose for the house. it separated day and night. and when it is in the morning nothing will happen and when it is at night the buzzer sensor will be at work. When, if somebody stand at the house door for too long, music will sound off and alert the owner of the house.

      Could you help me with this please? thank you

      ReplyDelete
    21. Security contractor installs and helps monitor home security systems and commercial security systems with monitoring starting at just $14.95 Protection Concepts, Atlanta security contractor Atlanta Security provider.

      Marietta commercial security

      ReplyDelete
    22. EPG Security Group provides security services and protection to executives, high-profile individuals, and organizations from businesses to places of worship to the hospitality industry.
      Saint Paul Personal Security

      ReplyDelete
    23. Protection Concepts provide you with customized solutions designed for your specific needs, monitor home security systems and commercial security systems,requirements and budget AND remember, our base monitoring starting at just $14.95 per month .
      Commercial Security

      ReplyDelete
    24. EPG Security Group provides clients with exceptional security services that enable them to relax with confidence, knowing their security and the safety of their customers, guests, family, and employees are in trustworthy, experienced hands.
      Minnesota Protective Agency

      ReplyDelete
    25. Protection Concepts is 100% committed to the protection of what matters most while maintaining the highest level of customer service and integrity in the industry. And also offer the most innovative technology available today and specialize in both residential and commercial security systems, installation and monitoring, with monitoring starting at just $14.95 per month!

      No phone line security system

      ReplyDelete
    26. Lloyd Security installs, services, and monitors both residential and commercial security systems in the Twin Cities. Unlike some other “alarm companies”, we don’t just sell security, we specialize in it.
      Lloyd Security Commercial security systems, No phone line security system, Minnetonka home security, Minneapolis Security provider Minneapolis Home Security Systems
      Our security consultants will work with you to custom-design the right security solution to fit your individual lifestyle.

      ReplyDelete
    27. Lloyd Security has the solution to keep your system active without the need of a phone line Minnesota commercial security Our cellular connection module takes the place of a phone line, whether you have one or not. It can also act as a backup to your existing phone line, recommended when using a digital line.
      Minnesota contracted surveillance

      ReplyDelete
    28. Lloyd Security is the tops! A local company that really has treated me and my family with the utmost respect, from the quick installation to the reasonable pricing, we really feel safer with Lloyd on our side. We're customers for life!
      Paul Alarm systems

      ReplyDelete
    29. Minneapolis-based security contractor Lloyd Security works with security systems of your choosing including Residential and Commercial Security.
      Minnetonka home security

      ReplyDelete
    30. Minneapolis-based security contractor Lloyd Security works with security systems of your choosing including Residential and Commercial Security.
      Minnetonka home security

      ReplyDelete
    31. Home security systems are simply a great value .Beyond the important peace of mind for you and your family, a home security system has many benefits to protect your home, your family and your possessions.
      Security systems Minnesota

      ReplyDelete