PI de framboesa – Implementação de um sistema de automação residencial acessível [Parte III]

Depois de vários meses, decidi voltar para Este projeto com o que tenho a intenção de criar um sistema de automação residencial grátis, e economicamente acessíveis; Este baixo consumo baseados em microcomputador, Mas Cruz-plataforma e Portable para qualquer dispositivo com sistema operacional GNU/Linux disponível a partir do Porto GPIO.Em posts anteriores Aprendemos a controlar módulos de relés optoacoplados com Framboesa PI por Brito, PHP, e Python; nesta ocasião Eu otimizaram o sistema de automação, e aliás já migrei para PI de framboesa 3 para alienar conectividade sem fio, Mas se você quiser que você pode usar qualquer modelo anterior.

O ferragem Consiste de dois módulos de 8 relés cada, que compõem um total de Dezesseis saídas para controle aparelhos, Gruas elétricas, iluminação; e um sem fim de dispositivos de que ele convertido para este pequeno PI de framboesa 3, em tudo o que você precisa para casa de domótica escritório de u convencional.

Esquema de automação do edifício

Disjuntor interruptor diagrama domótica DIY.

O painel de controle é programado em PHP, e é uma otimização do código de a versão anterior Mas se destina a gerir o GPIO diretamente através de Brito que acelera consideravelmente o processo de; uma obrigação, Já que vamos servir isto através da página Wi-Fi.

FremooticsPI

O painel de controle de web de sistema de automação.

O fato de sem arquivos adicionais para gerenciar as saídas do Porto GPIO de Framboesa por Python; Converte este simples página da Web, um único arquivo, no verdadeiro ponto de partida do que se tornou um dia em um sistema de automação residencial completo que desenvolverá juntos.

<html>
<head>
<title>Panel de control - Sistema domotico libre</title>
</head>

<body>
<div align="center">
<br></br>

 <!--GPIO4/IN1-->
 <form action="" method="post">
 Interruptor 01 &nbsp;<input type="submit" name="encender4" value="Encender">
 <input type="submit" name="apagar4" value="Apagar">

 <!--GPIO17/IN2-->
 <form action="" method="post">
 &nbsp; Interruptor 02 &nbsp;<input type="submit" name="encender17" value="Encender">
 <input type="submit" name="apagar17" value="Apagar">

<br></br>

 <!--GPIO27/IN3-->
 <form action="" method="post">
 Interruptor 03 &nbsp;<input type="submit" name="encender27" value="Encender">
 <input type="submit" name="apagar27" value="Apagar">

 <!--GPIO22/IN4-->
 <form action="" method="post">
 &nbsp; Interruptor 04 &nbsp;<input type="submit" name="encender22" value="Encender">
 <input type="submit" name="apagar22" value="Apagar">

<br></br>

 <!--GPIO18/IN5-->
 <form action="" method="post">
 Interruptor 05 &nbsp;<input type="submit" name="encender18" value="Encender">
 <input type="submit" name="apagar18" value="Apagar">

 <!--GPIO23/IN6-->
 <form action="" method="post">
 &nbsp; Interruptor 06 &nbsp;<input type="submit" name="encender23" value="Encender">
 <input type="submit" name="apagar23" value="Apagar">

<br></br>

 <!--GPIO24/IN7-->
 <form action="" method="post">
 Interruptor 07 &nbsp;<input type="submit" name="encender24" value="Encender">
 <input type="submit" name="apagar24" value="Apagar">

 <!--GPIO25/IN8-->
 <form action="" method="post">
 &nbsp; Interruptor 08 &nbsp;<input type="submit" name="encender25" value="Encender">
 <input type="submit" name="apagar25" value="Apagar">

<br></br>

 <!--GPIO5/IN1-->
 <form action="" method="post">
 Interruptor 09 &nbsp;<input type="submit" name="encender5" value="Encender">
 <input type="submit" name="apagar5" value="Apagar">

 <!--GPIO6/IN2-->
 <form action="" method="post">
 &nbsp; Interruptor 10 &nbsp;<input type="submit" name="encender6" value="Encender">
 <input type="submit" name="apagar6" value="Apagar">

<br></br>

 <!--GPIO13/IN3-->
 <form action="" method="post">
 Interruptor 11&nbsp;<input type="submit" name="encender13" value="Encender">
 <input type="submit" name="apagar13" value="Apagar">

 <!--GPIO12/IN4-->
 <form action="" method="post">
 &nbsp; Interruptor 12 &nbsp;<input type="submit" name="encender12" value="Encender">
 <input type="submit" name="apagar12" value="Apagar">

<br></br>

 <!--GPIO19/IN5-->
 <form action="" method="post">
 Interruptor 13 &nbsp;<input type="submit" name="encender19" value="Encender">
 <input type="submit" name="apagar19" value="Apagar">

 <!--GPIO16/IN6-->
 <form action="" method="post">
 &nbsp; Interruptor 14 &nbsp;<input type="submit" name="encender16" value="Encender">
 <input type="submit" name="apagar16" value="Apagar">

<br></br>

 <!--GPIO20/IN7-->
 <form action="" method="post">
 Interruptor 15 &nbsp;<input type="submit" name="encender20" value="Encender">
 <input type="submit" name="apagar20" value="Apagar">

 <!--GPIO21/IN8-->
 <form action="" method="post">
 &nbsp; Interruptor 16 &nbsp;<input type="submit" name="encender21" value="Encender">
 <input type="submit" name="apagar21" value="Apagar">

</div>
</body>
</html>

<?php

// Funciones PHP del pin GPIO 4

 if ($_POST[encender4]) {
 $a- exec("echo 4 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio4/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio4/value");
 echo $a;
 }

 if ($_POST[apagar4]) {
 $a- exec("echo 0 > /sys/class/gpio/gpio4/value");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 4

// Funciones PHP del pin GPIO 17

 if ($_POST[encender17]) {
 $a- exec("echo 17 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio17/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio17/value");
 echo $a;
 }

 if ($_POST[apagar17]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio17/value");
 $a- exec("echo 17 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 17

// Funciones PHP del pin GPIO 27

 if ($_POST[encender27]) {
 $a- exec("echo 27 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio27/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio27/value");
 echo $a;
 }

 if ($_POST[apagar27]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio27/value");
 $a- exec("echo 27 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 27

// Funciones PHP del pin GPIO 22

 if ($_POST[encender22]) {
 $a- exec("echo 22 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio22/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio22/value");
 echo $a;
 }

 if ($_POST[apagar22]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio22/value");
 $a- exec("echo 22 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 22

// Funciones PHP del pin GPIO 18

 if ($_POST[encender18]) {
 $a- exec("echo 18 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio18/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio18/value");
 echo $a;
 }

 if ($_POST[apagar18]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio18/value");
 $a- exec("echo 18 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 18

// Funciones PHP del pin GPIO 23

 if ($_POST[encender23]) {
 $a- exec("echo 23 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio23/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio23/value");
 echo $a;
 }

 if ($_POST[apagar23]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio23/value");
 $a- exec("echo 23 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 23

// Funciones PHP del pin GPIO 24

 if ($_POST[encender24]) {
 $a- exec("echo 24 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio24/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio24/value");
 echo $a;
 }

 if ($_POST[apagar24]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio24/value");
 $a- exec("echo 24 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 24

// Funciones PHP del pin GPIO 25

 if ($_POST[encender25]) {
 $a- exec("echo 25 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio25/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio25/value");
 echo $a;
 }

 if ($_POST[apagar25]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio25/value");
 $a- exec("echo 25 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 25

// Funciones PHP del pin GPIO 5

 if ($_POST[encender5]) {
 $a- exec("echo 5 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio5/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio5/value");
 echo $a;
 }

 if ($_POST[apagar5]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio5/value");
 $a- exec("echo 5 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 5

// Funciones PHP del pin GPIO 6

 if ($_POST[encender6]) {
 $a- exec("echo 6 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio6/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio6/value");
 echo $a;
 }

 if ($_POST[apagar6]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio6/value");
 $a- exec("echo 6 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 6

// Funciones PHP del pin GPIO 13

 if ($_POST[encender13]) {
 $a- exec("echo 13 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio13/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio13/value");
 echo $a;
 }

 if ($_POST[apagar13]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio13/value");
 $a- exec("echo 13 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 13

// Funciones PHP del pin GPIO 12

 if ($_POST[encender12]) {
 $a- exec("echo 12 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio12/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio12/value");
 echo $a;
 }

 if ($_POST[apagar12]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio12/value");
 $a- exec("echo 12 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 12

// Funciones PHP del pin GPIO 19

 if ($_POST[encender19]) {
 $a- exec("echo 19 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio19/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio19/value");
 echo $a;
 }

 if ($_POST[apagar19]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio19/value");
 $a- exec("echo 19 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 19

// Funciones PHP del pin GPIO 16

 if ($_POST[encender16]) {
 $a- exec("echo 16 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio16/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio16/value");
 echo $a;
 }

 if ($_POST[apagar16]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio16/value");
 $a- exec("echo 16 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 16

// Funciones PHP del pin GPIO 20

 if ($_POST[encender20]) {
 $a- exec("echo 20 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio20/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio20/value");
 echo $a;
 }

 if ($_POST[apagar20]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio20/value");
 $a- exec("echo 20 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 20

// Funciones PHP del pin GPIO 21

 if ($_POST[encender21]) {
 $a- exec("echo 21 > /sys/class/gpio/export");
 $a- exec("echo out > /sys/class/gpio/gpio21/direction");
 $a- exec("echo 1 > /sys/class/gpio/gpio21/value");
 echo $a;
 }

 if ($_POST[apagar21]) {
 $a- exec("sudo echo 0 > /sys/class/gpio/gpio21/value");
 $a- exec("echo 21 > /sys/class/gpio/unexport");
 echo $a;
 }

// Fin de las funciónes del pin GPIO 21

?>

Para executar as conexões entre o relé e framboesa, Você deve ir ao pé da letra as tabelas a seguir com base no esquema GPIO BCM; Porque senão você vai ter que modificar as linhas no arquivo. PHP, e substituir o código os números de PIN empregados.

Modelo de PI framboesa B + / 2/3 Módulo de relé 1
+ 5V + 5V
GPIO 4
EM 1
GPIO 17
EM 2
GPIO 27 EM 3
GPIO 22
EM 4
GPIO 18 EM 15
GPIO 23
IN1 6
GPIO 24
IN1 7
GPIO 25
IN1 8
GND GND
Modelo de PI framboesa B + / 2/3 Módulo de relé 2
+ 5V + 5V
GPIO 5
EM 1
GPIO 6
EM 2
GPIO 13
EM 3
GPIO 12
EM 4
GPIO 19
IN1 5
GPIO 16
IN1 6
GPIO 20
IN1 7
GPIO 21
IN1 8
GND GND

Uma vez conectado a todos os pinos de Framboesa ao respectivo VCC, GND, e factores de produção do Relé; resta- Copie o arquivo PHP para o Framboesa PI, para que serve SCP Isso nos permitirá a fazê-lo remotamente.

usuario@maquina:~ $ scp index.php pi@192.168.1.*:/home/pi/
usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo mv /home/pi/index.php /var/www/html/

Também remotamente Vamos passar o arquivo para o diretório do servidor web, e vamos atribuir como pelos proprietários SSH para o usuário e grupo www-data; vou adicioná-lo para o Grupo gpio, e então Podemos reiniciar para aplicar as alterações.

usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo chown www-data:www-data /var/www/html/index.php
usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo usermod -a -G gpio www-data
usuario@maquina:~ $ ssh pi@192.168.1.* -C sudo reboot

Enfim Alimentamos com relé 230V como vimos no artigos anteriores fazendo um ponte entre a entrada e os outros pólos positivo, para usar um único Plug, ou switch disjuntor miniatura; Mas se queremos conectar Dispositivos de dezesseis é de alto consumo recomendado o uso de dois, ou mais plugues.

relespuenteados

Esquema da ponte entre os pólos positivo do módulo relé.

Os restantes condutores, que correspondem a pólo negativo e para o leva de Terra, Que irá se conectá-los diretamente para o dispositivo Quero controle através da Módulo de relé, no meu caso um Plug domótica DIY; Devemos também ter em mente que para segurança o relé deve ter 1A saída, Portanto, para 16 saídas vão precisar de um relé de 16Para.

Plug de diagrama de relé

Diagrama plug domótica DIY.

No seguinte vídeo Você pode ver o desempenho do presente Sistema de dezesseis saídas verificando os, através de uma demonstração com uma lâmpada de baixa energia; Se você gosta não esqueça Siga-me no YouTube para não perder o vídeos inéditos Vou publicar.

Se você gosta você pode me seguir no Twitter, Facebook, Google +, LinkedIn, Feedly, ou compartilhá-lo com os botões sob esta publicação, Se você tiver dúvidas ou sugestões não hesite em comentar.

Ajude-na alcançar mais leitores Share on LinkedInShare on FacebookTweet about this on TwitterShare on Google+Email this to someone

15 reflexões sobre"PI de framboesa – Implementação de um sistema de automação residencial acessível [Parte III]

  1. Peatonet uma dúvida, Eu copiei o código tal que e obras todos corretamente, uma exceção que van aqueles botões de marcha atrás, Ligue fechada para baixo e vice-versa.

    Obrigado por tudo de um brilhante blog.

    • Olá XuFLeS, Obrigado pelo seu comentário.

      Provavelmente tem a ver com o relé para ligações de rede; Seria útil para verificar se você se conectou na normalmente aberto (NÃO) em vez de normalmente fechado (NC).

      Te vejo depois.

      • Estou testando antes de ligar os contatos para 230 V e o led do relé vermelho é transformado em diante quando desliga o pulso. Eu ter algo modificado o código para investir- e está bem, Mas eu tinha surgiram dúvidas a verdade. Obrigado x sua resposta.

  2. Boa contribuição. Estou precisando de algo semelhante a um controle de irrigação, mas com uma condição: Se uma das n saídas está em 1 em seguida, GPIOx será em 1. Osso GPIO = 0, se apenas se todas saídas = 0. Qualquer idéia?? Onde saídas são válvulas solenoide e bomba de GPIOx. Desde já muito obrigado.

  3. Olá, Estou interessado neste porque eu gostaria de controlar algumas luzes externa de celular.
    Seria a primeira vez que você tentou algo com a framboesa.
    Mas a dúvida surge-me ao chamar este post “parte três”.
    Código PHP com apenas isso como falta não usaria nada de partes um e dois?
    Eu entendo que esse código seria index. php, onde colocado íria?
    Muito obrigado!

    • Oi, Paul.,

      Apenas com este código PHP pode implementar a versão mais ' atual’ Sistema.

      Nos tutoriais anteriores e revisões deles explicar onde está o arquivo. (index. php), como dar-lhe as direito de permissões, etc…

      Obrigado pelo comentário.

      • Muito obrigado pela sua pronta resposta.
        Já liguei com uma única placa de relés de oito.
        Mas o está passando uma coisa rara para que não encontrar uma solução.
        Dando os botões web, o GPIO são ativados-me perfeitamente, dando a sua tensão correspondente e mantê-lo até que ele desligamento, Mas por outro lado, o relé torna sua “Clique em” correr, mas não o interruptor. O som é como se o relé é activase e é desativado, É tão rápido que o medidor não detecta qualquer alteração.
        Que pode ser devido??
        Obrigado.

        Salu2!

        • Eu encontrei o bug.
          O código PHP, na comando desligar, remover o código $a- exec(“Eco 18 > /sys/class/gpio/unexport”); , como você tê-lo no primeiro interruptor e agora ele funciona eu.
          O que o faz, a primeira vez que ligar a framboesa; os oito leds para luz de média intensidade, tem que ligar e fechou um tempo e então já as luzes do led funciona bem e já corrigi..

          Salu2!

          • Desculpa ser tão pesado com tantos comentários, mas este é o primeiro projeto que faço com meu raspery e é surpreendente e muito, muito simples! É este tutorial.
            E o mundo que se abre com este equipamento é inmeso!
            Na web, Sem saída é em php, Você pode ver que o interruptor está ativo?
            Os interruptores, poderia chegar a segurada com sincronismo e calendário?
            De verdade,Eu abri um novo mundo, muito divertido e econômico.

            Salu2 e obrigado!

          • Olá Paul GC.

            Acho que um comentário, expliquei como verificar que o interruptor é leitura ativa através de PHP estado do GPIO.

            Para o controle por programação de tempo é mais fácil usar o demônio do sistema CRON para executar o que quer, tempos em que o le Marquis.

            Muito obrigado por comentar.

          • projeto já bastante toldo, para ler que o estado do gpio é suficiente para usar
            exec ( “GPIO ler 29”, $status21 );
            Se ($status21[0] == 0) {
            }
            e o medidor entre os colchetes que assim é exibido se é na ou status = = a 1 para desligamento.

            A numeração do gpio ler não coincide com a numeração de portas gpio, Se você quiser que você colocar aqui a tabela que fez de equivalências de cada porta com sua numeração de ler.

            A única coisa que eu ainda não entendo, é porque 1 É folga e 0 É na.
            e por que para a ativar a framboesa, todas as saídas são apátridas, deixando a saídas e de média tensão não trabalho até você ativá-los duas vezes.

            Criar um site reset, o que ele faz é dar a ordem de para todas as saídas, um “sono” e para dar a ordem para extinguir todos os, Após este processo já estão todos funcionais.

            Pode ser que eles passam essas duas coisas?

            Salu2!

          • Oi, Paul., Desculpe pela demora mas eu estou ultimamente muito pouco tempo entre o trabalho e estudos.

            Em primeiro lugar quero agradecer a você que você tem compartilhado seu progresso com os outros leitores do blog, Quando eu tenho tempo livre que eu tenho pendente continuar esta seção de tutoriais sobre domótica fácil e acessível, Mas é realmente um orgulho para a minha opinião como você seguem para a frente com o projeto e vai transformando cada um em seu próprio sistema personalizado.

            Em conta para transformar esses relés, atribuindo um valor lógico de baixa (0), e transformá-los com um valor lógico alto (1) é possível que é preciso ter ligado o relé para o circuito de 230V como normalmente aberto em vez de normalmente fechado, Como disse o leitor XuFLes o primeiro a comentar este artigo; Se ele testa e o problema persiste, Não hesite em comentário e vou tentar pensar em qualquer outra possibilidade.

            Para não ter que fazer o reset das saídas após cada em de Raspbian, Você pode criar um script simples que exportar e configurá-los pinos que deseja iniciar o sistema, e lançá-lo por exemplo do rc. local.

          • Olá!
            Não passada nada naquela tarde em resposta!
            É lógico que você tomar o tempo e especialmente nestas datas.
            É ligado e desligado, que correr para a de cabeça para, Eu tenho os relés conectados.

            E o que o RC. local, para evitar ter que ir para a página de redefinição, como você faria.

            Salu2!

  4. Bom pedestre, levou tempo para lê-los 3 peças de tutoriais sobre automação residencial, Mas na parte programação estão indo muito rápido para meu, o tema me parece super interessante, mas acho que nos falta um detalhe para executar uma automação de sistema completo e é receber a entrada de estrangeiros, ( botões de, sensores de luz, etc). Eu gostaria de colaborar e acho que na parte elétrica, eu posso ajudar, e em troca peço ajuda para entender a programação inteira. Meu email é tecnico.antono.Raya@gmail.com

    Uma saudação e parabéns para a web

Deixar uma resposta