Pages: 1 ... 26 27 [28] 29 30   Go Down
Author Topic: Automação residencial em módulos  (Read 64063 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pessoal,

Continuo na busca infinita de resolver o problema de espaço nas caixinhas elétricas.

Não entendo quase nada de eletrônica, por isso não sei como contribuir com vocês.

Acompanhando as postagens, acho que o produto final vai ser algo parecido com isso: http://fritzing.org/projects/think_rf-v1

O que vocês acham?
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 510
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Creio que o máximo que conseguimos foi o rele de estado sólido (em substituição ao rele gorducho) e interruptor touch (para tirar o trambolho do interruptor tradicional). Mas a fonte (e no meu caso as baterias) ainda ocupam muito espaço, o único negócio parece ser quebrar a parede e colocar caixinhas maiores (aquelas 2x) rs

Esse RF não é muito menor que o nordic que a maioria esta usando...
Logged

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bacana... e já tens as torneiras funcionando com touch? ^^

Demorei para responder porque estava com esperanças de ter uma reposta positiva, kkkkkkkk.

Por enquanto não tive muito sucesso não, mas estou com esperanças de o problema ser a torneira que eu estava testando. Ia trocar a torneira mas as ferramentas necessárias para troca sumiram, rs. A casa está um pouco bagunçada, hehehe.

O fato de estar utilizando um attiny85 não está ajudando a debugar. Se eu uso a biblioteca CapacitiveSensor, o SoftwareSerial não funciona. E também não consegui fazer o LCD funcionar com Shift Register no attiny85.
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 510
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Poxa, vemos vários projetos na net usando as duas libs com o attiny, infelizmente não tenho nenhum attiny para testar, mas esse cara disse que funciona! rs

Será que tens uma má versão de alguma das livrarias (ou incompatibilidade da versão da lib com a versão da ide do arduino)?

Recebi ontem os nRF com amplificador e antena (promessa de 1 KM outdoor), vamos ver se indoor também melhorará a eficiência.

Também estou trabalhando na interface USB/Serial do android com o arduino. A ideia é poder espetar o android numa base com arduino + nrf (inicialmente a central) e aproveitar os recursos e capacidade de processamento de um sansung que esta jogado aqui smiley.

Muitas ideias e pouco tempo livre, mas aos poucos chegamos lá =)
Logged

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Valeu pela dica! Vou olhar esse exemplo com bastante carinho, deve resolver muitos dos meus problemas! =D
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 510
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Valeu pela dica! Vou olhar esse exemplo com bastante carinho, deve resolver muitos dos meus problemas! =D

Espero que você tenha sucesso...

Sobre os nRF24L01, eu recebi dois com PA +LNA, from ebay,  mas fiquei frustrado ao trocar os nRFs e ter desempenho pior, foi um teste bem rápido (apenas troquei os módulos em duas unidades e assisti ao tempo de resposta), o alcance foi menor que com o nRF24L01 com antena onboard e sem amplificador...  smiley-sad

Ainda procurarei uns capacitores de pelo menos 450uf para descartar interferência (os +PA +LNA são mais sensíveis por terem amplificadores?)e  testarei em outros canais... Pensei que seria pegar meu circuito atual, tirar um e botar o outro, mas não foi assim  smiley-sad-blue
Logged

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Já minha experiência com o nRF24L01+ com PA+LNA foi diferente. Meus nós escravos continuam só transmitindo quando coloco o dedo no módulo nRF24L01+, mas quando troco pelo módulo com PA+LNA, ele funciona.

Não sei se o fato do ATMega328P estar funcionando com 3.3v ao invés de 5v seria a diferença, já coloquei um capacitor eletrolítico de 200 uF, o próximo passo é aumentar esse capacitor...
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 510
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nesses momentos é duro ser hobista, se fosse cientista teria conhecimentos, equipamentos e recursos e já tinha descoberto o problema rs

Vi em algum sitio um cara com o mesmo problema (alegou trocar os módulos e o range não passar de 5 metros), mas nenhum comentário posterior e nenhum retorno sobre qualquer solução... por agora continuo com os sem PA+LNA e um node intermediário (rebatedor), até encontrarmos uma solução... infelizmente só tenho algumas horas do final de semana para testar, mas se eu encontrar algo, posto aqui.

Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 510
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Já minha experiência com o nRF24L01+ com PA+LNA foi diferente. Meus nós escravos continuam só transmitindo quando coloco o dedo no módulo nRF24L01+, mas quando troco pelo módulo com PA+LNA, ele funciona.

Não sei se o fato do ATMega328P estar funcionando com 3.3v ao invés de 5v seria a diferença, já coloquei um capacitor eletrolítico de 200 uF, o próximo passo é aumentar esse capacitor...

Ah sim, não acredito que o problema esteja no ATMEGA, pelo que percebi, se ele trabalha com o cristal interno, 3.3v seria suficiente para manter tudo estável... Depois testarei usando os módulos bluetooth para monitorar a serial e descartar interferências oriundas das portas usb.
Logged

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

FUNCIONOU! heheheh, coloquei um capacitor de 0.1 uF junto com o módulo e começou a funcionar! Ainda tem algumas falhas, então preciso fazer um ajuste melhor desse capacitor.

O interessante é que depois que eu tirei o capacitor de 0.1 uF, continuou a funcionar. Acho que o problema estava no capacitor de 100 uF que está abaixo do módulo nRF24L01+. Antes ele estava muito próximo, praticamente encostado no módulo nRF24L01+. Quando afastei esse capacitor, mesmo sem o capacitor de 0.1 uF, continuou funcionando. Mas quando eu aproximava o capacitor de novo do módulo, começava a perder mais pacotes.
Logged

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1534
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ola amigos
Por acaso não queres partilhar o código com que estas a testar entre os nós.Recentemente também comprei 10 módulos no ebay, já passei os olhos na lib do maniacBug mas ainda pouco fiz, no entanto gostava de testar o comportamento que vocês relatam.Tenho andado dedicado a outras coisas e não me tem sobrado muito tempo pra os estudar smiley-sad
Comprei os por serem muito populares com baixo custo e gostava de os testar.
Uma coisa que me deixou de pé a traz com estes módulos é eles trabalharem na frequência 2.4Ghz que já é ocupada com as redes Wireless, num deles fiz o upload do programa do maniacBug e  sem ligar o outro modulo já me estava a escrever na serie pacote recebido lol.
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Estoou usando os códigos de exemplo mesmo para testar (pingpair do RF24, helloworld_rx/tx do RF24Network) com dois arduinos, naturalmente.

E sobre essas "leituras" com o módulo desconectado, é assim mesmo, todos os meus testes tiveram o mesmo resultado, hehehe.
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 510
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

coloquei um capacitor de 0.1 uF junto com o módulo e começou a funcionar!

Que bom que produziu efeito... Estou usando baterias de li-ion (7.4v) o LM7805 para o atmega e o LM1117 para o nrf (com capacitores de tantalum de 10uf em todas as entradas e saídas dos reguladores, como manda os datasheets), mas vamos ver o que acontece depois dos testes que citei...

Tenho andado dedicado a outras coisas e não me tem sobrado muito tempo pra os estudar smiley-sad

Creio que tempo de sobra esta difícil para todos nós (tristeza)... Por isso não tenho evoluído muito... É muita coisa para estudar e entender, ainda mais para leigos como eu...


Se seguir o quote acima verás três locais onde fiz alterações para não perder pacotes com a concorrência, o próximo passo ( depois de entender o que se passa com o PA+LNA) é testar a checagem do ack no loop do arduino (para não travar o loop do arduino com outros loops) e penso também na possibilidade de parar de usar o auto ack (percebi que as mensagens são recebidas pelos nodes, mas o ack falha).

Uma coisa que me deixou de pé a traz com estes módulos é eles trabalharem na frequência 2.4Ghz que já é ocupada com as redes Wireless

Essa é uma desvantagem, ao redor de minha casa tem umas 10 redes wifi! rs

Ainda não testei, mas esse scanner esta na fila

, num deles fiz o upload do programa do maniacBug e  sem ligar o outro modulo já me estava a escrever na serie pacote recebido lol.

Nossa, isso não me aconteceu... qual programa fizeste o upload?
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 510
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

O meu esboço é o abaixo, uso a lib do maniac:
Code:
#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
#include <Wire.h>

#define PIN_VOLT 0  //A0 - Battery State
#define PIN_THERM 1 //A1 - Temperature State

#define SW_PRESENCE 2 //D2 - Presence Switch
#define RelayOrSpkr 3 //D3 - Master: Speker/Siren (PWM)
                      //D3 - Slave: Light Relay
#define SW_DOOR 4 //D4 - Door Switch
#define JP_1 5    //D5 - JP1 Node Definition
#define JP_2 6    //D6 - JP2 Node Definition
#define JP_3 7    //D7 - JP3 Node Definition
#define LED_ON 8  //D8 - Led ONLINE

//D09 - nRF_CE (P3)
//D10 - nRF_CSN (P4)
//D11 - nRF_MOSI (P6)
//D12 - nRF_MISO (P7)
//D13 - nRF_SCK (P5)

#define TimeCheck 1000UL
#define TimeOut 300UL

#define dlyCheck 0
#define dlyMonit 1

const unsigned long intDelay[] = {100UL, 1000UL};
unsigned long longLastMillis[] = {0UL, 1000UL};

#define Debug_Mode

#define Nodes_Count 6
uint8_t this_node = 0;
int to_node_idx = 0;
unsigned long next_check_time = 0;

enum state {OFF, ON, waiting, error};

struct message_t {
  int Id;
  bool Value;
};

struct nodes_t {
  uint8_t Node;
  char Name[8]; //TODO: change to use progmem http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
  state State;
  unsigned long LastRequest;
  unsigned long LastResponse;
  uint8_t retries;
  bool Light;
  bool Presence;
  bool Door;
}
Node[Nodes_Count] = {
  {0,"Master", OFF, 0UL, 0UL},
  {1,"Living", OFF, 0UL, 0UL},
  {2,"kitchen", OFF, 0UL, 0UL},
  {3,"F-Room", OFF, 0UL, 0UL},
  {4,"B-Room", OFF, 0UL, 0UL},
  {5,"Hall", OFF, 0UL, 0UL}
};

#if defined(__AVR_ATmega2560__)
RF24 radio(9,53);
#else
RF24 radio(9,10);
#endif

RF24Network network(radio);

//Variable to print
double Temp;
float vBatt;

void handle_State(RF24NetworkHeader& header);
void handle_Response(RF24NetworkHeader& header);
void handle_Notification(RF24NetworkHeader& header);

void setup() {
  //    JP_1    Node
  //(X) ( ) ( ) 0
  //( ) (X) ( ) 1
  //( ) ( ) (X) 2
  //(X) (X) (X) 3
  //( ) (X) (X) 4
  //(X) (X) ( ) 5

  //TODO: change to use direct port access
  pinMode(JP_1,INPUT);
  pinMode(JP_2,INPUT);
  pinMode(JP_3,INPUT);

  // turn on pullup resistors
  digitalWrite(JP_1, HIGH);
  digitalWrite(JP_2, HIGH);
  digitalWrite(JP_3, HIGH);

  delay(20); //wait to stabilize

  bool JP1 = digitalRead(JP_1) == LOW;
  bool JP2 = digitalRead(JP_2) == LOW;
  bool JP3 = digitalRead(JP_3) == LOW;

  if (JP1 && !JP2 && !JP3) this_node = 0u;
  if (!JP1 && JP2 && !JP3) this_node = 1u;
  if (!JP1 && !JP2 && JP3) this_node = 2u;
  if (JP1 && JP2 && JP3) this_node = 3u;
  if (!JP1 && JP2 && JP3) this_node = 4u;
  if (JP1 && JP2 && !JP3) this_node = 5u;

  if(this_node == 0){
    to_node_idx = 1;
  }else{
    pinMode(SW_DOOR, INPUT);     //magnetic will put pin LOW
    digitalWrite(SW_DOOR, HIGH); // turn on pullup resistors

    pinMode(SW_PRESENCE, INPUT); //PIR will put pin HIGH

    pinMode(RelayOrSpkr, OUTPUT); //Light Relay
    digitalWrite(RelayOrSpkr, LOW); //OFF
  }

#if defined (Debug_Mode)
  Serial.begin(115200);
#endif

  radio.begin();

  network.begin(75, this_node);
  
#if defined (Debug_Mode)
  Serial.print(Node[this_node].Name);
  Serial.println(F(" Initialized"));
#endif

  pinMode(LED_ON, OUTPUT);
  digitalWrite(LED_ON, HIGH);
}

void loop() {
  NetCheck();

  if (this_node == 0){
    StatusRequest();
    //NodeTimeoutCheck();
  }
  else {
    /*unsigned long now = millis();
    if (now - longLastMillis[1] >= intDelay[1]) {
      GetTemperature();
      GetVoltage();
      longLastMillis[1] = now;
    }*/
  }
}

void NetCheck(){
  network.update();

  while (network.available()) {
    RF24NetworkHeader header;
    network.peek(header);

    int index = GetNodeIndex(header.from_node);

    if (index != -1){
      Node[index].LastResponse = millis();
      if (Node[index].State != ON){
        Node[index].State = ON;
        //mcp.digitalWrite(n, LOW);
      }
      switch (header.type){
      case 'S':
        handle_State(header);
        break;
      case 'R':
        handle_Response(header);
        break;
      case 'N':
        //handle_Notification(header);
        break;
      default:
#if defined (Debug_Mode)        
        Serial.print(F("WARNING - Unknown message type: "));
        Serial.println(header.type);
        network.read(header,0,0);
        break;
#endif
      }
    }
    else{
      network.read(header,0,0);
    }
  }
}

int GetNodeIndex(uint16_t NodeNum){
  int i = Nodes_Count;
  while (i--) {
    if (Node[i].Node == NodeNum)
      return i;
    else if (i == -1)
      break;
  }
  
  return -1;
}

void StatusRequest(void){
  unsigned long now = millis();

  if ((now - longLastMillis[dlyCheck] >= intDelay[dlyCheck])
    && (Node[to_node_idx].retries < 3)
    && (Node[to_node_idx].State != error)
    && ((now - Node[to_node_idx].LastRequest) >= TimeCheck)
    ){
      longLastMillis[dlyCheck] = now;

      Node[to_node_idx].State = waiting;
      
      Node[to_node_idx].LastRequest = now;

      RF24NetworkHeader header(/*to node*/ Node[to_node_idx].Node, /*type*/ 'S' /*Status*/);
      
      if (network.write(header, &now, sizeof(now))) {
#if defined (Debug_Mode)
        Serial.print(F("Sent Status Request: "));
        Serial.print(now, 10);
        Serial.print(F(", To Node: "));
        Serial.println(Node[to_node_idx].Name);
#endif
        Node[to_node_idx].retries = 0;
      }
      else {
#if defined (Debug_Mode)
        Serial.print(F("Node: "));
        Serial.print(Node[to_node_idx].Node);
        Serial.print(F(" - "));
        Serial.print(Node[to_node_idx].Name);
        Serial.println(F(" no found"));
#endif
        Node[to_node_idx].retries++;
      }
  }

  if(to_node_idx == Nodes_Count -1)
    to_node_idx = 1;
  else
    to_node_idx++;
}

void handle_State(RF24NetworkHeader& header){
  unsigned long ReceivedMillis;

  network.read(header,&ReceivedMillis,sizeof(ReceivedMillis));

#if defined (Debug_Mode)
  Serial.print(F("Received from node: "));
  Serial.print(header.from_node);
  Serial.print(F(" - "));
  Serial.println(ReceivedMillis);
#endif

  RF24NetworkHeader header_response(/*to node*/ header.from_node, /*type*/ 'R' /*Status*/);

  int idx = GetNodeIndex(header.from_node);

  if (network.write(header_response, &ReceivedMillis, sizeof(ReceivedMillis))) {
#if defined (Debug_Mode)
    Serial.print(F(". response at: "));
    Serial.print(millis());
    Serial.print(F(" to "));
    Serial.println(Node[idx].Node);
#endif
  }
  else {
#if defined (Debug_Mode)
    Serial.print(F("Node: "));
    Serial.print(Node[idx].Node);
    Serial.print(F(" - "));
    Serial.print(Node[idx].Name);
    Serial.println(F(" no found"));
#endif
  }
}

void handle_Response(RF24NetworkHeader& header){

  unsigned long message;

  network.read(header,&message,sizeof(message));

  int index = GetNodeIndex(header.from_node);

#if defined (Debug_Mode)
  Serial.print(F("Received: "));
  Serial.print(message);
  Serial.print(F(", from node: "));
  Serial.print(Node[index].Node);
  Serial.print(F(" - "));
  Serial.print(Node[index].Name);
  Serial.print(F(", sent at: "));
  Serial.print(Node[index].LastRequest);
  Serial.print(F(". It took: "));
  Serial.println(millis()-Node[index].LastRequest);
#endif
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Creio que o máximo que conseguimos foi o rele de estado sólido (em substituição ao rele gorducho) e interruptor touch (para tirar o trambolho do interruptor tradicional). Mas a fonte (e no meu caso as baterias) ainda ocupam muito espaço, o único negócio parece ser quebrar a parede e colocar caixinhas maiores (aquelas 2x) rs

Esse RF não é muito menor que o nordic que a maioria esta usando...


Só uma dúvida: Já pensaram na possibilidade de construir os relés ssr (opto + triac) em um módulo à parte? Penso que, caso haja a necessidade de apenas um relé, terei outros dois inutilizados (são 3 relés nas placas )? Além é claro da segurança em não ter que lidar com 110v/220v naquela caixinha.

Imaginem no banheiro? Aqui em casa é apenas um interruptor...ficariam 2 "inutilizados"?

Bacana seria a confecção de um módulo separado, com apenas um relé ssr, com ligação (Sgn + Gnd)  através de fios 20 ~26 awg, até a placa embutida.

Assim teria liberdade de adicionar quantos forem as portas do microcontrolador.

PS: Tô gostando demias do projeto de vcs, pena que sepultaram o RS485.
Logged

Pages: 1 ... 26 27 [28] 29 30   Go Up
Jump to: