//---------- DEFINIÇÃO DE PORTAS ----------//
//portas de leitura para termistores
#define TH0 A0 // Termistor A
#define TH1 A1 // Termistor B
#define TH2 A2 // Termistor C
// portas de controle para resistencias
#define OUT1 2 // Resistencia A
#define OUT2 3 // Resistencia B
#define OUT3 4 // Resistencia C
// define o numero de pasos para cada motor
#define Step1 5 // Motor A
#define Step2 7 // Motor B
#define Step3 9 // Motor C
// define a direção de rotação para cada motor
#define Dir1 6 // Motor A
#define Dir2 8 // Motor B
#define Dir3 10 // Motor C
//--------- DEFINIÇÃO DE VARIAVEIS --------//
double INA; // Obtêm as leituras de tempeatura para cada resistência
double INB; //
double INC; //
double OUTA; // Define o sinal de saida para as resistencias
double OUTB; //
double OUTC; //
double setA = 00.0; // Define a temperatura desejada
double setB = 00.0; //
double setC = 00.0; //
double Kp[] = {10.0, 10.0, 10.0};
double Ki[] = {1.5, 1.5, 1.5};
double Kd[] = {80.0, 80.0, 80.0};
byte DP[] = {OUT1, OUT2, OUT3, Step1, Step2, Step3, Dir1, Dir2, Dir3}; //define todas as portas digitais
byte AP[] = {TH0, TH1, TH2}; //define todas as portas Analogicas
//-------- DEFINIÇÃO DE BIBLIOTECAS -------//
#include <PID_v1_bc.h>
PID RstA(&INA, &OUTA, &setA, Kp[0], Ki[0], Kd[0], DIRECT);
PID RstB(&INB, &OUTB, &setB, Kp[1], Ki[1], Kd[1], DIRECT);
PID RstC(&INC, &OUTC, &setC, Kp[2], Ki[2], Kd[2], DIRECT);
void setup() {
RstA.SetOutputLimits(0, 255); // PWM 8 bits - Configura a saída máxima do PWM
RstA.SetMode(AUTOMATIC); // Inicializa o PID em modo automático
RstB.SetOutputLimits(0, 255); //
RstB.SetMode(AUTOMATIC); //
RstC.SetOutputLimits(0, 255); //
RstC.SetMode(AUTOMATIC); //
for (int Np = 0; Np <= 8; Np++) {
pinMode(DP[Np], OUTPUT); // Define todas as portas como saída
digitalWrite(DP[Np], LOW); // Desliga todas as portas
if (Np <= 2) {
pinMode(AP[Np], INPUT); // Define todas as portas como Entrada
}
}
}
void loop() {
/* Objetivo:
Criar um código capaz de controlar 3 recicladores de forma independente.
cada reciclador utilizará uma resistencia e um motor de passo Nema 17-23
Criar um menu que mostra a temperatura escolhida para cada resistencia e a temperatura lida para
cada resistencia.
funcionamento:
Cada resistencia e motor deverá ser contorlada de forma independente;
Em casos emque algum resistenia apresente falha, o circuito deverá parar apenas
a unidade em que se encontrar a falha, enquanto as demais trabalham normalmente;
Motores podem ser iniciados normamente independende de uma falha na resistencia
*/
}
bool Delay(unsigned long &Tempo, int intervalo) { // função Neotimer
if (millis() - Tempo == intervalo) { // verifica se o tempo de inervalo foi alcançado
Tempo = millis(); // guarda o valor de millis() par criar um novo intervalo
return true
} else {
return false
}
}