Quiero agradecer a todos por su ayuda. Terminé el proyecto. Voy a publicar lo que hice en caso de que pueda ayudar a alguien en el futuro.
Porlotanto,modifiquéeldiagramaoriginaldelasiguientemanera:
- reemplazóeltemporizadorNE555conunArduinoNano
- agregóunreléSPDT
- reemplazóeltransistorIRF510coneltransistorNPNBC337
- agregóunreguladordevoltajelinealLM7805
Todosestospasossetomaronparapodercontrolardosreléssimultáneamente.LafuncióndelreléDPDTescambiarlapolaridaddesalida,mientrasquelafuncióndelreléSPDTescortarelsuministrodeenergíaalmotormientrasocurrelaconmutacióndelapolaridad,porloqueelmotornosetensa.
ARDUINO SCRIPT
typedef int (*stateFunctionPtr)(unsigned long millsElapsed, int* alternative);
int first_state(unsigned long millsElapsed, int* alternative)
{
digitalWrite(9, LOW);
digitalWrite(12, LOW);
if (millsElapsed > 180000)
{
return 1;
}
return 0;
}
int second_state(unsigned long millsElapsed, int* alternative)
{
digitalWrite(9, HIGH);
digitalWrite(12, LOW);
if (millsElapsed > 4000)
{
return 2;
}
return 1;
}
int third_state(unsigned long millsElapsed, int* alternative)
{
digitalWrite(9, HIGH);
digitalWrite(12, HIGH);
if (millsElapsed > 4000 && *alternative)
{
*alternative = 0;
return 4;
}
else if (millsElapsed > 4000 && !(*alternative))
{
*alternative = 1;
return 3;
}
return 2;
}
int fourth_state(unsigned long millsElapsed, int* alternative)
{
digitalWrite(9, HIGH);
digitalWrite(12, LOW);
if (millsElapsed > 4000)
{
return 0;
}
return 3;
}
int fifth_state(unsigned long millsElapsed, int *alternative)
{
digitalWrite(9, LOW);
digitalWrite(12, HIGH);
if (millsElapsed > 180000)
{
return 2;
}
return 4;
}
int (*states[5])(unsigned long,int*) = {
first_state,
second_state,
third_state,
fourth_state,
fifth_state
};
int pair = 1;
int state = 0;
unsigned long milsNow = 0;
void setup()
{
pinMode(9, OUTPUT);
pinMode(12, OUTPUT);
}
void loop()
{
int tmp = state;
unsigned long millsElapsed = millis() - milsNow;
state = states[tmp](millsElapsed, &pair);
if (state != tmp)
{
milsNow = millis();
millsElapsed = 0;
}
}