Actualizacion proyecto Julia Montilla

This commit is contained in:
Miguel Angel de Heras 2025-04-07 10:34:46 +02:00
parent 451795bb92
commit 263f78e731
2 changed files with 137 additions and 50 deletions
2009
2024/P25_055_Julia_Montilla/4_Carrito_Motor_Vibrador/src

Binary file not shown.

View file

@ -10,6 +10,7 @@
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <WebSerial.h>
//#include <analogWrite.h>
AsyncWebServer server(8080);
unsigned long last_print_time = millis();
@ -24,10 +25,16 @@ unsigned long last_print_time = millis();
#define TIME_TO_CLOSE 1000
#define TIME_TO_OPEN 750
#define TIME_VIBRATION_ACTIVE 7000
#define STOP_MOTOR 0
#define CLOSE_MOTOR 1
#define OPEN_MOTOR 2
const int Channel = 0; // Canal PWM, puede ser de 0 a 15
const int Channel0 = 0; // Canal PWM, puede ser de 0 a 15
const int Channel1 = 1; // Canal PWM, puede ser de 0 a 15
const int frequency = 5000; // Frecuencia en Hz
const int resolution = 8; // Resolución en bits (de 1 a 15)
const int resolution_analog = 12; // Resolución en bits (de 9 a 12)
/*#define UP_ANGLE 0
#define DOWN_ANGLE 66
@ -41,9 +48,13 @@ const int resolution = 8; // Resolución en bits (de 1 a 15)
volatile int dir = 1;
const int K1 = 16;
const int K2 = 17;
const int ENA = 14;
const int IN1 = 26;
const int IN2 = 33;
const int PWM_R = 33;
const int PWM_L = 14;
const int EN_M = 26;
const int IS_R = 32;
const int IS_L = 35;
const int FC_UP = 18;
const int FC_DOWN = 22;
// Set these to your desired credentials.
char *ssid = "Neteja_Neteja"; // your network SSID (name)
@ -64,15 +75,23 @@ IPAddress subnet(255, 255, 255, 0);
const char* host_ip = "192.168.1.255";
bool first_time = true;
unsigned long time_first_time = millis();
bool state_tapa = false;
unsigned long time_cycle = millis();
int num_loop = 1;
int orientation = 0;
int protection_orientation = 0;
unsigned long time_protection = millis();
void cierra(int SPEED)
{
ledcWrite(Channel, SPEED);
digitalWrite(IN2, LOW);
digitalWrite(IN1, HIGH);
if (protection_orientation==CLOSE_MOTOR) ledcWrite(Channel1, 0);
else ledcWrite(Channel1, SPEED);
ledcWrite(Channel0, 0);
if (orientation!=CLOSE_MOTOR) time_protection = millis();
orientation = CLOSE_MOTOR;
//digitalWrite(IN2, LOW);
//digitalWrite(IN1, HIGH);
if(state_tapa == true)
{
WebSerial.println(String(num_loop) + "-Cerrando Tapa:" + String(millis()-time_cycle));
@ -80,11 +99,16 @@ void cierra(int SPEED)
}
}
void abrir(int SPEED)
{
ledcWrite(Channel, SPEED);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
ledcWrite(Channel1, 0);
if (protection_orientation==OPEN_MOTOR) ledcWrite(Channel0, 0);
else ledcWrite(Channel0, SPEED);
if (orientation!=OPEN_MOTOR) time_protection = millis();
orientation = OPEN_MOTOR;
//digitalWrite(IN1, LOW);
//digitalWrite(IN2, HIGH);
if(state_tapa == true)
{
WebSerial.println(String(num_loop) + "-Abriendo Tapa:" + String(millis()-time_cycle));
@ -92,13 +116,14 @@ void abrir(int SPEED)
}
}
void stop_motor()
void stop_motor(bool emergency=false)
{
ledcWrite(Channel, 0);
//digitalWrite(IN1, LOW);
//digitalWrite(IN2, LOW);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
ledcWrite(Channel0, 0);
ledcWrite(Channel1, 0);
orientation = STOP_MOTOR;
if(!emergency) protection_orientation = STOP_MOTOR;
//digitalWrite(IN1, HIGH);
//digitalWrite(IN2, HIGH);
if(state_tapa == false)
{
WebSerial.println(String(num_loop) + "-Parando Motor:" + String(millis()-time_cycle));
@ -106,31 +131,8 @@ void stop_motor()
}
}
void STOP()
{
digitalWrite(K1, LOW);
digitalWrite(K2, LOW);
}
/*#define TIME_START 30000
#define TIME_CLOSE 55000
#define TIME_MOTOR_ON 60000
#define TIME_MOTOR_OFF 65000
#define TIME_LOOP 120000
#define SPEED_MOTOR 180*/
void START()
{
/*cierra(SPEED_MOTOR);
delay(1000);
stop_motor();
delay(5000);
abrir(SPEED_MOTOR);
delay(1000);
stop_motor();
delay(5000);*/
if (((millis()-time_cycle)<TIME_START+TIME_TO_OPEN)&&(millis()-time_cycle)>TIME_START)
{
abrir(SPEED_MOTOR);
@ -150,11 +152,13 @@ void START()
else if (((millis()-time_cycle)<TIME_VIBRATION_ON+TIME_VIBRATION_ACTIVE)&&(millis()-time_cycle)>TIME_VIBRATION_ON)
{
stop_motor();
//WebSerial.println("Activa vibracion");
digitalWrite(K1, HIGH);
digitalWrite(K2, HIGH);
}
else if (((millis()-time_cycle)<TIME_LOOP)&&(millis()-time_cycle)>TIME_VIBRATION_ON+TIME_VIBRATION_ACTIVE)
{
//WebSerial.println("Desactiva vibracion");
digitalWrite(K1, LOW);
digitalWrite(K2, LOW);
}
@ -168,23 +172,83 @@ void START()
}
const int N = 10;
float measure_current()
{
int pin = IS_L;
float current_correction = 1.0;
if (orientation==OPEN_MOTOR)
{
pin = IS_R;
}
int val = analogRead(pin);
for (int i=0; i<N; i++)
val += analogRead(pin);
return (val/N)*(3300*current_correction)/4095;
}
bool fc_stop_up = false;
volatile unsigned long time_fc_up_low = millis();
volatile unsigned long time_fc_up_high = millis();
void is_up() {
if(!digitalRead(FC_UP)&&(millis()-time_fc_up_low)>=100)
{
//Serial.println("Close_Up");
time_fc_up_high = millis();
protection_orientation = OPEN_MOTOR;
fc_stop_up = true;
}
else if(digitalRead(FC_UP)&&(millis()-time_fc_up_high)>=100)
{
//Serial.println("Open_Up");
fc_stop_up = false;
time_fc_up_low = millis();
}
//has_interrupted = true;
}
volatile unsigned long time_fc_down_high = millis();
volatile unsigned long time_fc_down_low = millis();
bool fc_stop_down = false;
void is_down() {
if(!digitalRead(FC_DOWN)&&(millis()-time_fc_down_low)>=100)
{
//Serial.println("Close_Down");
time_fc_down_high = millis();
protection_orientation = CLOSE_MOTOR;
fc_stop_down = true;
}
else if(digitalRead(FC_DOWN)&&(millis()-time_fc_down_high)>=100)
{
//Serial.println("Open_Down");
fc_stop_down = false;
time_fc_down_low = millis();
}
//has_interrupted = true;
}
void setup()
{
IPAddress ip;
delay(1000);
ledcSetup(Channel, frequency, resolution);
ledcSetup(Channel0, frequency, resolution);
ledcSetup(Channel1, frequency, resolution);
analogReadResolution(resolution_analog);
pinMode(K1, OUTPUT);
pinMode(K2, OUTPUT);
ledcAttachPin(ENA, Channel);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(FC_UP, INPUT_PULLUP);
pinMode(FC_DOWN, INPUT_PULLUP);
ledcAttachPin(PWM_R, Channel0);
ledcAttachPin(PWM_L, Channel1);
pinMode(EN_M, OUTPUT);
digitalWrite(K1, LOW);
digitalWrite(K2, LOW);
stop_motor();
//ledcWrite(Channel, 128);
//digitalWrite(IN1, LOW);
//digitalWrite(IN2, HIGH);
ledcWrite(Channel0, 0);
ledcWrite(Channel1, 0);
digitalWrite(EN_M, LOW);
Serial.begin(115200);
if(readId==0) ip=ip0;
else if(readId==1) ip=ip1;
@ -284,15 +348,38 @@ void setup()
time_cycle = millis();
});*/
time_cycle = millis();
digitalWrite(EN_M, HIGH);
cierra(SPEED_MOTOR);
time_first_time = millis();
//attachInterrupt(digitalPinToInterrupt(FC_UP), is_up, CHANGE); // Configurar la interrupción
//attachInterrupt(digitalPinToInterrupt(FC_DOWN), is_down, CHANGE); // Configurar la interrupción
}
void loop() {
is_down();
is_up();
if (((measure_current()>=2000)&&(orientation!=STOP_MOTOR)&&((millis()-time_protection)>=250))||((fc_stop_up)&&(orientation==OPEN_MOTOR))||((fc_stop_down)&&(orientation==CLOSE_MOTOR))) { //Para el motor si la corriente es mayor a 1.5A (Borrar en caso de no funcionar)
if((!fc_stop_up)&&(!fc_stop_down))
{
protection_orientation = orientation;
Serial.println("Proteccion por corriente");
}
else Serial.println("Proteccion por FC");
stop_motor(true);
//Serial.println("Parada de emergencia");
}
if (first_time)
{
cierra(SPEED_MOTOR);
delay(1000);
stop_motor();
first_time = false;
if (millis()-time_first_time>=1000)
{
stop_motor();
first_time = false;
}
}
WebSerial.loop();
httpServer.handleClient();