Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 15 maggio 17, 17:17   #31 (permalink)  Top
User
 
L'avatar di andore
 
Data registr.: 20-04-2009
Residenza: Potenza
Messaggi: 934
Citazione:
Originalmente inviato da andycar Visualizza messaggio
Non hai dichiarato la variabile: speed

Inserisci:

int speed = 0;

Prima del

void setup() {
Infatti me ne sono accorto e la stavo dichiarando
__________________
FIUMI DI PENSIERI VAGANO NELLA MIA MENTE IGNORANDO LA PERCEZIONE DELLA REALTA' IMPOSTA
andore non è collegato   Rispondi citando
Vecchio 15 maggio 17, 17:26   #32 (permalink)  Top
User
 
L'avatar di andycar
 
Data registr.: 20-01-2006
Residenza: Altopascio
Messaggi: 2.370
Immagini: 20
Tieni presente che è "case sensitive".

speed non è uguale a Speed
__________________
Io???
Io volo in giardino!!! (Cioè... ci volavo da giovane.)
http://www.youtube.com/results?searc...ype=&aq=-1&oq=
andycar non è collegato   Rispondi citando
Vecchio 15 maggio 17, 17:31   #33 (permalink)  Top
User
 
L'avatar di andore
 
Data registr.: 20-04-2009
Residenza: Potenza
Messaggi: 934
Citazione:
Originalmente inviato da andycar Visualizza messaggio
Tieni presente che è "case sensitive".

speed non è uguale a Speed
Si infatti questo lo sapevo

Ora per aggiungere anche l'umidità dovrei mettere

if (t > 30, h > 60)

giusto?
__________________
FIUMI DI PENSIERI VAGANO NELLA MIA MENTE IGNORANDO LA PERCEZIONE DELLA REALTA' IMPOSTA
andore non è collegato   Rispondi citando
Vecchio 15 maggio 17, 17:42   #34 (permalink)  Top
User
 
L'avatar di andore
 
Data registr.: 20-04-2009
Residenza: Potenza
Messaggi: 934
Funziona tutto alla grande!

Non mi resta che provarlo sulla serra appena posso
__________________
FIUMI DI PENSIERI VAGANO NELLA MIA MENTE IGNORANDO LA PERCEZIONE DELLA REALTA' IMPOSTA
andore non è collegato   Rispondi citando
Vecchio 17 maggio 17, 13:45   #35 (permalink)  Top
User
 
L'avatar di aero330
 
Data registr.: 03-09-2012
Residenza: Gubbio-Ravenna
Messaggi: 1.771
Non voglio essere di certo pignolo ma ho cambiato qualcosina nel codice, per ottimizzarlo il più possibile, per quella che è la mia "povera" esperienza.
Non ho modificato il comportamento del progetto ma solo riscritto in una forma più corretta possibile Visto che si parla anche di programmazione consiglio di farla bene fin da subito, per cui ho inserito i commenti ove necessario.
Non voglio passare per quello che se la tira perchè ne sa di più (anzi esattamente il contrario) ma mi piacerebbe trasmettere quello che imparato fin'ora.

Codice:
//Con l'aiuto di aero330 ed ElNonino, utenti di www.baronerosso.it
#include <Wire.h>
#include <DHT.h>
#include <RTClib.h>
#include <LiquidCrystal.h>

// Generalmente quando ci sono delle costanti in gioco che non cambiano mai (come delle soglie, temperature di riferimento....) meglio definire delle 
// "variabili particolari" chiamate "MACRO": queste non occupano memoria riducendo la "complessità" del codice (non entro nei dettagli). 
// Tali MACRO sono quelle che iniziano con "#define".

// Esempio: scrivendo " #define PIPPO 3 " vuol dire che in qualsiasi parte del codice ogni volta viene richiamata la parola PIPPO, ad essa viene associato il numero costante 3
// E' buona regola definire le costanti in questo modo nel mondo della programmazione.

//----- Sensore -----
#define DHTPIN 8       // 8 è il pin di Arduino a cui collego il sensore di temperatura
#define DHTTYPE DHT11  // dht11 è il tipo di sensore che uso

#define MAX_TEMP 30     // soglia di temperatura (default 30)
#define MAX_HUM  60    // soglia di umidità (default 60)
#define RANGE  2     // ampiezza dell'isteresi. Brevemente: quando si controllano dei valori rispetto a delle soglie (come il caso della Temperatura>30°) 
             // in genere è meglio farlo non su un singolo valore ma su 2 distinti, altrimenti il motore (leggi ventola) potrebbe accendersi/spegnersi in continuazione
             // perchè la temperatura oscilla repentinamente intorno ai 30°. Inserendo un controllo su due soglie distinte, ad esempio 30°+2 e 30°-2 si riesce a
             // contenere questo fenomeno. Sia chiaro, non è necessario, ma potrebbe far comodo in futuro: se non ti interessa questa cosa metti semplicemente 0 al posto di 2
             
//----- Motore -----
#define MOTOR_PIN 7    // pin7 collegato al motore

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // connessione display (pin)

char buffer1[20];
char buffer2[20];

RTC_DS1307 RTC;

const int setpin = 6;
boolean statepin = false;  //definendo una variabile booleana, meglio utilizzare treu/false anziché i numeri
int t;
int h;
int speed;

void setup() {
  
  lcd.begin(16, 2); // imposto il tipo di display (colonne, righe)
  lcd.setCursor(0,0);

  pinMode (6, INPUT);
  digitalWrite (6, HIGH);
  
  pinMode (MOTOR_PIN, OUTPUT);  // pin 7 collegato al motore
  digitalWrite (MOTOR_PIN, LOW);  // spengo il motore per sicurezza

  Wire.begin();
  RTC.begin();

  if (! RTC.isrunning()) {
  RTC.adjust(DateTime(__DATE__, __TIME__));
  }

}

void loop() {

  t = dht.readTemperature();
  h = dht.readHumidity();  // posiziono il cursore alla colonna 12 e riga 0

  lcd.print("Temperatura");
  lcd.setCursor(0,1);
  lcd.print("Umidita'");
  lcd.setCursor(15,0);
  lcd.print("C");
  lcd.setCursor(15,1);
  lcd.print("%");
  lcd.setCursor(12, 0);
  lcd.print(t);
  lcd.setCursor(12, 1);
  lcd.print(h);

  delay(5000); 

  lcd.clear();   //pulisce tutto lo schermo e cursore in alto a sinistra (0,0)

  statepin = digitalRead (setpin);
  if (statepin == false)
  {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  DateTime now = RTC.now();
  sprintf(buffer1,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  lcd.setCursor(0,0);
  lcd.print( buffer1 );
  sprintf(buffer2,  "%02d/%02d/%d", now.day(), now.month(), now.year());
  lcd.setCursor(0,1);
  lcd.print( buffer2 );

  delay(5000);

  lcd.clear(); //Pulisco lo schermo e ricomincio da capo

// Adesso avviene il controllo della temperatura/umidità con le famose soglie distinte

  if ( (t > MAX_TEMP+RANGE) && (h > MAX_HUM+RANGE) ){
    speed = 255 ;
  }
  if ( (t < MAX_TEMP-RANGE) && (h < MAX_HUM-RANGE) ){ 
    speed = 0 ;
  }
  analogWrite(MOTOR_PIN, speed); 

}
__________________
Divertirsi insieme e con poco? Prova il combat! Curtman Squadron Combat
Sito Web: https://sites.google.com/site/curtmansquadroncombat/

Ultima modifica di aero330 : 17 maggio 17 alle ore 13:51
aero330 non è collegato   Rispondi citando
Vecchio 17 maggio 17, 23:55   #36 (permalink)  Top
User
 
L'avatar di andore
 
Data registr.: 20-04-2009
Residenza: Potenza
Messaggi: 934
Citazione:
Originalmente inviato da aero330 Visualizza messaggio
Non voglio essere di certo pignolo ma ho cambiato qualcosina nel codice, per ottimizzarlo il più possibile, per quella che è la mia "povera" esperienza.
Non ho modificato il comportamento del progetto ma solo riscritto in una forma più corretta possibile Visto che si parla anche di programmazione consiglio di farla bene fin da subito, per cui ho inserito i commenti ove necessario.
Non voglio passare per quello che se la tira perchè ne sa di più (anzi esattamente il contrario) ma mi piacerebbe trasmettere quello che imparato fin'ora.

Codice:
//Con l'aiuto di aero330 ed ElNonino, utenti di www.baronerosso.it
#include <Wire.h>
#include <DHT.h>
#include <RTClib.h>
#include <LiquidCrystal.h>

// Generalmente quando ci sono delle costanti in gioco che non cambiano mai (come delle soglie, temperature di riferimento....) meglio definire delle 
// "variabili particolari" chiamate "MACRO": queste non occupano memoria riducendo la "complessità" del codice (non entro nei dettagli). 
// Tali MACRO sono quelle che iniziano con "#define".

// Esempio: scrivendo " #define PIPPO 3 " vuol dire che in qualsiasi parte del codice ogni volta viene richiamata la parola PIPPO, ad essa viene associato il numero costante 3
// E' buona regola definire le costanti in questo modo nel mondo della programmazione.

//----- Sensore -----
#define DHTPIN 8       // 8 è il pin di Arduino a cui collego il sensore di temperatura
#define DHTTYPE DHT11  // dht11 è il tipo di sensore che uso

#define MAX_TEMP 30     // soglia di temperatura (default 30)
#define MAX_HUM  60    // soglia di umidità (default 60)
#define RANGE  2     // ampiezza dell'isteresi. Brevemente: quando si controllano dei valori rispetto a delle soglie (come il caso della Temperatura>30°) 
             // in genere è meglio farlo non su un singolo valore ma su 2 distinti, altrimenti il motore (leggi ventola) potrebbe accendersi/spegnersi in continuazione
             // perchè la temperatura oscilla repentinamente intorno ai 30°. Inserendo un controllo su due soglie distinte, ad esempio 30°+2 e 30°-2 si riesce a
             // contenere questo fenomeno. Sia chiaro, non è necessario, ma potrebbe far comodo in futuro: se non ti interessa questa cosa metti semplicemente 0 al posto di 2
             
//----- Motore -----
#define MOTOR_PIN 7    // pin7 collegato al motore

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // connessione display (pin)

char buffer1[20];
char buffer2[20];

RTC_DS1307 RTC;

const int setpin = 6;
boolean statepin = false;  //definendo una variabile booleana, meglio utilizzare treu/false anziché i numeri
int t;
int h;
int speed;

void setup() {
  
  lcd.begin(16, 2); // imposto il tipo di display (colonne, righe)
  lcd.setCursor(0,0);

  pinMode (6, INPUT);
  digitalWrite (6, HIGH);
  
  pinMode (MOTOR_PIN, OUTPUT);  // pin 7 collegato al motore
  digitalWrite (MOTOR_PIN, LOW);  // spengo il motore per sicurezza

  Wire.begin();
  RTC.begin();

  if (! RTC.isrunning()) {
  RTC.adjust(DateTime(__DATE__, __TIME__));
  }

}

void loop() {

  t = dht.readTemperature();
  h = dht.readHumidity();  // posiziono il cursore alla colonna 12 e riga 0

  lcd.print("Temperatura");
  lcd.setCursor(0,1);
  lcd.print("Umidita'");
  lcd.setCursor(15,0);
  lcd.print("C");
  lcd.setCursor(15,1);
  lcd.print("%");
  lcd.setCursor(12, 0);
  lcd.print(t);
  lcd.setCursor(12, 1);
  lcd.print(h);

  delay(5000); 

  lcd.clear();   //pulisce tutto lo schermo e cursore in alto a sinistra (0,0)

  statepin = digitalRead (setpin);
  if (statepin == false)
  {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  DateTime now = RTC.now();
  sprintf(buffer1,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  lcd.setCursor(0,0);
  lcd.print( buffer1 );
  sprintf(buffer2,  "%02d/%02d/%d", now.day(), now.month(), now.year());
  lcd.setCursor(0,1);
  lcd.print( buffer2 );

  delay(5000);

  lcd.clear(); //Pulisco lo schermo e ricomincio da capo

// Adesso avviene il controllo della temperatura/umidità con le famose soglie distinte

  if ( (t > MAX_TEMP+RANGE) && (h > MAX_HUM+RANGE) ){
    speed = 255 ;
  }
  if ( (t < MAX_TEMP-RANGE) && (h < MAX_HUM-RANGE) ){ 
    speed = 0 ;
  }
  analogWrite(MOTOR_PIN, speed); 

}
Cavolo, è fin troppo quello che hai fatto e ti ringrazio del tempo dedicatomi da te come gli altri

Intanto sto cercando di studiare e mi sono trovato una decina di libri che esplicano solo progetti ma, credo che il migliore sia questo "arduino language reference" dove veramente ti spiega tutti i codici chiave che in un "normale" linguaggio C o C++, java ecc. non ci sono

Da quanto ho capito, il miglior modo per imparare è copiare e studiare i progetti creati da altri...

Intanto ti ringrazio di nuovo, mi studio il codice e poi nei prossimi giorni vi darò di nuovo fastidio per la costruzione di un braccio robot
__________________
FIUMI DI PENSIERI VAGANO NELLA MIA MENTE IGNORANDO LA PERCEZIONE DELLA REALTA' IMPOSTA
andore non è collegato   Rispondi citando
Vecchio 18 maggio 17, 01:37   #37 (permalink)  Top
User
 
L'avatar di aero330
 
Data registr.: 03-09-2012
Residenza: Gubbio-Ravenna
Messaggi: 1.771
Citazione:
Originalmente inviato da andore Visualizza messaggio
Cavolo, è fin troppo quello che hai fatto e ti ringrazio del tempo dedicatomi da te come gli altri

Intanto sto cercando di studiare e mi sono trovato una decina di libri che esplicano solo progetti ma, credo che il migliore sia questo "arduino language reference" dove veramente ti spiega tutti i codici chiave che in un "normale" linguaggio C o C++, java ecc. non ci sono

Da quanto ho capito, il miglior modo per imparare è copiare e studiare i progetti creati da altri...

Intanto ti ringrazio di nuovo, mi studio il codice e poi nei prossimi giorni vi darò di nuovo fastidio per la costruzione di un braccio robot
Di nulla, figurati !!!
Ci sono molti pdf online riguardo su come si struttura un codice in arduino con spiegazioni passo passo, però, se posso consigliarti, meglio "studiarsi" un buon libro su C/C++ per il semplice motivo che non bisogna sapere quali funzioni arduino mette a disposizione, ma come si struttura e si scrive un buon codice. E' come voler progettare un'autovettura ma concentrarsi esclusivamente sul motore...non sarebbe meglio avere una visione più globale anche su freni, ruote, volante, centralina...ecc ecc?
Ovviamente deve piacerti perchè altrimenti diventa noioso e lasci perdere alla seconda pagina.

P.s. il codice l'ho compilato e non presenta errori, ma bisogna vedere se funziona!
__________________
Divertirsi insieme e con poco? Prova il combat! Curtman Squadron Combat
Sito Web: https://sites.google.com/site/curtmansquadroncombat/
aero330 non è collegato   Rispondi citando
Vecchio 18 maggio 17, 09:58   #38 (permalink)  Top
User
 
L'avatar di dex1
 
Data registr.: 19-01-2005
Residenza: 33170 e dintorni
Messaggi: 10.447
buongiorno.

a breve vorrei realizzare un multi voltmetro con lcd con arduino nano.
per la realizzazione fisica problemi zero,
la compilazione dello sketc stendiamo un velo pietoso,ho letto qualcosa
non so non mi entra molto in testa ultimamente.
in rete ho trovato un progetto simile a quello che servirebbe a me.
chi mi da una mano?

grazie
dex1
__________________
Trattiamo bene la terra su cui viviamo: essa non ci è stata donata dai nostri padri, ma ci è stata prestata dai nostri figli
dex1 non è collegato   Rispondi citando
Vecchio 18 maggio 17, 10:08   #39 (permalink)  Top
User
 
L'avatar di aero330
 
Data registr.: 03-09-2012
Residenza: Gubbio-Ravenna
Messaggi: 1.771
Citazione:
Originalmente inviato da dex1 Visualizza messaggio
buongiorno.

a breve vorrei realizzare un multi voltmetro con lcd con arduino nano.
per la realizzazione fisica problemi zero,
la compilazione dello sketc stendiamo un velo pietoso,ho letto qualcosa
non so non mi entra molto in testa ultimamente.
in rete ho trovato un progetto simile a quello che servirebbe a me.
chi mi da una mano?

grazie
dex1
Qualcosa di più nel dettaglio?
__________________
Divertirsi insieme e con poco? Prova il combat! Curtman Squadron Combat
Sito Web: https://sites.google.com/site/curtmansquadroncombat/
aero330 non è collegato   Rispondi citando
Vecchio 18 maggio 17, 10:51   #40 (permalink)  Top
User
 
L'avatar di italo.driussi
 
Data registr.: 02-07-2004
Residenza: Ronchi dei Legionari (GO)
Messaggi: 5.666
Citazione:
Originalmente inviato da dex1 Visualizza messaggio
buongiorno.

a breve vorrei realizzare un multi voltmetro con lcd con arduino nano.
per la realizzazione fisica problemi zero,
la compilazione dello sketc stendiamo un velo pietoso,ho letto qualcosa
non so non mi entra molto in testa ultimamente.
in rete ho trovato un progetto simile a quello che servirebbe a me.
chi mi da una mano?

grazie
dex1
menu file
apri sketch

Menu strumenti
tipo arduino
porta seriale
programmatore AVRISP mkII

menu sketch
verifica/compila


posta il link che hai trovato
__________________
Solo Aeromodelli -
Autogiro Elicotteri Multirotori No grazie
italo.driussi non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
arduino uno e ..... FLYTS Circuiti Elettronici 3 23 settembre 14 14:50



Tutti gli orari sono GMT +2. Adesso sono le 14:54.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002