quote:Risposta al messaggio di calasci inserito in data 20/01/2013 14:52:25 (> precisamente questo, ho la fortuna di avere la "rs components" qui a 4 Km, però è più cara di altriVisualizza messaggio in nuova finestra
)>
http://it.rs-online.com/web/p/d...
[code]
#include <LiquidCrystal.h>
#include <math.h>
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);
double Termistore(int RawADC) {
long Resistance;
double Temp;
Resistance=((10240000/RawADC) - 10000);
Temp = log(Resistance);
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp)); //resisteza termistori convertiti in volt
Temp = Temp - 273.15; //convertiti in celsius...da kelvin
return Temp;
}
void scrivi(int val) {
lcd.print (int(val));
}
void setup() {
lcd.begin(16, 4);
}
#define Termistore1 0 //collegamento a pin A0
#define Termistore2 1 //collegamento a pin A1
#define Termistore3 2 //collegamento a pin A2
#define Termistore4 3 //collegamento a pin A3
#define Termistore5 4 //collegamento a pin A4
#define Termistore6 5 //collegamento a pin A5
int temp;
void loop() {
//---------------------------------------------------
lcd.setCursor(0, 0); // primo carattere prima riga
temp=Termistore(analogRead(Termistore1));
lcd.print("MOT ");
scrivi(temp);
lcd.print((char)223);
lcd.setCursor(9, 0); //vai al 9° carattere prima riga
//--------------------------------------------------------
temp=Termistore(analogRead(Termistore2));
lcd.print("H2O ");
scrivi(temp);
lcd.print((char)223);
lcd.setCursor(0, 1); //vai al primo carattere dalla seconda riga
//---------------------------------------------
temp=Termistore(analogRead(Termistore3));
lcd.print("GAS ");
scrivi(temp);
lcd.print((char)223);
lcd.setCursor(9, 1); //vai al 9° carattere della 2° riga
//--------------------------------------------
temp=Termistore(analogRead(Termistore4));
lcd.print("EST ");
scrivi(temp);
lcd.print((char)223);
lcd.print((char)47);
lcd.setCursor(-4, 2); // vai al primo carattere della 3° riga (da qui in poi ho dovuto mettere 4 caratteri in meno perchè
// partiva metà riga, penso dipenda dal mio LCD)
//-----------------------------------
temp=Termistore(analogRead(Termistore5));
lcd.print("PAN ");
scrivi(temp);
lcd.print((char)223);
lcd.setCursor(5, 2);
//-----------------------------------------
temp=Termistore(analogRead(Termistore6));
lcd.print("BAT ");
scrivi(temp);
lcd.print((char)223);
lcd.print((char)47);
lcd.setCursor(-4, 3);
lcd.print("il mio nome");
delay(100);
}
[/code]
ma lo sviluppo è abbastanza avanti,
un assaggino [:)]
retroilluminazione LCD
suoneria
buzzer
tacitazione
relè ausiliario, che dovrò decidere cosa fargli fare [:p]
questo sotto è l'immagine 3D del progetto, non raffigurato il LCD
la parte più difficile, la costruzione dello stampato
quote:Risposta al messaggio di camperos inserito in data 27/01/2013 22:58:32 (Visualizza messaggio in nuova finestra)>> Ciao camperos, da qualche giorno ho approcciato anche io al mondo di arduino, sono ancora in attesa di ricevere un po' di sensori, ho ordinato il tutto via ebay da venditori cinesi, ho un po' di idee che spero di condividere con voi nei prossimi giorni quando inizierò anche io a smanettare di saldatore e pc. Per ora ti faccio i miei complimenti per quello che hai fatto. Un cordiale saluto Max
quote:Risposta al messaggio di camperos inserito in data 27/01/2013 22:58:32 (Visualizza messaggio in nuova finestra)>> Camperos, per la realizzazione dello stampato ho trovato in rete chi suggeriva di stampare le piste su carta fotografica e "stirarle" con il ferro da stiro sulla vetronite lato rame. Io ho seguito le indicazioni e sono riuscito a realizzare un circuito stampato (mono facciale) che altrimenti sarebbe stato impossibile realizzare in modo casalingo.
quote:Risposta al messaggio di ah pollo inserito in data 28/01/2013 15:12:54 (Visualizza messaggio in nuova finestra)>> Ti confermo che è un sistema adottato da molti autocostruttori, personalmente non ci ho mai provato, per via della mancanza di carta fotografica, ma sopratutto per via della mia stampante che ha le testine un po' consumate... fare uno stampato con parti mancanti non servirebbe a molto.[}:)] Un cordiale saluto Max
[code]
#include <LiquidCrystal.h> // driver c'e l'ha Arduino
#include <math.h> // driver c'e l'ha Arduino
LiquidCrystal lcd(12, 11, 2, 3, 4, 5); // pin di Arduino collegati al LCD
double Sensori(int RawADC) { // calcoli
long Resistenza; // per
double Temp; // trasformare la
Resistenza=((10240000/RawADC) - 10000); // resistenza che
Temp = log(Resistenza); //varia nel termistore in
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp)); //gradi kelvin
Temp = Temp - 273.15; // da gradi kelvin in celsius
return Temp;
}
int tastoTaci=7; // pulsante a pin 7
int ledRosso=13; // led a pin 13
int buzzer=6; // buzzer a pin 6
int Cambia=0; // mi invento che la parola "cambia" è uguale a zero (0)
void gradi(int val) {
lcd.print (int(val));
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 4); // il mio LCD ha 16 caratteri su 4 righe
pinMode(tastoTaci, INPUT); // pin 7, faccio diventare ingresso
pinMode(ledRosso, OUTPUT); // pin 13 faccio diventare uscita
} // ingressi analogici:
#define sensMot 0 // sensore filtro acqua gasolio al pin 0
#define sensGas 1 // sensore vano gas al pin 1
#define sensEst 2 // sensore temperatura esterna al pin 2
#define sensBat 3 // sensore temperatura batteria al pin 3
#define sensH2O 4 // sensore temperatura bocchetta grigie al pin 4
#define sensPan 5 // sensore temperatura pannello fv al pin 5
int tempMot; // do un nome del sensore
int tempGas; // do un nome del sensore
int tempEst; // do un nome del sensore
int tempBat; // do un nome del sensore
int tempH2O; // do un nome del sensore
int tempPan; // do un nome del sensore
int sogliaMot = -1; // do un nome che sarà la stessa cosa che scrivere il numero,
int sogliaGas = -5; // tale numero sarà la temperatura in gradi desiderata
int sogliaEst = -15; // come soglia per fare intervenire dispositivi
int sogliaBat = 60;
int sogliaH2O = -1;
int sogliaPan = 65;
void loop() { //inizia il ciclo
lcd.setCursor(0, 0); // porto il cursore del LCD alprimo carattere della prima riga
tempMot=Sensori(analogRead(sensMot)); // tempMot leggi sensMot (collegato al pin "0")
lcd.print("MOT "); // scrivi MOT e uno spazio
gradi(tempMot); // scrivi i gradi di tempMot che ha letto da sensMot
lcd.print((char)223); // scrivi simbolo dei gradi
delay (300); // aspetta 0,3 secondi
// ora.. devo essere avvisato se le temperature del "motore,gas,esterna,H2O sono minori della loro soglia e pannello, batteria superiori alla loro soglia
tastoTaci=digitalRead(7); //pin 7 leggi cosa fa il pulsante
if ((tempMot < sogliaMot) and (tastoTaci==LOW)and(Cambia ==0)) { //la temperatura è minore della soglia? il pulsante non è pigiato? cambia è uguale a "0" ? se SI tutte le cose fai:
digitalWrite(ledRosso,HIGH); //accendi il led
analogWrite(buzzer, 150); //suona ad una nota a 150 hz
Cambia=1; //fai diventare "cambia" uguale a "1"
}
else if ((tempMot < sogliaMot) and (tastoTaci==HIGH) and (Cambia ==1)){ //altrimenti se quello scritto sopra è NO, se la temperatura motore è minore della soglia, il pulsante è pigiato e cambia è uguale a 1 fai:
digitalWrite(ledRosso,LOW); //spegni il led
analogWrite(buzzer,LOW); //spegni il suono
Cambia=1; //fai diventare "cambia" uguale a "1"
}
if ((tempMot > sogliaMot) //se la temperatura motore è maggiore della sua soglia e
and (tempGas > sogliaGas) //la temperatura del vano gas è maggiore maggiore della sua soglia è
and (tempEst > sogliaEst) //la temperatura esterna è maggiore della sua soglia e
and (tempBat < sogliaBat) //la temperatura della batteria è maggiore della sua soglia e
and (tempH2O > sogliaH2O) //la temperatura della bocchetta delle grigie è minore della sua soglia e
and(tempPan < sogliaPan)){ //la temperatura del pannello fv è minore della sua soglia ...FAI !
digitalWrite(ledRosso, LOW); // spegni il led
analogWrite(buzzer,LOW); // spegni il suono
Cambia=0; //fai diventare "cambia" uguale a "0"
}
if (tempMot < sogliaMot){ //se la temperatura del motore è minore della sua soglia fai:
lcd.setCursor(0, 0); //porta il cursore del LCD al primo carattere della prima riga
lcd.print(" "); //scrivi 8 caselle vuote (questo fa lampeggiare la parola "MOT " e i suoi gradi
} //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
lcd.setCursor(0, 1); // ora cursore del LCD spostati al primo carattere della seconda riga
tempGas=Sensori(analogRead(sensGas)); //tutta la pappardella sopra questa volta per la temperatura del vano gas
lcd.print("GAS ");
gradi(tempGas);
lcd.print((char)223);
delay (300);
lcd.setCursor(-4, 2);
tastoTaci=digitalRead(7);
if ((tempGas < sogliaGas) and (tastoTaci==LOW)and(Cambia==0)) {
digitalWrite(ledRosso,HIGH);
analogWrite(buzzer, 150);
Cambia=1;
}
else if ((tempGas < sogliaGas) and (tastoTaci==HIGH) and (Cambia==1)){
digitalWrite(ledRosso,LOW);
analogWrite(buzzer,LOW);
Cambia=1;
}
if ((tempGas > sogliaGas)
and (tempMot > sogliaMot)
and (tempEst > sogliaEst)
and (tempBat < sogliaBat)
and (tempH2O > sogliaH2O)
and (tempPan < sogliaPan)){
digitalWrite(ledRosso, LOW);
analogWrite(buzzer,LOW);
Cambia=0;
}
if (tempGas < sogliaGas){
lcd.setCursor(0, 1);
lcd.print(" ");
} //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
lcd.setCursor(-4, 2); //tutta la pappardella sopra questa volta per la temperatura esterna
tempEst=Sensori(analogRead(sensEst));
lcd.print("EST ");
gradi(tempEst);
lcd.print((char)223);
delay (300);
lcd.setCursor(-4, 2);
tastoTaci=digitalRead(7);
if ((tempEst < sogliaEst) and (tastoTaci==LOW)and(Cambia==0)) {
digitalWrite(ledRosso,HIGH);
analogWrite(buzzer, 150);
Cambia=1;
}
else if ((tempEst < sogliaEst) and (tastoTaci==HIGH) and (Cambia==1)){
digitalWrite(ledRosso,LOW);
analogWrite(buzzer,LOW);
Cambia=1;
//delay (100);
}
if ((tempEst > sogliaEst)
and (tempMot > sogliaMot)
and (tempGas > sogliaGas)
and (tempBat < sogliaBat)
and (tempH2O > sogliaH2O)
and (tempPan < sogliaPan)){
digitalWrite(ledRosso, LOW);
analogWrite(buzzer,LOW);
Cambia=0;
}
if (tempEst < sogliaEst){
lcd.setCursor(-4, 2);
lcd.print(" ");
} //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
lcd.setCursor(8, 0); //tutta la pappardella sopra questa volta per la temperatura del vano batteria
tempBat=Sensori(analogRead(sensBat));
lcd.print("BAT ");
gradi(tempBat);
lcd.print((char)223);
delay (300);
lcd.setCursor(9, 2);
tastoTaci=digitalRead(7);
if ((tempBat > sogliaBat) and (tastoTaci==LOW)and(Cambia==0)) {
digitalWrite(ledRosso,HIGH);
analogWrite(buzzer, 150);
Cambia=1;
}
else if ((tempBat > sogliaBat) and (tastoTaci==HIGH) and (Cambia==1)){
digitalWrite(ledRosso,LOW);
analogWrite(buzzer,LOW);
Cambia=1;
}
if ((tempBat < sogliaBat)
and (tempMot > sogliaMot)
and (tempGas > sogliaGas)
and (tempEst > sogliaEst)
and (tempH2O > sogliaH2O)
and (tempPan < sogliaPan)){
digitalWrite(ledRosso, LOW);
analogWrite(buzzer,LOW);
Cambia=0;
}
if (tempBat > sogliaBat){
lcd.setCursor(8, 0);
lcd.print(" ");
} //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
lcd.setCursor(8, 1); //tutta la pappardella sopra questa volta per la temperatura valvola grigie
tempH2O=Sensori(analogRead(sensH2O));
lcd.print("H2O ");
gradi(tempH2O);
lcd.print((char)223);
delay (300);
lcd.setCursor(8, 2);
tastoTaci=digitalRead(7);
if ((tempH2O < sogliaH2O) and (tastoTaci==LOW)and(Cambia==0)) {
digitalWrite(ledRosso,HIGH);
analogWrite(buzzer, 150);
Cambia=1;
}
else if ((tempH2O < sogliaH2O) and (tastoTaci==HIGH) and (Cambia==1)){
digitalWrite(ledRosso,LOW);
analogWrite(buzzer,LOW);
Cambia=1;
}
if ((tempH2O > sogliaH2O)
and (tempMot > sogliaMot)
and (tempEst > sogliaEst)
and (tempBat < sogliaBat)
and (tempGas > sogliaGas)
and (tempPan < sogliaPan)){
digitalWrite(ledRosso, LOW);
analogWrite(buzzer,LOW);
Cambia=0;
}
if (tempH2O < sogliaH2O){
lcd.setCursor(8, 1);
lcd.print(" ");
} //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
lcd.setCursor(4, 2); //tutta la pappardella sopra questa volta per la temperatura del pannello fv
tempPan=Sensori(analogRead(sensPan));
lcd.print("PAN ");
gradi(tempPan);
lcd.print((char)223);
delay (300);
tastoTaci=digitalRead(7);
if ((tempPan > sogliaPan) and (tastoTaci==LOW)and(Cambia==0)) {
digitalWrite(ledRosso,HIGH);
analogWrite(buzzer, 150);
Cambia=1;
}
else if ((tempPan > sogliaPan) and (tastoTaci==HIGH) and (Cambia==1)){
digitalWrite(ledRosso,LOW);
analogWrite(buzzer,LOW);
Cambia=1;
}
if ((tempPan < sogliaPan)
and (tempMot > sogliaMot)
and (tempGas > sogliaGas)
and (tempBat < sogliaBat)
and (tempH2O > sogliaH2O)
and (tempEst > sogliaEst)){
digitalWrite(ledRosso, LOW);
analogWrite(buzzer,LOW);
Cambia=0;
}
if (tempPan > sogliaPan){
lcd.setCursor(4, 2);
lcd.print(" ");
}
}
[/code]
quote:Risposta al messaggio di ah pollo inserito in data 29/01/2013 08:07:56 (Visualizza messaggio in nuova finestra)>> più che linguaggio "C" sembra risolvere un quiz da "settimana enigmistica" [:)]
quote:Risposta al messaggio di DavideVR inserito in data 29/01/2013 13:16:14 (Visualizza messaggio in nuova finestra)>> devo ancora arrivarci, ma sicuramente si. Arduino accetta ingressi da "0 a 5V", quindi si deve prima trasformare 0-12V in 0-5V, credo basti un partitore. se qualcuno vuole già iniziare... è open source...
corretto un filo in posizione errata quote:la parte sopra, è la necessità di illuminare l'LCD di notte con un pulsante e avere un contatto libero di un rele, non so ancora che farci.. l'Arduino sopporta max 50 mA di carico, quindi sono stati adottati i 4N35 che..per parlare semplicemente sono come se fossero piccoli rele anche se non lo sono.. presente quando col telecomando del televisore pigiamo un tasto e il televisore si accende? ecco all'interno del 4N35 c'è a sx il tipo col telecomando, a dx il televisore, optoisolatore 5 mA perchè l'ho scritto ? >> L'hai scritto così io lo leggo ... [;)][:D][;)] Una domanda ce la fa l'optoisolatore a pilotare il relè?
Non servirebbe fare un darlington prima della bobina del relè per essere sicuri che ci sia abbastanza corrente per eccitarlo?
Un cordiale saluto
Max quote:Risposta al messaggio di Iz2lwe inserito in data 30/01/2013 22:04:28 (> il rele a 12V che sto provando è questo, da 2A di contatti:Visualizza messaggio in nuova finestra
)>
http://www.iskra-releji.si/trk2...
a banco a 12V assorbimento bobina 20mA i 4n35 che poi,in verità ho usato una porzione di un altro..(acpl-847) 50 mA max fa scattare il rele a 3,5mA di assorbimento in ingresso (lato Arduino), però lo faccio lavorare a 5mA già provato[:D] si, se però serve un rele più "grosso" hai ragione serve un darlington