Raspberry Pi Pico Nedir? Kimdir?

Bildiğiniz üzere bloğumuzda özellikle bugüne kadar arduino ile ilgili bir çok proje yapmaya ve tanıtmaya çalıştık. Ancak artık arduino kendisine büyük bir rakip kazanmış durumda. Kim mi? Tabii ki Raspberry Pi Pico!

Raspberry ismini bugüne kadar belki bir çoğumuz duymuş ve hatta bazılarımız kullanmıştır. Ancak burada tüm arduino severlere belki de bir devrim niteliğinde bir gelişmeden bahsediyoruz. Bildiğiniz üzere arduinolar kullandıkları mikro işlemciler sebebi ile oldukça küçük hacimli ön belleklere ve kapasitelere sahipler. Ancak temel programlama tekniklerinde bu gibi kısıtlamaları aşmak ve projemizi büyütmek için biz arduino programlayanlar, yapacağımız projeye göre arduino mini, pro, uno veya mega modellerini seçebiliyorduk.

Ve lakin Raspberry Pi Pico, bu aşamada hayatımıza girdiği anda en yakın rakibi olan arduino’nun mega modeline bile (neredeyse) kafa tutar hale geldi.

Raspberry Pi Pico Nedir? Kimdir?

Bugüne kadar bildiğimiz ve kullandığımız temel tasarım ve işlem kartlarına çok benzer özellikleri olan bir karttır. Tümüyle silikon mimari üzerine inşa edilmiş bir mikro denetleyici karttır.

İster C/C++ SDK isterseniz de MicroPython kullanarak programlayabilirsiniz. Bu özelliği ile aslında bir çok platform ile birlikte programlanabileceği de belli olmuş oluyor. Yani temel olarak birden fazla platform üzerinden raspberry pi pico’yu programlayabilirsiniz.

Raspberry Pi Pico Temel Özellikleri

Mikro Denetleyici (İşlemci)RP2040 Çift çekirdek Arm Cortex M0+ işlemci
Frekans133 MHz
Bellek264KB SRAM ve 2MB yerleşik bellek
Arabirim DesteğiUSB 1.1 (Micro USB giriş)
Input/Output Pin Sayısı26 (I/O özellikli)
2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × kontrol edilebilir PWM kanalları

Raspberry Pi Pico Görseli ve Pinleri

Raspberry Pi Pico Giriş / Çıkış Pinleri

Çok yakında örnek projeleri de birlikte yapmaya başlayacağız. Bizi takip etmeyi unutmayın.

Arduino İle 128×64 Grafik LCD Ekran (wg12864a) Bağlantı Şeması

Merhabalar Arkadaşlar,

Bu yazımızda 128×64 Grafik ekranların bağlantı şemasına kısaca değiniyor olacağız.

128×64 Grafik Ekran Nedir? Ne İçin Kullanılır?

128×64 Grafik ekranlar, bize çalışabileceğimiz toplamda 8.192 hücre ile istediğimiz görüntüyü bu ekranlara yazdırabilmemizi sağlayan komponentlerdir. 5V DV güç kaynağı ile doğrudan beslemek en mantıklısı olacaktır. Zira güç tüketimi açısından arduino kartın 5V çıkışına bağlamak da bir çözümdür elbette. Ancak bu tip komponentlerin güç tüketimleri biraz yüksek olabileceği için geliştirme aşamasından sonra devreyi kullanma öncesinde harici ve düzenli bir 5V kaynağa bağlamak daha doğru olacaktır.

Üretici firmanın datasheet’ine de buradan ulaşabilirsiniz.

Bağlantı Şeması

Yukarıdaki grafikte de görüldüğü üzere toplam 20 pinimizi de hiçbiri boşta kalmayacak şekilde doldurarak ve ilgili pinlere bağlantılarını yaparak bağlıyoruz.

Burada dikkat edilmesi gereken iki husus;

  1. 18. pin ve 3. pinin bağlantıları 10 KOhm değerinde bir potansiyometre ile yapılıyor. Yani potansiyometrenin bir bacağına 18. pin giriyor (sağ sol farketmez. Ancak orta bacak olmamalı). Orta bacağına 3. pinden gelen bağlantı giriyor ve son olarak da 1. pinden gelen bağlantı aynı potansiyometrenin boşta kalan bacağına değerek 20. pin ile birleşip GND (cansız/toprak) uca bağlanıyor. Bu bağlantı, LCD ekranımızın parlaklık ayarını kendimiz kalibre edebilmemiz için son derece önemli.
  2. 19. pinden çıkan uç yaklaşık 220-330 Ohm ortalamalarında bir direnç ile seri bir şekilde bağlanarak 5V çıkışına gidiyor. Burada eğer direk 5V verir isek hemen veya bir süre sonra LCD ekranımız zarar görebilecektir.

Aslında özü itibari ile bağlantı şemamız bu kadar. Eğer hiçbir pini boş bırakmayıp, şekildeki gibi bağlantıları yaparsanız, LCD ekranınızın çalıştığını göreceksiniz.

128×64 LCD Ekranın detaylı kullanımı ile ilgili ayrıca bir yazıyı da kapsamlı projeler kısmında belirtiyor olacağız.

Herkese iyi çalışmalar…

Arduino Push Buton İle Led Yakma Devresi

Merhaba Arkadaşlar. Bu sefer yine basit bir kullanım yazısı ile karşınızdayız. Bu devre ile elektronik kartlarda çok kullanılan push buton kullanımını öğreniyor olacağız. Bu devreye başlarken bir konuya açıklık getirmemiz gerekiyor. Öncelikle bu devrede neden bir direnç ile “kısa devre” benzeri bir bağlantı yaptık ondan bahsetmek istiyorum.

Push butonun ikinci bacağı (arduino pinine gelen çıkış bacağı diyebiliriz) üzerine bir de paralel olarak bir dirençli GND bağlantısı yaptık. Bu bağlantının amacı, butona bastıktan ve çektikten sonra butonun o bacağında kalan statik elektriği (veya parazitte diyebiliriz) topraklamak. Direnç kullanmamızın sebebi ise butona basıldığında bütün akımın GND’ye doğrudan giderek kısa devre yapmasını engellemek.

Özellikle bu konudan bahsetmek istedim. Sonrasında bu devreyi kullanarak ve geliştirerek ardunio üzerinden her türlü buton ile haberleşme ve işlem yaptırma becerisini kodunuzu geliştirerek siz de sağlayabilirsiniz. Elbette daha ilerleyen zamanda arduino ile yapacağımız kompleks projelerde de bu butona ve farklı işlevlerine yer veriyor olacağız.

Şimdi isterseniz devre elemanlarımızı kısaca tanımaya geçelim.

  • Arduino Uno kartı
  • 1 adet Led
  • 1 adet Push buton
  • 1 adet 330ohm direnç
  • 6 adet dişi > erkek jumper kablo

Devre şemamızı da aşağıdaki şekilde oluşturabiliriz. Dilerseniz siz bunu bir board üzerinde de yapabilirsiniz.

Evet aslında devremizin şeması bu kadar basit. Ancak burada bağlantılara kesinlikle dikkat etmemiz gerekiyor. Aksi taktirde kısa devre, vs… olması kaçınılmaz olacaktır. Devremizdeki direncin sebebini de yukarıda anlattığımız üzere kullanmamazlık etmeyelim.

Bu işlem için herhangi bir kütüphaneye ihtiyacımız yok. Sadece dijital okuma ve yazma fonksiyonlarını kullanarak devremizi takip edeceğiz. Şimdi öncelikle pinlerimizi tanımlayarak başlayalım.

int ledPin = 8;
int inPin = 2;
int val = 0;

Ve Setup fonksiyonumuza geçelim ve giriş ve çıkış pinlerimizi tanımlayalım.

void setup() {
  pinMode(inPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

Veee sıra geldi loop kısmına. Yani kodumuzun asıl çalışacağı ve yorumlamayı asıl yapacağımız kısıma.

void loop(){

  val = digitalRead(inPin);
  
  if (val == 1)
  {
    digitalWrite(ledPin, HIGH);
    delay(1000);
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }
}

Burada gördüğünüz üzere inPin (buton) değişkenimizden gelen değeri okuduk ve eğer “1” ise yani sinyal geldi ise digitalWrite() fonksiyonunu başlatarak ledPin olarak belirlediğimiz sekizinci pinimize sinyal gönderdik ve hemen altında bu sinyali 1000 milisaniye yani tam 1 saniye tuttuk. Ardından tekrar loop() devam ederken kodumuz tekrar okumada tekrar bir basma görmediği için bu sefer “else” kısmına giriş yaparak çıkış gerilimini keserek ledimizi söndürdü.

Bu işlemin sonunda oluşturduğumuz devrede, butona basılı tuttuğumuz sürece yanık duran ve bıraktığımızda da maksimum 1 saniye içerisinde sönen bir push buton ile kontrol edilen led devresi yapmış olduk.

Push Buton İle Led Yakma Devresi Kodunun Tamamı

int ledPin = 8;
int inPin = 2;
int val = 0;

void setup() {
  pinMode(inPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop(){

  val = digitalRead(inPin);
  
  if (val == 1)
  {
    digitalWrite(ledPin, HIGH);
    delay(1000);
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }
}
Arduino İle I2C Modülü Kullanımı

Merhaba Arkadaşlar. Bu yazıda sizlere 16×2 LCD ekrandan çıkan yaklaşık 10-12 kabloyu aslında 4 basit kabloya indirecek bir devre kartından bahsetmek istiyorum. Bu devrenin adı i2c (i kare c).

I2C Ne İşe Yarar?

Aslında bu sorunun cevabı basit. LCD ekranımız için gerekli olan 16 adet çıkışı kendi üzerindeki kontrol entegresi ve devresi ile sadece 4 adete indirerek, gelen sinyali kendisi yorumlar ve yine 16 pin ile haberleşecek şekilde LCD ekranımıza gönderir.

I2C Kartı Görseli

İşte aslında bu kadar basit bir kart. Ancak elbette içeriği o kadar da basit olmasa gerek. Peki bu I2C kartı nasıl bağlanıyor? Nasıl veri gönderiliyor?

İsterseniz bu sorunun cevabına örnek bir bağlantı şeması ve devamında oraya yazı göndereceğimiz bir ekran ile yanıt veriyor olalım.

Arduino – I2C Bağlantı Şeması

Gördüğünüz üzere pin bağlantılarımız görseldeki gibi;

  • SCL => Analog 4 Pinine (A4)
  • SDA => Analog 5 Pinine (A5)
  • VCC => +5V Pinine
  • GND => GND Pinine

Bu şekilde bağlantılarımızı yaptıktan sonra gelelim kodumuza ve ekrana iki satır olarak yazdıracağımız “Merhaba Dunya” koduna. Bir kodu ilk defa çalıştırıyorsak “Merhaba Dünya” adettendir bilen bilir. 🙂

Arduino – I2C Ekranına Yazı Yazdırma Kodları

Öncelikle her zaman olduğu gibi kütüphanelerimizi ekleyerek başlayalım. Burada “FaBoLCD_PCF8574” kütüphanesini kullanarak I2C’nin ekrana yazı yazdırmasını sağlıyor olacağız. Öncelikle Kütüphanemizi tanımlıyoruz. (Kütüphaneyi yazının en sonundaki linkten indirebilirsiniz.)

#include <virtuabotixRTC.h>

Şimdi de gelelim değişkenlerimizi tanımlamaya.

FaBoLCD_PCF8574 lcd;

Evet işlem bu kadar basit aslında. LCD değişkenimizi tanımladık ve şimdi sıra setup fonksiyonumuzda. Burada da aslında tek satırda I2C ekranımızın ölçülerini veriyor olacağız.

void setup(void) {
  lcd.begin(16, 2);
}

Şimdi de sıra geldi son loop() fonksiyonumuzda işlemlerimizi yapmaya ve tabii ki sonlandırmaya.

void loop(void) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Merhaba");

  lcd.setCursor(1, 0);
  lcd.print("Dunya");

  delay(5000); //Burada 5 saniye bekliyoruz ki ekran sürekli pır pır etmesin diye...
}

İşte işlemimiz bu kadar basit. Zaten I2C’nin asıl kullanıdığı port olan A4 ve A5 portu kendi kütüphanesinde kayıtlı olduğundan ekstra pinleri göstermemize gerek kalmadı.

İşte bu şekilde projemize enerji verip yüklemeyi tamamladıktan sonra ekranda yazının belirdiğiniz görüyor olacaksınız.

Arduino I2C Örnek Kullanımı Kodları – Tamamı

#include <virtuabotixRTC.h>

FaBoLCD_PCF8574 lcd;

void setup(void) {
  lcd.begin(16, 2);
}

void loop(void) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Merhaba");

  lcd.setCursor(1, 0);
  lcd.print("Dunya");

  delay(5000); //Burada 5 saniye bekliyoruz ki ekran sürekli pır pır etmesin diye...
}

FaBo_212_LCD_PCF8574 Kütüphanesini indirmek için tıklayın.

Arduino İle Sıralı Led Yakma Devresi

Burada basit bir led kullanım örneği göreceğiz. Öncelikle komponentlerimize geçelim isterseniz.

  • Arduino Uno veya en az 5 girişli arduino kartı
  • 5 adet led
  • 10 adet dişi > erkek jumper kablo

Şemamız aşağıdaki gibi

Gördüğünüz gibi ledlerin tüm GND (-) bacakları ortaklaşıp tek bir GND çıkışına giriyor. Onun dışındaki tüm bacaklar sırasıyla 2-3-4-5-6 girişlerine giriyor. Böylece artık arduinodaki dijital çıkışlar ile ledlerimizi tetiklemiş olacağız.

Şimdi değişkenlerimize ve tanımlarımıza gelelim.

int led_kirmizi = 2;
int led_mavi = 3;
int led_yesil = 4;
int led_sari = 5;
int led_beyaz = 6;

int hareket_hizi_ms = 1000;

Setup kısmında ise dijital çıkışlarımızı tanımlayalım ve arduinomuza bunu bildirelim.

void setup() {

  pinMode(led_kirmizi, OUTPUT);
  pinMode(led_mavi, OUTPUT);
  pinMode(led_yesil, OUTPUT);
  pinMode(led_sari, OUTPUT);
  pinMode(led_beyaz, OUTPUT);
  
}

Bundan sonra işlem sadece loop kısmını yazmaya geldi.

void loop() {

  digitalWrite(led_kirmizi, HIGH);
  digitalWrite(led_mavi, LOW);
  digitalWrite(led_yesil, LOW);
  digitalWrite(led_sari, LOW);
  digitalWrite(led_beyaz, LOW);
  delay(hareket_hizi_ms);

  digitalWrite(led_kirmizi, LOW);
  digitalWrite(led_mavi, HIGH);
  digitalWrite(led_yesil, LOW);
  digitalWrite(led_sari, LOW);
  digitalWrite(led_beyaz, LOW);
  delay(hareket_hizi_ms);

  digitalWrite(led_kirmizi, LOW);
  digitalWrite(led_mavi, LOW);
  digitalWrite(led_yesil, HIGH);
  digitalWrite(led_sari, LOW);
  digitalWrite(led_beyaz, LOW);
  delay(hareket_hizi_ms);

  digitalWrite(led_kirmizi, LOW);
  digitalWrite(led_mavi, LOW);
  digitalWrite(led_yesil, LOW);
  digitalWrite(led_sari, HIGH);
  digitalWrite(led_beyaz, LOW);
  delay(hareket_hizi_ms);

  digitalWrite(led_kirmizi, LOW);
  digitalWrite(led_mavi, LOW);
  digitalWrite(led_yesil, LOW);
  digitalWrite(led_sari, LOW);
  digitalWrite(led_beyaz, HIGH);
  delay(hareket_hizi_ms);
}

İşte bu şekilde artık belirttiğimiz gibi 1000 ms yani 1 saniye ara ile sıralı olarak bir ledimiz yanacak ve 1 saniye sonra o sönüp hemen yanındaki şeklinde devam edecek.

Arduino İle Led Kullanımı ve Sıralı Led Yakma Devresi Kodları Tamamı

int led_kirmizi = 2;
int led_mavi = 3;
int led_yesil = 4;
int led_sari = 5;
int led_beyaz = 6;

int hareket_hizi_ms = 1000;

void setup() {

  pinMode(led_kirmizi, OUTPUT);
  pinMode(led_mavi, OUTPUT);
  pinMode(led_yesil, OUTPUT);
  pinMode(led_sari, OUTPUT);
  pinMode(led_beyaz, OUTPUT);
  
}

void loop() {

  digitalWrite(led_kirmizi, HIGH);
  digitalWrite(led_mavi, LOW);
  digitalWrite(led_yesil, LOW);
  digitalWrite(led_sari, LOW);
  digitalWrite(led_beyaz, LOW);
  delay(hareket_hizi_ms);

  digitalWrite(led_kirmizi, LOW);
  digitalWrite(led_mavi, HIGH);
  digitalWrite(led_yesil, LOW);
  digitalWrite(led_sari, LOW);
  digitalWrite(led_beyaz, LOW);
  delay(hareket_hizi_ms);

  digitalWrite(led_kirmizi, LOW);
  digitalWrite(led_mavi, LOW);
  digitalWrite(led_yesil, HIGH);
  digitalWrite(led_sari, LOW);
  digitalWrite(led_beyaz, LOW);
  delay(hareket_hizi_ms);

  digitalWrite(led_kirmizi, LOW);
  digitalWrite(led_mavi, LOW);
  digitalWrite(led_yesil, LOW);
  digitalWrite(led_sari, HIGH);
  digitalWrite(led_beyaz, LOW);
  delay(hareket_hizi_ms);

  digitalWrite(led_kirmizi, LOW);
  digitalWrite(led_mavi, LOW);
  digitalWrite(led_yesil, LOW);
  digitalWrite(led_sari, LOW);
  digitalWrite(led_beyaz, HIGH);
  delay(hareket_hizi_ms);
}
DHT11 Sıcaklık ve Nem Ölçme Sensörü Kullanımı

Ardunio ile proje geliştirirken ilk başlarda en çok denenen, çünkü güncel hayatta da direk karşılığı olan bir komponenti ele alacağı bu sefer. DHT11 Sıcaklık ve Nem Ölçme Sensörü. Bu sensörün ana işlevi, üzerindeki pinden gelen değer ile bulunduğu ortamın sıcaklığını ve nemini ölçesidir.

Öncelikle şunu belirtelim. Bu kategorideki tüm makaleler tamamen komponentlerin genel kullanımlarını göstermek içindir. Zamanla her bir komponent ve hatta birden fazla komponent ile kompleks devreler yapmayı da görüyor olacağız ve bu konuda paylaşımlarımız da olacak.

Kullanım devresi için gerekli komponentlerimize bir göz atalım isterseniz.

  • Ardunio Uno veya en az 1 dijital giriş pinine sahip ardunio kartı
  • 1 adet DHT11 sıcaklık ölçer komponent
  • 3 adet dişi > erkek jumper kablo

Şimdi şemamıza bakalım.

İşte deneme için bağlantımız bu kadar basit. Kısaca yazacak olur isek;

DHT11’i karşımıza aldığımız zaman bize göre;

  • En sol bacak => 5V
  • 2. bacak => 2. giriş pinine
  • En son (sağ) bacak ise => GND

Bağlantımız yaptıktan sonra kütüphanemizi ekleyecek ve pinimizi tanımlayacağız. Ama öncelikle eğer elinizde doğru dht11 kütüphanesi yok ise buraya tıklayarak indirip kullanabilirsiniz.

Şimdi gelelim kütüphanemizi ve değişkenimizi tanımlamaya.

#include <dht11.h>
int dht11_digital_pin = 2;

dht11 DHT11;

Gördüğünüz gibi “dht11_digital_pin = 2” diyerek ikinci girişin dht pinine ait giriş olduğunu belirtmiş olduk. Şimdi setup kısmında Serial Monitörümüzü açalım ve devam edelim.

void setup(void) {
  Serial.begin(9600);
}

Şimdi de okuma kodumuzu yazalım.

loop()
{
  int chk = DHT11.read(DHT11PIN);
  Serial.println(chk);

  float temperature = DHT11.temperature;
  float humidity = DHT11.humidity;

  Serial.println("Sıcaklık:");
  Serial.println(temperature);
  Serial.println("Nem:");
  Serial.println(humidity);

  delay(10000);
}

İşte burada da gördüğünüz gibi tam olarak celcius (C) cinsinden sıcaklık değerini ve yüzde (%) olarak nem değerini artık okuyabiliyor ve 10 saniye aralıkla yenilenmesini sağlayarak işlemimizi tamamlıyoruz.

İşte kodumuzun tamamı aşağıdaki gibi.

Arduino DHT11 İle Sıcaklık ve Nem Ölçme Devresi

#include <dht11.h>
int dht11_digital_pin = 2;

dht11 DHT11;

void setup(void) {
  Serial.begin(9600);
}

loop()
{
  int chk = DHT11.read(DHT11PIN);
  Serial.println(chk);

  float temperature = DHT11.temperature;
  float humidity = DHT11.humidity;

  Serial.println("Sıcaklık:");
  Serial.println(temperature);
  Serial.println("Nem:");
  Serial.println(humidity);

  delay(10000);
}