Giando
Published

Home-made Nest Protect with Linino

Prevent fires with a connected smoke alarm

Full instructions provided2,106
Home-made Nest Protect with Linino

Things used in this project

Hardware components

Arduino Yun
Arduino Yun
×1
Smoke sensor
×1
Light sensor
×1
Stepper motor
×1
Relay (generic)
×1
Hydraulic pump or hydraulic electrovalve
×1

Story

Read more

Code

code.txt

JavaScript
var linino = require('ideino-linino-lib'),
    board = new linino.Board(),
    html = new linino.Htmlboard();
var static = require('node-static');
var file = new static.Server('./');

var myVar,
    myVar2,
    ctrl = true,
    ctrl2 = true;

function servoMove() {
    return setInterval(function() {
        if (ctrl) {
            board.servoWrite('S9', 50);
            ctrl = false;
        } else {
            board.servoWrite('S9', 180);
            ctrl = true;
        }
    }, 1000);
}

function ledblink() {
    return setInterval(function() {
        if (ctrl2) {
            board.digitalWrite('D13', board.HIGH);
            ctrl2 = false;
        } else {
            board.digitalWrite('D13', board.LOW);
            ctrl2 = true;
        }
    }, 1000);
}

function sensorlight() {
    var data = board.analogRead('A0');
    if (data < 200) {
        if (typeof(myVar2) == 'undefined')
            myVar2 = ledblink();
    } else {
        board.digitalWrite('D13', board.LOW);
        clearInterval(myVar2);
        myVar2 = undefined;
    }
}

board.connect(function() {

    require('http').createServer(function(request, response) {
        request.addListener('end', function() {

            file.serve(request, response);
        }).resume();
    }).listen(1337);

    board.pinMode('D11', board.MODES.OUTPUT);
    board.pinMode('D12', board.MODES.OUTPUT);
    board.pinMode('D13', board.MODES.OUTPUT);
    board.pinMode('S9', board.MODES.SERVO);

    board.analogRead('A1', function(data) { //get data from SmokeSensor
        console.log('Smoke: ' + data);
        html.write('prog', 'value', data);
        html.write('num', 'value', data);

        if (data > 500 && data <= 800) { //enable LEDblink and ServoMove
            sensorlight();
            if (typeof(myVar) == 'undefined')
                myVar = servoMove();
        } else if (data > 800) { //enable LEDblink, ServoMove and fire hydrant
            sensorlight();
            if (typeof(myVar) == 'undefined')
                myVar = servoMove();
            board.digitalWrite('D11', board.HIGH);
            board.digitalWrite('D12', board.HIGH);
        } else {
            board.digitalWrite('D11', board.LOW);
            board.digitalWrite('D12', board.LOW);
            board.digitalWrite('D13', board.LOW);
            clearInterval(myVar2);
            myVar2 = undefined;
            clearInterval(myVar);
            myVar = undefined;
        }
    });

});

code.txt

HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

    <head>
        <meta http-equiv="content-type" content="text/html; charset=windows-1250">
        <script src="http://linino.local:2424/js/linino/socket.io.js"></script>
        <script src="http://linino.local:2424/js/linino/ideino-linino-lib-client.js"></script>

        <style>...</style>
    </head>

    <body>
        <script>
            window.onload = connect('linino.local');
        </script>
        <p align="center">
            <input type="label" id="num" class="label2" value="">
            <progress id="prog" class="label" value="" max="1000"></progress>
        </p>

    </body>

</html>

Credits

Giando

Giando

15 projects • 16 followers

Comments