Project tutorial
Arduino Smoke Alarm Interface

Arduino Smoke Alarm Interface © GPL3+

Monitor one or more Smoke alarms from an Arduino with this shield design

  • 508 views
  • 0 comments
  • 2 respects

Components and supplies

Necessary tools and machines

09507 01
Soldering iron (generic)
4158215
Wire Stripper & Cutter, 18-10 AWG / 0.75-4mm² Capacity Wires
4550736
Plier, Long Nose
Pro dmm box 600  26129.1449785766.500.659
Digilent Mastech MS8217 Autorange Digital Multimeter
any multimeter, ideally with continuity beep
Ear Muffs
to protect you from the smoke alarm sound when testing!

About this project

This project allows one or more Smoke Alarms to be monitored by an Arduino. It involves creating a Shield PCB and modifying a smoke alarm to connect to the shield. Also included is a remote buzzer that is activated by a Smoke alarm or the Arduino.

Activated Smoke Alarm read by an Arduino

Features:

  • Monitor alarms from an Arduino Uno (e.g. it could send a text if the house isunoccupied)
  • Alert occupant to an alarm that’s triggered in a distant/room/garage/attic
  • Allow multiple smokealarms and buzzers to be connected together with a two core cable.
  • Activate a remote buzzer from the Arduino (it may be monitoring e.g. water tank level)

Here we describe how to:

  • Modify an escape-light type smoke alarm to interface to an Arduino
  • Create an Arduino Shield to interface to a Smoke Alarm
  • Create a buzzer that can be sounded from the Ardhino or a Smoke Alarm
  • Use an Arduino code example to monitor the alarms and sound the buzzer
  • Additional info and optional buzzer constuction here: tek4um.com/smokeAlarm

Section 1: - Add the modification to the Smoke Alarm.

The smoke alarm is modified by adding the components R9, Q1, R10 and a 2 pole JST connector shown in this diagram:

The other components shown, with the blue wiring, are an approximate diagram of the internal components of the Escape Light section of the smoke alarm.

Identify #1, #2 & #4 on the Kiddie i9080EU Smoke alarm as shown in this photo:

For this alarm the orange wire on the lLED was found to be connected to the +ve battery connector – marked (1) on photo. The other side of the LED then is (2). Using the multimeter, (4) is found to be ground (-ve on the battery).

If you have a different alarm type (it must have an escape light) then follow this procedure to find these connection points

1.1 - Only if you don't havetheKiddie i9080EU Smoke alarm:

If you have the Kiddie alarm proceed to 1.2

There are two 9 volt PP3 batteries in smoke alarms with an ‘Escape Light’ feature, here the connector is shown:

Find the connector that powers the Escape Light:

Disconnect one of the two batteries in the smoke alarm and press the smoke alarm’s test button. If the alarm sounds then that battery & connector is powering the smoke alarm and the other connector (the one we are looking for) powers the light. If the alarm doesn’t sound then swap connectors and try again. Make a note of with connector powers the escape light.

Remove both batteries and with proceed to check the lamp battery connector with a multimeter set to continuity beep.

Determine if the +ve (positive) terminal on the battery connector (red + in the Pic 3 below) is connected to one of the lamp connections. Use a multimeter set to continuity beep to find which lamp connector it is. Mark this connection as #1. Then other lamp connector is marked #2.

The other battery connector is ground (-ve) so mark it #4 as in the diagram. Note if you find that the +ve battery connecor is not connected to the escape light at all and instead it's the -ve battery connector then you will need a different modification - this is not described here so instead see the procedure here: http://tek4um.com/smokeAlarm/

1.2Solder on the wires & resistors for the BC237 PNP transistor.

Note the BC237 PNP transistor connections as in these photos:

1. Collector, red wire. series with R5 15Ω resistor

2. Base, yellow wire in series with R4 820Ω resistor

3. Emitter, red wire, no resistor.

Cover solder joints and resistors with heat shrink sleeving with a heat gun or the soldering iron.

1.3 Connect the transistor to the alarm

In the Alarm solder:

  • Collector C to the Lamp battery +9 volt, #1 on alarm.
  • Base B resistor to #2 -ve Lamp/LED
  • Emitter E resistor to red on the new JST output connector #3, Red wire
  • Output JST connector male black wire, #4, to the -ve of the battery (lamp battery)

Section 2: Construct Ardduino Uno Interface PCB

2.1 Arduino Interface Circuit Operation:

Arduino Pin D3 is set up in the code as an output. Pin D2 is an input. D3 is set to Low (not high) to sound the (optinal) buzzer. This causes current to flow through transistor Q1 base via R4 to ground. Q1 is now saturated on and its collector, connected to R5, goes high providing ~5 Volts at alarm connector #3. R5 provides some protection if there’s a short on the cable (not tested!).

The test push button is connected to input D5 and is used in the code to active the buzzer for testing purposes. D4 output is used to turn on the status LED, useful for testing.

2.2 Constructthe(optional) Buzzer Module

The Arduino can activate the Buzzer on pin 3 (see code)

Solder the components according to the buzzer module circuit diagram:

NOTE: these components are not listed in the hardware section as the buzzer module is optional. You will need the following PNP 800mA Transistor e.g. BC327, Resistors: 15Ω, 10kΩ, 82Ω, 820Ω, Zener Diode 5.1volt 500 mWatt BYZ885v1, Active Buzzer 5Volt, small project box - a cerial scoop is shown in the photos.

TheBuzzer module is fitted into a ‘easy scoop’ cereal cup, but anysimilar enclosure will do.

2.3 Wire up the System

Section 3 Monitoring the Alarm(s) from Arduino

3.1 The alarm status can now be read on an Arduino pin D2 as follows:

3.2 Asounding smoke alarm shows in the Arduino serial monitor:

Video of above:

Triggered alam shows on Arduino Console

Section 4 Sounding the Buzzer from the Arduino

4.1 CodetosoundBuzzer

The code snippets below sound the buzzer for TEST_TIME_DURATION if the Test Button is pressed. The test button is connected to pin SMOKE_ALARM_TEST_BUTTON (see code).

Serial Monitor Output with test button pressed:

Video of the above:

Interface Test Button display on Arduino Serial Monotor

4.2 Code could be added to monitor other events by connecting the Arduino to for example:

  • Freezer Temperature e.g. if freezer temperature is too high
  • Oil Tank level e.g. if below a certain leel
  • Water Tank Level e.g. if too low or overflowing
  • House Alarm system e.g. if triggered
  • Outside temperature e.g. if freezing outside

The connections can be to any free input ports, and code written to sound the buzzer. It could be beeped different times depending on the alarm that has occurred.

5.0 Resources

Code, PCB files, photos, circuit explainations: tek4um.com/smokeAlarm/

Code

Smoke Alarm Input OutputArduino
Monitor Modified Smoke Alarm and print on the serial monitor if it's triggered
Activate Smoke Alarm Remote Buzzer when the Shield Test button is pressed
Show status LED flashing when running or On when alarm sounding
/*
   Example Program to
        Monitor Modified Smoke Alarm
        Activate Smoke Alarm Remote Buzzer
        Show status LED when running or alarm sounding

    Hardware Schematic, PCB file and assembly Instructions for this code is here:
    http://Tek4um.com/smokeAlarm

    Release:
      10 May 2021 v1.0 Initial version



  © karl grabe Tek4um.com 2021 www.tek4um.com
  For personal use only.
*/

#define SMOKE_ALARM_INPUT_PIN 2    // connect to R3 (see circuit diagram)
#define BUZZER_OUTPUT_PIN 3   // connect to R4
#define SMOKE_ALARM_LED_STATUS 4   // on if Smoke Alarm input is active
#define SMOKE_ALARM_TEST_BUTTON 5  // for testing
#define HARDWARE_SERIAL_BAUD 115200
#define On true
#define Off false
#define TEST_TIME_DURATION 1000    // Time duration in ms to sound buzzer and status led for testing


void setup() {
  pinMode(SMOKE_ALARM_INPUT_PIN, INPUT);    // Connected to the modified Smoke Alarm
  pinMode(BUZZER_OUTPUT_PIN, OUTPUT);  // Connected to the Remote Buzzer, active LOW
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(SMOKE_ALARM_LED_STATUS, OUTPUT);         // active HIGH
  pinMode(SMOKE_ALARM_TEST_BUTTON, INPUT_PULLUP);  // active LOW

  Serial.begin(HARDWARE_SERIAL_BAUD);
  delay(500);
  Serial.println(F("Monitoring Smoke Alarm... "));

  // Test: Turn on the remote buzzer & Status LED briefly on startup
  setBuzzer (On);
  setStatusLED(On);

  delay(TEST_TIME_DURATION);
  
  setBuzzer (Off);
  setStatusLED(Off);;
  delay (100);                     // Allow C1 capacitor to discharge, otherwise a false alarm on startup
}

void loop() {
  boolean testButtonState = !digitalRead(SMOKE_ALARM_TEST_BUTTON);  // read the test button, active LOW so invert it
  if (testButtonState) {  // if test button presses sound buzzer and LED on the PCB
    setStatusLED(On);     // turn on LED
    setBuzzer (On);       // turn on transistor Q1 to sound buzzer via cable
    delay (TEST_TIME_DURATION);
    setStatusLED(Off);    
    setBuzzer (Off); 
  }

  // Check if the smoke alarm is triggered, print it's state to serial monitor
  boolean smokeAlarmState = digitalRead(SMOKE_ALARM_INPUT_PIN);  // true: alarm is on so it's triggered (e.g. Fire!!)
 
 if (smokeAlarmState) { 
  String AlarmStateText = smokeAlarmState ? "On" : "Off";    // get text of smoke alarm state, true: On, false: Off
  Serial.print(F("A Smoke Alarm is: "));
  if (testButtonState)
    Serial.print (F("(test button)"));                      // test button is pressed
  Serial.println(AlarmStateText);
  setStatusLED(smokeAlarmState); // status led is on when smoke alarm is on
  delay (500);
  return;
}

// *** to do: add background timer to flash LED
  delay(100);         // delay before repeating messages
  flashStatusLED ();  // show program is running
  delay (100);
}



void setBuzzer (boolean state){            // pass true to sound buzzer
  digitalWrite(BUZZER_OUTPUT_PIN, !state); // active low
}

void setStatusLED(boolean state) {        // pass true to turn on LED
  digitalWrite(SMOKE_ALARM_LED_STATUS, state);  
}

void flashStatusLED(){                    // flip the status led
    digitalWrite(SMOKE_ALARM_LED_STATUS, !digitalRead(SMOKE_ALARM_LED_STATUS));
}

Schematics

Alarm Arduino Shield IO Interface v7
A PCB Shield and circuit to interface a modified smoke alarm to an Arduino Uno
alarm_arduino_shield_io_interface_v7_eq0RVHhPSx.fzz
Alarm Arduino Shield Interface Circuit Diagram
Alarm arduino shield io interface v7 schem ak7tewgpvb

Comments

Similar projects you might like

DIY Temperature & Humidity & Smoke Detector Alarm System

Project tutorial by ICStation Team

  • 15,947 views
  • 0 comments
  • 13 respects

Fire and Smoke Alarm

Project showcase by ayanfeoluwaadekanye1

  • 6,729 views
  • 10 comments
  • 8 respects

How to make gas leak alert security alarm using arduino

Project tutorial by Shashwat Raj

  • 6,407 views
  • 3 comments
  • 8 respects

Wireless Water-Tank Level Meter with Alarm

Project showcase by Manusha_Ramanayake

  • 14,549 views
  • 16 comments
  • 35 respects

Thirst Alert Plant Alarm

Project tutorial by Patchr

  • 8,747 views
  • 5 comments
  • 44 respects

Smoke Detection using MQ-2 Gas Sensor

by Aritro Mukherjee

  • 442,684 views
  • 90 comments
  • 261 respects
Add projectSign up / Login