Kategori:

Ardunio

Başlık:

Ardunio Mega ile Çoklu Sensör Ekipmanı Yapımı

Bir projede birden fazla sensör kullanılabilir mi? Kullanılırsa nasıl kullanılır? Tek bir LCD ekranda bu sensörlerden gelen değerleri gösterebilir miyiz? İşte bu örnek projede bu soruların cevabını bulabilirsiniz. Bu projede pin sayısından dolayı Ardunio Mega'yı tercih ettik. Bu projede 3 çeşit sensör kullanılmıştır. Bunlar DHT11 sıcaklık ve nem sensörü, MAX30100 kalp atışı ve oksimetre(kandaki oksijen düzeyi) sensörü ve MQ2 gaz sensörüdür (LPG, Propan ve Hidrojen yoğunluğu ölçümü yapıyor). Ayrıca Tabii ki daha fazla sensör bu ekipmana eklenebilir. Ama uygulama esnasında çakışmaların yaşandığını ve stabil çalışmadığını gözlemledik. Bunun nedeni belki kullanılan mikrodenetleyicinin türü veya yeterli elektrik beslemesinin olmayışı olabilir. Bu konuda daha deneyimli arkadaşlar alttaki yorumlar kısmında tecrübelerini paylaşabilirler.





Bu örnek projede butonlar vasıtasıyla seçim yaparak ilgili sensörlerle ilgili değerlerin LCD ekranda gösterilmesi sağlandı. Kodlama esnasında bu durumu sağlamak için "Switch-Case" yapısından faydalanıldı. Siz yapacağınız projede buton yerine potansiyometre veya rotary encoder gibi ekipmanlar kullanabilirsiniz. Buradaki amacımız basit bir şekilde bu tarz projeler için fikir vermektir. 

Kullanılan Malzemeler

  • Ardunio Mega (Klon)
  • 2 adet büyük 1 adet mini breadboard
  • DHT11 Sıcaklık ve nem sensörü 
  • MAX30100 Nabız ve oksimetre sensörü
  • MQ2 Gaz sensörü
  • 1 adet 16x2 Lcd modülü
  • 1 adet I2C modülü
  • 3 adet buton
  • 4 adet 10K Ohm direnç(3 tanesi butonlar için 1 tanesi DHT11 sensörü için)
  • Jumper kablolar

Projenin Şeması



Önemli: Projenin kodlamasını yapmadan önce aşağıdaki kütüpnaleri indirip klasöre çıkararak Ardunio'nun kurulum dizinindeki Libraries klasörüne veya "Belgelerim/Ardunio/Libraries" konumuna kopyalayınız.

Projede Kullanılan Kütüphaneler:

Dht11

https://github.com/adafruit/DHT-sensor-library

LCD I2C:

https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

mq-2:

https://github.com/labay11/MQ-2-sensor-library

max30100:

https://github.com/xcoder123/MAX30100


Projenin Kaynak Kodu:

#include "DHT.h"       //DHT11 Sensör Kütüpnahesini ekliyoruz
#define DHTPIN 12     // DHT11 sinyal pinini 12.dijital pin olarak tanımlıyoruz 
#define DHTTYPE DHT11   // DHT tipini DHT11 olarak belirliyoruz
#include "Wire.h" // I2C modülünü kullanmak için bu kütüphaneyi ekliyoruz
#include "LiquidCrystal_I2C.h"  //LCD modülü kullanmak için bu kütüpnaheyi ekliyoruz
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //  LCD I2C adresini tanımlıyoruz
#include "MAX30100.h"
MAX30100* pulseOxymeter;
uint32_t tsLastReport = 0;
int PulsePin=8;
int PulseButonPin=4;
int pulseButonDurum=0;
DHT dht(DHTPIN, DHTTYPE);
int buton_deger=0;  // Basılan butona göre LCD'de ilgili sensör değerlerinin gösterilmesi için bu değişkeni Switch-Case yapısında kullanıyoruz
int dht11ButonPin=2;
int dht11ButonDurum=0;
int mq2ButonPin=3;
int mq2ButonDurum=0;
const int mq2Pin = A1; // Arduino nun A1 analog pinine mq2 sensörü bağlanacak
void setup() {
  Serial.begin(9600);
  pinMode(dht11ButonPin,INPUT); // buton pinimizi giriş ayarladık
  pinMode(mq2ButonPin,INPUT); // buton pinimizi giriş ayarladık
  lcd.begin(16,2);
  dht.begin();
  pulseOxymeter = new MAX30100();
}
void loop() {
  //Pinlerden gelen değerleri değişkenlere atıyoruz
  dht11ButonDurum=digitalRead(dht11ButonPin);
  mq2ButonDurum=digitalRead(mq2ButonPin);
  pulseButonDurum=digitalRead(PulseButonPin); 
  int h = dht.readHumidity();
  int t = dht.readTemperature();
  pulseoxymeter_t result = pulseOxymeter->update();
  if(dht11ButonDurum==HIGH){
    lcd.clear();
    buton_deger=1; //LCD de sıcaklık ve nem gösterilmesi için
  }
  
  if(mq2ButonDurum==HIGH){
    lcd.clear();
    buton_deger=2; //LCD de gaz değeri gösterilmesi için
  }
 
  if(pulseButonDurum==HIGH){
    lcd.clear();
    buton_deger=3; //LCD de sıcaklık ve nem gösterilmesi için
  }
  
  switch (buton_deger) {
    case 0:
        lcd.setCursor(0, 0);
        lcd.print("Proje:");
        lcd.setCursor(0,1);
        lcd.print("Çoklu Sensör");
      break;
    case 1:
        lcd.setCursor(0, 0);
        lcd.print("Gaz: ");
        lcd.print(analogRead(mq2Pin));
        delay(100);
      break;
    case 2:
 
        lcd.setCursor(0, 0);
        lcd.print("Sıcaklık: ");
        lcd.print(t);
        lcd.print("C");
  
        lcd.setCursor(0,1);
        lcd.print("Nem: ");
        lcd.print(h);
        lcd.print("%");
      break;
    case 3:

        if( result.pulseDetected == true )
  {
           
            lcd.setCursor(0, 0);
            lcd.print("Nabız:");
            lcd.print(result.heartBPM);

            lcd.setCursor(0,1);
            lcd.print("Oksijen:");
            lcd.print(result.SaO2);
            lcd.println("%");

  }
  delay(10);
  digitalWrite( PulsePin, !digitalRead(PulsePin) );

      break;
    default:
        lcd.setCursor(0, 0);
        lcd.print("Proje:");
        lcd.setCursor(0,1);
        lcd.print("Çoklu Sensör");
      break;
  }   
}

472 views
YORUMLAR