Show Posts
Pages: 1 ... 5 6 [7] 8 9 ... 34
91  International / Portugues / Re: Monitoramento de guindaste - I/O com tensão 48v DC, log em SD on: October 08, 2013, 08:03:34 pm
Hugo,

Desta vez a culpa não é minha, foi o Lago! LOL

Tem me sobrado muito pouco tempo para o arduino, passo aqui só para uma vista rapida (apendo muito com vocês) e não ficar muito por fora do que esta a acontecer smiley-wink

Todos,

Shift registers são verdadeiros salvadores de pinos!

Duas opções da casa:
http://www.arduino.cc/en/Tutorial/ShiftIn
http://arduino.cc/en/Tutorial/ShiftOut

Por enquanto só tive necessidade de mais outputs, usei os 74h, mas nada como testar e determinar o melhor (o o que mais gosta) smiley-wink
92  International / Portugues / Re: Arduino RTC DS1307 on: October 07, 2013, 12:58:34 pm
Acho que queres dizer:

Se ele usou o código que postei a serial só é disparada a aproximadamente cada 1000 millis.

Boa observação rs

Mas ocorrer o mesmo segundo três vezes (dentro de aproximadamente 1000 millis) seria demais, né? ^^

tenta trocar de CI, cristal, protoboard, fios...

Foi o que sugeri no início, troca 1, troca 2, troca tudo smiley-wink
93  International / Portugues / Re: Arduino RTC DS1307 on: October 07, 2013, 08:44:47 am
Estou a utilizar a própria alimentação do Arduino e não tenho mais nada ligado para além do RTC.
A unica coisa que troquei até agora foram os fios.
Aqui esta o extrato de uma falha;
Code:
Data: 5/10/13 Hora : 21:2:36, Sabado
Data: 5/10/13 Hora : 21:2:37, Sabado
Data: 5/10/13 Hora : 21:2:38, Sabado
Data: 5/10/13 Hora : 21:2:39, Sabado
Data: 5/10/13 Hora : 21:2:40, Sabado
Data: 5/10/13 Hora : 21:2:40, Sabado
Data: 5/10/13 Hora : 21:2:41, Sabado


O erro que apresenta é esse? duas linhas com o mesmo segundo?
Dependendo do codigo, o arduino pode fazer duas requisições dentro do mesmo segundo, dando a impressão que o relogio não andou... para tirar a duvida coloque um led no clock out do RTC e acompanhe os tics...
Qual a procedência do chip e do cristal?


Se ele usou o código que postei a serial só é disparada a cada 1000 millis
94  International / Portugues / Re: Arduino RTC DS1307 on: October 07, 2013, 07:01:28 am
Mas o que causaria a interferência com o ground? Algum componente no circuito do arduino?

Fiz testes usando o atemega328 na protoboard + FTDI + RTC, sendo alimentados por 5v pela USB do notebook e 3v por uma bateria ML1220, deixei mais horas em standby, desconectei e conectei a USB em intervalos de tempo e não percebi nenhuma alteração.
95  International / Portugues / Re: Arduino RTC DS1307 on: October 05, 2013, 02:02:02 pm
Só agora percebeu que o problema ocorre sempre? Como você testava antes?

Tens algo mais ligado na protoboard? Tentou outro Crystal, RTC, Fonte de alimentação, Baterias, fios, resistores, tudo? rs

Eu estava com preguiça, então peguei o exemplo daqui: http://www.arduinoecia.com.br/2013/04/real-time-clock-rtc-ds1307.html

Fiz poucas alterações, ficam mantidos os créditos.
Code:
//Programa : Data e Hora com DS1307
//Autor : Arduino & Cia

#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
byte run = 0;
unsigned long lastMillis = millis();

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0){
    char inChar = (char)Serial.read();
    if (inChar == 'A'){
      SelecionaDataeHora(); //Esta linha pode ser retirada apos setar a data e hora
    }
  }
 
  unsigned long currentMillis = millis();
  if (currentMillis - lastMillis >= 1000) {
    Mostrarelogio();
    lastMillis = currentMillis;
  }
}

void SelecionaDataeHora()   //Seta a data e a hora do DS1307
{
  byte segundos = 0; //Valores de 0 a 59
  byte minutos = 10; //Valores de 0 a 59
  byte horas = 13; //Valores de 0 a 23
  byte diadasemana = 6; //Valores de 0 a 6 - 0=Domgino, 1 = Segunda, etc.
  byte diadomes = 5; //Valores de 1 a 31
  byte mes = 10; //Valores de 1 a 12
  byte ano = 13; //Valores de 0 a 99

  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados

//As linhas abaixo escrevem no CI os valores de data e hora que foram colocados nas variaveis acima
  Wire.write(ConverteParaBCD(segundos));
  Wire.write(ConverteParaBCD(minutos));
  Wire.write(ConverteParaBCD(horas));
  Wire.write(ConverteParaBCD(diadasemana));
  Wire.write(ConverteParaBCD(diadomes));
  Wire.write(ConverteParaBCD(mes));
  Wire.write(ConverteParaBCD(ano));

  Wire.write(zero); //Start no CI
  Wire.endTransmission();
}

byte ConverteParaBCD(byte val){ //Converte o número de decimal para BCD
  return ( (val/10*16) + (val%10) );
}

byte ConverteparaDecimal(byte val)  { //Converte de BCD para decimal
  return ( (val/16*10) + (val%16) );
}

void Mostrarelogio(){
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int segundos = ConverteparaDecimal(Wire.read());
  int minutos = ConverteparaDecimal(Wire.read());
  int horas = ConverteparaDecimal(Wire.read() & 0b111111);
  int diadasemana = ConverteparaDecimal(Wire.read());
  int diadomes = ConverteparaDecimal(Wire.read());
  int mes = ConverteparaDecimal(Wire.read());
  int ano = ConverteparaDecimal(Wire.read());

  //Mostra a data no Serial Monitor
  Serial.print("Data: ");
  Serial.print(diadomes);
  Serial.print("/");
  Serial.print(mes);
  Serial.print("/");
  Serial.print(ano);
  Serial.print(" ");
  Serial.print("Hora : ");
  Serial.print(horas);
  Serial.print(":");
  Serial.print(minutos);
  Serial.print(":");
  Serial.print(segundos);
  switch(diadasemana)
    {
      case 0:Serial.print(", Domingo");
      break;
      case 1:Serial.print(", Segunda");
      break;
      case 2:Serial.print(", Terca");
      break;
      case 3:Serial.print(", Quarta");
      break;
      case 4:Serial.print(", Quinta");
      break;
      case 5:Serial.print(", Sexta");
      break;
      case 6:Serial.print(", Sabado");
    }
    Serial.println();
}


E o resultado foi o esperado (omiti as linhas intermediárias):
data hora do pc/ recebido do arduino
Code:
Connected
05/10/2013 13:09:44 Received: Data: 5/10/13 Hora : 13:7:53, Sabado
(...)
05/10/2013 13:09:59 Received: Data: 5/10/13 Hora : 13:8:8, Sabado
Sent: A
05/10/2013 13:10:00 Received: Data: 5/10/13 Hora : 13:10:0, Sabado
05/10/2013 13:10:01 Received: Data: 5/10/13 Hora : 13:10:1, Sabado
05/10/2013 13:10:02 Received: Data: 5/10/13 Hora : 13:10:2, Sabado
(...)
05/10/2013 13:15:25 Received: Data: 5/10/13 Hora : 13:15:25, Sabado
Disconnected
Connected
05/10/2013 13:28:22 Received: Data: 5/10/13 Hora : 13:28:21, Sabado
05/10/2013 13:28:23 Received: Data: 5/10/13 Hora : 13:28:22, Sabado
(...)
05/10/2013 13:29:06 Received: Data: 5/10/13 Hora : 13:29:5, Sabado
05/10/2013 13:29:07 Received: Data: 5/10/13 Hora : 13:29:6, Sabado
05/10/2013 13:29:08 Received: Data: 5/10/13 Hora : 13:29:7, Sabado
Disconnected
Connected
05/10/2013 13:34:03 Received: Data: 5/10/13 Hora : 13:34:3, Sabado
05/10/2013 13:34:04 Received: Data: 5/10/13 Hora : 13:34:4, Sabado
(...)
05/10/2013 13:36:52 Received: Data: 5/10/13 Hora : 13:36:52, Sabado
05/10/2013 13:36:53 Received: Data: 5/10/13 Hora : 13:36:53, Sabado
Disconnected
Connected
05/10/2013 15:43:10 Received: Data: 5/10/13 Hora : 15:43:10, Sabado
05/10/2013 15:43:11 Received: Data: 5/10/13 Hora : 15:43:11, Sabado
05/10/2013 15:43:20 Received: Data: 5/10/13 Hora : 15:43:20, Sabado
05/10/2013 15:43:21 Received: Data: 5/10/13 Hora : 15:43:21, Sabado
Disconnected

Não imagino o que mais podemos fazer.
96  International / Portugues / Re: Arduino RTC DS1307 on: October 04, 2013, 07:12:59 am
Já tive muitos problemas usando breadboards, coisas que milagrosamente funcionaram com a soldagem dos componentes. E condensadores as vezes fazem milagres smiley-wink

Se funciona com o arduino não faz muito sentido não funcionar com a bateria (a não ser que a bateria esteja no osso).
97  International / Portugues / Re: Tensão de alimentação do nano on: October 04, 2013, 06:44:51 am
Se fosse só a porta do gabinete, até poderíamos imaginar alguma gambiarra, mas nas portas usb da placa mãe é difícil acreditar em  12v. Creio que teu multímetro está meio fora =P
98  International / Portugues / Re: Dúvidas em projeto: Voltagem Arduíno, Relês e RTC. on: October 01, 2013, 04:38:02 pm
É isso ai, vamos vivendo e aprendendo (pena que o tempo é tão pouco e passa tão rápido)...

Estamos por aqui... Bons projetos! smiley-wink
99  International / Portugues / Re: EEPROM:ler dados on: October 01, 2013, 04:22:23 pm
Não entendo o que você quer, pode-se chegar a um resultado por vários meios, o que você quer dizer por genérico?

Você tem fixa qual será a última posição gravada? Você pode fazer um laço da ultima posição para a primeira, cada vez que você atingir -11 (que é a largura to teu "registro") você imprime.

Code:
int count = 0;
for(addr=22;addr>=0;addr--){
  temp[addr] = readEEPROM(addr);
  Serial.println(int(temp[addr]));
 
  if(count == 11){
    sprintf(buffer,
    "ID:%d Acao:%d Pino:%d Hora:%d:%d:%d Data:%d/%d/%d Ds:%s"
    ,int(temp[addr]),int(temp[addr+1]),int(temp[addr+2]),int(temp[addr+4])
    ,int(temp[addr+5]),int(temp[addr+6]),int(temp[addr+7]),int(temp[addr+8])
    ,int(temp[addr+9]),GetDayOfWeek(int(temp[addr+10])));
   
    Serial.println(buffer);
   
    count = 0;
  }
  else {
    count++;
  }
}

Não testei o loop acima, mas é minha última idéia. rs

Só você sabe exatamente o que quer, então é só rabiscar até que vejas o desenho que desejas.
100  International / Portugues / Re: biblioteca IRremote como utilizar irsend e irrecv em um mesmo sketch, on: October 01, 2013, 04:02:33 pm
Não sei se você viu, mas o HugoPT postou em outro tópico um link de um tutorial, no final do tutorial, o cara relatou o mesmo problema:
Podes tambem usar o php com a porta serie.Mas isto implica que o teu arduino esteja conectado ao server onde tens a correr o PHP pelo cabo USB.Vê este link
http://gustavostraube.wordpress.com/2013/08/11/comunicacao-entre-php-e-arduino-via-usb/

Deixei só parte da mensagem inicial, poderás ver o conteúdo integral no tópico smiley-wink

Parece que tens de encontrar "o recurso" adequado no PHP
101  International / Portugues / Re: Transistor controlar positivo on: October 01, 2013, 07:25:05 am
almamater

Valeu o feedback =)

As vezes faço confusão entre transistores e fets, quando a variação da tensão (variação de resistência) no gate provoca variação da tensão do drain.

Esse é o problema de ser um eterno novato (fazendo por hobby) smiley-wink. Mas aos poucos vamos aprendendo...

Para garantir que não queimarei as portas do arduino, consumindo mais corrente que as saídas podem oferecer, tenho recorrido bastante aos transistores.
102  International / Portugues / Re: Erro do projeto Arduino? on: September 30, 2013, 12:10:44 pm
Perder bits e bytes não é incomum, depende da velocidade (sempre inicio os testes em 9600), do protocolo, do contexto de toda a programação do arduino e do programa que se comunica com ele.

No C# resolvi um problema de perdas (usando um módulo Bluetooth desses baratinhos) com a configuração do Handshake.

Mas como o bubulindo falou, só podemos ajudar olhando o código, sem código só podemos tentar adivinhar...
103  International / Portugues / Re: biblioteca IRremote como utilizar irsend e irrecv em um mesmo sketch, on: September 30, 2013, 12:01:12 pm
Não manjo nada de php, mas se desejas enviar algo para o arduino porque usas o dio_read no lugar do dio_write?

Porque manténs o trecho:
Code:
$acao="l";
     $conexaoArduino = fopen("COM7","w");
     fwrite($conexaoArduino,$acao);
     fclose($conexaoArduino);

Não desejas algo como o abaixo? (apenas a lógica, como disse, nada sei de php)
Code:
<?php

$fd 
dio_open('/dev/ttyS0'O_RDWR O_NOCTTY O_NONBLOCK);

dio_fcntl($fdF_SETFLO_SYNC);

dio_tcsetattr($fd, array(
  
'baud' => 9600,
  
'bits' => 8,
  
'stop'  => 1,
  
'parity' => 0
)); 

dio_write($fd"l"1);
dio_close($fd); //não sei como é no PHP, mas em uma instância de programa só fechamos a porta quando não desejamos mais qualquer comunicação.

?>


Cuidado com os copiar e colar, tenta entender o que o código faz smiley-wink
104  International / Portugues / Re: biblioteca IRremote como utilizar irsend e irrecv em um mesmo sketch, on: September 29, 2013, 05:48:50 pm
Sinto muito, não tinha percebido que o problema estava em não enviar...

Uma dúvida, porque você não colocou as duas condições, o if para a mesma função do switch? inclusive colocas o 1 duas vezes, uma no if e outra no switch.

Code:
#include <IRremote.h>

IRsend irsend;
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
   irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
  }
 
  if(Serial.available() >0 ) {
    char valorlido = Serial.read();
   
    char val = '0';
    switch(valorlido) {
    case 'd':
      val = 0x80C;
      break;
//    case '1' :
//      val = 0xC;
//      break;
    case '1' :
      val = 0x801;
      break;
    case '2' :
      val = 0x802;
      break;
    }  //fim do switch
   
    if (val != '0') {
      irsend.sendRC5(val,12);
      irrecv.enableIRIn();
    }
  }
}

Não estou com meu computador ou com arduinos por aqui, então não tenho como executar o código, mas não vejo nada de errado nele.

Não entendi bem o problema com o serial monitor. Se abre uma vez e envia "d" nada acontece. Tens de fechar e abrir novamente e só depois disso o comando "d" funciona, é isso?

Como detecta que não funciona, estás a ver com uma câmera digital, usando um led no lugar do emissor ir ou se a TV processa o comando?
105  International / Portugues / Re: EEPROM:ler dados on: September 29, 2013, 02:25:26 pm
Teu problema esta na lógica de programação?

Se for isso, tens muitas formas, dentre elas podes criar um método, definindo a posição inicial e final:
Code:
void ImprimeValores(int inicio, int fim){
for(addr=inicio;addr<=fim;addr++) //dr tem valor 11 pois a medida que grava eu incremento a variavel dr.
    {
      temp[addr] = readEEPROM(addr);
       Serial.println(int(temp[addr]));
    }
    sprintf(buffer,"ID:%d Acao:%d Pino:%d Hora:%d:%d:%d Data:%d/%d/%d Ds:%s",int(temp[inicio]),int(temp[inicio+1]),int(temp[inicio+2]),int(temp[inicio+4]),int(temp[inicio+5]),int(temp[inicio+6]),int(temp[inicio+7]),int(temp[inicio+8]),int(temp[inicio+9]),GetDayOfWeek(int(temp[inicio+10])));
    Serial.println(buffer);
    delay(2000);
}

e chama o método com o inicio e fim desejados
Code:
ImprimeValores(11,22);
ImprimeValores(0,10);
Pages: 1 ... 5 6 [7] 8 9 ... 34