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 ?
Tags:
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
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por