#include <AccelStepper.h>
// Configurações do motor de passo
const int stepPin = 6; // Pino de passo => (PB3)
const int dirPin = 5; // Pino de direção => (PB4)
const float motorResolution = 1.8; // Resolução do motor em graus
const float gearRatio = 2.0; // Relação de redução do motor
const float screwPitch = 2.0; // Passo da rosca em mm
// Velocidade da plantadeira
const float planterSpeedKmH = 10.0; // Velocidade da plantadeira em km/h
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
void setup() {
Serial.begin(9600);
stepper.setMaxSpeed(1000);
stepper.setAcceleration(500);
}
void loop() {
float fertilizerRateKgHa, fertilizerRateKgAlq;
float fertilizerFlowRateKgS;
if (Serial.available() > 0) {
fertilizerRateKgHa = Serial.parseFloat(); // Recebe dosagem em kg/ha do usuário
// Converte dosagem de kg/ha para kg/alq
fertilizerRateKgAlq = fertilizerRateKgHa * 0.0247105; // 1 hectare = 0.0247105 alqueires
// Converte velocidade de km/h para m/s
float planterSpeedMs = (planterSpeedKmH * 1000) / 3600;
// Calcula a vazão do adubo em kg/s
fertilizerFlowRateKgS = (fertilizerRateKgHa * planterSpeedMs) / 10000;
// Calcula a velocidade do motor de passo em passos por segundo
float stepsPerRevolution = (360 / motorResolution) * gearRatio;
float stepSpeed = (fertilizerFlowRateKgS * stepsPerRevolution) / (screwPitch * 1000);
// Define a velocidade do motor de passo
stepper.setSpeed(stepSpeed);
}
// Atualiza a posição do motor
stepper.runSpeed();
}