Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

29 Haziran 2021 Salı

Arduino ile Ses Sensörü ve Alkışla Kontrol

 

Arduino ile Ses Sensörü ve Alkışla Kontrol

Bir sonraki projenize kulak eklemeye hazır mısınız?

Bu ses sensörleri ucuzdur, arayüzle bağlantı kurması kolaydır ve ses, alkış veya kapı vurma seslerini algılayabilir.

Bunları çeşitli sese duyarlı projeler için kullanabilirsiniz, örneğin, ışıklarınızı alkışlayarak aktif hale getirmek veya siz uzaktayken evcil hayvanlarınıza "kulak" tutmak.

Elektret Mikrofonlarının nasıl çalıştığını biliyor musunuz?

Mikrofonun içinde, aslında bir kapasitörün bir plakası olan ince diyafram vardır. İkinci plaka, diyaframa yakın ve ona paralel olan arka plakadır.

elektret mikrofon working.gif

Mikrofona konuştuğunuzda, sesinizin oluşturduğu ses dalgaları diyaframa çarpar ve diyaframa titreşmesine neden olur.

Diyafram sese yanıt olarak titreştiğinde, plakalar birbirine yaklaştıkça veya birbirinden uzaklaştıkça kapasitans değişir.

Kapasitans değiştikçe, plakalar üzerindeki voltaj değişir, bu da ölçerek sesin genliğini belirleyebiliriz.

Donanıma Genel Bakış

Ses sensörü, ses dalgalarını elektrik sinyallerine dönüştürmek için bir mikrofonu (50Hz-10kHz) ve bazı işlem devrelerini birleştiren küçük bir karttır.

Bu elektrik sinyali, sayısallaştırmak için yerleşik LM393 Yüksek Hassas Karşılaştırıcıya beslenir ve OUT pininde bulunur.

ses sensörü hassasiyet ayarı ve karşılaştırıcı

Modül, OUT sinyalinin hassasiyet ayarı için dahili bir potansiyometreye sahiptir.

Bir potansiyometre kullanarak bir eşik belirleyebilirsiniz; Böylece, sesin genliği eşik değerini aştığında, modül DÜŞÜK aksi takdirde YÜKSEK çıkacaktır.

Bu kurulum, belirli bir eşiğe ulaşıldığında bir eylemi tetiklemek istediğinizde çok kullanışlıdır. Örneğin, sesin genliği bir eşiği geçtiğinde (bir vuruş algılandığında), ışığı kontrol etmek için bir röleyi etkinleştirebilirsiniz. Anladın!

İpucu: Hassasiyeti artırmak için düğmeyi saat yönünün tersine, azaltmak için saat yönünde çevirin.

ses sensörü gücü ve durum ledleri

Bunun dışında modülün iki LED'i vardır. Modüle güç verildiğinde Güç LED'i yanacaktır. Dijital çıkış DÜŞÜK olduğunda Durum LED'i yanacaktır.

Ses Sensörü Pin Çıkışı

Ses sensörünün yalnızca üç pimi vardır:

ses sensörü modülü pin çıkışı

VCCpin sensör için güç sağlar. Sensöre 3,3V - 5V arasında güç sağlanması önerilir.

GND bir toprak bağlantısıdır.

DIŞARIkoşullar sessiz olduğunda pin YÜKSEK çıkış verir ve ses algılandığında DÜŞÜK olur. Arduino'daki herhangi bir dijital pime veya doğrudan 5V'luk bir röleye veya benzeri bir cihaza bağlayabilirsiniz.

Arduino ile Kablolama Ses Sensörü

Ses sensörünü Arduino ya bağlayalım.

Bağlantılar oldukça basit. Modül üzerindeki VCC pinini Arduino'daki 5V'a ve GND pinini toprağa bağlayarak başlayın.

Şimdi OUT pinini Arduino'nuzdaki 7 numaralı dijital pin'e bağlayın. Bu kadar!

Aşağıdaki çizim kablolamayı göstermektedir.

arduino ile kablolama ses sensörü

Ses Sensörünün Kalibre Edilmesi

Ses sensörünüzden doğru okumalar almak için önce kalibre etmeniz önerilir.

Modül, dijital çıkışı (OUT) kalibre etmek için dahili bir potansiyometreye sahiptir.

Potansiyometrenin düğmesini çevirerek bir eşik ayarlayabilirsiniz. Böylece, ses seviyesi eşik değerini aştığında, Durum LED'i yanacak ve dijital çıkış (ÇIKIŞ) DÜŞÜK çıkacaktır.

Şimdi sensörü kalibre etmek için, mikrofonun yanında alkışlamaya başlayın ve alkışlarınıza yanıt olarak modüldeki Durum LED'inin yanıp söndüğünü görene kadar potansiyometreyi ayarlayın.

İşte bu, sensörünüz artık kalibre edilmiş ve kullanıma hazırdır.

Sesi Algılama - Temel Örnek

Artık ses sensörünüzü bağladığınıza göre, hepsinin çalışması için bir taslağa ihtiyacınız olacak.

Aşağıdaki örnek, seri monitörde alkışları veya çıtçıtları algılar ve mesajı yazdırır. Devam edin, taslağı deneyin; ve sonra onu biraz ayrıntılı olarak inceleyeceğiz.

#define sensorPin 7

// Variable to store the time when last event happened
unsigned long lastEvent = 0;

void setup() {
	pinMode(sensorPin, INPUT);	// Set sensor pin as an INPUT
	Serial.begin(9600);
}

void loop() {
	// Read Sound sensor
	int sensorData = digitalRead(sensorPin);

	// If pin goes LOW, sound is detected
	if (sensorData == LOW) {
		
		// If 25ms have passed since last LOW state, it means that
		// the clap is detected and not due to any spurious sounds
		if (millis() - lastEvent > 25) {
			Serial.println("Clap detected!");
		}
		
		// Remember when last event happened
		lastEvent = millis();
	}
}

Her şey yolundaysa, alkış algılandığında aşağıdaki çıktıyı seri monitörde görmelisiniz.

ses sensörü çıkışı

Açıklama:

Çizim, sensörün OUT pininin bağlı olduğu Arduino pininin açıklamasıyla başlar.

#define sensorPin 7

Sonra, lastEventalkış algılandığından beri geçen zamanı depolayan adlı bir değişken tanımlıyoruz Sahte sesleri ortadan kaldırmamıza yardımcı olacaktır.

unsigned long lastEvent = 0;

Kurulum bölümünde, sensörün sinyal pinini giriş olarak ilan ediyoruz. Seri monitörü de kurduk.

pinMode(sensorPin, INPUT);
Serial.begin(9600);

Döngü bölümünde öncelikle sensörden gelen dijital çıkışı okuyoruz.

int sensorData = digitalRead(sensorPin);

Sensör, eşik değerini geçecek kadar yüksek bir ses algıladığında, çıkış DÜŞÜK olur. Ancak sesin arka plandaki sahte gürültüden değil, alkışlardan kaynaklandığından emin olmalıyız. Yani 25 milisaniye bekliyoruz. Çıktı, 25 milisaniyeden daha uzun süre DÜŞÜK kalırsa, alkış algılandığını bildiririz.

if (sensorData == LOW) {
	if (millis() - lastEvent > 25) {
		Serial.println("Clap detected!");
	}
	lastEvent = millis();
}

Alkışla Kontrol Cihazları

Bir sonraki projemiz için ses sensörünü , ellerinizi çırparak AC güçle çalışan cihazları açan bir " Klaket " olarak kullanacağız .

Bu proje, AC güçle çalışan cihazları kontrol etmek için Tek Kanal Röle Modülü kullanır. Röle modülüne aşina değilseniz, eğitimin altındaki okumayı (en azından gözden geçirmeyi) düşünün.

Uyarı:
Bu kart YÜKSEK AC voltajı ile etkileşim halindedir. Yanlış veya uygunsuz kullanım, ciddi yaralanmalara veya 

ölüme neden olabilir. Bu nedenle, etrafta deneyimli ve YÜKSEK AC voltajı hakkında bilgi sahibi kişiler için 

tasarlanmıştır.

Önce sensöre ve röle modülüne güç sağlamanız gerekir. VCC pinlerini Arduino'daki 5V pinine ve GND'yi toprağa bağlayın.

Ardından, ses sensöründeki çıkış pimini (OUT) Arduino'nuzdaki dijital pim # 7'ye ve röle modülündeki kontrol pimini (IN) dijital pim # 8'e bağlayın.

Ayrıca, röle modülünü, kontrol etmeye çalıştığınız AC gücüyle çalışan cihazla aynı hizaya yerleştirmeniz gerekir. Canlı AC hattınızı kesmeniz ve kesilen telin (duvardan gelen) bir ucunu COM'a ve diğerini NO'ya bağlamanız gerekir.

Aşağıdaki çizim kablolamayı göstermektedir.

arduino ile kablolama ses sensörü ve röle

Arduino Kodu

Cihazları alkışla kontrol etmek için çizim burada.

#define sensorPin 7
#define relayPin 8

// Variable to store the time when last event happened
unsigned long lastEvent = 0;
boolean relayState = false;    // Variable to store the state of relay

void setup() {
	pinMode(relayPin, OUTPUT);  // Set relay pin as an OUTPUT pin
	pinMode(sensorPin, INPUT);  // Set sensor pin as an INPUT
}

void loop() {
	// Read Sound sensor
	int sensorData = digitalRead(sensorPin);

	// If pin goes LOW, sound is detected
	if (sensorData == LOW) {

	// If 25ms have passed since last LOW state, it means that
	// the clap is detected and not due to any spurious sounds
	if (millis() - lastEvent > 25) {
		//toggle relay and set the output
		relayState = !relayState;
		digitalWrite(relayPin, relayState ? HIGH : LOW);
	}

	// Remember when last event happened
	lastEvent = millis();
	}
}

Programı donanımınız bağlıyken yükleyip çalıştırdıktan sonra, her alkışladığınızda sensör cihazı açmalı veya kapatmalıdır.

Açıklama:

Bu taslağı bir öncekiyle karşılaştırırsanız, birkaç şey dışında pek çok benzerlik fark edeceksiniz.

Başlangıçta, rölenin kontrol piminin (IN) bağlı olduğu Arduino pinini açıklıyoruz. Ayrıca relayStateröle durumunu saklamak için yeni bir değişken tanımladık .

#define relayPin 7

boolean relayState = false;

Kurulumda, relayPinçıktı olarak tanımlarız .

pinMode(relayPin, OUTPUT);

Şimdi alkış sesini algıladığımızda, mesajı seri monitöre yazdırmak yerine, sadece rölenin durumunu değiştiriyoruz.

relayState = !relayState;
digitalWrite(relayPin, relayState ? HIGH : LOW);

Sorun giderme

Ses Sensörü hatalı çalışıyorsa, aşağıdaki adımları deneyin.

  1. Güç kaynağının temiz olduğunu iki kez kontrol edin. Ses sensörü analog bir devre olduğu için, güç kaynağındaki gürültüye karşı daha hassastır.
  2. Ses sensörü üzerindeki elektret mikrofon da mekanik titreşime ve rüzgar sesine duyarlıdır. Esnek bir malzeme ile monte edilmesi titreşimi emmeye yardımcı olabilir.
  3. Bu ses sensörünün algılama aralığı çok küçüktür, muhtemelen 10 inçtir, bu nedenle iyi bir yanıt almak için çok daha yakın bir ses çıkarmanız gerekir.

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.

433MHz RF Tx-Rx Modülleri Nasıl Çalışır ve Arduino

 

433MHz RF Tx-Rx Modülleri Nasıl Çalışır ve Arduino

Donanıma Genel Bakış

433MHz RF Verici ve Alıcı Modüllerine daha yakından bakalım.

433MHz RF Verici Çalışma Blok Şeması

Bu küçük modül, ikisi arasında bir vericidir. Göründüğü kadar çok basit. Modülün kalbi, 433.xx MHz işlemi için ayarlanmış SAW rezonatörüdür. Bir anahtarlama transistörü ve birkaç pasif bileşen var, hepsi bu.

DATA girişine bir mantık YÜKSEK uygulandığında, osilatör 433.xx MHz'de sabit bir RF çıkışı taşıyıcı dalgası oluşturarak çalışır ve DATA girişi LOW mantıksal olarak alındığında osilatör durur. Bu teknik, kısaca ayrıntılı olarak tartışacağımız Genlik Kaydırmalı Anahtarlama olarak bilinir.

433MHz RF Alıcı Çalışma Blok Şeması

Bu bir alıcı modüldür. Karmaşık görünmesine rağmen, verici modülü kadar basittir. Vericiden alınan taşıyıcı dalgayı yükseltmek için bir RF ayarlı devre ve bir çift OP Amperden oluşur. Güçlendirilmiş sinyal ayrıca , kod çözücünün daha iyi kodlanmış çıktı ve gürültü bağışıklığı sağlayan bir dijital bit akışına "kilitlenmesini" mümkün kılan bir PLL'ye ( Faz Kilit Döngüsü ) beslenir .

ASK - Genlik Kaydırmalı Anahtarlama

Yukarıda tartışıldığı gibi, dijital verileri radyo üzerinden göndermek için, bu modüller Genlik Kaydırma Anahtarlaması veya ASK adı verilen bir teknik kullanır Genlik Kaydırma Anahtarlamasında, taşıyıcı dalganın genliği (yani seviyesi) (bizim durumumuzda 433MHz bir sinyaldir) gelen veri sinyaline yanıt olarak değiştirilir.

Bu, AM radyoya aşina iseniz aşina olabileceğiniz genlik modülasyonunun analog tekniğine çok benzer. Bazen buna ikili genlik kaydırmalı anahtarlama denir çünkü ilgilendiğimiz sadece iki seviye vardır. ON / OFF anahtarı olarak düşünebilirsiniz.

  • Dijital 1 için - Bu, taşıyıcıyı tam güçte çalıştırır.
  • Dijital 0 için - Bu, taşıyıcıyı tamamen keser.

Genlik modülasyonu şöyle görünür:

433MHz RF Verici Genlik Kaydırma Anahtarlama ASK Dalga Formu

Genlik Kaydırma anahtarlaması, uygulanması çok basit olma avantajına sahiptir. Dekoder devresini tasarlamak oldukça basittir. Ayrıca ASK, FSK (Frequency Shift Keying) gibi diğer modülasyon tekniklerinden daha az bant genişliğine ihtiyaç duyar. Bu, ucuz olmanın nedenlerinden biridir.

Ancak dezavantajı, ASK'nın diğer radyo cihazlarından ve arka plan gürültüsünden kaynaklanan parazitlere duyarlı olmasıdır. Ancak veri aktarımınızı nispeten düşük bir hızda tuttuğunuz sürece, çoğu ortamda güvenilir şekilde çalışabilir.

433MHz RF Verici ve Alıcı Pin Çıkışı

433MHz RF Verici ve Alıcı Modüllerinin pin çıkışına bir göz atalım.

433MHz RF Kablosuz Verici Pin Çıkışı

VERİ pin, iletilecek dijital verileri kabul eder.

VCCverici için güç sağlar. Bu, 3,5V ila 12V arasındaki herhangi bir pozitif DC voltajı olabilir. RF çıkışının besleme voltajıyla orantılı olduğuna dikkat edin, yani Voltaj ne kadar yüksekse, aralık o kadar büyük olacaktır.

GND bir toprak pimidir.

Antenharici anten için bir pimdir. Daha önce tartışıldığı gibi, gelişmiş aralık için 17,3 cm'lik bir katı tel parçasını bu pime lehimlemek isteyeceksiniz.

433MHz RF Kablosuz Alıcı Pin Çıkışı

VCCalıcı için güç sağlar. Vericinin aksine, alıcı için besleme voltajının 5V olması gerekir.

VERİpinler alınan dijital verileri çıkarır. İki merkez pini dahili olarak birbirine bağlıdır, böylece veri çıkışı için ikisinden birini kullanabilirsiniz.

GND bir toprak pimidir.

Antengenellikle işaretsiz olan harici anten için bir pimdir. Modülün sol alt kısmında, küçük bobinin hemen yanında bulunan peddir. Yine, gelişmiş aralık için bu pime 17,3 cm'lik bir katı tel parçası lehimlemek isteyeceksiniz.

Kablolama - 433MHz RF Verici ve Alıcıyı Arduino UNO'ya Bağlama

Artık modüller hakkında her şeyi bildiğimize göre, onları kullanmaya başlama zamanı!

İki Arduino kartı arasında veri göndereceğimiz için, elbette iki Arduino panosuna, iki breadboard'a ve birkaç jumper kablosuna ihtiyacımız olacak.

Vericinin kablolaması oldukça basittir. Sadece üç bağlantısı var. VCC pinini 5V pinine ve GND'yi Arduino'daki toprağa bağlayın. Veri Giriş pini, Arduino'nun 12 numaralı dijital pinine bağlanmalıdır. Varsayılan olarak, eskizimizde kullanacağımız kitaplık veri girişi için bu iğneyi kullandığından, pin 12'yi denemeli ve kullanmalısınız.

Aşağıdaki çizim kablolamayı göstermektedir.

433MHz RF Kablosuz Verici Modülü ile Arduino Kablolama Fritzing Bağlantıları

Vericiyi kabloladıktan sonra alıcıya geçebilirsiniz. Alıcının kablolaması, verici kadar kolaydır.

Bir kez daha, yapılması gereken sadece üç bağlantı var. VCC pinini 5V pinine ve GND'yi Arduino'daki toprağa bağlayın. Ortadaki iki Veri Çıkışı pininden herhangi biri Arduino'daki dijital pin # 11'e bağlanmalıdır.

Alıcı için kablolama böyle görünmelidir.

433MHz RF Kablosuz Alıcı Modülü ile Arduino Kablolama Fritzing Bağlantıları

Artık hem verici hem de alıcı kablolanmış olduğuna göre, bir kod yazmamız ve ilgili Arduino kartlarına göndermemiz gerekecek. Muhtemelen yalnızca bir PC'niz olduğundan, verici ile başlayacağız. Kod oraya yüklendikten sonra alıcıya geçeceğiz. Vericinin bağlı olduğu Arduino daha sonra bir güç kaynağı veya pil kullanılarak çalıştırılabilir.

RadioHead Library - kablosuz modüller için bir İsviçre Çakısı

Kodlamaya başlamadan önce , kodu yazmayı çok daha basit hale getirecek olan Arduino IDE'mize kurmamız gereken RadioHead adlı bir kütüphane var .

RadioHead, Arduino kartları arasında basit veri aktarımına izin veren bir kütüphanedir. O kadar çok yönlüdür ki, 433MHz modüllerimiz de dahil olmak üzere her türlü radyo iletişim cihazını çalıştırmak için kullanılabilir.

RadioHead kütüphanesinin yaptığı şey, verilerimizi almak, bir CRC ( Döngüsel Artıklık Kontrolü ) içeren bir veri paketine kapsüllemek ve ardından gerekli önsöz ve başlık ile başka bir Arduino'ya göndermektir. Veriler doğru bir şekilde alınırsa, alıcı Arduino, mevcut verilerin olduğu konusunda bilgilendirilir ve onu çözüp işlemeye devam eder.

RADIOHEAD Paket , her iletim başlangıcında gönderilen bir “eğitim Başlangıç” olarak adlandırılan, “1” ve “0” bit çiftlerinin bir 36 bit akımını, aşağıdaki gibidir: oluşur. Bu bitler, alıcının gerçek verileri almadan önce kazancını ayarlaması için gereklidir. Bunu takiben, 12 bitlik bir "Başlangıç ​​Sembolü" ve ardından gerçek veriler (yük) eklenir.

Alıcı ucunda RadioHead tarafından yeniden hesaplanan paketin sonuna bir Çerçeve Kontrol Sırası veya CRC eklenir ve CRC kontrolü doğruysa alıcı cihaz uyarılır. CRC kontrolü başarısız olursa, paket atılır.

Bütün paket şuna benzer:

433MHz RF Kablosuz Verici Alıcı RadioHead Kitaplığı Veri Paketi Çalışma Blok Şeması

Airspayce.com adresini ziyaret ederek kitaplığı indirebilirsiniz veya zip dosyasını indirmek için bu düğmeyi tıklamanız yeterlidir:

Kurmak için Arduino IDE'yi açın, Sketch> Include Library> Add .ZIP Library'ye gidin ve ardından indirdiğiniz RadioHead dosyasını seçin. Bir kitaplık kurma konusunda daha fazla ayrıntıya ihtiyacınız varsa, bu Arduino Kitaplığı Kurma öğreticisini ziyaret edin .

Arduino Kodu - 433MHz RF Verici için

Deneyimizde, vericiden alıcıya basit bir metin mesajı göndereceğiz. Modüllerin nasıl kullanılacağını anlamak faydalı olacaktır ve daha pratik deneyler ve projeler için temel oluşturabilir.

Vericimiz için kullanacağımız taslak şu şekildedir:

// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>
// Include dependant SPI Library 
#include <SPI.h> 
 
// Create Amplitude Shift Keying Object
RH_ASK rf_driver;
 
void setup()
{
    // Initialize ASK Object
    rf_driver.init();
}
 
void loop()
{
    const char *msg = "Hello World";
    rf_driver.send((uint8_t *)msg, strlen(msg));
    rf_driver.waitPacketSent();
    delay(1000);
}

Oldukça kısa bir taslak ama bir sinyalin iletilmesi için ihtiyacınız olan tek şey bu.

Çizim, RadioHead ASK kitaplığını dahil ederek başlar. Biz de eklemeniz gerekir Arduino SPI Kütüphanesi Radiohead kütüphanesi ona bağımlı olduğu gibi.

#include <RH_ASK.h>
#include <SPI.h>

Sonra, RadioHead ASK kitaplığıyla ilgili özel işlevlere erişmek için bir ASK nesnesi oluşturmamız gerekiyor.

// Create Amplitude Shift Keying Object
RH_ASK rf_driver;

Kurulum işlevinde, ASK nesnesini başlatmamız gerekir.

// Initialize ASK Object
rf_driver.init();

Döngü fonksiyonunda, bir mesaj hazırlayarak başlarız. Bu basit bir metin dizesidir ve msg adlı bir karakter işaretçisinde saklanır Mesajınızın herhangi bir şey olabileceğini ancak daha iyi performans için 27 karakteri geçmemesi gerektiğini unutmayın. Alıcı kodunda bu sayıya ihtiyacınız olacağından, içindeki karakter sayısını saydığınızdan emin olun. Bizim durumumuzda 11 karakterimiz var.

// Preparing a message
const char *msg = "Hello World";

Mesaj daha sonra bir send()işlev kullanılarak iletilir İki parametresi vardır: birincisi veri dizisi ve ikincisi gönderilecek bayt sayısıdır (verilerin uzunluğu). send()Fonksiyonu genelde izler waitPacketSent()önceki herhangi bir iletim paket, aktarılan bitene kadar bekler fonksiyonu. Bundan sonra çizim, alıcımıza her şeyi alması için zaman tanımak için bir saniye bekler.

rf_driver.send((uint8_t *)msg, strlen(msg));
rf_driver.waitPacketSent();
delay(1000);

Arduino Kodu - 433MHz RF Alıcı için

Alıcı Arduino'yu bilgisayara bağlayın ve aşağıdaki kodu yükleyin:

// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>
// Include dependant SPI Library 
#include <SPI.h> 
 
// Create Amplitude Shift Keying Object
RH_ASK rf_driver;
 
void setup()
{
    // Initialize ASK Object
    rf_driver.init();
    // Setup Serial Monitor
    Serial.begin(9600);
}
 
void loop()
{
    // Set buffer to size of expected message
    uint8_t buf[11];
    uint8_t buflen = sizeof(buf);
    // Check if received packet is correct size
    if (rf_driver.recv(buf, &buflen))
    {
      
      // Message received with valid checksum
      Serial.print("Message Received: ");
      Serial.println((char*)buf);         
    }
}

Verici cade gibi, alıcı kodu hem RadioHead hem de SPI kitaplıklarını yükleyerek ve bir ASK nesnesi oluşturarak başlar.

#include <RH_ASK.h>
#include <SPI.h> 
RH_ASK rf_driver;

Kurulum işlevinde: ASK nesnesini başlatırız ve ayrıca aldığımız mesajı bu şekilde göreceğimiz için seri monitörü kurarız.

rf_driver.init();
Serial.begin(9600);

In loop işlevi: iletilen mesajla aynı boyutta bir tampon oluştururuz. Bizim durumumuzda 11, unuttun mu? Mesajınızın uzunluğuna uyması için bunu ayarlamanız gerekecek. Hepsi karakter olarak sayıldıklarından, boşluklar ve noktalama işaretleri eklediğinizden emin olun.

uint8_t buf[11];
uint8_t buflen = sizeof(buf);

Sonra bir recv()fonksiyon diyoruz Bu, zaten açık değilse alıcıyı açar. Kullanılabilir geçerli bir mesaj varsa, mesajı ilk parametre tamponuna kopyalar ve doğru döndürür, aksi takdirde yanlış döndürür. İşlev true döndürürse , çizim if ifadesine girer ve alınan mesajı seri monitöre yazdırır.

if (rf_driver.recv(buf, &buflen))
{
  Serial.print("Message Received: ");
  Serial.println((char*)buf);         
}

Sonra döngünün başlangıcına geri döner ve her şeyi yeniden yaparız.

Krokiyi yükledikten sonra seri monitörünüzü açın. Her şey yolundaysa mesajınızı görmelisiniz.

Seri Monitörde 433MHz RF Modülü RadioHead Kitaplığı Çizim Çıkışı
Seri Monitörde 433MHz Kablosuz RF Modülü Çıkışı - Alıcı

433MHz RF modül aralığını iyileştirme

Hem verici hem de alıcı için kullandığınız anten, bu RF modülleri ile elde edebileceğiniz menzili gerçekten etkileyebilir. Aslında bir anten olmadan bir metreden fazla bir mesafeden iletişim kurduğunuz için şanslısınız.

Uygun bir anten tasarımıyla, 50 metrelik bir mesafeden iletişim kurabileceksiniz. Tabii ki bu dışarıda açık bir alanda. İç mekandaki menziliniz, özellikle duvarların arasından biraz zayıflayacaktır.

Antenin karmaşık olması gerekmez. Basit bir tek damarlı tel parçası, hem verici hem de alıcı için mükemmel bir anten yapabilir. Antenin uzunluğu korunduğu sürece anten çapının neredeyse hiçbir önemi yoktur.

En etkili anten, kullanıldığı dalganın uzunluğu ile aynı uzunluğa sahiptir. Pratik amaçlar için, bu uzunluğun yarısı veya dörtte biri yeterli olacaktır.

Bir frekans dalga boyu aşağıdaki gibi hesaplanır:

Frekans dalga boyu =İletim hızı (v)
İletim frekansı (f)

Havada iletim hızı, ışık hızına eşittir, bu da kesin olarak 299.792.458 m / s'dir. Dolayısıyla, 433 MHz bandı için dalga boyu:

Frekans dalga boyu =299.792.458 m / sn
433.000.000 Hz
=0.6924 metre
=69,24 cm

Tam dalga 69,24 cm anten oldukça uzun bir anten olduğu için kullanımı pek pratik değildir. Bu nedenle, yaklaşık 17,3 cm veya 6,8 inç'e kadar çalışan bir çeyrek dalga anteni seçeceğiz.

Her ihtimale karşı, farklı frekansları kullanan diğer radyo vericileri ile deney yapıyorsanız, gerekli anten uzunluğunu hesaplamak için aynı formülü kullanabilirsiniz. Oldukça kolay, değil mi?

Küçük Arduino projenizde 17,3 cm'lik bir anten bile rahatsız edici görünebilir. Ancak, menzili ciddi şekilde etkileyeceğinden, anteni daha kompakt hale getirmek için sarmalayın. Düz bir anten her zaman en iyisidir!

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.