Se sei già registrato           oppure    

Orario: 02/05/2024 04:25:16  

 

Energia Alternativa ed Energia Fai Da Te > Arduino

VISUALIZZA L'ALBUM

Pagine: (10)   [1]   2   3   4   5   6   7   8   9   10    (Ultimo Msg)


aiuto su variazione programmazione arduino
FinePagina

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 19/09/2016 11:59:35

salve a tutti ho costruito con arduino uno un meccanismo con 2 sonde di temperature in cui una si chiama t1 e l'altra t2.
il suo funzionamento era che quando T1 < T2 accendeva A1 e spegneva A3
e quando T1> T2 spegneva A1 e accendeva A3.
ora sto modificando il tutto aggiungendo un altra sonda usualissima a quelle che viene chiamata T3 che comanda l'accensione del pin A6.
quindi in poche parole devo modificare la logica in modo che la sonda che è più calda abiliti il suo pin lasciando gli altri disabilitati e viceversa.
però non saprei come modificare il tutto. vi posto uno screen dove ho i problemi di logica.




Immagine Allegata: temperature.jpg
 
ForumEA/M/temperature.jpg

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 19/09/2016 17:14:36

Pur non sapendo nulla di arduino, la logica è logica, e la programmazione pure, quindi:

1) leggi le tre temperature "contemporaneamente"
2) individua quella massima
3) agisci di conseguenza
4) ripeti il loop...



---------------
Tecnico qualificato in clownerie
Windsurfer a tempo perso
Slalomaro senza speranze

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 20/09/2016 11:23:37

CITAZIONE (MarKoZaKKa, 19/09/2016 17:14:36 ) Discussione.php?213983&1#MSG1

Pur non sapendo nulla di arduino, la logica è logica, e la programmazione pure, quindi:

1) leggi le tre temperature "contemporaneamente"
2) individua quella massima
3) agisci di conseguenza
4) ripeti il loop...

su questo non ci pioveva

 

Bolle

Avatar
GigaWatt


Gruppo:AMMINISTRATORE
Messaggi:9509

Stato:



Inviato il: 20/09/2016 14:31:17

Deve funzicare se
1: i2 è sempre uguale a zero
2: metti nel primo if >= ( non solo maggiore)
3: elimini il secondo if e lo sostituisci con un else (prende uno solo dei rami senza fare un'altra lettura)


Sono stato chiaro? Se vuoi facciamo un ciclo di isteresi ...il quale stabilizza tutto...ma posta il codice e non l'immagine!
Ciao
Bolle



---------------
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 20/09/2016 21:11:22

io avevo modificato cosi ma non andava un tubo



Immagine Allegata: prova mod.jpg
 
ForumEA/M/prova mod.jpg

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 20/09/2016 21:12:32

/*



Vengono utilizzati i seguenti pin

Pin +5V -> Alimentazione POSITIVO
Pin GND -> Alimentazione MASSA
Potenziometro -> il centrale al pin VO (3) DEL Display
VSS DISPLAY -> MASSA
A DISPLAY -> + 5V (ILLUMINAZIONE)
VDD DISPLAY -> + 5V
K DISPLAY -> MASSA
RW DISPLAY -> MASSA
GND SCHEDE RALè -> MASSA
VCC SCHEDE RELè -> + 5V
JD SCHEDA RELè -> COLLEGABILE AD UNA 5V DI POTENZA ELIMINANDO IL PONTICELLO (METTERE MASSE TUTTE IN COMUNE)
Pin Digital 2 -> Linea dati sensore T1 DS18B20 METTERE RESISTENZA 4,7k TRA PIN DATI GIALLO E +5V
Pin Digital 3 -> Linea dati sensore T2 DS18B20 METTERE RESISTENZA 4,7k TRA PIN DATI GIALLO E +5V
Pin Digital 4 -> Bus D4 dati LCD
Pin Digital 5 -> Bus D5 dati LCD
Pin Digital 6 -> Bus D6 dati LCD
Pin Digital 7 -> Bus D7 dati LCD
Pin Digital 8 -> terminale RS display LCD
Pin Digital 9 -> terminale E display LCD
Pin Digital 10 -> DA COLLEGARE AL GALLEGGIANTE G1 e AD UNA RESISTENZA DA 4,5K VERSO MASSA (L'ALTRO PIN DEL GALLEGGIANTE A +5V)
Pin Digital 11 -> DA COLLEGARE AL TASTO RIEMPIMENTO NA e AD UNA RESISTENZA DA 4,5K VERSO MASSA (L'ALTRO PIN DEL PULSANTE A +5V)

PIN ANALOGICO A0 -> lettura SENSORE UV (PIN CENTRALE) JUG
PIN ANALOGICO A1 -> IN2 SCHEDA 4 RELè COMANDA CONTEMPORANEAMENTE K1 E K2
PIN ANALOGICO A2 -> IN3 SCHEDA 4 RELè COMANDA K3
PIN ANALOGICO A3 -> IN4 SCHEDA 4 RELè COMANDA K4
PIN ANALOGICO A4 -> IN1 SCHEDA 2 RELè COMANDA K5
PIN ANALOGICO A5 -> IN2 SCHEDA 2 RELè COMANDA K6

*/


#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

#define ONE_WIRE_BUS2 2
#define ONE_WIRE_BUS3 3
#define ONE_WIRE_BUS12 12

// Imposta la comunicazione oneWire per comunicare
// con un dispositivo compatibile
OneWire pin2(ONE_WIRE_BUS2);
OneWire pin3(ONE_WIRE_BUS3);
OneWire pin12(ONE_WIRE_BUS12);

// Passaggio oneWire reference alla Dallas Temperature.
DallasTemperature sensors1(&pin2); //Pin 2
DallasTemperature sensors2(&pin3); //Pin 3
DallasTemperature sensors3(&pin12); //Pin 12

// RS EN D4 D5 D6 D7
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int i = 0;
int i2 = 0;
int soglia_sole = 5; //soglia UV oltre la quale è giorno
int sensoreUV = A0;    // PIN PER IL SENSORE UV
int range = 3; // oscillazione differenziale vale per uv e temperature **************************************************
int UV = 0;
int Ruv = 0 ;
String G1 = (" ");
String day = (" ");
int allarme = 80; //soglia di allarme modificabile da quì n.b. il preallarme (k6) interviene 10 gradi prima)  **************************************************  

void setup(void)
{
  analogWrite(A1, 0); // PORTA A 5V IL PIN ANALOGICO 1 QUINDI accende I RELè K1 E K2
  analogWrite(A2, 1023);
  analogWrite(A3, 1023);
  analogWrite(A4, 1023);
  analogWrite(A5, 1023); // preallarme (-10°)


  // Start up the library
  sensors1.begin();
  sensors2.begin();
  lcd.begin(20, 4);
  lcd.clear();
  lcd.setCursor(5, 1);
  lcd.print("Buongiorno");
  delay (2000);
  lcd.begin(20, 4);
  lcd.clear();
}

void loop(void)
{
  
  UV = analogRead(sensoreUV);
  if (digitalRead(10) == 1) G1 = ("Pieno"); else G1 = ("Vuoto");

  if (UV >= soglia_sole) day = ("SOLE");
  if (UV <= soglia_sole - range) day = ("OMBRA");

  //  if (digitalRead(13) == 1) i2 = 1; else i2 = 0; //Disabilitato x mancanza porte utili
  if (digitalRead(12) == 1) i2 = 2; else i2 = 0;

  switch (i2)

  {
    case 0:
      if (sensors2.getTempCByIndex(0) > sensors1.getTempCByIndex(0)   )
      {
        analogWrite(A1, 0); // quando t2>t1 --> ACCENDE K1 E K2 SUL PIN A1
        analogWrite(A3, 1023); // quando t2>t1 --> Spegni K4 SUL PIN A3
        delay(10);
      }

      if (sensors2.getTempCByIndex(0) < (sensors1.getTempCByIndex(0) - range)  )
      {
        analogWrite(A1, 1023); // quando t2<t1-il range --> spegne K1 E K2 SUL PIN A1
        analogWrite(A3, 0); // quando t2<t1-il range --> ACCENDI K4 SUL PIN A3
        delay(10);
      }
      break;

    case 1: //disabilitato x mancanza porte utili
      /*   analogWrite(A3, 0);
         analogWrite(A1, 1023);//forza k4 on e k1e2 off
         delay(10);
         */
      break;


    case 2: //forza  k4 off e k1e2 on
      analogWrite(A3, 1023);
      analogWrite(A1, 0);//forza k4 off e k1e2 on
      delay(10);
      break;

  }

  if (day == ("SI") && G1 == ("Vuoto")) analogWrite(A2, 0); else analogWrite(A2, 1023); //K3 ABILITATO QUANDO SOLE SI E G1 ABBASSATO


  if (digitalRead(11) == 1) i = 1;  // se viene premuto il tasto di riempimento pin 11
  switch (i)
  {
    case 0:
      lcd.setCursor(18, 3);
      lcd.print("  ");
      break;

    case 1: //abilita K3 FINCHè IL SERBATOIO NoN è PIENO
      analogWrite(A2, 0); //accende
      if (digitalRead(10) == 1) {
        analogWrite(A2, 1024);
        i = 0 ;
      }

      lcd.setCursor(18, 3);
      lcd.print("R.");

      break;
  }


  if (sensors1.getTempCByIndex(0) > allarme) analogWrite(A4, 0); // se T1 supera allarme abilita K4
  delay (10);
  if (sensors1.getTempCByIndex(0) < (allarme - 1)) analogWrite(A4, 1023); // se T1 scende di un grado sotto l'allarme disabilita K4

if (sensors1.getTempCByIndex(0) > allarme-10) analogWrite(A5, 0); // se T1 supera preallarme abilita K5
  delay (10);
  if (sensors1.getTempCByIndex(0) < (allarme -11)) analogWrite(A5, 1023); // se T1 scende di un grado sotto il preallarme disabilita K4



  sensors1.requestTemperatures(); // Invia il comando di lettura delle temperatura
  delay (100);
  sensors2.requestTemperatures();
  
  lcd.setCursor(0, 0);
  lcd.print("UV: ");
  lcd.setCursor(4, 0);
  lcd.print ("    ");
  lcd.setCursor(4, 0);
  lcd.print (UV);
  lcd.setCursor(15, 2);
  lcd.print("Serb:");
  lcd.setCursor(15, 3);
  lcd.print(G1);
  lcd.setCursor(13, 1);
  lcd.print(" ");
  lcd.setCursor(15, 1);
  lcd.print (day);
  lcd.setCursor(11, 0);
  lcd.print("All.: ");
  lcd.setCursor(17, 0);
  lcd.print (allarme);
  lcd.setCursor(0, 1);
  lcd.print("TS:");
  lcd.setCursor(6, 1);
  lcd.print (sensors1.getTempCByIndex(0)); delay (100);
  lcd.print ("'C ");
  lcd.setCursor(0, 2);
  lcd.print("TC:");
  lcd.setCursor(6, 2);
  lcd.print (sensors2.getTempCByIndex(0));
  lcd.print ("'C ");
  lcd.setCursor(0, 3);
  lcd.print("TP:");
  lcd.setCursor(6, 3);
  lcd.print (sensors3.getTempCByIndex(0)); delay (100);
  lcd.print ("'C ");


  delay(100);

}



Modificato da BellaEli - 25/09/2016, 00:46:17
 

righetz

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4225

Stato:



Inviato il: 21/09/2016 21:21:11

ciao epry,
sembra una centralina per gestire una caldaia?

Prova a vedere anche questa discussione LINK potresti trovare qualche spunto che ti possa aiutare



---------------
Chi non si indebita fa la rabbia degli usurai

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 22/09/2016 09:55:37

mi ha dato una mano un amico per programmarla e mi gestisce il pannello solare termico il termocamino e la stufa a pellet.
tramite sensore raggi uv mi gestisce il riempimento del pannello in più a un tasto per il riempimento manuale perché è a vaso aperto il pannello.
poi tramite elettrovalvole mi gestiva l'apertura della sanitaria da pannello a termocamino ed ora a pellet.
però è uscito un altro problema le elettrovalvole che ho quando sono aperte rimangono con un minimo di assorbimento perché al suo interno rimane eccitato un relè ed ora non so se modificare tutto in modo da darli un eccitamento temporizzatore oppure lasciare il mondo come

 

marcosnout

Avatar
GigaWatt


Gruppo:AMMINISTRATORE
Messaggi:3693

Stato:



Inviato il: 22/09/2016 10:44:59

Solitamente, se l'attuatore deve gestire il comando per un tempo prolungato, si utilizzano valvole motorizzate. Le valvole motorizzate sono più costose (all'acquisto) delle elettrovalvole, ma consumano meno energia, il loro consumo è limitato al tempo necessario ad aprire o chiudere il flusso che gestiscono.
Ne esistono a una o più vie.



---------------
Laminox Hidra 24kw, pannello solare termico SunHeat open 200 lt, termoboiler 120 litri. Zona climatica D, Gradi-giorno 1427
Isola: 30 moduli SUNTECH 200wp, Inverter UPS PSW7 6048, regolatore di carica PCM8048, batterie 24 EPZS 810Ah (C10)

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 22/09/2016 11:50:16

le valvole sono motorizzate ma all interno anno anche un micro relè perché hanno 2 fili positivi di cui uno per chiusura ed uno per apertura, e propio in apertura il micro relè rimane eccitato

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 23/09/2016 14:41:06

Con quale programma editi il codice? Io uso Notepad++. Ha diversi strumenti di ricerca, selezionando "linguaggio/C/C++" colora il codice e si distinguono commenti dal codice e altro.
Nel codice che hai messo credo che manchi qualcosa, manca sensors3?
// Start up the library
sensors1.begin();
sensors2.begin();
lcd.begin(20, 4);



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw)
Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A
n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah)
Switch enel/batterie con Arduino Pro Mini

 

epry

Avatar
MegaWatt


Gruppo:Utente
Messaggi:512

Stato:



Inviato il: 23/09/2016 14:51:45

CITAZIONE (sabin, 23/09/2016 14:41:06 ) Discussione.php?213983&1#MSG10

Con quale programma editi il codice? Io uso Notepad++. Ha diversi strumenti di ricerca, selezionando "linguaggio/C/C++" colora il codice e si distinguono commenti dal codice e altro.
Nel codice che hai messo credo che manchi qualcosa, manca sensors3?
// Start up the library
sensors1.begin();
sensors2.begin();
lcd.begin(20, 4);

grazie mille per la segnalazione perché mi era sfuggito questa cosa.
comunque io come programma uso fritzing però se facevano una applicazione dove ti simula il funzionamento in base a quello che scrivi e colleghi sarebbe una bomba perché potrei preparare e fare tutto a lavoro e a casa mi dedicherei solo al montaggio dei circuiti

 

sabin

Avatar
MegaWatt


Gruppo:Utente
Messaggi:522

Stato:



Inviato il: 24/09/2016 19:39:12

Ho provato a capire meglio il codice ma forse il metodo che uso io è basilare.
Mi sembra che nelle porte analogiche ci sono relè. Io li metto nelle porte digitali.
Puoi liberare alcune porte digitali mettendo l'LCD con il modulo I2C nelle porte analogiche A4 A5
Il setup dei sensori DS18B20 forse è stato complicato più del necessario. Per temperature sopra lo zero, i sensori LM35 sono più semplici, ma con cavi lunghi bisogna stabilizzarli, credo con un condensatore.



---------------
Inverter UPS Power Star W7 (onda pura) ingresso 24 v... 220V 2 Kw con spunto da 6 Kw? (direi 3Kw)
Pannelli 11,1 mq. Wp 1320 (x120 Wp mq)... n° 5 monoc. 72 celle 750 Wp (SO) su MPPT SolarMate 40A
n° 3 polic. 60 celle 570 Wp (Sud) su PWM 30A... batterie: 2 coppie SMA (trazione) 24V 120 Ah C/10 (+ 2 avviamento 70Ah)
Switch enel/batterie con Arduino Pro Mini

 

BellaEli

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:3286

Stato:



Inviato il: 25/09/2016 01:01:38

Ciao, sono col cell quindi abbrevierò le cose, puoi fare così:



if (t1 < t2 && t1 < t3)
{
   K1 = 1;
   K2 = 0;
   K3 = 0;
}

if (t2 < t1 && t2 < t3)
{
   K1 = 0;
   K2 = 1;
   K3 = 0;
}

if (t3 < t1 && t3 < t2)
{
   K1 = 0;
   K2 = 0;
   K3 = 1;
}

if (t1 = t2 || t1 = t3)
{
   K1 = decidi tu cosa fare se ci sono rilevazioni identiche !!!
}


Che dici, può andare ???

Elix



---------------
C'è un limite al fai da te ???
Si, ma lo stabiliamo noi !!!

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4435

Stato:



Inviato il: 25/09/2016 21:11:32

se ti servono porte digitali puoi usare questa espansione.
http://i.ebayimg.com/images/i/272041590506-0-2/s-l140/p.jpg
LINK

Usa l'I2C e ti aggiunge 7 porte digitali, sono molto comodi



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 
 InizioPagina
 

Pagine: (10)   [1]   2   3   4   5   6   7   8   9   10    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum