Κυριακή 18 Απριλίου 2021

Ανίχνευση επικίνδυνων αερίων και ένδειξη με 3 LED

Περιγραφή

Ο αισθητήρας MQ-135 ανιχνεύει επικίνδυνα αέρια όπως η αμμωνία, ο καπνός, το θείο, οι ατμοί βενζολίου, το βουτάνιο και έχει ευαισθησία από 10 έως 1000ppm. Τρία LED χρώματος κόκκινο, κίτρινο και πράσινο δίνουν ένδειξη για τα επίπεδα που μετρά ο αισθητήρας, ειδοποιώντας όταν το επίπεδο είναι υψηλό.



Εξαρτήματα - Συνδέσεις 

Το αναλογικό σήμα από τον αισθητήρα αερίων συνδέεται στην αναλογική είσοδο Α0 της πλακέτας Arduino Uno. Τα LED χρώματος κόκκινο, κίτρινο και πράσινο ελέγχονται από τις ψηφιακές εξόδου D2, D3 και D4 αντίστοιχα. Για να οριστούν οι τρεις περιοχές επικινδυνότητας, χρειάστηκε να βρεθούν οι τιμές κατωφλίου και γι αυτόν τον λόγο έγιναν δοκιμές με το αέριο ενός αναπτήρα ενώ οι μετρήσεις τυπώθηκαν στη σειριακή οθόνη.
  • πλακέτα Arduino Uno
  • αισθητήρας επικίνδυνων αερίων MQ-135
  • 3 LED (κόκκινο, κίτρινο και πράσινο) 
  • 3 αντιστάτες 220Ω
  • breadboard, jumper wires

Κώδικας

int gasValue = 0;

void setup()

{  

  pinMode(A0, INPUT);

  Serial.begin(9600);

  pinMode(4, OUTPUT);

  pinMode(3, OUTPUT);

  pinMode(2, OUTPUT);

}


void loop(){

  gasValue = analogRead(A0);

  Serial.println(gasValue);

  if (gasValue < 300) {

    digitalWrite(4, HIGH);

    digitalWrite(3, LOW);

    digitalWrite(2, LOW);

    Serial.println("GREEN");

  } else {

    if (gasValue >= 300 && gasValue <= 400) {

      digitalWrite(4, LOW);

      digitalWrite(3, HIGH);

      digitalWrite(2, LOW);

      Serial.println("YELLOW");

    } else {

      digitalWrite(4, LOW);

      digitalWrite(3, LOW);

      digitalWrite(2, HIGH);

      Serial.println("RED");

    }

  }

  delay(100); 

}



Πατήστε εδώ για το έργο στο tinkercad

Κυριακή 4 Απριλίου 2021

Ειδοποίηση όταν διακόπτεται η οπτική επαφή

 Περιγραφή

Η δέσμη φωτός ενός laser προσπίπτει στην επιφάνεια μιας φωτοαντίστασης και όταν ένα αδιαφανές αντικείμενο παρεμβάλλεται, το buzzer ειδοποιεί (και το ενσωματωμένο LED στο pin 13 αναβοσβήνει.



Εξαρτήματα και συνδέσεις


Το laser συνδέεται στο pin 12 (έξοδος) και η φωτοαντίσταση στο Α0 (αναλογική είσοδος). Το buzzer ελέγχεται από το pin 3. Το άρθρωμα με την φωτοαντίσταση (LDR module), εκτός από την αντίσταση που εξασφαλίζει την σύνδεση διαιρέτη τάση, διαθέτει ενίσχυση και ποτενσιόμετρο, όπως θα modules που έχουμε δει και σε άλλους αισθητήρες μεταβλητής αντίστασης.
  • πλακέτα Arduino Uno
  • Laser module
  • LDR module (φωτοαντίσταση)
  • Buzzer module
  • breadboard, jumper wires

Κώδικας

const int ledPin = 13;
const int buzzerPin = 2;
const int ldrPin = A0;
const int laserPin = 12;

void setup () {
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ldrPin, INPUT);
pinMode( laserPin , OUTPUT);
digitalWrite( laserPin , HIGH);
}
void loop() {
int ldrStatus = analogRead(ldrPin);
if (ldrStatus > 200) {
tone(buzzerPin, 600);
digitalWrite(ledPin, HIGH);
delay(100);
noTone(buzzerPin);
digitalWrite(ledPin, LOW);
delay(100);
}

else {
noTone(buzzerPin);
digitalWrite(ledPin, LOW);
}

delay(10);
}


Κυριακή 21 Μαρτίου 2021

Βελτίωση μέτρηση απόστασης με αισθητήρα υπερήχων, λαμβάνοντας υπόψη παραμέτρους ατμοσφαιρικού αέρα

Περιγραφή

Για την μέτρηση της απόστασης με τον αισθητήρα υπερήχων HC-SR04, θεωρούμε συνήθως την τιμή της ταχύτητας του ήχου στον ατμοσφαιρικό αέρα ίση με 340 m/s. Όμως, η ταχύτητα εξαρτάται και από τις παραμέτρους της ατμοσφαιρικής θερμοκρασίας και υγρασίας. Έτσι, για να έχουμε ακριβέστερες μετρήσεις που θα λαμβάνουν υπόψη τις συνθήκες στην ατμόσφαιρα, χρησιμοποιούμε επιπλέον τον αισθητήρα DHT11 που παρέχει τις μετρήσεις της θερμοκρασίας και της σχετικής υγρασίας και διαμορφώνουμε τον κώδικα αντιστοίχως.
Συγκεκριμένα, έχουμε
ταχύτητα του ήχου = 331,4 + (0,606 * θερμοκρασία σε oC) + (0,0124 * σχετική υγρασίας)


Εξαρτήματα και συνδέσεις

  • πλακέτα Arduino Uno
  • αισθητήρας HC-SR04
  • αισθητήρας DHT11
  • breadboard, jumper wires

  • Κώδικας

    #define trigPin 10
    #define echoPin 13
    #define DHT11_PIN 7

    dht DHT;

    void setup() {
      Serial.begin (9600);
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
    }

    void loop() {
      
      float duration, distance;
      float speed;
      digitalWrite(trigPin, LOW); 
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
      speed = 331.4 + (0.606 * DHT.temperature) + (0.0124 * DHT.humidity);
      distance = (duration / 2) * (speed / 10000);
      
      if (distance >= 400 || distance <= 2){
        Serial.print("Distance = ");
        Serial.println("Out of range");
      }
      else {
        Serial.print("Distance = ");
        Serial.print(distance);
        Serial.println(" cm");
        delay(1000);
      }
      delay(1000);
    }

    Εναλλακτικά

    #include <dht.h>   
    #define TRIG_PIN 13 
    #define ECHO_PIN 10 
    #define dht_apin A0 /

    dht DHT;           

    void setup() {
      pinMode(TRIG_PIN, OUTPUT);                      
      pinMode(ECHO_PIN, INPUT);                      
      Serial.begin(9600);                               
      delay(500);                                      
      Serial.println("Accurate distance sensing\n\n");  
      delay(1000);                                      
    }

    void loop() {
      DHT.read11(dht_apin);          
      float p = 101000;               
      float temp = DHT.temperature;   
      float humidity = DHT.humidity;  

      //Use the fromula from http://gsd.ime.usp.br/~yili/SpeedOfSound/Speed.html to evaluate speed of sound
      float a0 = 331.5024;
      float a1 = 0.603055;
      float a2 = -0.000528;
      float a3 = 51.471935;
      float a4 = 0.1495874;
      float a5 = -0.000782;
      float a6 = -1.82e-7;       
      float a7 = 3.73e-8;         
      float a8 = -2.93e-10;     
      float a9 = -85.20931;
      float a10 = -0.228525;
      float a11 = 5.91e-5;  
      float a12 = -2.835149;
      float a13 = -2.15e-13; 
      float a14 = 29.179762;
      float a15 = 0.000486;
      float T = temp + 273.15;
      float h = humidity /100.0;
      float f = 1.00062 + 0.0000000314 * p + 0.00000056 * temp * temp;
      float Psv = exp(0.000012811805 * T * T - 0.019509874 * T + 34.04926034 - 6353.6311 / T);
      float Xw = h * f * Psv / p;
      float c = 331.45 - a0 - p * a6 - a13 * p * p;
      c = sqrt(a9 * a9 + 4 * a14 * c);
      float Xc = ((-1) * a9 - c) / ( 2 * a14);
      float speedOfSound = a0 + a1 * temp + a2 * temp * temp + (a3 + a4 * temp + a5 * temp * temp) * Xw + (a6 + a7 * temp + a8 * temp * temp) * p + (a9 + a10 * temp + a11 * temp * temp) * Xc + a12 * Xw * Xw + a13 * p * p + a14 * Xc * Xc + a15 * Xw * p * Xc;
      
      digitalWrite(TRIG_PIN, HIGH);
      delayMicroseconds(10);
      digitalWrite(TRIG_PIN, LOW);
      
      float microseconds = pulseIn(ECHO_PIN, HIGH, 100000); 
      float seconds = microseconds / 1000000;               
      float meters = seconds * speedOfSound;                
      float cm = meters * 100;                              
      cm = cm/2;                                            

      Serial.print("DIST = ");
      Serial.print(cm);
      Serial.print("cm  ");
      Serial.print("HUMI = ");
      Serial.print(humidity);
      Serial.print("%  ");
      Serial.print("TEMP = ");
      Serial.print(temp); 
      Serial.print("C  ");
      Serial.print("Speed of Sound = ");
      Serial.print(speedOfSound);
      Serial.println("m/sec   ");
      
      delay(2000);

    }

    Πηγές ανάρτησης: εδώ και εδώ

    Οι ταινίες του ιστολογίου σε συνέχειες: 

    Επεισόδιο 5


    Κυριακή 7 Μαρτίου 2021

    Ανίχνευσης φλόγας και προειδοποίηση με buzzer και LED

        

     Περιγραφή

    Ο αισθητήρας ανιχνεύει φλόγα (ακριβέστερα, ανιχνεύει την υπέρυθρη ακτινοβολία μήκους κύματος 760 nm - 1100 nm, που ακτινοβολείται κατά την εξώθερμη αντίδραση της καύσης, σε εύρος 60 μοιρών), καθορίζεται η ευαισθησία του με το ποτενσιόμετρο του module (γίνεται καλιμπράρισμα) και παράγεται ειδοποίηση με ήχο και φως, όταν η μέτρηση ξεπερνά την τιμή κατωφλίου.

    Η μέγιστη απόσταση φλόγας μετρήθηκε 83cm. Η διαδικασία έχει αναλυθεί για τον αισθητήρα βροχόπτωσης που διαθέτει παρόμοιο module, σε ανάρτηση εδώ

    • Όταν η φλόγα είναι μακριά, η μέτρηση είναι μικρότερη της οριακής τιμής κατωφλίου, το πράσινο λαμπάκι του module για την ένδειξη τροφοδοσίας είναι ON. 
    • Όταν η φλόγα πλησιάσει σε απόσταση μικρότερη των 83cm, η μέτρηση είναι μεγαλύτερη της οριακής τιμής κατωφλίου, ανάβει και το 2ο πράσινο λαμπάκι του module.
    Στην πλακέτα έχουμε συνδέσει ένα buzzer. Ο αισθητήρας λειτουργεί ως διακόπτης ΟΝ/OFF. Όταν είναι ΟΝ το buzzer ηχεί και το ενσωματωμένο LED αναβοσβήνει.

    Εξαρτήματα και συνδέσεις

  • Arduino Uno
  • αισθητήρας φλόγας
  • buzzer 
  • breadboard, jumper wires
  • Η έξοδος του αισθητήρα συνδέεται στην ψηφιακή είσοδο 11. To buzzer συνδέεται στην ψηφιακή είσοδο 10.

    Κώδικας

      int sensorValue = 0 ;  
        void setup()  
        {  
          Serial.begin(9600);  
          pinMode(11,INPUT); // αισθητήρας φλόγας   
          pinMode(13,OUTPUT); // LED  
          pinMode(10,OUTPUT); // buzzer      
        }  
        void loop()   
        {  
         sensorValue = digitalRead(11); // αισθητήρας φλόγας σε ψηφιακή λειτουργία  
         Serial.println(sensorValue); // τιμή 0 ή 1 στην σειριακή οθόνη  
         delay(10);  
         if(sensorValue == 0 )  
         {  
          digitalWrite(13,HIGH); // Led ON  
          digitalWrite(10,HIGH); // Buzzer ON  
          delay(100);
          digitalWrite(13,LOW); // Led ON  
          digitalWrite(10,LOW); // Buzzer ON  
          delay(100);
         }  
         else  
         {  
          digitalWrite(13,LOW); // Led OFF  
          digitalWrite(0,LOW); // Buzzer OFF  
         }  
         }  

    Κυριακή 28 Φεβρουαρίου 2021

    Μετρήσεις υγρασίας και θερμοκρασίας ατμόσφαιρας με τον αισθητήρα DHT11

     Περιγραφή

    Με τον αισθητήρα DHT11 μετράμε την υγρασία και την θερμοκρασία της ατμόσφαιρας και τυπώνουμε τις τιμές σε οθόνη LCD I2C. 



    Εξαρτήματα και συνδέσεις



    • Arduino Uno
    • αισθητήρας DHT11
    • οθόνη LCD I2C

    Κώδικας

    // Example testing sketch for various DHT humidity/temperature sensors
    // Written by ladyada, public domain

    #include "DHT.h"
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27,16,2);  

    #define DHTPIN 2    
    #define DHTTYPE DHT11   

    DHT dht(DHTPIN, DHTTYPE);

    void setup() {
      Serial.begin(9600);
      Serial.println(F("DHTxx test!"));

      dht.begin();
      
      lcd.init();
      lcd.clear();         
      lcd.backlight();
    }

    void loop() {
     
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      

      // Check if any reads failed and exit early (to try again).
      if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println(F("Failed to read from DHT sensor!"));
        return;
      }

      Serial.print(F("HUMI: "));
      Serial.print(h);
      Serial.println(F("%"));
      Serial.print(F("TEMP: "));
      Serial.print(t);
      Serial.println(F("°C "));

      lcd.setCursor(0,0); 
      lcd.print(F("TEMP: "));
      lcd.print(t);
      lcd.print(F(" oC"));
      lcd.setCursor(0,1);
      lcd.print(F("HUMI: "));
      lcd.print(h);
      lcd.print(F(" %"));
      

    }

    Σάββατο 20 Φεβρουαρίου 2021

    Αισθητήρας βροχόπτωσης σε ψηφιακή λειτουργία: προειδοποίηση με 2 LED και buzzer

     Περιγραφή

    Ο αισθητήρας βροχόπτωσης μπορεί να ανιχνεύει σταγόνες νερού επειδή η παρουσία των σταγόνων νερού στην επιφάνειά του έχει σαν αποτέλεσμα την μεταβολή της αντίστασής του. Συγκεκριμένα:

    • Περισσότερο νερό στην επιφάνεια σημαίνει καλύτερη αγωγιμότητα και έτσι μικρότερη αντίσταση.
    • Λιγότερο νερό στην επιφάνεια σημαίνει χειρότερη αγωγιμότητα και, έτσι, μεγαλύτερη αντίσταση.

    Ο αισθητήρας παράγει τάση εξόδου ανάλογη της αντίστασης, και έτσι, μπορούμε να προσδιορίσουμε εάν βρέχει ή όχι. Λειτουργεί με δύο τρόπους, αναλογικό ή ψηφιακό, και διαθέτει δύο εξόδους σήματος, Α0 και D0 αντίστοιχα. Εδώ ο αισθητήρας λειτουργεί με ψηφιακό τρόπο. Αρχικά, περιστρέφοντας το ποτενσιόμετρο της πλακέτας, θα καθορίσουμε την ευαισθησία του αισθητήρα, με βαθμονόμηση όπως περιγράφεται στην ανάρτηση εδώ. Ο αισθητήρας σε ψηφιακή λειτουργία δίνει στην έξοδο D0 δύο δυνατές τιμές LOW ή HIGH, που ισοδυναμούν με τις δυνατές τιμές ON ή OFF ενός διακόπτη. Στην πλακέτα του αισθητήρα, ένα ενσωματωμένο LED πληροφορεί για αυτήν την κατάσταση ON/OFF.

    Όταν βρέχει, η έξοδος είναι ΟΝ, η κόκκινη λυχνία LED ανάβει και το buzzer ηχεί, διαφορετικά η πράσινη λυχνία είναι αναμμένη.

    Εξαρτήματα και συνδέσεις

    • Arduino Uno
    • Αισθητήρας βροχόπτωσης
    • Κόκκινο LED
    • Πράσινο LED
    • 2x 220Ω αντιστάτες
    • Breadboard και καλώδια
    Η έξοδος του αισθητήρα συνδέεται στην ψηφιακή είσοδο 3. Οι λυχνίες συνδέονται στις ψηφιακές εξόδους 8 και 9 και προστατεύονται με 2 αντιστάτες 220Ω. Το buzzer συνδέεται στην ψηφιακή έξοδο 10.

    Κώδικας

    int R_LED = 8;
    int G_LED = 9;
    int buzzer= 10;
    int rainSensor = 3;
    int rain_ON;
    void setup()
    {
    pinMode(R_LED, OUTPUT);
    pinMode(G_LED, OUTPUT);
    pinMode(buzzer, OUTPUT);
    pinMode(rainSensor, INPUT);
    digitalWrite(G_LED, LOW);
    digitalWrite(R_LED, LOW);
    digitalWrite(buzzer, LOW);
    }
    void loop()
    {
    rain_ON = digitalRead(rainSensor);
    delay(2000);
    if (rain_ON == 0)
    {
    digitalWrite(R_LED, LOW);
    digitalWrite(G_LED, HIGH);
    digitalWrite(buzzer, LOW);
    }
    else
    {
    digitalWrite(R_LED, HIGH);
    digitalWrite(G_LED, LOW);
    digitalWrite(buzzer, HIGH);
    }
    }


    Αισθητήρας βροχόπτωσης σε αναλογική λειτουργία: προειδοποίηση με 2 LED

     Περιγραφή

    Ο αισθητήρας βροχόπτωσης μπορεί να ανιχνεύει σταγόνες νερού επειδή η παρουσία των σταγόνων νερού στην επιφάνειά του έχει σαν αποτέλεσμα την μεταβολή της αντίστασής του. Συγκεκριμένα:

    • Περισσότερο νερό στην επιφάνεια σημαίνει καλύτερη αγωγιμότητα και έτσι μικρότερη αντίσταση.
    • Λιγότερο νερό στην επιφάνεια σημαίνει χειρότερη αγωγιμότητα και, έτσι, μεγαλύτερη αντίσταση.

    Ο αισθητήρας παράγει τάση εξόδου ανάλογη της αντίστασης, και έτσι, μπορούμε να προσδιορίσουμε εάν βρέχει ή όχι. Λειτουργεί με δύο τρόπους, αναλογικό ή ψηφιακό, και διαθέτει δύο εξόδους σήματος, Α0 και D0 αντίστοιχα. Εδώ ο αισθητήρας λειτουργεί με αναλογικό τρόπο.

    Όταν βρέχει, η κόκκινη λυχνία LED ανάβει, διαφορετικά η πράσινη λυχνία είναι αναμμένη.

    Εξαρτήματα και συνδέσεις


    • Arduino UNO
    • Αισθητήρας βροχόπτωσης
    • Κόκκινο led
    • Πράσινο led
    • 2 x 220Ω αντιστάτες
    • Breadboard και καλώδια
    Η έξοδος του αισθητήρα συνδέεται στην αναλογική Α0. Οι λυχνίες συνδέονται στις ψηφιακές εξόδους 8 και 9 και προστατεύονται με 2 αντιστάτες 220Ω.

    Κώδικας

    int greenLED = 9;
    int redLED = 8;
    int thresholdValue = 790;

    void setup(){
      pinMode(A0, INPUT);
      pinMode(greenLED, OUTPUT);
      pinMode(redLED, OUTPUT);
      digitalWrite(greenLED, LOW);
      digitalWrite(redLED, LOW);
    }

    void loop() {
      int sensorValue = analogRead(A0);
      if(sensorValue < thresholdValue){
        digitalWrite(greenLED, LOW);
        digitalWrite(redLED, HIGH);
      }
      else {
        digitalWrite(greenLED, HIGH);
        digitalWrite(redLED, LOW);
      }
      delay(2000);
    }