progetto di fattibilità

Buonasera, parto con il presupposto che non ho ancora arduino e non ho ancora le conoscenze necessarie, quindi prima di inoltrarmi in questo mondo chiedo qui.
Il progetto a cui terrei è semplicemente un potenziometro che a una posizione A dia X impulsi di corrente 12v al minuto, a posizione B dia Y impulsi al minuto, ovviamente in modo crescente: girando il potenziometro aumenteranno gradualmente gli impulsi al minuto fino al massimo.
E qui mi sorgono delle domande:
-Prima di tutto, si può fare?
-Può essere l'impulso 12v sapendo che arduino da solo 5v? Escludendo un relè in quanto parlerei di impulsi di 1 o poco più millisecondi
-Posso per i componenti tipo usare un potenziometro che ho e impostare poi in programmazione i punti minimi e massimi in quanto non userei tutta la "corsa" del potenziometro?
-Arduino può funzionare senza pc in "autoplay" cioè che il programma parta autonomamente quando alimentato?
Per parlarci chiaro pensavo di alimentare un iniettore di benzina (sapendo che ci sono infinite variabili da tenere conto, ma quelle verranno implementate in seguito**) quindi a posizione minima dovrà dare un numero di impulsi del regime di minimo che imposto, alla posizione massima darà il numero di impulsi che metterò io.
-Posso nello stesso momento e in tempo reale oltre a definire il tempo tra un impulso e un altro (quindi alla fine gli impulsi al minuto), con un altro poteziometro regolare la DURATA dell'impulso?
Scusate le tantissime domande spero qualche anima buona abbia il coraggio di leggere questa richiesta sicuramente ignorantissima. Ringrazio anticipatamente.
**Aggiungo, può arduino gestire 2 operazioni assieme quindi tipo la durata dell'impulso prima di andare in output deve essere moltiplicato per un valore inversamente proporzionale alla temperatura motore che arriva da un sensore, o robe del genere ES: a temperatura motore di 40°c moltiplicare la durata impulsi di 1.5 e salendo di temperatura questo moltiplicatore torni a 1
Spero si sia capito, ogni volta mi perdo via hahaha spero in qualche risposta

La risposta a tutte le tue perplessità è si, si può fare.

Invece chiedo io una cosa a te.
Dato che sembri completamente a digiuno di come si usa e programma Arduino. mica spererai di trovare uno sketch già pronto !

>danibarza: essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Brunello:
La risposta a tutte le tue perplessità è si, si può fare.

Invece chiedo io una cosa a te.
Dato che sembri completamente a digiuno di come si usa e programma Arduino. mica spererai di trovare uno sketch già pronto !

Ok, no è un progetto a "lunga durata" alla fine voglio farlo da solo più o meno, magari mi faccio a aiutare da qualche amico.
Più che altro volevo proprio vedere se ció che andavo a comprare poi poteva fare quello che intendevo per evitare di buttare soldi

te vuoi emulare una centralina da auto il che sembra improponibile farla sostituire da un arduino :o

una centralina da auto (anche la più "scrausa" ) ha almeno LE SONDE/SENSORI per i valori elencati

  1. SENSORE GIRI
  2. temperatura flusso aria (debimetro)
  3. pressione collettore (vacuometro)
  4. sensore battito in testa
  5. sonde lambda
  6. sensore accelleratore

elrospo:
te vuoi emulare una centralina da auto il che sembra improponibile farla sostituire da un arduino :o

una centralina da auto (anche la più "scrausa" ) ha almeno LE SONDE/SENSORI per i valori elencati

  1. SENSORE GIRI
  2. temperatura flusso aria (debimetro)
  3. pressione collettore (vacuometro)
  4. sensore battito in testa
  5. sonde lambda
  6. sensore accelleratore

So bene che sono tantissimi i parametri, l'ho pure scritto, a me interessava principalmente il potenziometro che definiva gli impulsi al secondo.

Vista la noia nel mentre che arriva la scheda arduino ho abbozzato lo sketch, se qualcuno è curioso di vedere questa ciofeca che ho creato e magari se trova qualche errore

#int pot1 = A0
#int var = 0
#int valorePot1 = 0
#int out = 13

void setup()
{
pinMode(pot1, INPUT);
pinMode(out, OUTPUT);
serial.begin(9600);
}

void loop()
{
  valorePot1 = analogRead(pot1);
  Serial.printIn(valorePot1);
  var = map(valorePot1, x, y, 118, 4)
  //x e y andranno definite a potenziometro installato
  //x=posizione potenziometro ad acceleratore al minimo
  //Y=posizione potemziometro a gas aperto
  //Per adesso impongo un iniezioni di 2 ms
  //118 deriva supponendo i le iniezioni minme di 500 al minuto
  //[60000ms-(500x2ms)]:500 e ricavo il tempo tra un inezione e l'altra al minimo
  //4 sono i ms tra iniezione a un regime ipotetico di 10mila iniezioni/minuto
  digitalWrite(out, HIGH);
  delay(2);
  digitalWrite(out, LOW);
  delay(var)
}

Però facendo verifica mi da: error: invalid preprocessing directive #int (me lo da per tutte)
Ho commesso un errore o è perche non ho collegato l'arduino?

In effetti quelle righe non hanno alcun senso in C, da dove le hai copiate?

Ah mamma mia che fuso, il programma l'ho scritto con l'iPhone su in applicazione per c++ e mi da sempre all'inizio di default #include e mi ha confuso..
Tolto # e messo i punti virgola alla fine di ogni riga, c'era qualche errorino tipo pensavo che println fosse invece printin con la i maiuscola haha eh vabbè adesso lo verifica tutto e non vedo l'ora della scheda e dei mosfet

ciao, chiedevo sempre qui se facendo da un arduino un analogWrite quindi da 0 a 255 se collegandolo nell’input analogico di un altro arduino riesco a leggere valori da 0 a 1023 come qualsiasi altra cosa?
Oppure ci sono altri modi?
Comunque ho continuato con il progettino dell’iniezione e per essere partito da 0 sono molto soddisfatto, se qualcuno vuole vederlo ripeto che i valori saranno tutti da rivedere come i giri minimi, la temperatura, il tempo on il tempo off, e poi devo ancora vedere se è possibile fare una lettura analogica da un altro arduino come ho chiesto sopra.

int pot1 = A0; //pin potenziometro acceleratore
int pot2 = A1; //pin potenziometro durata getto 
int valorePot1 = 0; //valore potenziometro acceleratore
int valorePot2 = 0; //valore potenziometro durata getto
int ipm = 0; //iniezioni per minuto uscenti da map
int ipm2 = 0; //iniezioni per minuto dopo correzione con giri
int on = 0; //variabile on pre correzioni
int off = 0; //variabile finale off
int out = 13; //pin iniettore
int girin = A2; //pin entrata arduino2 giri motore da 0 a 1023
int giri = 0; //analog read giri
int molgiri = 0; //variabile map giri
int senstemp = A3; //pin temperatura
int temp = 0; //analog read temperatura
int moltemp = 0; //variabile map temp
int on2 = 0; //variabile finale on 

void setup()
{
pinMode(pot1, INPUT);
pinMode(pot2, INPUT);
pinMode(out, OUTPUT);
Serial.begin(9600);
}

void loop()
{
  valorePot2 = analogRead(pot2); //legge potenziometro durata getto
  on = map(valorePot2, 0, 1023, 500, 2500); //stabilisce durata getto in microsec
  valorePot1 = analogRead(pot1); //legge potenziometro acceleratore
  ipm = map(valorePot1, 0, 1023, 1667, 10000); //mappa la posizione acceleratore e la trasforma in iniezioni al minuto
  giri = analogRead(girin); //legge giri da arduino2
  molgiri = map(giri, 0, 1023, 0.3, 1); //mappa giri motore e li converte in un "moltiplicatore"
  ipm2 = (ipm*molgiri);
  temp = analogRead(senstemp); //esempio 0=0 gradi c 1023=200 gradi c
  moltemp = map(temp, 0, 1023, 1.4, 1);
  on2 = (on*moltemp);
  off = ((60000000-(ipm2*on2))/ipm2); //calcola il tempo di chiusura dell'iniettore in base a on e ipm
  digitalWrite(out, HIGH);
  delayMicroseconds(on2);
  digitalWrite(out, LOW);
  delayMicroseconds(off);
}

Ripeto che tutti i valori saranno da rivedere sul campo ma teoricamente il programma è corretto, visto che c’ero ho provato a simulare i dati delle iniezioni al minuto con questi dati di prova.

So che ci sono altri thread che parlano di iniezione ma qua volevo solo sapere 2 cosine a riguardo, non specifiche

No, analogWrite() ha un nome un po' ingannevole (a meno che tu non stia usando una Due, la quale ha comunque i suoi problemi). Ti consiglio di studiare il concetto di PWM.

... beh ... una mezza soluzione ci sarebbe ... ::slight_smile:

Potresti prelevare l'uscita della analogWrite(), che nulla ha di analogico, ma è un segnale PWM, ed inviarla ad un circuito integratore che effettivamente la trasformi in una "tensione" proporzionale al segnale PWM.

Molto grossolanamente potrebbe anche bastare un circuito RC :smiley: ... e se fai un po' di ricerche sul forum dovresti trovare qualche cosa perché ricordo che, parecchio tempo fa, se ne era discusso anche con Astrobeed :slight_smile:

Guglielmo

Ah okok sisi mi ero gia informato sul fatto che non è un vero analogWrite ma un PWM, pensavo poi si potesse reinterpretare direttamente.
Ho trovato la funzione pulseIn, quando avrò la scheda la proverò sperando che non aggiunga delay al programma, ma pensavo bastasse un filo per comunicare un valore ad un altro arduino, pensavo di trovare una libreria che proprio converte il PWM in analogico, vedrò quel circuito sperando di non complicarmi la vita.
Grazie! :slight_smile:

Volendo basta un filo, basta usare una SoftwareSerial, che è decisamente più pratico :).

Con due fili la cosa diventa pure bidirezionale (anche se potrebbe esserlo pure con uno: http://forum.arduino.cc/index.php?topic=114553.0).