Show Posts
Pages: 1 ... 25 26 [27] 28
391  International / Generale / Re: consigli per Contagiri a lancetta on: July 21, 2011, 06:21:03 am
ah, complimenti anche il luppolo in giardino! farò anche quello non appena smetto con gli abanero!

ah, #? bene! io usavo il Copy for Forum del software dell'arduino!  smiley
392  International / Generale / Re: Modulo Bluetooth on: July 21, 2011, 06:15:01 am
non sono anocra molto esperto, ma mi sembra di aver letto in giro che gli sketch si danno in pasto al bootloader di arduino tramite l'ardware serial del chip stesso. e se non sbaglio, la seriale è anche ripostata sui pin 0 e 1 sulla board! fin qui ci sono?

ora, se questo modulo BT esce direttamente in seriale, e quindi credo che dal PC venga visto anche come COMx, possa essere usato come dicevo prima??

semplice supposizione!
393  International / Generale / Re: Modulo Bluetooth on: July 21, 2011, 04:54:13 am
ma questo ultimi moduli presentati, sono già in seriale? una gran cosa direi! in sostanza li potrei inserire tra il pin 0 e 1 di Arduino e caricargli sketch via bluetooh?

394  International / Generale / Re: consigli per Contagiri a lancetta on: July 20, 2011, 03:36:30 pm
dopo aver stappato un birrino da 66cl rigorosamente fatto in casa....

ecco a che soluzione sono giunto:

Quote
//Costanti*******************************
#define Termostato A0
#define Ventola 12
#define Cassa 9
#define Divisor 5

//Variabili******************************
volatile unsigned int rpm = 0;
volatile unsigned long timeold = 0;
volatile byte cycle = 0;
int analogValue =0;
int temp1 =0;
int valveMap[] = {20, 40, 60, 70, 80, 100, 120, 140};  //tabella variabile a piacere dell'andamento del servo Valvola (figata)
int k = 0;

//include********************************
#include <LiquidCrystal.h>
#include <Servo.h>

//inizializza display********************
LiquidCrystal lcd(8, 7, 6, 5, 4, 3); //RS PIN6 - E PIN8 - D4 - D5 - D6 - D7

//inizializza servo**********************
Servo lancetta;
Servo Valve;


 void setup()
 {
   Serial.begin(9600);
   attachInterrupt(0, rpm_fun, FALLING);
   digitalWrite(2, HIGH);
   pinMode(Ventola, OUTPUT);
   lcd.begin(16, 2);
   lancetta.attach(11);
   Valve.attach(10);
 }

 void loop()
 {
   analogValue = analogRead(Termostato); //lettura del sensore di temperatura
   temp1 = map(analogValue, 0, 1023, 0, 130); //mappa provvisoria per leggere da 0° a 130°
   k = map(rpm, 500, 9000, 0, 7); //creazione dell'indice k mappando i giri
   
   lancetta.write(rpm/100); // tentativo di movimento servo-lancetta sembra funzionare!
   if(k >= 7) {  //questo if previene che arrivino valori sconosciuti al servo (accaduto nelle prove)
     Valve.write(valveMap[7]); }
   else {
     Valve.write(valveMap[k]); } //muovi il servo della valvola secondo la mappa nell'array
   lcd.clear();
   lcd.setCursor(0, 1);
   lcd.print("Valve |"); //scrive Valve più la prima barra
   lcd.setCursor(0, 0);
   lcd.print("RPM "); //scrive RPM
   if(rpm >= 500){  //scrive i giri solo se superano 500RPM
   lcd.print(rpm); }
     else {
       lcd.print("0"); }  //altrimenti scrive solo 0
   lcd.print(" T=");
   lcd.print(temp1); //riporta la temperatura rilevata e mappata
   lcd.write(223); //il pallino dei gradi
   if(temp1 >= 95) { //questo aziona un relè che comanda una ventola, attivo al raggiungimento dei 95° fino ai 90°
     digitalWrite(Ventola, HIGH);
     tone(Cassa, 4186, 50); }
     else if(temp1 <=90) {
       digitalWrite(Ventola, LOW); }
 
   lcd.setCursor(7, 1); //ciclo for per la barra a quadratini, sfruttando l'indice k
   for(int i = 0; i < k; i++) {
     lcd.write(255); //scrive quadratino
     }
   lcd.setCursor(15, 1);
   lcd.print("|"); //scrive la seconda barra

 delay(100);
 }

 void rpm_fun()  //interrupt che calcola i giri. non è precisissimo, ma per il suo scopo, va più che bene
 {
  cycle++;
  if(cycle == Divisor) {
    rpm = 0;
    rpm = (60000/(millis()-timeold)*Divisor);
    timeold = millis();
    cycle = 0 ;
    }
 }


un banale ciclo for con l'aggiunta di un Array, dove è stivata una sorta di mappatura che la valvola dovrà seguire!

e il bello è......che funziona!  smiley-twist

commenti?
395  International / Generale / Re: consigli per Contagiri a lancetta on: July 20, 2011, 02:18:26 pm
appena verificato!

applicando una pila da 9V all'arduino, il problema svanisce. regge bene il servo!

ho appena avuto l'illuminazione. dopo cena scrivo il pezzetto di codice per i quadratini e il servo, in 4 righe  smiley-twist sempre.....se funziona poi in pratica!
396  International / Generale / Re: consigli per Contagiri a lancetta on: July 20, 2011, 12:23:14 pm
500mA? ma sul serio?
ma scusa, allora come si può mai darlo in pasto ad Arduino?.....la USB non ce la fà! forse alimentandolo da esterno, senza USB attaccato?

ah, domandina.... L'arduino UNO, riconosce da solo se c'è alimentazione esterna? cioè, posso attaccare la pila da 9V mantenendolo attaccato all'USB?
397  International / Generale / Re: consigli per Contagiri a lancetta on: July 20, 2011, 10:52:34 am
eheheh! a sto punto, se devo incasinare il firmware inutilmente per un effetto ottico idiota, faccio sul serio con la %!

intanto gioco con sto servo!

ma è possibile tutto questo assorbimento da un cosino così inutile e piccino?
398  International / Generale / Re: consigli per Contagiri a lancetta on: July 20, 2011, 09:38:24 am
bhe, il map credo di poterlo usare per il servo, se voglio mantenere un'andamento lineare.

pensavo invece ad un array da dargli in pasto tramite una qualche funzione ancora da studiare!

per i quadratini invece, non trovo una soluzione al momento!....uhm...!
399  International / Generale / Re: consigli per Contagiri a lancetta on: July 20, 2011, 08:33:17 am
Come promesso, cercherò di spiegare meglio il progetto.

sto cercando di realizzare uno strumentino da applicare alla mia vespa da gara, che mi dia qualche informazione su ciò che accade al mezzo.
attualmente le idee sono concentrate nello gestire:
-un contagiri, su display e se riesco a lancetta (con servo o usando un indicatore commerciale);
-sensore temperatura liquido di raffreddamento. suppongo mi dovrò cimentare nell'usare i termistori, in quanto vengono usati di base per queste applicazioni;
-Sensore temperatura gas di scarico. Credo di implementarlo più in là, con un chip che legga una termocoppia e poi in pasto all'Arduino.
-tentativo di gestione di un servo, che si muova di pari-passo all'aumento dei giri, tirandomi su poi, la valvola di scarico.
-monitoraggio temperatura liquido, attivando quando serve una ventola al radiatore che rinfreschi il tutto.
-il tutto visualizzato su un lcd. attualmente uso un 16x2, ma ho in arrivo un 20x4.
-ho al momento inserito un cicalino che suona al raggiungimento di una data temperatura, ma se mi servirà il piedino, lo abolirò.
-Lettura dei giri motore tramite sensore di hall+magnate o sensore IR con apposito elemento rotante.

il codice abbozzato e un po commentato lo riporto di seguito. è quello attuale, e qualcosa funziona!

Quote
//Costanti*******************************
#define Termostato A0
#define Ventola 12
#define Cassa 9
#define Divisor 5

//Variabili******************************
volatile unsigned int rpm = 0;
volatile unsigned long timeold = 0;
volatile byte cycle = 0;
int analogValue =0;
int temp1 =0;

//include********************************
#include <LiquidCrystal.h>
#include <Servo.h>

//inizializza display********************
LiquidCrystal lcd(8, 7, 6, 5, 4, 3); //RS PIN6 - E PIN8 - D4 - D5 - D6 - D7

//inizializza servo**********************
Servo lancetta;
Servo Valve;


 void setup()
 {
   Serial.begin(9600);
   attachInterrupt(0, rpm_fun, FALLING);
   digitalWrite(2, HIGH);
   pinMode(Ventola, OUTPUT);
   lcd.begin(16, 2);
   lancetta.attach(11);
   Valve.attach(10);
 }

 void loop()
 {
   analogValue = analogRead(Termostato); //lettura del sensore di temperatura
   temp1 = map(analogValue, 0, 1023, 0, 130); //mappa provvisoria per leggere da 0° a 130°
   
   lancetta.write(rpm/100); // tentativo di movimento servo-lancetta sembra funzionare!
   lcd.clear();
   lcd.setCursor(0, 1);
   lcd.print("Valve |");
   lcd.setCursor(0, 0);
   lcd.print("RPM ");
   if(rpm >= 500){  //scrive i giri solo se superano 500RPM
   lcd.print(rpm); }
     else {
       lcd.print("0"); }  //altrimenti scrive solo 0
   lcd.print(" T=");
   lcd.print(temp1);
   lcd.write(223); //il pallino dei gradi
   if(temp1 >= 95) { //questo aziona un relè che comanda una ventola, attivo al raggiungimento dei 95° fino ai 90°
     digitalWrite(Ventola, HIGH);
     tone(Cassa, 4186, 50); }
     else if(temp1 <=90) {
       digitalWrite(Ventola, LOW); }
       
       //bloccone If in attesa di soluzione migliore
       //fa comparire la barra quadratini sul display e comanda il servo (ma per il servo non và, userò un map)
       
   if(rpm <= 1000) {
     lcd.setCursor(7, 1);
     lcd.print("        |");
     Valve.write(0);   
   }
   if(rpm > 1000) {
     lcd.setCursor(7, 1);
     lcd.write(255);
     lcd.print("       |");
     Valve.write(20);   
   }
   if(rpm > 2500) {
     lcd.setCursor(8, 1);
     lcd.write(255);
     lcd.print("      |");
     Valve.write(30);   
   }
   if(rpm > 4000) {
     lcd.setCursor(9, 1);
     lcd.write(255);
     lcd.print("     |");
     Valve.write(50);   
   }
   if(rpm > 5500) {
     lcd.setCursor(10, 1);
     lcd.write(255);
     lcd.print("    |");
     Valve.write(70);   
   }
   if(rpm > 6500) {
     lcd.setCursor(11, 1);
     lcd.write(255);
     lcd.print("   |");
     Valve.write(100);   
   }
   if(rpm > 8000) {
     lcd.setCursor(12, 1);
     lcd.write(255);
     lcd.print("  |");
     Valve.write(120);   
   }
   if(rpm > 9500) {
     lcd.setCursor(13, 1);
     lcd.write(255);
     lcd.print(" |");   
   }
   if(rpm > 10000) {
     lcd.setCursor(14, 1);
     lcd.write(255);
     lcd.print("|");   
   }
   delay(100);
   
  
 }

 void rpm_fun()  //interrupt che calcola i giri. non è precisissimo, ma per il suo scopo, va più che bene
 {
  cycle++;
  if(cycle == Divisor) {
    rpm = 0;
    rpm = (60000/(millis()-timeold)*Divisor);
    timeold = millis();
    cycle = 0 ;
    }
 }



devo perfezionare il servo per la valvola, e trovare un modo pratico di gestire quello che segnerà i giri.
al momento ho un micro servo preso in germania un "Power D65 HB" della www.chd.hk
http://www.servodatabase.com/servo/power-hd/d65hb
molto veloce, ma assorbe forse un po tantino. l'arduino si riavvia se lo alimento con lui! strano!vero?

vi passo una foto:



-a sinistra l'arduino  smiley-razz
-in basso al centro, il potenziometro che simula il sensore di temperatura
-il led rosso al centro simula la ventola
-il cicalino a sinistra del led
-il servo appoggiato al connettore giallo, a destra della bredboard
-in alto a sinistra l'LCD con visualizzati alcuni dati (notare i quadratini neri)
-non visibile nell'immagine, la ruota con il sensore di hall che simula gli RPM.

che ve ne pare al momento?

vi ringrazio per tutto!
Giuseppe
400  International / Generale / Re: [OT] Fare Elettronica Collection 2011 + 3 dvd = 7,90€? on: July 20, 2011, 03:28:08 am
presi ieri.

dovrebbero essere corsi basilari, di cui quello sui PIC è in asembler!

se riesco oggi dò un'occhiata! le riviste sono carine. elektrokit (o come diavolo si chiama) è esattamente dell'anno scorso. ci trovate robetta stupidotta ma alle volte interessante!

i 3 numeri di FE invece, sono nuovi e discreti come contenuto!
401  International / Generale / Re: consigli per Contagiri a lancetta on: July 19, 2011, 10:57:01 am
non afferro come.

hai da farmi un mini esempio?
402  International / Generale / Re: consigli per Contagiri a lancetta on: July 19, 2011, 10:28:58 am
rileggendo il tutto, mi rendo conto che è un po incasinato.

se riesco stasera riscrivo tutto con più calma e magari con qualche foto esplicativa di tutto il sistema!

scusate!
403  International / Generale / Re: consigli per Contagiri a lancetta on: July 19, 2011, 09:13:40 am
ho avuto modo di lavorarci un po su. ma ancora la strada è lontana!

Quote
//Costanti*******************************
#defineTermostatoA0
#defineVentola13
#defineCassa9
#defineDivisor5

//Variabili******************************
volatileunsigned int rpm = 0;
volatileunsigned long timeold = 0;
volatilebyte cycle = 0;
int analogValue =0;
int temp1 =0;

//include********************************
#include<LiquidCrystal.h>
#include<Servo.h>

//inizializzadisplay********************
LiquidCrystal lcd(8, 7, 6, 5, 4, 3);

//inizializzaservo**********************
Servo lancetta;
Servo Valve;


void setup()
{
Serial.begin(9600);
attachInterrupt(0, rpm_fun, FALLING);
digitalWrite(2, HIGH);
pinMode(Ventola, OUTPUT);
lcd.begin(16, 2);
lancetta.attach(11);
Valve.attach(10);
}

void loop()
{
analogValue=analogRead(Termostato);
temp1=map(analogValue, 0, 1023, 0, 130);

lancetta.write(rpm/100);
lcd.clear();
lcd.noBlink();
lcd.setCursor(0, 1);
lcd.print("Valve |");
lcd.setCursor(0, 0);
lcd.print("RPM ");
if(rpm >= 500){
lcd.print(rpm); }
else {
lcd.print("0"); }
//lcd.setCursor(9, 0);
lcd.print(" T=");
lcd.print(temp1);
lcd.write(223);
if(temp1 >= 95) {
digitalWrite(Ventola, HIGH);
tone(Cassa, 4186, 50); }
else if(temp1 <=90) {
digitalWrite(Ventola, LOW); }
//Serial.println(rpm/100);

if(rpm <= 1000) {
lcd.setCursor(7, 1);
lcd.print("        |");
Valve.write(0);   
}
if(rpm > 1000) {
lcd.setCursor(7, 1);
lcd.write(255);
lcd.print("       |");
Valve.write(20);   
}
if(rpm > 2500) {
lcd.setCursor(8, 1);
lcd.write(255);
lcd.print("      |");
Valve.write(30);   
}
if(rpm > 4000) {
lcd.setCursor(9, 1);
lcd.write(255);
lcd.print("     |");
Valve.write(50);   
}
if(rpm > 5500) {
lcd.setCursor(10, 1);
lcd.write(255);
lcd.print("    |");
Valve.write(70);   
}
if(rpm > 6500) {
lcd.setCursor(11, 1);
lcd.write(255);
lcd.print("   |");
Valve.write(100);   
}
if(rpm > 8000) {
lcd.setCursor(12, 1);
lcd.write(255);
lcd.print("  |");
Valve.write(120);   
}
if(rpm > 9500) {
lcd.setCursor(13, 1);
lcd.write(255);
lcd.print(" |");   
}
if(rpm > 10000) {
lcd.setCursor(14, 1);
lcd.write(255);
lcd.print("|");   
}
delay(100);


}

void rpm_fun()
{
cycle++;
if(cycle == Divisor) {
rpm=0;
rpm=(60000/(millis()-timeold)*Divisor);
timeold=millis();
cycle=0;
}
}


ancora è tutto in abozzo, e molte cose sono da rifinire!

adesso mi servono un paio di aiuti.

per creare la visualizzazione a barre sull'LCD che indica il movimento del servo per la valvola, ho usato una serie di IF. Ma ho subito capito che il sistema non può essere usato, perche ogni volta invia i comandi di tutti gli IF.
idem per il servo che viene controllato. Si incasina con le troppe informazioni che riceve!

di contro, il contagiri funziona bene, e il sensore di temperatura pure. poi verrà modificato per leggere un termistore.

avete consigli su modifiche da apportare? snellimenti del programma? urla per incompetenza?  smiley-roll-sweat

grazie!
404  International / Generale / Re: Leggere intensità corrente on: July 08, 2011, 11:58:23 am
potresti apporre un trasformatore di misura su un ramo della linea che vuoi monitorare. se di alternata parliamo!
405  International / Generale / Re: consigli per Contagiri a lancetta on: July 08, 2011, 07:52:25 am
lo scarno e inutile codice attuale! vedrò di postare gli sviluppi man mano!

Code:
//Costanti*******************************

//Variabili******************************
volatile unsigned int rpm = 0;
volatile unsigned long timeold = 0;
volatile byte cycle = 0;

//include********************************
#include <LiquidCrystal.h>

//inizializza display********************
LiquidCrystal lcd(8, 7, 6, 5, 4, 3);


 void setup()
 {
   Serial.begin(9600);
   attachInterrupt(0, rpm_fun, FALLING);
   digitalWrite(2, HIGH);
   lcd.begin(16, 2);
 }

 void loop()
 {
   lcd.clear();
   lcd.setCursor(0, 1);
   lcd.print("Valve |");
   lcd.setCursor(15, 1);
   lcd.print("|");
   lcd.setCursor(0, 0);
   lcd.print("RPM ");
   lcd.print(rpm);
   lcd.print(" T=   ");
   lcd.write(223);
   delay(100);
   
 
 }

 void rpm_fun()
 {
  cycle++;
  if(cycle == 10) {
    rpm = 0;
    rpm = (60000/(millis()-timeold)*10);
    Serial.println(rpm);
    timeold = millis();
    cycle = 0 ;
    }
 }

non fate caso all'accozzaglia di cose inutili che ho scritto sul display, è solo per vedere gli ingombri delle varie cose da visualizzare!
Pages: 1 ... 25 26 [27] 28