Se sei già registrato           oppure    

Orario: 19/04/2024 03:13:06  

 

Energia Alternativa ed Energia Fai Da Te > Arduino

VISUALIZZA L'ALBUM

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


Anemometro con arduino
FinePagina

luci@no
milliWatt


Gruppo:Utente
Messaggi:1

Stato:



Inviato il: 04/12/2017 18:29:34

salve a tutti, spero sia il posto giusto per chiedere aiuto. poco arduino e qualcosa di elettronica sono le mie esperienze. sono alla ricerca di un aiuto per far si che l'anemometro mi invia i dati a casa tramite l'uso del ESP8266 già usato per il controllo della temperatura con DHT22 per creare una stazione meteorologica sempre più completa. ringrazio fin da adesso qualsiasi commento o aiuto possiate darmi.

 

ezioall
milliWatt


Gruppo:Utente
Messaggi:3

Stato:



Inviato il: 20/03/2023 14:02:16

ciao ho realizzato questo progetto come codice solo che ho un problema

avendo altri sensori attaccati, BME,sensore Luce e un display 16x2 i2c ed un rele per chiudere la tenda sul terrazzo quando diventa buio ho quando il vento diventa eccessivo
ho creato un loop per lcd con varie pagine che si alernano ma la variabile Kmora o Node non riesco a visualizzarle in quanto forse sono io incapace come posso rendere visibile queste variabili nel Loop del display
ci sto Faccine/bangin.gif se volete posso postare il codice completo

 

ezioall
milliWatt


Gruppo:Utente
Messaggi:3

Stato:



Inviato il: 20/03/2023 14:12:17

CITAZIONE (ezioall, 20/03/2023 14:02:16 ) Discussione.php?213940&7#MSG95

ciao ho realizzato questo progetto come codice solo che ho un problema

avendo altri sensori attaccati, BME,sensore Luce e un display 16x2 i2c ed un rele per chiudere la tenda sul terrazzo quando diventa buio ho quando il vento diventa eccessivo
ho creato un loop per lcd con varie pagine che si alernano ma la variabile Kmora o Node non riesco a visualizzarle in quanto forse sono io incapace come posso rendere visibile queste variabili nel Loop del display
ci sto Faccine/bangin.gif se volete posso postare il codice completo

qui il codice

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;

#define LCD_SENSORS 0
#define LCD_BME 1
#define LCD_INIT 3
#define LCD_ANEM 2

int lcdPage = LCD_INIT;  //calcolo visualizzazione pagine
unsigned long int lastPageChange = 0;
unsigned long int lcdPageChange = 10000;
boolean display_setup = false;



const float Pi = 3.141593; // Pigreco
const float raggio = 0.06; // raggio dell'anemometro in metri
const int reedPin = 2; // pin assegnato al contatto reed


int Statoreed = 0; // variabile per la lettura del contatto
int Statoreed_old = 0; // variabile per evitare doppio conteggio

int Conteggio = 0;// variabile che contiene il conteggio delle pulsazioni
unsigned long int TempoStart = 0; // memorizza i  millisecondi dalla
                                 //prima pulsazione conteggiata
                               
unsigned long int Tempo = 0; // per conteggiare il tempo trascorso dalla prma pulsazione
unsigned long int TempoMax = 2000;// numero di millisecondi (2 seondi)
                  //per azzerare il conteggio e calcolare la Velocità
                  // così non si conteggiano brevi folate di vento
String senStatus;
//String sensLuce;
float node=0; //questo non va bene 


int sensorValue = analogRead(A7);
int ledPin = 3;      // select the pin for the LED

 

void loopBme() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println("*C");
 
  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println("%");
 
  Serial.print("Pressure = ");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.println("hPa");
 
  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println("m");
  Serial.println();
  delay(1000);
       
}

void loopTenda() {
  int sensorValue = analogRead(A7);
  int ledPin = 3;      // select the pin for the LED 
  
  Serial.println(sensorValue);
  
  if (sensorValue > 500) {
    digitalWrite(ledPin, HIGH);
  senStatus = "ON";
  } else {
    digitalWrite(ledPin, LOW);
  senStatus = "OFF";
  }
}


/** LCD **/

void lcdDispatch() {
  unsigned long int ora = millis();
  if (ora > lcdPageChange + lastPageChange) {
    lastPageChange = ora;
    switch (lcdPage) {
      case LCD_INIT:
        printHome();
        break;
      case LCD_SENSORS:
        printTem();
        break;
      case LCD_BME:
        printBme();
        break;
      case LCD_ANEM:
       printAnem();
       break;
      default:
      break;
      }
}
}
void printHome() {
  
  lcd.setCursor(0, 0);
  lcd.print("STAZIONE   METEO");
  lcd.setCursor(0, 1);
  lcd.print(" CASA  DI  EZIO");
  lcdPage =LCD_SENSORS;
}

void printTem() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temperat:");
  lcd.print(bme.readTemperature());
  //lcd.write(1);
  lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("Humidita:");
  lcd.print(bme.readHumidity());
  lcd.print("%");
  lcd.display();
  lcdPage = LCD_BME;
}
void printBme() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Pressure: ");
  lcd.print(bme.readPressure() / 100.0F);
  lcd.print("hPa");
 
  lcd.setCursor(0, 1);
  lcd.print("Altitude: ");
  lcd.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  lcd.print("m"); 
  lcd.display();
  lcdPage = LCD_ANEM;

}

void printAnem() {        
           
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("REL TENDA");
  lcd.setCursor(0, 1);
  lcd.print("Km/oraANEM:");
  lcd.setCursor(12, 0);
  lcd.print (senStatus);
  lcd.setCursor(12, 1);
  lcd.print(node); //non si visualizza niente
  delay(1000);
  lcd.display();
  lcdPage = LCD_SENSORS;
}



void Anemo ()

{
 
  
  
  Statoreed = digitalRead(reedPin); // legge il contatto reed

  if (Statoreed != Statoreed_old) // si verifica se è cambiato
  {
    Statoreed_old = Statoreed;   // se SI si aggiorna lo stato
 
   if (Statoreed == HIGH)  // si controlla SE è alto ( passaggio magnete)
    {
      if (Conteggio == 0){ TempoStart =  millis();} // se E' il primo passaggio
                                                 // si memorizza il tempo di partenza
  
      Conteggio = Conteggio + 1; // si aggiorna il contatore    
  
      Tempo = ( millis() - TempoStart); // si conteggia il tempo trascorso dallo start conteggio
  
        
           if (Tempo >=  TempoMax)   // se il tempo trascorso è maggiore o uguale al tempo impostato
                                     // si eseguono i calcoli e la stampa della velocità
 
          
          {
     
           float deltaTempo = ( Tempo/1000.0); // si trasforma in secondi
       
           float Metris= (Conteggio*Pi*raggio)/deltaTempo;      // si calcola la velocità in metri/s
        
           float Kmora = (3.6*Conteggio*Pi*raggio)/deltaTempo; //formula per il calcolo della velocità
                                                             // in Km/h
           float Node = (Metris/0.514444); // si porta in nodi
           Node=node;
           //--------------------------------------
           // stampa i valori sul monitor
           //---------------------------------------
           Serial.print("Velocità m/s = ");
           Serial.println(Metris);
           Serial.print("Velocità nodi = ");
           Serial.println(Node);
           Serial.print("Velocità Km/h = ");
           Serial.println(Kmora);
           
          
           if (Kmora > 20) {
    digitalWrite(ledPin, HIGH);
  
  } else {
    digitalWrite(ledPin, LOW);
  
  }
           
          
           Conteggio = 0; // azzeriamo il conteggio per nuova lettura
           delay(2000);// attesa per altra lettura        
          
  }        
             
 }
}

}





void inizializeAnemo(){ 
    pinMode(reedPin, INPUT);
   }


void setup() {
 inizializeAnemo();
  pinMode(ledPin, OUTPUT); 
  // pin dell'anemometro
  //pinMode(reedPin, INPUT);
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  
 
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}

 
 void loop() {
   
 loopBme() ;
 loopTenda() ;
 Anemo() ; 
 lcdDispatch();
}
  
 
 
 

 

ezioall
milliWatt


Gruppo:Utente
Messaggi:3

Stato:



Inviato il: 20/03/2023 15:54:10

guardando il codice della prima pagina ho trovato la soluzione che era una cosa semplice
esattamente : float Metris,Kmora,rpm,velsec;

 
 InizioPagina
 

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

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum