Buena tarde señores.
El motivo que me trae aquí es para pedirles ayuda en cuanto a la programación, ya que soy nuevo en este ámbito.
El proyecto que quiero realizar es referente al llenado de un estanque, para ello cuenta con un sensor ultrasonico HC-SR04, el controlador MEGA 2560, Motor Shield y una bomba de agua( motor DC 12v)
Para ello debo hacer un control PID, en donde la perturbación sera una llave manual al costado del tanque( recipiente) .
Al momento de abrir la llave el controlador deberá estabilizar el nivel en todo momento, nunca deberá bajar del valor de setpoint.
En pocas palabras he estado recolectando y viendo vídeos acerca de la programación, para lo cual tengo un código y que en cierta parte puedo obtener la distancia con el sensor ultrasonico, pero al momento de seguir con la programación quedo a ciegas ya que no cuento con conocimientos para programar.
Le dejo el código y espero que me puedan ayudar.
Saludos cordiales
Prueba.ino (1.17 KB)
#include <AFMotor.h>
#define echoPin 10
#define triggerPin 9
#define motorPin 13
int delaymili = 500;
int maximumRangeCm = 150;
int minimumRangeCm = 10;
AF_DCMotor motor1(1, MOTOR12_64KHZ);
long duration, distanceCm;
void setup() {
Serial.begin(9600);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(motorPin, OUTPUT);
motor1.setSpeed(255);
}
int i;
void loop() {
initTrigger();
duration = pulseIn(echoPin,HIGH);
distanceCm = microsecCm(duration);
if (distanceCm >= maximumRangeCm || distanceCm <= minimumRangeCm) {
motor1.run(FORWARD);
for (i=0; i<255; i++) {
motor1.setSpeed(i);
delay(3);
Serial.println("Out of range");
}
}
else {
for( i = 255; i >= 0; i--){
motor1.setSpeed(i);
Serial.print("Distance in cm: ");
Serial.println(distanceCm);
delay(delaymili);
}
}
}
long microsecCm(long microsecond) {
return microsecond / 58;
}
void initTrigger() {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
}
Mira lo que sugiere genobraker en este post Control PID