Tag: sensor ultrassônico

Palavra-chave
Destaque/Sem destaque
Resolvida/Não Resolvida
Aberta/Encerrada
0 votos
0 respostas
1k visualizações

Olá amigos, estou fazendo um projeto e gostaria muito da ajuda de vocês se possível. Estou ainda estou aprendendo sobre o assunto mas acredito que saiba dos conceitos básicos para começar.
Estou realizando o controle da velocidade de uma bomba de água com um sensor ultrasom (HC-SR04): possuo um tanque de água que quero elevar essa água para um tanque superior e a variação da velocidade da bomba seria de acordo com o nível do tanque inferior. A bomba de água é de 12v então estou usando um driver Ponte H L298N para controlar. A variação simples dessa velocidade já realizei como teste, simples conversões dos valores do sensor para a bomba, mas agora gostaria de fazer isso com a biblioteca PID do Arduino, e encontrei alguns problemas. Segue a lógica que criei até agora, não está finalizada por só falta a parte do direcionamento do valor do sensor para o Input do PID:

  • PID Basic Example for 12V Pump – By Edes
  • Reading analog input 0 to control analog PWM output 3
  • Esse exemplo foi adaptado para funcionar com uma bomba 12V,
  • um driver L298N e um ultrassonico

include <PID_v1.h> //Carrega a biblioteca PID

include <Ultrasonic.h> //Carrega a biblioteca do sensor ultrassonico

define PIN_INPUT 0 //Define os pinos para Input e Output do PID

define PIN_OUTPUT 3

define pino_trigger 4 //Define os pinos para o trigger e echo do ultrasom

define pino_echo 5

int IN1 = 7; //Saídas digitais 3 e 4 ligadas à entrada da Ponte H
int IN2 = 8;
//int variacV_PonteH = 6; //Saída PWM ligada à  entrada da Ponte H p/ variação de tensão do motor

int cmMsec, inMsec; //variáveis de conversão e visualização no monitor serial

//Define Variables we’ll be connecting to
double Setpoint, Input, Output;

//Specify the links and initial tuning parameters
double Kp=2, Ki=5, Kd=1;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

//Inicializa o sensor nos pinos definidos
Ultrasonic ultrasonic(pino_trigger, pino_echo);

void setup()
{
//initialize the variables we’re linked to
Input = analogRead(PIN_INPUT);
Setpoint = 100;

//turn the PID on
myPID.SetMode(AUTOMATIC);

//Inicializa Pinos da bomba/motor e Ponte H
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
//pinMode(variacV_PonteH, OUTPUT);

//Inicia a serial com um baud rate de 9600
Serial.begin(9600);
}

void loop()
{
Input = analogRead(PIN_INPUT);
myPID.Compute();
analogWrite(PIN_OUTPUT, Output);

//Motor
//Sentido Horario:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);

//Sensor Ultrassonico
//Le as informaçoes do sensor, em cm e pol
int cmMsec, inMsec;
long microsec = ultrasonic.timing();
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);

//imprimi os valores no monitor serial:
Serial.print(“Distancia em cm: “);
Serial.print(cmMsec);
Serial.print(” – Distancia em polegadas: “);
Serial.print(inMsec);
Serial.print(” – “);
Serial.print(Input);
Serial.print(” – “);
Serial.println(Output);
delay(500);
}

Meu problema: Já tentei de diversas maneiras realizar alguma conversão/adaptação/leitura do valor do sensor para injetar na porta analógica que o PID utiliza (PIN_INPUT – A0) , porém sem sucesso. Cogitei a possibilidade de ter feito leituras erradas porque não se trata de um valor PWM vindo do sensor e sim um pulso, realizei conversões com o comando “map” para ver se ajudava mas sem sucesso também. Acredito que posso ter feito algum erro bobo e não enxerguei o que realmente devo fazer. Pensei em utilizar o conversor D/A MCP4725, mas ainda da não tenho conhecimento para usá-lo. Se alguém puder me dar uma luz, agradecerei muito.
Desculpe ter prolongado demais o post mas queria tentar explicar o melhor possível, e desculpe se postei na categoria errada. Agradeço desde já!

Mostrando 1 resultado