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]
Tags:
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..
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por