Show Posts
Pages: 1 2 [3] 4 5 ... 34
31  International / Portugues / Re: Automação residencial em módulos on: February 13, 2014, 11:21:36 am
Bacana... e já tens as torneiras funcionando com touch? ^^

Bom, eu dissequei vários códigos e bibliotecas (maniac, Stefan Engelkeaaronds, entre outros), precisava descartar os problemas com a parte de software. Li algumas vezes o datasheet (ainda preciso repassar alguns detalhes), o chip é pequeno, mas não é nada simples (pelo menos pra mim rs), porem entendo um pouco melhor como a coisa funciona. X)

Num primeiro momento, como minha automação inclui a parte de segurança, o master não pode ter o luxo de ficar sem ouvir por longos períodos, e como o papel do objeto "radio" da biblioteca do maniac é tentar enviar até que receba o ack ou o tempo chegue no timeout, alterei o abaixo no RF24.ccp

Code:
bool RF24::write( const void* buf, uint8_t len ) {
  (...)
  //const uint32_t timeout = 500;
  const uint32_t timeout = 50;
  (...)
}

bool RF24Network::write_to_pipe( uint16_t node, uint8_t pipe ){
  (...)
  //short attempts = 5;
  short attempts = 1;
  (...)
}

bool RF24Network::write(uint16_t to_node){
  //int retries = 3;
  int retries = 1;
}

Pelos meus testes os nodes responderão entre 8 e 20 ms, coloquei no loop do arduino o encargo de reenvio (tirando da livraria a responsabilidade), assim o master não para de ouvir os outros nodes por uma situação qualquer em um node (leitura de sensores ou algum processamento, por exemplo).

Para testes das requisições do master, as partes que interessam (pois o resto é parecido com o exemplo txrx), ficaram assim:
Code:
(...)
#define dlyCheck 0
#define dlyMonit 1

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

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);
(...)
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;

  Serial.begin(57600);
  radio.begin();

  network.begin(75, this_node);
 
  Serial.print(Node[this_node].Name);
  Serial.println(F(" Initialized"));

  pinMode(LED_ON, OUTPUT);
  digitalWrite(LED_ON, HIGH);
}
(...)
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))) {
        Serial.print(F("Sent Status Request: "));
        Serial.print(now, 10);
        Serial.print(F(", To Node: "));
        Serial.println(Node[to_node_idx].Name);

        Node[to_node_idx].retries = 0;
      }
      else {
        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"));

        Node[to_node_idx].retries++;
      }
  }
  if(to_node_idx == Nodes_Count -1)
    to_node_idx = 1;
  else
    to_node_idx++;
}

O código acima esta longe de ser o código final. Nem é o atual em desenvolvimento, o atual esta quase impossível de ler (rs), a biblioteca do maniac parece a mais completa, mas estou com todos "os métodos que interessaram" em um único sketch gigante, pois usando o VS2010 com o visual micro add-in consigo ver mais detalhes enquanto escrevo o código (ir para definições [que não o .h], auto-completar, bookmarks, etc  smiley-wink )

Juro que não imaginava que essa parte seria a mais complicada =) Mas quando tiver algo mais próximo de completo/real eu posto aqui.
32  International / Portugues / Re: Automação residencial em módulos on: February 13, 2014, 05:35:32 am
E ai Legend? Chegou a mexer em algo nas libs do NRF ou esta usando a do maniac bug integralmente?
33  International / Portugues / Re: Automação residencial em módulos on: February 12, 2014, 08:27:55 am
(...)
Tenho uma dúvida: vocês já virão este Arduino "www.seeedstudio.com/depot/PreOrder-Spark-Core-p-1495.html"
(...)

Também gostei desse uino, já possuir interface wifi é uma mão na roda em algumas aplicações, para uma central poderia ser uma mão na roda, mas o preço ainda é pouco atrativo...

(...) seria bom se tivesse uma com o nRF24L01+, o custo com certeza seria bem menor.

Isso seria master! É uma pena as soldagens smd, se não seria perfeitamente possível usar o esquema do pró-mini com o do nRF...

Sobre o nRF, continuo me aprofundando (não deu muito tempo nos últimos dias  smiley-cry ), já entendo melhor como funcionam os registradores e o comportamento do ship. Algumas melhorias foram alcançadas com o uso de uma fonte de melhor qualidade, a redução de tentativas do chip (auto ack) e a redução das tentativas por parte da livraria (para que o master não fique parado tentando enviar enquanto os nodes fazem requisições que se perdem porque o master não esta a ouvir).

Vamos ver o que mais eu consigo.
34  International / Portugues / Re: Enviar dados para Web Server sem Ethernet Shield on: February 10, 2014, 07:21:45 pm
A única coisa que percebi foi comunicação serial...   smiley-zipper
35  International / Portugues / Re: duvida na comunicação entre arduino e bluetooth on: February 03, 2014, 08:26:08 am
Teu módulo é igual ao do  sampaiopt http://forum.arduino.cc/index.php?topic=212282.0 que também esta com problemas. o.O

Se o módulo esta configurado para 38400 e você não alterou o baudrate do médulo para 9600 (usando comandos AT), com 9600 não vai funcionar. Você já tentou "tudo com 38400"?
36  International / Portugues / Re: Bluetooth HC-06 não envia e recebe dados on: February 03, 2014, 08:14:11 am
Você tentou o reset e não funcionou?

No anuncio diz que o máximo é 4.2v, 5V está acima do limite.

O ideal é usar 3.3v e para os pinos TX/RX usar um divisor de tensão (que na maioria das aplicações não é o ideal) ou transistores para fazer a interface (se não quiser usar os componentes, pode comprar um desses conversores http://dx.com/p/178301).

Mas eu compraria um módulo 5V para dispensar os componentes adicionais.
37  International / Portugues / Re: duvida na comunicação entre arduino e bluetooth on: January 31, 2014, 01:23:46 pm
Você pode usar esse bluetooth (e se bem me lembro, pode alimentá-lo com os 5v do regulador do próprio pró mini, se não tiver outras coisas ligadas a este pino, pois ele não é capaz de fornecer muita corrente).

Você olhou o outro tópico, testou o código que postei lá? o tópico é este:
Code:
http://forum.arduino.cc/index.php?topic=212282.0

38  International / Portugues / Re: duvida na comunicação entre arduino e bluetooth on: January 31, 2014, 08:20:06 am
Eu tenho alguns módulos, tanto com RX de 5v quanto com RX de 3.3v, já queimei um módulo por usar 5v no RX, hoje ele apenas transmite, no RX leio caracteres que parecem outra lingua LOL

Estás a usar 9600, é essa a velocidade padrão do módulo?

Alguns posts atrás tentava ajudar um colega e coloquei um código para identificar a velocidade via comandos AT. Serve para testar se esta respondendo aos comandos.
39  International / Portugues / Re: Ajuda de quem montou uma reprap. on: January 31, 2014, 08:10:08 am
Penso em comprar esse shield, eu fiz uma cnc parecida com a deste tutorial usando os A4988 na protoboard e o GRBL.

Tem até uma lib para arduíno, podendo manter o bootloader e sem ser necessário usar um gravador para mandar o hex.
40  International / Portugues / Re: Como usar alimentação externa - Motor Shield L298N on: January 29, 2014, 12:11:12 pm
Foi exatamente o que eu disse. Você estava ligando as pilhas na saída de 5v, e não na alimentação da tua placa/módulo.

Com o jumper 5V enable (que habilita o regulador de tensão) fechado, você não precisa ligar os 5v do arduino (se o arduino estiver alimentado por outra fonte) compartilhar o terra já basta.
41  International / Portugues / Re: Automação residencial em módulos on: January 29, 2014, 10:42:59 am
Acompanhando o forum tive uma dúvida com relação ao meio de comuncação de vocês, qual o protocolo que este chips wirelles se comunicam ?

Assim como o LegendBR fiquei em dúvida sobre tua pergunta, mas creio que algumas dúvidas possam ser esclarecidas em dois links:
https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf
http://maniacbug.wordpress.com/2011/11/02/getting-started-rf24/

no site do maniacbug tem um atalho para a livraria (em "Get the RF24 library from github"), aconselho entrar nos arquivos da livraria onde encontram-se diversas anotações.

Tento me aprofundar sobre esse chip (certeza que leva um bom tempo de leitura atenta), mas creio valer a pena.
42  International / Portugues / Re: Como usar alimentação externa - Motor Shield L298N on: January 29, 2014, 10:33:26 am
Estes módulos costumam ter 3 conexões:
5v -Saída de 5v do regulador de tensão existente no módulo (que alimenta a parte lógica do IC se o 5V enable estiver jampeado)
GND - terra
VMS - Entrada de energia (é neste pino que se liga a fonte para os motores)

Se a tua placa for igual à da imagem abaixo, esta ai o teu erro:


Como o HugoPT comentou, verifique o quanto os motores consomem de corrente e tensão para alimentá-los adequadamente.

Qual motor tens?

edit: Tenta colocar as pilhas no VMS (onde indica 12v na imagem)
43  International / Portugues / Re: Bluetooth HC-06 não envia e recebe dados on: January 28, 2014, 07:03:27 am
É, o teu bluetooth não esta respondendo ao comando AT em nenhuma velocidade, se os fios estão corretamente ligados isso pode ser um problema... tenho um danificado que tem esse mesmo comportamento.

Será que você pode tê-lo danificado?

A única coisa que penso é um reset, use um fiu ligado ao ground e encoste no pino reset do módulo soldado na placa:


Me desculpe, mas não sei mais como tentar ajudar =/
44  International / Portugues / Re: Bluetooth HC-06 não envia e recebe dados on: January 28, 2014, 06:08:42 am
Para enviar comandos AT é necessário estar na mesma velocidade do módulo.

Você alterou o "mySerial(11, 10) para mySerial(3, 2)" no sketch que te passei? rodou ele e não teve nenhum "OK" impressona na serial?
45  International / Portugues / Re: ATMEGA328P problema a gravar via ArduinoSPI on: January 23, 2014, 08:07:33 pm
vou testar agora
esta escrito no monitor serial
Atmega chip detector.
 e o led fica piscando fraco
o mini ta com um sensor ligado nele eu devo tirar este sensor pra fazer este teste ?
ha alguma forma de testar os pinos 10,11,12,13 do uno ?
o 13 eu ja testei com o exemplo do led

De onde você baixou os sketchs? os que anexei no tópico que eu citei?

Os últimos sketchs que o gammon atualizou não funcionaram no meu mega (aparecia só a mensagem "Atmega chip detector." e nada mais), os que estão no anexo do tópico que passei são mais antigos (do gammom também), mas funcionaram beleza na ide 1.0.5.

E eu sempre coloco capacitores de 1 até 10uf tanto no reset do arduino quanto no chip que vou gravar, só para garantir que não vão reiniciar.

Além do acima, do anexo e das páginas (incluindo o link que o HugoPT passou) não consigo imaginar como te ajudar, se você checar os fios, adicionar os capacitores e seguir o passo a passo, não tem como dar errado smiley-wink
Pages: 1 2 [3] 4 5 ... 34