Olá Pessoal,

 

Estou com um problema de programação no meu projeto de mestrado. Preciso controlar a velocidade de um motor DC e ao mesmo tempo ligar um acelerômetro no Arduíno ( o acelerômetro vai captar a vibração causada pelo motor).

 

Estou com os 2 códigos prontos mas não estou conseguindo juntar ambos fazer funcionar. Alguém pode me ajudar com isso? Preciso adaptar para funcionar os 2 ao mesmo tempo. Desde já agradeço.

 

Logo abaixo estarão os 2 códigos separados:

 

Primeiro é o do motor:

[code]/*

Projeto Arduino controlando a velocidade de um motor cc 

com mostrador de leds.

Por Jota

----------------------------------------

--=<| www.ComoFazerAsCoisas.com.br |>=--

----------------------------------------

*/

 

int const potenciometro = 0; //pino analógico onde o potenciômetro está conectado.

int const transistor = 9;    //pino digital onde o TIP120 está conectado.

 

int const ledVerde  = 2;     //pino digital que o led verde está conectado.

int const ledAmarelo  = 3;   //pino digital que o led amarelo está conectado.

int const ledVermelho  = 4;  //pino digital que o led vermelho está conectado.

 

int valPotenciometro = 0;    //armazenará o valor lido no potenciômetro.

 

//função setup é executada uma vez quando o arduino é ligado.

void setup() {

  pinMode(transistor, OUTPUT); //definindo o pino digital 9 como de saída.

 

  //definindo pinos dos leds como de saída

  pinMode(ledVerde, OUTPUT);   

  pinMode(ledAmarelo, OUTPUT); 

  pinMode(ledVermelho, OUTPUT);

}

 

//Função loop é executada repetidamente enquanto o arduino estiver ligado.

void loop() {   

  //lendo o valor do potenciômetro (0 até 1023) e dividindo por 4 para obter um

  //valor entre 0 e 255 que são valores adequados para a base do TIP120.

  valPotenciometro = analogRead(potenciometro) / 4;

 

  //atribuindo o valor lido no potenciômetro a base do TIP120. 

  analogWrite(transistor, valPotenciometro);

 

  //acendendo e pagando leds conforme posição do potenciômetro

  controlarLeds();

 

void controlarLeds() {   

  //Led verde - acendendo ou apagando conforme posição do potenciômetro.

  if (valPotenciometro >= 40) {

    digitalWrite(ledVerde,HIGH);

  } else {

    digitalWrite(ledVerde,LOW);

  }

 

  //Led amarelo - acendendo ou apagando conforme posição do potenciômetro.

  if (valPotenciometro >= 125) {

    digitalWrite(ledAmarelo,HIGH);

  } else {

    digitalWrite(ledAmarelo,LOW);

  } 

 

  //Led vermelho - acendendo ou apagando conforme posição do potenciômetro.

  if (valPotenciometro >= 210) {

    digitalWrite(ledVermelho,HIGH);

  } else {

    digitalWrite(ledVermelho,LOW);

  }

}[/code]

 

Depois o do acelerômetro:

 

[code]#include <AcceleroMMA7361.h>

 

AcceleroMMA7361 accelero;

int x;

int y;

int z;

 

void setup()

{

  Serial.begin(9600);

  accelero.begin(13, 12, 11, 10, A1, A2, A3);

  accelero.setARefVoltage(3.3);                   //sets the AREF voltage to 3.3V

  accelero.setSensitivity(LOW);                   //sets the sensitivity to +/-6G

  accelero.calibrate();

}

 

void loop()

{

  x = accelero.getXAccel();

  y = accelero.getYAccel();

  z = accelero.getZAccel();

  Serial.print("\nx: ");

  Serial.print(x);

  Serial.print(" \ty: ");

  Serial.print(y);

  Serial.print(" \tz: ");

  Serial.print(z);

  Serial.print("\tG*10^-2");

  delay(500);                                     //make it readable

}[/code][/code]

Exibições: 827

Responder esta

Respostas a este tópico

Bom dia,

     Não sei se isso vai funcionar, mas tente executar este codigo que eu modifique conforme os seus codigos informados, eu fiz uma união dos dois codigo.

/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------/*

#include <AcceleroMMA7361.h>

int const potenciometro = 0; //pino analógico onde o potenciômetro está conectado.
int const transistor = 9;    //pino digital onde o TIP120 está conectado.
int const ledVerde  = 2;     //pino digital que o led verde está conectado.
int const ledAmarelo  = 3;   //pino digital que o led amarelo está conectado.
int const ledVermelho  = 4;  //pino digital que o led vermelho está conectado.
int valPotenciometro = 0;    //armazenará o valor lido no potenciômetro.

//Variaveis acelerometro
int x;
int y;
int z;
AcceleroMMA7361 accelero;

//função setup é executada uma vez quando o arduino é ligado.
void setup() {
  pinMode(transistor, OUTPUT); //definindo o pino digital 9 como de saída.

  //definindo pinos dos leds como de saída
  pinMode(ledVerde, OUTPUT);   
  pinMode(ledAmarelo, OUTPUT);
  pinMode(ledVermelho, OUTPUT);
 
  //Setup Acelerometro
  Serial.begin(9600);
  accelero.begin(13, 12, 11, 10, A1, A2, A3);
  accelero.setARefVoltage(3.3);        //sets the AREF voltage to 3.3V
  accelero.setSensitivity(LOW);     //sets the sensitivity to +/-6G
  accelero.calibrate();
}

//Função loop é executada repetidamente enquanto o arduino estiver ligado.
void loop() {   
  //lendo o valor do potenciômetro (0 até 1023) e dividindo por 4 para obter um
  //valor entre 0 e 255 que são valores adequados para a base do TIP120.
  valPotenciometro = analogRead(potenciometro) / 4;

  //atribuindo o valor lido no potenciômetro a base do TIP120.
  analogWrite(transistor, valPotenciometro);

  //acendendo e pagando leds conforme posição do potenciômetro
  controlarLeds();
 
  //Coleta de dados do Acelerometro
  x = accelero.getXAccel();
  y = accelero.getYAccel();
  z = accelero.getZAccel();

  Serial.print("\nx: ");
  Serial.print(x);
  Serial.print(" \ty: ");
  Serial.print(y);
  Serial.print(" \tz: ");
  Serial.print(z);
  Serial.print("\tG*10^-2");

  delay(500);    //make it readable
}

void controlarLeds() {   
  //Led verde - acendendo ou apagando conforme posição do potenciômetro.
  if (valPotenciometro >= 40) {
    digitalWrite(ledVerde,HIGH);
  } else {
    digitalWrite(ledVerde,LOW);
  }

  //Led amarelo - acendendo ou apagando conforme posição do potenciômetro.
  if (valPotenciometro >= 125) {
    digitalWrite(ledAmarelo,HIGH);
  } else {
    digitalWrite(ledAmarelo,LOW);
  }

  //Led vermelho - acendendo ou apagando conforme posição do potenciômetro.
  if (valPotenciometro >= 210) {
    digitalWrite(ledVermelho,HIGH);
  } else {
    digitalWrite(ledVermelho,LOW);
  }
}

#include <AcceleroMMA7361.h>

int const potenciometro = 0; //pino analógico onde o potenciômetro está conectado.
int const transistor = 9;    //pino digital onde o TIP120 está conectado.
int const ledVerde  = 2;     //pino digital que o led verde está conectado.
int const ledAmarelo  = 3;   //pino digital que o led amarelo está conectado.
int const ledVermelho  = 4;  //pino digital que o led vermelho está conectado.
int valPotenciometro = 0;    //armazenará o valor lido no potenciômetro.

//Variaveis acelerometro
int x;
int y;
int z;
AcceleroMMA7361 accelero;

//função setup é executada uma vez quando o arduino é ligado.
void setup() {
  pinMode(transistor, OUTPUT); //definindo o pino digital 9 como de saída.

  //definindo pinos dos leds como de saída
  pinMode(ledVerde, OUTPUT);   
  pinMode(ledAmarelo, OUTPUT);
  pinMode(ledVermelho, OUTPUT);
 
  //Setup Acelerometro
  Serial.begin(9600);
  accelero.begin(13, 12, 11, 10, A1, A2, A3);
  accelero.setARefVoltage(3.3);        //sets the AREF voltage to 3.3V
  accelero.setSensitivity(LOW);     //sets the sensitivity to +/-6G
  accelero.calibrate();
}

//Função loop é executada repetidamente enquanto o arduino estiver ligado.
void loop() {   
  //lendo o valor do potenciômetro (0 até 1023) e dividindo por 4 para obter um
  //valor entre 0 e 255 que são valores adequados para a base do TIP120.
  valPotenciometro = analogRead(potenciometro) / 4;

  //atribuindo o valor lido no potenciômetro a base do TIP120.
  analogWrite(transistor, valPotenciometro);

  //acendendo e pagando leds conforme posição do potenciômetro
  controlarLeds();
 
  //Coleta de dados do Acelerometro
  x = accelero.getXAccel();
  y = accelero.getYAccel();
  z = accelero.getZAccel();

  Serial.print("\nx: ");
  Serial.print(x);
  Serial.print(" \ty: ");
  Serial.print(y);
  Serial.print(" \tz: ");
  Serial.print(z);
  Serial.print("\tG*10^-2");

  delay(500);    //make it readable
}

void controlarLeds() {   
  //Led verde - acendendo ou apagando conforme posição do potenciômetro.
  if (valPotenciometro >= 40) {
    digitalWrite(ledVerde,HIGH);
  } else {
    digitalWrite(ledVerde,LOW);
  }

  //Led amarelo - acendendo ou apagando conforme posição do potenciômetro.
  if (valPotenciometro >= 125) {
    digitalWrite(ledAmarelo,HIGH);
  } else {
    digitalWrite(ledAmarelo,LOW);
  }

  //Led vermelho - acendendo ou apagando conforme posição do potenciômetro.
  if (valPotenciometro >= 210) {
    digitalWrite(ledVermelho,HIGH);
  } else {
    digitalWrite(ledVermelho,LOW);
  }
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------/*

Obrigado Cleber Roberto. Vou tentar aqui e te falo!

Valeu mesmo!

Deu no mesmo aqui amigo. Tá igual ao meu. Roda mas não consigo controlar a velocidade do motor.

Você esta conseguindo pegar os dados do acelerometro?

Eu consegui aqui. Brigadão pela ajuda pessoal.

Posta aí como conseguiu amigo.

Você precisa usar PID pra controlar a velocidade usando a vibração como realimentação..

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço