20 Kasım 2015 Cuma

Arduino Uno, Arduino Pro mini RF İletisim - XD-RF-5V Modül

Eğer ucuz imkanlarla iyi bir arduino ağı oluşturmak istiyorsak RF modüllerinden yararlanmamız daha doğru olacak diye düşünüyorum. Bu modül ile aynı veya farklı iki arduino kartınızı kablosuz olarak haberleştirme imkanı sağlar. Tabi bu modüller sadece arduino için değil, Raspberry pi, beaglebone  veya özel hazırlanan donanımlarda kullanıldığını görüyoruz.
XD-RF-5V Modülü (Transmitter ve Receiver birlikte) 4,5 TL gibi oldukça ucuz bir rakama elde edebilirsiniz.

Tranmitter kart olarak Arduino pro mini yi kullandım. hem ucuz hem küçük. Bu kart 5V ve 3V aralığında çalışabilmektedir. Detaylı bilgiye https://www.arduino.cc/en/Main/ArduinoBoardProMini adresinden ulaşabilirsiniz. Aşağıdaki fotoğrafta ilk elime geçtiğinde Arduino Pro mini 

Size Pro mini pinleri lehimsiz gelecektir. Ayrıca lehimlemeniz gerekecek. 




 RF Transmitter ve Receiver fotoğrafları aşağıda verilmiştir.
Sağdaki Transmitter (gönderici) soldaki Receiver (alıcı)

RF Transmitter kartını Arduino Pro mini kartımıza bağlıyoruz. Ben Burada Breadboard kullanmadım. Test için eğer elinizde uygun kablolar var ise gerekte yok. 
RF Transmitter Kartın üzerindeki 
GROUND pinini Pro minideki GND pinine, 
VCC pinini Pro minideki VCC pinine, (Eğer Pro mini yi 5V ile çalıştırıyorsanız bu pin 5V çıkış verecektir.)
DATA pinini Pro minideki Digital 3 pinine bağladım



RF Reveiver kartını Arduino UNO kartımıza bağlıyoruz.  
RF Reveiver  Kartın üzerindeki 
GROUND pinini UNO  GND pinine, 
VCC pinini UNO  5V pinine, 
DATA pinini UNO Digital 3 pinine bağladım



Gelelim kodlamaya. Kod içerinde VirtualWire.h kütüphanesi kullanılmıştır. Eğer kütüphanenizde yoksa buradan indirebilirsiniz. VirtualWire.zip
Kütüphaneyi yüklemek için aşağıda resimde gösterilen yolu izleyiniz.



Transmitter kodumuz aşağıdaki gibidir. Bu konu Arduino Pro mini kartımıza gönderiyoruz.


#include
void setup()
{
 vw_set_ptt_inverted(true); // Required by the RF module
 vw_setup(2000); // bps connection speed
 vw_set_tx_pin(3); // Arduino pin to connect the receiver data pin
}

void loop()
{
 //Message to send:
 const char *msg = "ILK RF TESTIMIZ";
 vw_send((uint8_t *)msg, strlen(msg));
 vw_wait_tx(); // We wait to finish sending the message
 delay(200); // We wait to send the message again 
}


Receiver kodumuz aşağıdaki gibidir. Bu konu Arduino UNO  kartımıza gönderiyoruz.

#include

void setup()
{
 Serial.begin(9600); // Configure the serial connection to the computer
 vw_set_ptt_inverted(true); // Required by the RF module
 vw_setup(2000); // bps connection speed
 vw_set_rx_pin(3); // Arduino pin to connect the receiver data pin
 vw_rx_start(); // Start the receiver
}

void loop()
{
 uint8_t buf[VW_MAX_MESSAGE_LEN];
 uint8_t buflen = VW_MAX_MESSAGE_LEN;
 if (vw_get_message(buf, &buflen)) // We check if we have received data
 {
 int i;
 // Message with proper check 
 for (i = 0; i < buflen; i++)
 {
 Serial.write(buf[i]); // The received data is stored in the buffer
 // and sent through the serial port to the computer
 }
 Serial.println();
 }
}

 Videodan hem bağlantılara hemde sonuca göz atabilirsiniz. Sormak istediklerinizi yoruma yazabilirsiniz. 







18 Kasım 2015 Çarşamba

Arduino Pro Mini 328 P ve USB to TTL converter

Yapmak istediğiniz uygulamalara göre kullanacağınız donanımlar değişebilir. Küçük çaplı projelerde maliyet ve donanımın küçük olması çok önemli. Ben bir kaç sensör bilgisini arduino una karta gönderebilecek bir sensör ağı kurmak istiyorum. Her lokasyona Ardiuno UNO kullanmak yerine Ardiuno Pro mini kartını kullanarak hem maliyet hem de küçük olması nedeniyle alandan kazanmak istedim.
Arduino Pro Mini ATMEGA 328P 5V 16Mhz 9,5 TL
Birde bu kartı progamlama için usb converter
CH340G USB 2.0 To RS232 TTL  7 TL

donanımlarını aldım. Aslında elinizde arduino uno kartınız var ise Pro mini yi programlayabilirsiniz.

Pro mini üzerindeki VCC pinini UNO üzerindeki 5V veya 3V pinine
Pro mini üzerindeki GND pinini UNO üzerindeki GND
Pro mini üzerindeki RXD pinini UNO üzerindeki RX
Pro mini üzerindeki TXD pinini UNO üzerindeki TX
Pro mini üzerindeki RESET pinini UNO üzerindeki RES

bağladıktan sonra Arduino program geliştirici ekranınızda Tools -> Board -> Arduino Pro Mini yi seçiniz.
uygulamayı upload ettiğinizden pro mini kartınız program yüklenecektir.
Yükleme esnasında Uno kartınızdaki Tx Rx ışıklarının yanıp söndüğünü göreceksiniz.

Benim burada kullandığım USB converterda durum biraz daha farklı.
Pro mininin öncelikle pinleri lehimli gelmemekte. Lehimli olanlarıda satılıyor.
Dikkatli bir şekilde pinleri lehimleniz gerekecek.







USB converterın TX kısmını Pro Mini RX kısmına
USB Converter in RX pinini Pro Mini  TX pinine
USB Converter 5 veya 3 V Pro Mini VCC pinine  bağlayınız.

Yalnız bu versiyon USB de DTR pini bulunmamakta. O yüzden uygulamanızı upload etme esnasında pro mini kartınızın reset butonuna manuel olarak basmanız yeterli olacaktır.












Arduino pro mini kartımızı test ediyoruz.


Uygulama programımımız


int ledPin = 8;

void setup() {
  // put your setup code here, to run once:
 pinMode(ledPin,OUTPUT);
 digitalWrite(ledPin,LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  
  digitalWrite(ledPin,HIGH);
  delay(50);
  digitalWrite(ledPin,LOW);
  delay(1000);
}


Arduino PIR Hareket (Motion) Sensör Uygulaması


Bu uygulamada
Birer adet Arduino Uno Kart, Hareket sensörü, led, breadboard ve bağlantı kabloları kullanılmıştır.
PIR sensörleri dijital çıktı vermektedir. Dolaysıyla sizin yapmanız gereken data pinini Arduino kartın istediğiniz bir digital pinine bağlamanız yeterli olacaktır. Arduino kartınızdan 5V ve GND pinlerinden PIR sensörün 5V ve GND pinine bağlayınız.

 Devreyi size çok ayrıntılı anlatmayacağım. Resimler ve videodan bakarak çözebilirsiniz. Sormak istediklerinizi yorumlarda belirtebilirsiniz. 




PIR Sensörü






Program oldukça basit.


int calibrationTime = 30;        

int pirPin = 3;    
int ledPin = 13;
int pirSensorValue = 0;

/////////////////////////////
//SETUP
void setup(){
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(pirPin, LOW);

  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
    for(int i = 0; i < calibrationTime; i++){
      Serial.print(".");
      delay(100);
      }
    Serial.println(" done");
    Serial.println("SENSOR ACTIVE");
    delay(50);
  }

////////////////////////////
//LOOP
void loop(){
      pirSensorValue =digitalRead(pirPin);
      Serial.print(pirSensorValue);
      delay(500);
      if (pirSensorValue == 1) {
        digitalWrite(ledPin,HIGH);
        delay(50);
      } else {
        digitalWrite(ledPin,LOW);
        delay(50);
      }
      
  }


LM35 Sıcaklık sensorü ve 16x2 display kullanımı



Bu projemizde amacımız iki adet LM35 sensöründen gelen sıcaklık verilerini 16X2 matix LCD üzerinde gösterimini yapacağız.
1 adet Arduino UNO
1 adet 16x2 LCD Display
2 adet LM35 sıcaklık sensörü
1 adet ayarlı direnç (LCD ekran ışığının ayarı için)
dirençler ve bağlantı kabloları

Bu proje daha önce yapıldığı için gerektiği kadar detaylı bilgi veremedim. Projenin yapım aşaması malesef yok. Sormak istediklerinizi yorumlara yazabilirsiniz. 






Program

/*
  LiquidCrystal Library - Hello World

 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.

 This sketch prints "Hello World!" to the LCD
 and shows the time.

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include
#include

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

int sensorPin = A0;    // select the input pin for the potentiometer
int sensorPin2 = A1;    // select the input pin for the potentiometer
int sensorPinA5 = A5;

float sensorValue = 0;  // variable to store the value coming from the sensor
float sensorValue2 = 0;
float sensorValue3 = 0;  // variable to store the value coming from the sensor


int sensorPin3 = A2;    // select the input pin for the potentiometer
int ledPin2 = 2;      // select the pin for the LED



void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  pinMode(sensorPin,INPUT);
  pinMode(sensorPin2,INPUT);
 // pinMode(sensorPin3,INPUT);
  pinMode(ledPin2,OUTPUT);
  
 digitalWrite(ledPin2, HIGH);
 analogWrite(sensorPinA5, 255);
 delay(1000);
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  sensorValue = analogRead(sensorPin);
  sensorValue = (5.0 * sensorValue * 100.0) / 1024; 
  sensorValue = round(sensorValue*10)/10.0; 
  
  sensorValue2 = analogRead(sensorPin2);
  sensorValue2 = (5.0 * sensorValue2 * 100.0) / 1024;
  sensorValue2 = round(sensorValue2*10)/10.0; 


 //sensorValue3 = analogRead(sensorPin3);
 // sensorValue3 = (9.0 * sensorValue3 * 100.0) / 1024;
 // sensorValue3 = round(sensorValue3*10)/10.0; 



  
  // stop the program for for milliseconds:

  if (sensorValue >= 25){
    digitalWrite(ledPin2, LOW);
    delay(1000);
  }
  if (sensorValue < 24){
    digitalWrite(ledPin2, HIGH);
    delay(1000);
  }
  
  

  lcd.setCursor(0,0);
  lcd.print("1:"); 
  lcd.setCursor(2,0);
  lcd.print(sensorValue); 
  lcd.setCursor(0,1);
  lcd.print("2:"); 
  lcd.setCursor(2,1);
  lcd.print(sensorValue2); 
  lcd.setCursor(9,0);
  lcd.print("3:"); 
  lcd.setCursor(11,0);
  lcd.print(sensorValue3);   
  delay(500);
  
}


Arduino LM35 sıcaklık sensörü kullanımı

LM35  oldukça hassas sıcak ölçümü yapan bir sensör.
Burada elimizdeki ledler aracılığı ile her sıcaklık değişimini ledlerin yanması ile göstereceğiz.
Bu çalışmada 7 adet led kullandık. 20 derecenin altı için bir adet led 20 den 25 e kadar birer led ve 25 üstü için de 1 adet led kullandık.



//Arduino programımız aşağıdaki gibidir.
//Programızı for döngüsü ve case kullanarak sadeleştirebilirsiniz.



int pin1 = 7;  //Led 1
int pin2 = 8;  //Led 2
int pin3 = 9;  //Led 3
int pin4 = 10; //Led 4
int pin5 = 11; //Led 5 
int pin6 = 12; //Led 6
int pin7 = 13; //Led 7
int sensor1Pin = A0; //lm35 sensor

float temp =0;


int sensorValue = 0;   

void setup() //setup
{

  Serial.begin(9600);
                                  
  pinMode(pin1, OUTPUT); 
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT); 
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  pinMode(pin7, OUTPUT);  

              
}

void loop(){ //loop



{
  
 float temp = analogRead(sensor1Pin); //check the temperature1

 temp= (5.0 * temp * 100.0) / 1024;

  


  


 Serial.print("sensor1:");  Serial.println(temp);






  delay(500);


 if(temp >= 30){
    digitalWrite(pin1, LOW);
    digitalWrite(pin2, LOW);
    digitalWrite(pin3, LOW);
    digitalWrite(pin4, LOW);
    digitalWrite(pin5, LOW);
    digitalWrite(pin6, LOW);
    digitalWrite(pin7, LOW);    
     delay(500);
 }
 if(temp < 30 && temp >= 25 ){
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, LOW);
    digitalWrite(pin3, LOW);
    digitalWrite(pin4, LOW);
    digitalWrite(pin5, LOW);
    digitalWrite(pin6, LOW);
    digitalWrite(pin7, LOW);      
     delay(500);
 }
  if(temp < 25 && temp >= 24 ){
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, LOW);
    digitalWrite(pin4, LOW);
    digitalWrite(pin5, LOW);
    digitalWrite(pin6, LOW);
    digitalWrite(pin7, LOW);      
     delay(500);
 }
  if(temp < 24 && temp >= 23 ){
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, HIGH);
    digitalWrite(pin4, LOW);
    digitalWrite(pin5, LOW);
    digitalWrite(pin6, LOW);
    digitalWrite(pin7, LOW);      
     delay(500);
 }
  if(temp < 23 && temp >= 22 ){
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, HIGH);
    digitalWrite(pin4, HIGH);
    digitalWrite(pin5, LOW);
    digitalWrite(pin6, LOW);
    digitalWrite(pin7, LOW);      
     delay(500);
 }  
   if(temp < 22 && temp >= 21 ){
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, HIGH);
    digitalWrite(pin4, HIGH);
    digitalWrite(pin5, HIGH);
    digitalWrite(pin6, LOW);
    digitalWrite(pin7, LOW);      
     delay(500);
 } 
    if(temp < 21 && temp >= 20 ){
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, HIGH);
    digitalWrite(pin4, HIGH);
    digitalWrite(pin5, HIGH);
    digitalWrite(pin6, HIGH);
    digitalWrite(pin7, LOW);      
     delay(500);
 } 
    if(temp < 20  ){
    digitalWrite(pin1, HIGH);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, HIGH);
    digitalWrite(pin4, HIGH);
    digitalWrite(pin5, HIGH);
    digitalWrite(pin6, HIGH);
    digitalWrite(pin7, HIGH);      
     delay(500);
 } 
}
}

Arduino Led Çalışması

İlk arduino çalışması

1 x Arduino Uno
1 x Led
1 x Direnç
1 x Breadboard
Bağlantı kabloları

Resimde gördüğünüz gibi bağlantılarımızı yaptık.
Aruino kartımızın digital 8 nolu pinine yeşil kablomuzu taktik.
Kablumuzundiğer ucunu breadboard üzerine yerleştirdiğimiz dirence bağladık. Direncin diğer ucunu ledimizin (+) bağladık. Arduino GND pininden Ledimizin (-) kısmına bağladık

Aşağıdaki kodu çalıştırdığımızda letimiz uçakların uyarı lambaları tarzında yanıp sönecektir.














int ledPin = 8;

void setup() {
  // put your setup code here, to run once:
 pinMode(ledPin,OUTPUT);
 digitalWrite(ledPin,LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  
  digitalWrite(ledPin,HIGH);
  delay(50);
  digitalWrite(ledPin,LOW);
  delay(1000);
}


Merhaba

Teknoloji ilerledikçe eskiden hayal bile edemeyeceğimiz yazılımları veya donanımları daha hızlı yapabiliyoruz. Yapmakta olduğumuz çalışmaları buradan takip edebilirsiniz.

Buradaki çalışmalarım hobi amaçlı evde yaptığım çalışmalardır. Konu elektrik ve elektronik olunca güvenlik daha önem kazanmaktadır. Malzemeleri kullanırken mutlaka güvenlik önlemlerini alalım.