30 Nisan 2018 Pazartesi

Arduino Uno ile Sıcaklı,Nem,Ldr Sensörleri ile Kırımızı Kalifornia Solucanı Ortam Denetlemesi

KIRMIZI KALİFORNİA SOLUCANI YAŞAM ORTAMLARININ SENSÖRLER İLE DENETLENMESİ

KirmiziKaliforniyaSolucani  



Kırmızı Kaliforniya solucanı, diğer adıyla  Latincede Eisenia Foetida ilk defa Kaliforniya’da melezlenmesi  dolayısıyla Kırmızı Kaliforniya solucanı olarak adlandırılmıştır. Kendine özgü özellikleri olan ve ekolojik önemi fazla olan canlılardır  solucanlar. Doğadaki rollerine baktığımızda gerçekten solucanların toprak üzerindeki yararlı etkileri saymakla bitmez. Kırmızı kaliforniya solucanın karakteristik özelliklerini sıralayacak olursak;

  • Çok zayıf ışık dışında tüm ışıklardan kaçarlar ve güneş ışığına maruz kaldıklarında kısa süre sonra ölürler.  
  • 40°C’yi geçmeyen sıcaklıkta ve 0°C sıcaklıkta  hayatta kalabilirler, 20°C solucanların üretimi ve çoğalmaları için en ideal sıcaklıktır.
  • Toprak neminin ortalama %80 civarında olması gerekmek. Solucanlar zaman içinde toprak nemini azaltacağından zaman zaman üzerlerini sulamak gerekmektedir.
Bizde bu solucanları uygun ortamda yetiştirmek için ortamlarını sensörler yardımıyla denetleyerek sağlıklı ve uygun koşullarda bakımlarını yapmayı hedefledik. Daha önce solucanların yaşam koşullarından bahsettiğimize göre; ortamlarının sıcaklığını ölçmek için bir adet sıcaklık sensörü, topraklarının nemini ölçmek için bir adet toprak nem sensörü, ışığa maruz kaldıklarında ışığın şiddetini ölçen bir ldr sensörü , sensörlerden gelen değerleri okuyabilmek için bir adet lcd panel yardımıyla ortamlarının denetlemesini yaptık.

Projedeki amaç sensörlerden okuduğumuz değerlere göre solucanların bakımını daha profesyonel bir biçimde yapmak.

Proje Arduino Uno R3 Klon modeliyle gerçekleşmiştir. Arduino IDE ortamında kodlama C++ dilinde yapılmıştır.


Akış Diyagramı







Kullandığımız Malzemeler:

  • 1 adet Arduino Uno
  • 1 adet LM35 sıcaklık sensörü
  • 1 adet YL-69 toprak nem sensörü
  • 1 adet LDR ışık sensörü
  • 1 adet lcd panel
  • 1k direnç
  • jumper kablolar




Devre Şeması:





LM35 Sıcaklık Sensörü

LM35 serisi sıcaklık sensörleri, çıkış olarak sicaklık ile doğru orantılı bir voltaj verirler. LM35 kullanırken kalibrasyon amaçlı bir devre kurmamız gerekmez. 60 μA gibi düşük bir akım çeker. Bu nedenle, çalışırken kendi içinde oluşan ısı düşüktür ve entegrenin kendisi ortam sıcaklığından yalnız 0.1 ℃ fazla olur. Çıkış empedansı düşük olduğu için, verdiği voltaj ölçülürken hata payı küçük olur.

lm35 ile ilgili görsel sonucuLM35 Bacakları

Yukarıdaki devrede, LM35’i 4V ile 20V arasında herhangi bir voltajla beslersek, çıkıştan sıcaklıkla doğru orantılı olarak bir voltaj alırız. Çıkış voltajındaki her 10mV'luk değişim, 1 ℃'ye denk gelir ve 0 ℃ için 0V çıkış verir. Örneğin, sicaklık 27 ℃ ise çıkışta 270mV voltaj görürüz.
T eğer ℃ cinsinden ortam sicaklığı ise, çıkış voltajını
Çıkış Voltajı=T×10mV/℃
ile formülüze edebiliriz.

Önemli Özellikleri:
Her bir santigrad derece sıcaklık artışı için, çıkış voltajında 10mV artış olur.
Ölçüm kesinliği: +-1 derece (25 derece civarındaki kesinlik +-0.5 derece)
Ölçüm aralığı:  -55 derece ile 150 derece arası
Maksimum besleme voltajı: 35V
Çıkış empedansı: 1mA yük için 0.1Ohm
Maksimum çıkış akımı: 10mA
Maksimum çıkış voltajı: 6V
Minimum çıkış voltajı: -1V

LM35 Kodları:


YL-69 Toprak Nem Sensörü


Topraktaki nemi ölçmeye yarayan sensörümüz analog değerler üretmektedir. Dolayısıyla arduino kartımızın Analog girişlerinden verileri alıp işleyebiliriz. Ölçülen değerl 0-ile 1023 arasında olacağında bu değerleri 0-100 ile arasında bir değere dönüştürmek daha anlaşılır olmasını sağlayacaktır. Dönüştürme işlemi için;


map(deger,0,1023,0,100); komutu kullanılır.


Kodları


LDR Sensörü

Optik sensör türleri içerisinde akıla gelen ilk elektronik elemandır. İngilizce Photo Resistor anlamına gelmesine karşın foto dirençler yaygın bir şekilde LDR adı ile ifade edilir. İsminden de anlaşılacağı üzere LDR, Light Dependet Resistance kelimelerinin kısaltılmış halidir. LDR, Ortamdaki ışığın şiddetine göre üzerine düşen direnç değerini ters orantılı olarak ayarlayabilen en basit optik sensör çeşididir.



Kodları




Projenin Kodları
















KAYNAKÇA


24 Nisan 2017 Pazartesi

Virtualbox Sanal Makinesine PfSense Kurulumu ve Ağ Yapılandırmaları

Merhaba arkadaşlar öncelikle yapılandıracağımız ağın şekli aşağıda verilmiştir.


Ana makineye (192.168.2.137) ip adresi ile kullanıyorum ve bir kablosuz vericiye (192.168.2.1) ile bağlıyım.

Gerekli Yazılımlar:
  • VirtualBox
  • Kali Linux
  • Ubuntu Desktop
  • PfSense
VirtualBox

VirtualBox'ı indirmek için tıklayın.

Kali Linux

Kali Linux'u indirmek için tıklayın.

Ubuntu Desktop

Ubuntu Desktop indirmek için tıklayın.
Ubuntu Desktop kurulumunu resimli olarak altta anlatışmıştır.

Şu anda sanl makinemizin özelliklerini belirledik.Onun için bölüm ayırdık son aşama olarak bir işletim sistemi(Ubuntu vb.) kurmamız gerekecek, ondan sonra sanal makinemizi kullanmaya başlayabiliriz.

Ardından sanal makinemizi açılmaya başladığında işletim sistemini CD/DVD ROM dan mı yoksa bilgisayarınızda kayıtlı ola .iso dosyasından mı kuracağız onu seçiyoruz.Vermiş olduğum linkte iso dosyasını indirip kurabilirsiniz.



Ardından kurulum işlemine geçebiliriz.


Ubuntu Kur'a tıklıyoruz.


Arkadaşlar bundan sonrası kolay klavye seçiyorsunuz, yer bildiri mi yapıyorsunuz.. 

PfSense

PfSense indirmek için tıklayın.
PfSense kurulumunu resimli olarak aşağıda anlatılmıştır.

Minumum system gereksinimi olarak önerilen Pentium II işlemci ve en az 128 MB Ram gerekmekte ve kurulum yapılacak makine üzerinde iki ethernet kart bulunması işin bunların bir WAN yapılandırmaları için biride LAN için.Yukarıda verdiğim linkten .iso imajını indirip sanal makinemizden seçiyoruz.



İlk olarak pfSense hoş geldiniz ekranı ile karşılaşıyoruz.7 tuşuna basarak Reboot ediyoruz.




Sistemimizde bulunan iki interface ve mac adresleri "Valid interface are:" başlığı altında görülüyor. Pfsense'nin vlan desteğide bulunmaktakdır. VLAN aynı network üzerinde bulunan Lan kullanıcılarını birbirinden ayırmak için kullanılır.VLAN kurulumu isteği sorusuna "n" diyerek devam ediyoruz.


İnterface'lerin isimleri yukarı'da görüldüğü gibi "le0" ve "le1" souruya le0 olarak cevap veriyoruz ve böylelikle LAN interface'yi set etmiş oluyoruz.


Soruya le1 yanıtıylada WAN interface'yi set ediyoruz.


Bu ekranı da enter ile geçiyoruz.


Görüldüğü gibi le0 LAN, le1 WAN olarak görülmektedir. Ayarların bu kaydedilmesi için y tuşuna basarak enter diyoruz.


Kurulum tamamlandı ve pfsense virtualbox üzerinden çalışmaya başladı.

PfSense Yapılandırması

Kurulum işlemi tamamlandıktan sonra, pfSense yapılandırmana devam edebiliriz. PfSense'i yapılandırma adımları bir sonraki bölümde gösterilecektir.Bundan önce virtualbox ağ ayarlarında değişiklik yapalım.

Varsayılan olarak, Bağdaştırıcı 1, Sanal kutuya NAT'a bağlıdır. "Bağdaştırıcı 1" i NAT dan Köprülü Bağdaştırıcı(Bridged Adapter) ya çevirin.Bunu yaparak pfsense'in internet erişimini sağlamış olduk.


Şimdi, pfSense için başka bir arabirim kurmamız gerekiyor. Bu güvenlik duvarı tarafından korunan özel bir ağ için bir arayüz olacak. Bu nedenle "Adaptör 2" yi seçin ve "Dahili Ağ" ı seçin. Bu aşağıdaki şekilde gösterildiği gibi olmalıdır.

Şimdi Pfsense' çalıştırarak ağ yapılandırmalarını yapacağız.


Yukarıdaki şekilde görebileceğiniz gibi, le0 arayüzünde pfSense 192.168.1.1 ile atanmıştır.
Bu arayüz en başta vermiş olduğumuz ağ şemasındaki tüm pc lere açıktır.Böylece, aynı IP ağına bağlı olan herhangi bir bilgisayardan bu IP adresine erişebilirsiniz. 




Şimdi LAN ağındaki le1 ip adresi verelim.
IP adresi vermek için 2 yazın ve enter a basın. Daha sonra ip adresi olarak 10.0.0.1/24 yazın ve enter.



Artık buradan 192.168.1.137  adresine yani kendi pc me ping atabilirim.

Özel Ağın Yapılandırılması

Ubuntu desktop veya  Kali Linux aşağıdaki işlemleri yaptıktan sonra açıyoruz. Her ikisi içinde olur.


Ben Kali Linux ile yapmayı tercih ettim hiç fark etmez ama Şimdi makinemi çalıştırıyorum.
Daha sonra terminali açarak ip adresinize bakın.


IP adresi 10.0.0.5 olduğunu gördüm ve ana bilgisayardan htpp://10.0.0.1 url si ile pfsense arayüzüne erişelim. 


Varsıyan kullanıcı adı: admin ve şifre: admin dir.




Evet arkadaşlar pfsense arayüzüne ulaştık. Bundan sonraki makalemiz pfsense üzerinde firewall kuralları pfsense ile yapılacaklar hakkında olacak teşekkür ederim.






























6 Aralık 2016 Salı

UBUNTU SERVER 16.10 üzerinde Node.js programlama dilinde Mysql veri tabanı kullanarak CRUD işlemleri

Merhaba arkadaşlar Oracle VM Virtualbox sanal makinesinin kurulu olduğu düşünerekten öncelikle yapmamız gereken Ubuntu server'a Node.js ve Mysql li kurmak.Virtualbox için tıklayın

Node.js Kurulumu

sudo apt-get update
sudo apt-get install nodejs
Komutları işinizi görecektir..Aşağıdaki gibi bir çıktı alıyorsanız sorun yok demektir.



Node.js paket yönlendiricisi olan NPM de yükleyelim.

sudo apt-get install npm
Komutları işinizi görecektir..Aşağıdaki gibi bir çıktı alıyorsanız sorun yok demektir.



Mysql Kurulumu

sudo apt-get install mysql-server
Komutları mysql i kurmak için yeterli.Aşağıdaki gibi bir çıktı alıyorsanız sorun yok demektir.


mysql -u root -p
Komutuyla mysql kabuğuna ulaşabilir veritabanlarını ve tabloları burada yazacağımız komutlarla görebilir ve yeni bir veri tabanı oluşturabilirsiniz.Örneğin;

CREATE DATABASE testdb  Komutuyla veri tabanımı oluşturduk

use testdb komutuyla veri tabanına tablo ekleyebiliriz.

Virtualbox Ağ Yapılandırılması

Port yönlendirmemiz için VirtualBox' ın ayarlar kısmından ağ sekmesine tıklıyoruz karşımıza çıkan ekrandan  gelişmiş seçeneğini tıklıyoruz. Açılan ekrandan bağlantı noktası yönlendirme tıklamamız gerekmektedir. Aşağıda gördüğünüz gibi.



Proje Aşamaları


1.ADIM:
Kurulumumuz tamamladıktan sonra proje klasörümüzü oluşturmaya başlayalım.

express testproje komutuyla klasörümüzü oluşturduk.

Aşağıdaki gibi bir ekran karşınıza çıkıyorsa hata yok demektir.



testproje adlı klasörün içine girerek mysql' i kuruyoruz.Ekran aşağıdaki gibi ise sorun yok.



Express'te bağlantı yöneticisine ihtiyacımız var bunun için;npm install express-myconnection komutuyla bağlantı sağlıyoruz.Aşağıdaki gibi bir çıktı alıyorsanız sorun yok demektir.



Şimdi arkadaşlar oluşturuduğumuz veri tabanına bir tablo ekliyoruz.
Kodlar:
create table kullanici2(
id int not null primary key auto_increment
ad varchar(20),
adres varchar(50),
tel varchar(15),
eposta varchar(50)
);

Çıktısı:



2.Adım:
app.js adlı bir dosya açıyoruz testproje klasöründeki views klasörünün içerisine;(testproje/views/app.js)

app.js kodlar:

var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');

var customers = require('./routes/customers'); 
var app = express();
var connection  = require('express-myconnection'); 
var mysql = require('mysql');

app.set('port', process.env.PORT || 4300);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));

if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.use(
    
    connection(mysql,{
        
        host: 'localhost',
        user: 'root',
        password : '',
        port : 8080, //port mysql
        database:'nodejs'
    },'request')
);//yönledirici index testproje
app.get('/', routes.index);//route liste
app.get('/customers', customers.list);//route ekle mesajı al
app.get('/customers/add', customers.add);
app.post('/customers/add', customers.save);//route sil
app.get('/customers/delete/:id', customers.delete_customer);
app.get('/customers/edit/:id', customers.edit); 
app.post('/customers/edit/:id',customers.save_edit);
app.use(app.router);
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Yukarıda gösterdiğim gibi yeni bir dosya ve klasör oluşturmayı unutmayın.!

Şimdi arkadaşlar crud işlemlerini yapma için olan kodlar...

exports.list = function(req, res){
  req.getConnection(function(err,connection){
       
     connection.query('SELECT * FROM customer',function(err,rows)     {
            
        if(err)
           console.log("Hata listesi: %s ",err );
     
            res.render('Müşteriler',{page_title:"Müşteriler-Node.js",data:rows});
                           
         });
       
    });
  
};
exports.add = function(req, res){
  res.render('Müşteri Ekle',{page_title:"Ekle Müşteri-Node.js"});
};
exports.edit = function(req, res){
    
  var id = req.params.id;
    
  req.getConnection(function(err,connection){
       
     connection.query('SELECT * FROM Müşteri WHERE id = ?',[id],function(err,rows)
        {
            
            if(err)
                console.log("Hata Listesi : %s ",err );
     
            res.render('Müşterileri Düzenle',{page_title:"Düzenle-Müşteri - Node.js",data:rows});
                           
         });
                 
    }); 
};
/*Save the customer*/
exports.save = function(req,res){
    
    var input = JSON.parse(JSON.stringify(req.body));
    
    req.getConnection(function (err, connection) {
        
        var data = {
            
            name    : input.name,
            address : input.address,
            email   : input.email,
            phone   : input.phone 
        
        };
        
        var query = connection.query("INSERT INTO customer set ? ",data, function(err, rows)
        {
  
          if (err)
              console.log("Hata Listesi : %s ",err );
         
          res.redirect('/customers');
          
        });
        
       
    });
};//kayıt müşteri için
exports.save_edit = function(req,res){
    
    var input = JSON.parse(JSON.stringify(req.body));
    var id = req.params.id;
    
    req.getConnection(function (err, connection) {
        
        var data = {
            
            ad: input.name,
            adres: input.address,
            eposta: input.email,
            tel: input.phone 
        
        };
        
        connection.query("UPDATE customer set ? WHERE id = ? ",[data,id], function(err, rows)
        {
  
          if (err)
              console.log("Error Updating : %s ",err );
         
          res.redirect('/Müşteriler');
          
        });
    
    });
};

exports.delete_customer = function(req,res){
          
     var id = req.params.id;
    
     req.getConnection(function (err, connection) {
        
        connection.query("DELETE FROM customer  WHERE id = ? ",[id], function(err, rows)
        {
            
             if(err)
                 console.log("Error deleting : %s ",err );
            
             res.redirect('/customers');
             
        });
        
     });
};


Web arayüzü için HTML kodları:

<%- include layouts/header.ejs %>
        <div class="page-data">
         <div class="data-btn">
           <button onClick="addUser();">+ Add</button>
         </div>
         <div class="data-table">
            <table border="1" cellpadding="7" cellspacing="7">
                <tr>
                    <th width="50px">No</th>
                    <th>Name</th>
                    <th>Address</th>
                    <th>Phone</th>
                    <th>Email</th>
                    <th width="120px">Action</th>
                </tr>                               
                <% if(data.length){ 
                                
                 for(var i = 0;i < data.length;i++) { %>                 
                <tr>
                    <td><%=(i+1)%></td>
                    <td><%=data[i].ad%></td>
                    <td><%=data[i].adres%></td>
                    <td><%=data[i].tel%></td>
                    <td><%=data[i].eposta%></td>
                    <td>
                        <a class="a-inside edit" href="../customers/edit/<%=data[i].id%>">Edit</a>                       
                        <a class="a-inside delete" href="../customers/delete/<%=data[i].id%>">Delete</a>                       
                    </td>
                </tr>
            <% }
            
             }else{ %>
                 <tr>
                    <td colspan="3">No user</td>
                 </tr>
            <% } %>
                                                             
            </table>
         </div>
        </div>        
<%- include layouts/footer.ejs %>


Projenin çıktısı



KAYNAKLAR