Prezados amigos Laboratório de Garagem, preciso da ajuda de vocês para quem sabe encontrar uma solução ou não.

Tenho a seguinte situação:

Prédio com 120 Salas, em cada sala vou precisar de um sensor de movimento e uma lâmpada em 220v.

A questão é, já consigo usar um expansor de saídas 74HC595, não estou encontrando uma solução para entradas.

Podem me ajudar ?

Exibições: 2037

Responder esta

Respostas a este tópico

Não creio que possa resolver com o uso de somente uma placa, isso esta descartado do meu ponto de vista, mas é um belo desafio, vamos pensar e dar ideias, vou colaborar no que puder, espero que todos façam o mesmo é uma boa proposta para ver os limites IN OUT, e as soluções de cada um para vencer essas limitações.

Abs.

você vai monitorar cada sensor e controlar cada sala?
Para as entradas seria um 74166 demux

Sim, pretendo também envolver alguns LDR

Poderia se tiver mais detalhes ...

Celso, preço desculpa, a intenção resumida do projeto foi apenas para simplificar o problema, a seguir a problemática completa.

Projeto para automatizar Salas

 

Problema: Controle eficiente de consumo energético

Detalhamento: edifício com 3 andares possuindo 120 salas, cada andar possui uma sala de distribuição energética e rack de energia já preparado para recebimento do sistema de controle. Levando em consideração condições perfeitas de cada circuito consumir menos de 10a.

 

Problemática: Necessária controlar 1 lâmpada na porta de cada sala, sempre que houver movimentação dentro da sala, uma lâmpada localizada na frente da sala com 220v deverá ficar acessar. O ciclo para verificação de cada movimento é de 5 minutos.

 

Materiais: Arduino Mega e soluções embarcadas, controle deverá ser realizado via Ethernet.

Lucas, não entendi a necessidade do Arduino controlar as lampadas da porta. 

Não seria mais simples, colocar um interruptor inteligente em frente de cada uma?

http://qualitronix.com.br/categoria/produtos/sensores-de-presenca/

Se precisa monitorar o acionamento das lampadas use o MCP23008 ou o MCP23017.

http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP23008

http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP23017

Eles tem interface I2C ou SPI - depende do modelo. 

Só não sei a máxima distancia da interface I2C

Tem na Farnell. 

http://www.adafruit.com/product/593   ( 8 portas) 

http://www.adafruit.com/products/732  (16 portas) 

https://learn.adafruit.com/mcp230xx-gpio-expander-on-the-raspberry-pi

Olá,

Não gosto muito de responder tópicos com poucos detalhes pois fica DIAS, indo e vindo com resposta de resposta consumindo tempo te todo mundo.
Também aviso de que eu envio as sugestões e códigos mas não tenho como testar, espero sempre que o proprio ajudado teste e ajudo ate funcionar.

Portanto, vou tentar o meu melhor:

Problema 1: controlar 120 lampadas.
O Shift Register 74HC595 é cascateável e para controlar 120 lâmpadas, voce terá que usar 15 CIs. Use 16 e deixe uma pequena "gordura" para garantir alguma expansão. Outro motivo é que eu gosto de usar números da potência de 2.
Para ligá-los em cascata, basta ligar o pino 9 (Q7 invertido) do primeiro 74HC595 no pino 14 (DS) do segundo 74HC595, pino 9 do segundo 74HC595 pro pino 14 do terceiro 74HC595, pino 9 do terceiro 74HC595 pro pino 14 do quarto 74HC595 ...... até o último CI.
O esquema de ligação é como no segundo esquema da página http://www.protostack.com/blog/2010/05/introduction-to-74hc595-shif...
Declare a variável que irá guardar os estados das lampadas assim:
int lampada[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
Não sei se o arduíno tem limite de quantidade de elementos no array, acho que não. Temos aqui 128 elementos. Deve funcionar. Se usar muita memória e não funcionar, poderá de divertir com conversão de inteiros para 16 bits e vice-versa.

no void setup() coloque:
pinMode(OE_PIN,OUTPUT); // Output Enable pino 13 do 74HC595
digitalWrite(OE_PIN,HIGH); // todas as saídas desligadas
pinMode(DS_PIN,OUTPUT); // Data Serial pino 14 do 74HC595
pinMode(SH_CP_PIN,OUTPUT); // Shift Clock Pulse pino 11 do 74HC595
pinMode(ST_CP_PIN,OUTPUT); // Register Clock Pulse pino 12 do 74HC595
pinMode(MR_PIN,OUTPUT); // Master Reset pino 10 do 74HC595
digitalWrite(MR_PIN,LOW); // reset (limpa) todos os registros
digitalWrite(MR_PIN,HIGH); // desliga o reset
digitalWrite(OE_PIN,HIGH); // todas as saídas ligadas novamente com valor inicial 0


Por exemplo: Para ligar a lampada da sala 40, você faz o seguinte:
lampada939) = 1;
atualiza_lampadas();

A função atualiza_lampadas() deve ser algo do tipo:
for(unsigned i = 0; i < 128; i++) {
// coloca o dado do estado da lampada no porta de dados
if(lampada[128 - i]>0) digitalWrite(DS_PIN,HIGH); // ultima lampada primeiro
else digitalWrite(DS_PIN,LOW);
delay(1); // precisa ver se funciona com 1, aumentar caso necessário
// gera clock para entrar o dado no shift register
digitalWrite(SH_CP_PIN,HIGH);
delay(1); // precisa ver se funciona com 1, aumentar caso necessário
digitalWrite(SH_CP_PIN,LOW);
delay(1); // precisa ver se funciona com 1, aumentar caso necessário
}
// atualiza os 128 pinos da saída conforme os registros que acabaram de entrar serialmente
digitalWrite(ST_CP_PIN,HIGH);
delay(1); // precisa ver se funciona com 1, aumentar caso necessário
digitalWrite(ST_CP_PIN,LOW);
delay(1); // precisa ver se funciona com 1, aumentar caso necessário

Este demorou um pouquinho para responder. Trou trabalhar agora nos outros problemas enquanto voc^es se divertem com este aqui.

Boa sorte,
'Eiju

Conforme suas explicações.

Encontrei uma função chamada shiftOut.

olha o código para acender as leds conforme exemplo.

//PROJETO PARA CONTROLE DE 120 SALAS
int latchPin = 4;
int clockPin = 5;
int dataPin = 6;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
}
void loop(){
digitalWrite(4, LOW);
shiftOut(6, 5, LSBFIRST, 0b0101010101010101);
digitalWrite(4, HIGH);
}

Olá,

Continuando:

Problema 2: ler os 120 sensores de presença:

A mesma idéia do 74HC595 (entrada serial para saida paralela com latch cascateavel) pode ser aplicada porém no sentido inverso:

Usando o 74HC597 (entrada paralela para saida serial com latch cascateavel) voce coloca 16 CIs ligando desta vez, o pino 14 de um no pino 9 do outro, você pode ler através de loop tipo for(unsigned int i; i < 128; i++) {} todos os sensores através da variável sensor{0,0,0,0,0,0 ..... 0}.

Lembrando que no 74HC595 você manda o latch copiar a informação que entrou serialmente e manter estática até nova atualização, depois do loop. No caso do 74HC597, você primeiro manda o latch da entrada paralela de todos os CIs salvar os dados da entrada para depois pegar todos os bits atraves do deslocamento.

Espero ter ajudado.

Boa sorte,

  'Eiju

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço