Ciao, sono nuovo del forum e vorrei premettere che sono un ragazzo all'ultimo anno di meccatronica (non ingegneria) e che quindi di programmazione a scuola abbiamo fatto davvero poco, ma io posso dire di essere un pelino più avanti (altrimenti non sarei qui) siccome mi interessa questo topic.
Il mio intento é quello di costruire un'auto monoposto utilizzando due motori brushless sensored di un hoverboard, comandati ciascuno da un controller apposta per i motori BLDC.
Tra le tante sfide, la più complicata fin'ora è la programmazione del differenziale (automobilistico, elettronico) realizzabile, secondo me, tramite il posizionamento di due potenziometri paralleli all'albero dello sterzo, il quale farebbe girare: il potenziometro sinistro se sterzo a sinistra; il potenziometro destro se sterzo a destra. Quindi il segnale letto durante una sterzata generica andrebbe combinato con il valore dell'acceleratore in una posizione generica, per poi, tramite il programma, inviare il giusto segnale al controller, che invierà a sua volta la giusta corrente al motore.
Per capire ancora meglio, il collegamento dovrebbe essere diretto tra l'acceleratore (potenziometro a pedale) e il controller, il quale manderebbe corrente al motore soltanto in base al valore del acceleratore.
Ovviamente ho già pensato un po' a tutto ma mi sono bloccato quando sono arrivato a pensare che forse mi servirebbe una funzione, che creerei io, a due variabili del tipo z=f(x, y), siccome il valore che deve arrivare al controller, deve dipendere dal valore dell'acceleratore e da quello del potenziometro verso il quale sto sterzando, e quindi dovrei usare l'interpolazione per trovarla, una cosa impossibile per ora.
Le condizioni principali sono che:
-se l'acceleratore=0, a prescindere dal potenziometro, il segnale è ovviamente uguale a 0;
-se il potenziometro=1023 -> il segnale è uguale a 0;
-il segnale in uscita è direttamente proporzionale al valore dell'acceleratore, e inversamente proporzionale a quello del potenziometro.
Il codice si riferisce solo a un potenziometro, quello sinistro, per ora.
Posso dire, grazie all'esperienza, che a causa della mia ignoranza mi sto complicando la vita ahah, quindi chiedo a voi:
-Un aiuto nel trovare una soluzione a questo problema, magari introducendomi a una funzione di arduino o a un metodo che semplifichi le cose, o se sapete dirmi una funzione matematica che soddisfi ciò che chiedo, insomma sapete voi;
-Secondariamente, non è essenziale, qualche consiglio generale sul programma, se ce n'è bisogno;
-se è meglio usare la funzione "delay" o "millis".
Caricando il programma che ho provato a fare, tenendo conto, per ora, solo di un potenziometro, spero di non confondervi ancora di più le idee XD.
int pot1 = A1; //potenziometro sinistro
int ped = A0; //pedale
int esc = A2; //sarebbe il pin dell'esc, cioè il controller
int valF; //valore finale da inviare al controller
int POTs; //valore del potenziometro sinistro
int POTd; //valore del potenziometro destro
int acceleratore;
void setup() {
Serial.begin(9600);
pinMode(pot1, INPUT);
pinMode(ped, INPUT);
pinMode(esc, OUTPUT);
}
void loop() {
POTs = analogRead(pot1); //legge il potenziometro sinistro
acceleratore = analogRead(ped);
if (ped == 0) //se non accelero...
{
valF == 0; //non manda segnale in uscita...
analogWrite(esc, valF); //mando il segnale "val" in uscita all'esc
};
if (POTs == 1023) { //se giro il potenziometro sinistro al massimo, quindi sterzo al massimo, ...
valF == 0;
analogWrite(esc, valF); //mando il segnale "val" in uscita all'esc
}
if (ped != 0) { //se accelero, e sterzo, ma non al massimo...
if (POTs != 1023) {
//parte che non so fare
analogWrite(esc, valF); //mando il segnale "val" in uscita all'esc
}
}
}
Spero di essere stato il più chiaro possibile e ringrazio anticipatamente per l'aiuto