Pwm, motore start e stop con controllo giri

sto reaalizzando una stufa e ho un motore che attraverso una coclea carica il cippato nella stufa, volevo fare un programma che facesse un strat e stop attraverso 2 pulsanti e con altri 2 pulsanti modificasse la velocita in piu con un sensore hall sulla puleggia deve controlare che giri se non vede piu i giri il tutto deve fermarsi (coclea bloccata motore fermo in sforzo e poi si fonde se no), il problema e che da giorni ci provo ma non essendo eserto non riesco ho solo fatto a variazione di velocita chiedevo aiuto a voi se potote. posto il mio codice scritto fino ad ora.grazie.

int val = 0;                  
int stato = 0;  
int vecchio_val = 0;  
const int Motor =  3;  //collegamento del motorino
const int pdown = 11; //collegamento pulsante -
const int pup = 10; //collegamento pulsante +
int Pot = 0; //valore della potenza del motorino


  

void setup()  
{ 

 
  pinMode(Motor, OUTPUT);  //PIN come uscita
  pinMode(pdown, INPUT); //pin in uscita
  pinMode(pup, INPUT); //pin in ingresso
  digitalWrite(pdown, HIGH); //resistenza pull-up on
  digitalWrite(pup, HIGH); //resistenza pull-up on
  
}

void loop() { 
 

if (digitalRead (pup) ==LOW) {
  Pot = Pot +1 ; //aumenta la potenza
  if (Pot == 255) {
      Pot = 254;
  }
}
if (digitalRead (pdown) ==LOW) {
  Pot = Pot -1 ; //diminuiscie la potenza
  if (Pot == 0) {
      Pot = 1;
  }
}
analogWrite(Motor, Pot);
delay(100);

}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Ho preparato questo sketch che dovrebbe funzionare.

#define EncoderPin 2            // encoder
#define MotorPin   3            // motore
#define StartPin   4            // START
#define StopPin    5            // STOP
#define UpPin     10            // UP
#define DownPin   11            // DOWN

byte MotorePWM = 0;             // PWM motore
boolean Started = false;        // start/stop
volatile boolean Coclea = 0;    // stato coclea

void setup() { 
  pinMode(MotorPin, OUTPUT);
  pinMode(EncoderPin, INPUT_PULLUP);
  pinMode(StartPin, INPUT_PULLUP);
  pinMode(StopPin, INPUT_PULLUP);
  pinMode(DownPin, INPUT_PULLUP);
  pinMode(UpPin, INPUT_PULLUP);
  attachInterrupt(0, ISRR, FALLING);
}

void loop() {
  if ((Started == true) && (Coclea == false)) {
    delay(1000);                // aspetta un secondo
    if (Coclea == false) Started = false;
  }

  if (digitalRead(StopPin == LOW)) Started = false;
  if (digitalRead(StartPin == LOW)) Started = true;

  if (digitalRead(UpPin == LOW)) MotorePWM ++;        // aumenta PWM
  if (digitalRead(DownPin == LOW)) MotorePWM --;      // diminuisce PWM

  if (Started == false) MotorePWM = 0;                 // spegni motore
  else {
    if (MotorePWM < 1) MotorePWM = 1;
    if (MotorePWM > 254) MotorePWM = 254;
  }

  analogWrite(MotorPin, MotorePWM);
  Coclea = false;                                     // resetta stato coclea
}

void ISRR() {
  Coclea = true;
}

salve, intanto grazie mille per aiutarmi, ho caricato lo sketch e provato su una bread board, con il led, e il led resta sempre acceso e non varia niente alla pressione e simulando il sensore le ho provate tutte.

Forse dovresti fornire lo schema che stai usando.

non so come creare uno schema ma sto usando un irf640 per il motore, e i pulsanti connessi ai 5 volt di arduino i sensore hall( dovrebbe essere un semplice contatto che si chiude e apre al passaggio della calamita penso) collegato ai 5v, il tutto collegato ai pin che sono definiti ad inizio programma. dimenticaavo ho un arduino mega 2560 rev.3.

lo IRF640 non è un logic level e forse avrai qualche problema per far passare con i 5V di pilotaggio oltre 3A: meglio un logic level tipo IRLZ44.

I pulsanti devono essere connessi a massa e non ai 5V (altrimenti nello sketch non serve attivare il resistore interno di pullup).

Stessa cosa per il sensore di Hall.

avevo questo a casa se no ho irf3710 oppure irf540n oppure mi stanno per arrivare un paio di tip35c o 2n3055 (ma non penso siano adatti allo scopo, secondo te possono andare bene qualcuno di questi? il motore e in 110 volt in continua circa e sono sui 5A.

No, entrambi il MOSFET hanno una tensione massima di 100V: ti consiglio un IRL640 da 200V e 18A.

Ma sei sicuro che il motore sia da 110Vdc? Non è che un motore ad induzione a 110Vac 60Hz?

si sicuro ho misurato col tester dove era montato prima e scusa ma 180 vot non 110, era su un tapirulan. ma neanche il tip35 non va bene? se limito a un voltaggio tipo sui 90 volt.

Il motore da 180Vdc 5A consuma ben 900W.

Il TIP35 ha una tensione massima di 40V, mentre il TIP35C arriva a 100V.

ok grazie mille, appena posso provero e le sapro dire. :slight_smile:

Comincerei a pensare alla possibilità di cambiare motore.
Il primo problema qui è l'hardware, il software è molto secondario e facilmente risolvibile.

Posta più dati, altrimenti rimane difficile dare una mano.