Aquisição de tensão e controle de motor de passos.

Boaa Noite Galera!
Se alguem puder me dar uma luz eu envio uma caixa de cachaça rs.

Estou com um projeto que funciona da seguinte maneira, tenho que analisar uma tensão, criar ela como referencia e de acordo com a variação da tensão a seguir mexer um motor de passos.

Vou inserir a programação,ela está pegando uma tensão e calculado a média, simples.

Já a outra programação serve para mexer o motor de passos juntamente com um driver, Separadas elas funcionam!Consigo mexer o motor de passos com sua programação e pegar a tensão, agora quando tento  usar ambas o motor simplesmente não mexe, no exemplo o motor deveria apenas subir (false) 200 pulsos se a tensão for maior que 1, e ele não mexe.Alguém teria alguma ideia do que pode estar inibindo o sinal de ser enviado para o driver do motor de passos??

int i = 0; // variavel de contagem
float soma = 0; // variavel que soma os valores obtidos
float media = 0; // variavel que calcula a media
int dirPin = 7; //Direção
int stepperPin = 9; //Gerar o pulso
int x;
int a = 0;
float voltageref;
const int buttonPin = 2;
void setup() {
x = 200;
a = 0;
// Inicializa a comunicação serial com 9600 bits por segundo
// O padrão de comunicação serial para a placa Arduino é
// 8 bits de dados, sem paridade (n) e 1 bit de parada (8,n,1)
Serial.begin(9600);
pinMode(dirPin, OUTPUT); //set pin as Output
pinMode(stepperPin, OUTPUT); //set pin as Output
}
void step(boolean dir,int steps)
{
digitalWrite(dirPin,dir); //setup the direction
delay(50); //wait 50 ms before sending the pulses

for(int i=0;i<steps;i++)
{
digitalWrite(stepperPin, HIGH); //generate a square wave
delayMicroseconds(280); //that stays 250 microseconds High
digitalWrite(stepperPin, LOW); //and
delayMicroseconds(280); //250 microseconds low
}
}

// A rotina loop é executada indefinidamente
void loop() {
soma = 0;
i = 0;
media = 0;
while(i < 60) {

// ler sinal analogico no pino 0:
int sensorValue = analogRead(A1);

soma = soma + sensorValue;

i++;

delay(3);

}
media = soma/60 ;

// Converter leitura analogica (0 - 1023) em voltagem (0 - 5V):
float voltage = media * (5.0 / 1023.0);
Serial.println(voltage, 2);

if(voltage>=1){
step(false,200);}
if(voltage >=2){
step(false,400);}}

Exibições: 247

Anexos

Responder esta

Respostas a este tópico

Lucas, bom dia.

Eu vi dois problemas.

Primeiro: Voce comenta no código:  // ler sinal analogico no pino 0:  mas usa A1.

Segundo: voce testa se a voltage é >= 1 e depois se é >= 2.

Se for 2, será  > que 1 e = 2, ou seja, verdadeiro para os dois IF's.

Então eu mudei o código.

Veja abaixo e testa pra ver se atende sua necessidade.

Rui

int Maior = 0;
int i = 0; // variavel de contagem
float soma = 0; // variavel que soma os valores obtidos
float media = 0; // variavel que calcula a media
int dirPin = 7; //Direção
int stepperPin = 9; //Gerar o pulso
int x;
int a = 0;
float voltageref;
const int buttonPin = 2;
void setup() {
x = 200;
a = 0;
// Inicializa a comunicação serial com 9600 bits por segundo
// O padrão de comunicação serial para a placa Arduino é
// 8 bits de dados, sem paridade (n) e 1 bit de parada (8,n,1)
Serial.begin(9600);
pinMode(dirPin, OUTPUT); //set pin as Output
pinMode(stepperPin, OUTPUT); //set pin as Output
}
void step(boolean dir,int steps)
{
digitalWrite(dirPin,dir); //setup the direction
delay(50); //wait 50 ms before sending the pulses

for(int i=0;i<steps;i++)
{
digitalWrite(stepperPin, HIGH); //generate a square wave
delayMicroseconds(280); //that stays 250 microseconds High
digitalWrite(stepperPin, LOW); //and
delayMicroseconds(280); //250 microseconds low
}
}
// A rotina loop é executada indefinidamente
void loop() {
soma = 0;
i = 0;
media = 0;
while(i < 60) {

// ler sinal analogico no pino 0:
int sensorValue = analogRead(A1);

soma = soma + sensorValue;

i++;

delay(3);

}
media = soma/60 ;

// Converter leitura analogica (0 - 1023) em voltagem (0 - 5V):
float voltage = media * (5.0 / 1023.0);
Serial.println(voltage, 2);


if(voltage >=2)
{
Serial.println(400);
step(false,400);
Maior = 1;
}
if (Maior == 0)
{
if(voltage>=1)
{
Serial.println(200);
step(false,200);
}
}
Maior = 0;


}

Lucas, cadê minha cachaça?

Rui

Mando na hora!Você tem alguma ideia de como podemos resolver isso?

te mandei uma mensagem!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço