Show Posts
Pages: 1 ... 17 18 [19] 20 21 ... 34
271  International / Portugues / Re: COMUNICAÇÃO I2C COM VARIOS ATMEGA8 on: May 10, 2013, 11:54:20 am
Se você já considerou tudo o que foi sugerido, por mim, assunto encerrado ^^

Passando os olhos no teu código não vejo nada de errado (mas não confio tanto na minha visão rs), faz o upload e vê como o sistema se comporta smiley-cool
272  International / Portugues / Re: COMUNICAÇÃO I2C COM VARIOS ATMEGA8 on: May 10, 2013, 10:17:37 am
É cada vez mais difícil sem saber o objetivo...

Se usar um mux, terás dentro de um loop a chamada pelo método exemplificado pelo Hugo:
Code:
void leEntradasNoADC()
{
 if(POSentradaADC>=9)POSentradaADC = 0;//Reseta pois ja atingiu as 8 posiçoes
 PORTB = POSentradaADC;//Escreve o valor no MUX escolhendo assim a entrada a ser lida
 valoresADC[i++] = analogRead(ANALOGICA);//Le o valor e armazena
 POSentradaADC++;//Incrementa o valor e consequentemente muda o MUX
}

se usar a porta analógica do arduino, terás a mesma lógica no loop (o método analogRead):
Code:
val = analogRead(analogPin);    // read the input pin

Ou seja, a leitura em qualquer um dos casos será sequencial (uma após a outra, nunca ao mesmo tempo), e ainda tens a questão do tempo de leitura da porta e da precisão da leitura (considerou essas variáveis em relação ao que objetivas?). E mais a questão do desempenho do I2C.

Aqui falam um pouco sobre a velocidade de leitura das portas analógicas do arduino http://arduino.cc/forum/index.php/topic,6549.15.html.

Vejo pelos fóruns muitas pessoas usando usando ICs específicos por causa da precisão e ou velocidade de leitura dos atmegas usados no arduino.

E isso porque tenho a visão muitíssimo limitada, se comparar com a dos colegas Bubulindo, Hugo e outros feras do fórum.
273  International / Portugues / Re: COMUNICAÇÃO I2C COM VARIOS ATMEGA8 on: May 08, 2013, 05:38:54 pm
Perdoe-me, mas tens de usar 1 atmega8 e poder usar alguns ADC (conversor analogo para digital) ou tens realmente de usar todos esses atmega8?

Aqui tem um exemplo usando I2c com dois arduinos (leia-se atmega ^^), parece-se exatamente o que queres =)
http://karlbenzrobotica.blogspot.com.br/2012/04/o-protocolo-i2c-no-arduino.html

+1 http://www.uchobby.com/index.php/2008/09/16/introduction-to-i2c/

Tem mais no google se procurarmos por arduino i2c smiley-wink
274  International / Portugues / Re: COMUNICAÇÃO I2C COM VARIOS ATMEGA8 on: May 08, 2013, 12:33:59 pm
Opa... Eu tinha esse site http://www.hobbytronics.co.uk/arduino-adc-i2c-slave guardado para a prosperidade.

Vamos ver se outros colegas apresentam outras opções =)
275  International / Portugues / Re: Erro a enviar programa para um arduino Mega 2560 on: May 07, 2013, 08:07:53 pm
Eu li muitas discussões sobre esses fuses, mas por enquanto é muito para eu entender (já estou nos tarja preta rs)

Inclusive salvei o link http://www.engbedded.com/fusecalc e a discussão http://arduino.cc/forum/index.php?topic=22777.0

Achei mais seguro fazer o upload do bootloader do arduino (que pelo que entendi já seta os fuzes) e depois apenas gravar os hex quando for deixar em um circuito definitivo.

É isso ai, obrigado por compartilhar!
276  International / Portugues / Re: Problema com motor de passo. on: May 07, 2013, 07:55:51 pm
Olá...

Também não entendi o objetivo dos loops que estão no teu código (os while e for).

Quando usamos entradas digitais (botões ou sensores), Delays longos (e agora eu incluo os loops smiley-evil) atrapalham bastante a interação, pois enquanto o arduino esta no delay (ou no loop) "tudo para".

No início eu tive problemas com a livraria, então resolvi ver como a coisa funciona, passo a passo, e escrevi o código abaixo (coisa de novato  smiley-draw).

Code:
//Set Pins for Motor 2
int mLeftP1 = 8;
int mLeftP2 = 9;
int mLeftP3 = 10;
int mLeftP4 = 11;
//Set Pins for Motor 1
int mRightP1 = 4;
int mRightP2 = 5;
int mRightP3 = 6;
int mRightP4 = 7;

int mLeftNextStep = 1;
int mRigthNextStep = 1;

int mDelayTime = 10;
unsigned long mLastTime;

void setup(){
  Serial.begin(9600);
  Serial.println("Let's Play");
 
  //Set Pins for Motor Left
  pinMode(mLeftP1, OUTPUT);
  pinMode(mLeftP2, OUTPUT);
  pinMode(mLeftP3, OUTPUT);
  pinMode(mLeftP4, OUTPUT);
 
  //Set Pins for Motor Right
  pinMode(mRightP1, OUTPUT);
  pinMode(mRightP2, OUTPUT);
  pinMode(mRightP3, OUTPUT);
  pinMode(mRightP4, OUTPUT);
}

void loop(){
  if (Serial .available() > 0){
    char inChar = (char) Serial.read();
    if (inChar == '1'){
        //forward
      mLeftNextStep = MotorCCW(mLeftNextStep, mLeftP1, mLeftP2, mLeftP3, mLeftP4);
      mRigthNextStep = MotorCW(mRigthNextStep, mRightP1, mRightP2, mRightP3, mRightP4);
    }
    else if(inChar == '2'){//backward
      mLeftNextStep = MotorCW(mLeftNextStep, mLeftP1, mLeftP2, mLeftP3, mLeftP4);
      mRigthNextStep = MotorCCW(mRigthNextStep, mRightP1, mRightP2, mRightP3, mRightP4);
    }
    else if(inChar == '3'){//left
      mLeftNextStep = MotorCW(mLeftNextStep, mLeftP1, mLeftP2, mLeftP3, mLeftP4);
      mRigthNextStep = MotorCW(mRigthNextStep, mRightP1, mRightP2, mRightP3, mRightP4);
    }
    else if(inChar == '4'){//right
      mLeftNextStep = MotorCCW(mLeftNextStep, mLeftP1, mLeftP2, mLeftP3, mLeftP4);
      mRigthNextStep = MotorCCW(mRigthNextStep, mRightP1, mRightP2, mRightP3, mRightP4);
    }
    else if(inChar == '0') {//Stop
      MotorStop(mLeftP1, mLeftP2, mLeftP3, mLeftP4);
      MotorStop(mRightP1, mRightP2, mRightP3, mRightP4);}
    else
      Serial.println("Bad Command");
  }
}

void MotorStop(int mPin1, int mPin2, int mPin3, int mPin4){
  digitalWrite(mPin4, LOW);
  digitalWrite(mPin3, LOW);
  digitalWrite(mPin2, LOW);
  digitalWrite(mPin1, LOW);
}

int MotorCW(int Step, int mPin1, int mPin2, int mPin3, int mPin4){ 
  switch(Step){
    case 1:
      digitalWrite(mPin4, HIGH);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
    case 2:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, HIGH);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
    case 3:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, HIGH);
      digitalWrite(mPin1, LOW);
      break;
    case 4:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, HIGH);
      break;
  }
 
  if (Step == 4)
    Step = 1;
  else
    Step++;
   
    return Step;
}

int MotorCCW(int Step, int mPin1, int mPin2, int mPin3, int mPin4){
  switch(Step) {
    case 4:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, HIGH);
      break;
    case 3:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, HIGH);
      digitalWrite(mPin1, LOW);
      break;
    case 2:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, HIGH);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
    case 1:
      digitalWrite(mPin4, HIGH);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
  }
 
  if (Step == 1)
     Step = 4;
   else
     Step--;
     
   return Step;
}

int HalfMotorCW(int Step,int mPin1, int mPin2, int mPin3, int mPin4){
  switch(Step) {
    case 1:
      digitalWrite(mPin4, HIGH);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
    case 2:
      digitalWrite(mPin4, HIGH);
      digitalWrite(mPin3, HIGH);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
    case 3:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, HIGH);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
    case 4:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, HIGH);
      digitalWrite(mPin2, HIGH);
      digitalWrite(mPin1, LOW);
      break;
    case 5:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, HIGH);
      digitalWrite(mPin1, LOW);
      break;
    case 6:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, HIGH);
      digitalWrite(mPin1, HIGH);
      break;
    case 7:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, HIGH);
      break;
    case 8:
      digitalWrite(mPin4, HIGH);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, HIGH);
      break;
  }
 
  if (Step == 1)
     Step = 4;
   else
     Step--;
     
   return Step;
}

int HalfMotorCCW(int Step,int mPin1, int mPin2, int mPin3, int mPin4){
  switch(Step) {
    case 8:
      digitalWrite(mPin4, HIGH);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, HIGH);
      break;
    case 7:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, HIGH);
      break;
    case 6:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, HIGH);
      digitalWrite(mPin1, HIGH);
      break;
    case 5:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, HIGH);
      digitalWrite(mPin1, LOW);
      break;
    case 4:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, HIGH);
      digitalWrite(mPin2, HIGH);
      digitalWrite(mPin1, LOW);
      break;
    case 3:
      digitalWrite(mPin4, LOW);
      digitalWrite(mPin3, HIGH);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
    case 2:
      digitalWrite(mPin4, HIGH);
      digitalWrite(mPin3, HIGH);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
    case 1:
      digitalWrite(mPin4, HIGH);
      digitalWrite(mPin3, LOW);
      digitalWrite(mPin2, LOW);
      digitalWrite(mPin1, LOW);
      break;
  }
 
  if (Step == 1)
     Step = 4;
   else
     Step--;
     
   return Step;
}

Sobre o resto, não há mais nada a acrescentar ao que o bubulindo já falou.
277  International / Portugues / Re: AJUDA - projecto residencial on: May 07, 2013, 03:51:03 pm
Precisas colocar um resistor entre o pino digital e o ground, veja neste post

edit: corrigido o link


No teu setup coloca isto:

Code:
pinMode(bot1, INPUT_PULLUP);
pinMode(bot2, INPUT_PULLUP);
pinMode(reset, INPUT_PULLUP);

E deixa os botões do pino para o GND.

Esta certo! Teu código usa o estado LOW para ativar a zona.
278  International / Portugues / Re: AJUDA - projecto residencial on: May 07, 2013, 11:48:47 am
Precisas colocar um resistor entre o pino digital e o ground, veja neste post

edit: corrigido o link
279  International / Portugues / Re: Alarme Paradox e Arduino Mega on: May 06, 2013, 06:58:46 pm
Sim, 7 volts são suficientes para o arduino, e a capacidade de 1.5A está alem das expectativas ^^

Sobre as demais ligações eu não percebi bem, e não conheço os sensores, precisaríamos mesmo de um multímetro rs... Mas se os sensores trabalham com 12v, soa estranho fazê-los trabalhar com 5v, e também não tenho como imaginar qual a tensão de saída dos sensores...

A tensão necessária para colocar a porta digital do arduino é 3v, ou seja, de 3v até 5v, abaixo de 3v o estado será LOW. Como você disse que a tensão parece baixa, uma alternativa seria usar um um transistor ou um optoacoplador (este último te dá a segurança de não misturar os 5v do arduino com os 12v da central), pois para o circuito funcionar corretamente com duas fontes (estou imaginando as ligações) seria necessário compartilhar o ground.


Edit: ops... agora que percebi que o disparo dos sensores é feito por reles  smiley-zipper e o tamper é um interruptor ^^

Foi mal a viagem (passou o tempo de ir dormir) lol
280  International / Portugues / Re: Alarme Paradox e Arduino Mega on: May 06, 2013, 01:31:12 pm
Se forem todos ligados em serie só precisas de uma resistência.

Verdade, ai não importa qual sensor disparou.

Só é interessante usar portas distintas se for executar ações distintas para cada sensor. ^^

Creio que o máximo que o regulador do arduino oferece (na porta 5v) é 500mA, é preciso verificar essa capacidade e o quanto ele vai esquentar com essa corrente.

Retormando, encontrei esse site, fizeram uns testes http://australianrobotics.com.au/news/fuelling-your-arduino-why-you-should-use-an-external-power-breakout
281  International / Portugues / Re: Alarme Paradox e Arduino Mega on: May 06, 2013, 01:07:56 pm
Sim, um multímetro é essencial! Eu tenho um minipa, não me recordo agora o modelo (ele já tem mais de 15 anos ^^), mas depende do que você vai usar, veja as funções e os preços e o que te cabe.

Acabei de indicar esse link em outro post, considero o máximo de 20mA por porta e 100mA para o conjunto de portas com o mesmo endereço, mas prefiro gastar uns transistores smiley-wink ...no link tem mais detalhes.
http://playground.arduino.cc/Main/ArduinoPinCurrentLimitations
veja também as especificações das boads, é importante:
http://arduino.cc/en/Main/arduinoBoardUno

Creio que o máximo que o regulador do arduino oferece (na porta 5v) é 500mA, é preciso verificar essa capacidade e o quanto ele vai esquentar com essa corrente. Então, creio que o melhor seria você usar o Vin (que é a mesma entrada externa do arduino, antes do regulador) e usar um outro regulador de tensão, ou então uma fonte separada para para os sendores pode ser o ideal.
282  International / Portugues / Re: [Ajuda] Como descobrir a resistência de um determinado componente? on: May 06, 2013, 12:04:28 pm
Primeiro a resposta, a resistência pode ser medida usando um multímetro, cada ponta em um extremo do componente! smiley-yell

Deixando a brincadeira de lado, tua pergunta ficou confusa, pois o que acontece é que o motor consome 0,070mA (pode ocorrer de o motor consumir mais ao ser iniciado ou se algo oferecer resistência para a rotação, exemplo torque), ou seja, o problema não é o motor, mas a capacidade do circuito (da bateria) de fornecer corrente. Se colocares um resistor estarás limitando o funcionamento do motor, baixando a potência dele, e desperdiçando energia.

Como para ligá-lo ao arduino precisarás de uma interface (drive, transistores, shields, etc), podes usar uma porta com PWM, que é útil tanto na "economia" de corrente (é isso mesmo? rs) quanto na redução da rotação.

Sempre alertam de não ligar motores direto nas portas do arduino, pois as portas do arduino não possuem capacidade para alimentar esses motores, por serem "capazes" de fornecer corrente de até 20mA por porta, limitado à 100mA a soma de todas as portas do mesmo sitio.
Code:
http://arduino-info.wikispaces.com/ArduinoPinCurrent
283  International / Portugues / Re: Alarme Paradox e Arduino Mega on: May 06, 2013, 11:46:56 am
Carmolim,

Todas as tuas perguntas podem ser respondidas com um multímetro. Podes alimentar o sistema usando os 5V do arduino, se a corrente estiver dentro das especificações do regulador de tensão, mas creio que seja mais interessante outra fonte, de tensão igual a 5v e maior corrente (amperagem).

Sim, você terá de usar uma porta para cada sensor e um resistor para manter cada porta em baixa.

Sobre a energia do sistema de alarme, precisaríamos saber qual é ela, e aqui entra novamente o multímetro. O resto seria suposição.

284  International / Portugues / Re: [Dúvida] Dúvida sobre utilização de bateria de 9v na UNO. on: May 05, 2013, 07:22:41 am
Complementando ^^

Quando usas o conector USB, a tensão (que deve ser sempre 5v) alimenta diretamente o circuito, sem passar por qualquer regulagem.

Quando usas o conector de entrada externa (que é o mesmo que usar o pino VIn e o GND), a tensão passa por um regulador de tenção, que "reduz" a tensão para 5v, sendo assim, não importa a entrada que utilizas (POWER com 7v até 12v ou USB 5v) as saídas de 5v e 3.3v sempre terão essa tensão. Você pode conectar a bateria na entrada externa ou no Vin, pois são a mesma trilha na placa.
285  International / Portugues / Re: arduino, relay shield, controlar 12v on: May 05, 2013, 07:02:26 am
Sim
Pages: 1 ... 17 18 [19] 20 21 ... 34