- Gerekli Bileşenler
- 433Mhz RF Verici ve Alıcı Modülü)
- STM32F103C8 ile RF Vericisinin Devre Şeması
- Arduino Uno ile RF Alıcının Devre Şeması
- Kablosuz RF İletimi için STM32F103C8'i Programlama
- Arduino UNO'yu RF Alıcısı Olarak Programlama
- STM 32 tabanlı RF Verici ve Alıcının Test Edilmesi
Gömülü elektronik cihazlarda kablosuz projeler yapmak çok önemli ve yararlı hale geliyor çünkü her yerde karmakarışık kablolar yok, bu da cihazı daha kullanışlı ve taşınabilir hale getiriyor. Bluetooth, WiFi, 433 MHz RF (Radyo Frekansı) vb. Gibi çeşitli kablosuz teknolojiler vardır. Her teknolojinin maliyet, mesafe veya menzil aktarımı, hız veya verim gibi kendine özgü avantajları ve dezavantajları vardır. Bugün RF modülünü STM32 ile kullanacağız. Verileri kablosuz olarak göndermek ve almak için. STM32 Mikrodenetleyicide yeniyseniz, Arduino IDE kullanarak STM32 ile Yanıp Sönen LED ile başlayın ve burada diğer tüm STM32 projelerini kontrol edin.
Bunun dışında, RF 433Mhz Kablosuz Modülünü diğer mikrodenetleyicilerle birlikte bazı kablosuz kontrollü projeler oluşturmak için kullandık, örneğin:
- RF Kontrollü Ev Aletleri
- Raspberry Pi Kullanan RF Uzaktan Kontrollü LED'ler
- RF Kontrollü Robot
- RF modülünün Arduino ile arayüzlenmesi
- RF Modülünü kullanarak PIC - PIC İletişim
Burada 433MHz RF kablosuz modülü STM32F103C8 mikro denetleyici ile arayüzleyeceğiz. Proje iki bölüme ayrılmıştır. Verici STM32 ile etkileşim içerisindedir ve alıcı Arduino UNO ile etkileşim içerisindedir. Olacak farklı bir devre diyagramı ve çizimler hem de verici bir kısmının alınması için.
Bu eğitimde, RF Verici Alıcı tarafına iki değer gönderir: ultrasonik sensör kullanılarak ölçülen mesafe ve (0'dan 100'e) sayı olarak eşlenen potansiyometre ADC değeri (0 ila 4096). RF alıcı Arduino kablosuz olarak 16x2 LCD ekran değerleri ve baskı bu mesafe ve sayı değerlerinin her alır.
Gerekli Bileşenler
- STM32F103C8 Mikrodenetleyici
- Arduino UNO
- 433Mhz RF Verici ve Alıcı
- Ultrasonik Sensör (HC-SR04)
- 16x2 LCD ekran
- 10k Potansiyometre
- Breadboard
- Kabloların Bağlanması
433Mhz RF Verici ve Alıcı Modülü)
RF Verici Pin Çıkışı:
433Mhz RF Verici |
Pin Açıklaması |
KARINCA |
Anteni bağlamak için |
GND |
GND |
VDD |
3.3 - 5V |
VERİ |
Alıcıya iletilecek veriler burada verilmiştir |
RF Alıcı Pin Çıkışı:
433Mhz RF Alıcı |
KULLANIM |
KARINCA |
Anteni bağlamak için |
GND |
GND |
VDD |
3.3 - 5V |
VERİ |
Vericiden alınacak veriler |
CE / DO |
Aynı zamanda bir Veri pinidir |
433 MHz Modül Özellikleri:
- Alıcı Çalışma Gerilimi: 3V ila 5V
- Verici Çalışma Gerilimi: 3V - 5V
- Çalışma frekansı: 433 MHz
- İletim Mesafesi: 3 metre (antensiz) ila 100 metre (maksimum)
- Modülasyon Tekniği: ASK (Genlik kaydırmalı anahtarlama)
- Veri İletim hızı: 10Kbps
STM32F103C8 ile RF Vericisinin Devre Şeması
RF Verici ve STM32F103C8 arasındaki Devre Bağlantıları:
STM32F103C8 |
RF Verici |
5V |
VDD |
GND |
GND |
PA10 |
VERİ |
NC |
KARINCA |
Ultrasonik Sensör ve STM32F103C8 arasındaki Devre Bağlantıları:
STM32F103C8 |
Ultrasonik Sensör (HC-SR04) |
5V |
VCC |
PB1 |
Tetikleyici |
PB0 |
Eko |
GND |
GND |
Bir 10k potansiyometre STM32 ADC pimi PA0 için (3.3V 0) girişi Analog değeri sağlamak için STM32F103C8 bağlanmıştır.
Arduino Uno ile RF Alıcının Devre Şeması
RF Alıcı ve Arduino UNO arasındaki Devre Bağlantıları:
Arduino UNO |
RF Alıcı |
5V |
VDD |
GND |
GND |
11 |
VERİ |
NC |
KARINCA |
16x2 LCD ve Arduino UNO arasındaki Devre Bağlantıları:
LCD Pin Adı |
Arduino UNO Pin Adı |
Zemin (Gnd) |
Zemin (G) |
VCC |
5V |
VEE |
Kontrast için Potansiyometre Merkezinden Pim |
Kayıt Seçimi (RS) |
2 |
Okuma / Yazma (RW) |
Zemin (G) |
Etkinleştir (EN) |
3 |
Veri Bit 4 (DB4) |
4 |
Veri Bit 5 (DB5) |
5 |
Veri Bit 6 (DB6) |
6 |
Veri Bit 7 (DB7) |
7 |
LED Pozitif |
5V |
LED Negatif |
Zemin (G) |
Kodlama aşağıda kısaca açıklanacaktır. Krokinin ilk bölümü verici bölümü ve diğeri alıcı bölümü olacak şekilde iki bölümü olacaktır. Tüm taslak dosyaları ve çalışma videosu bu eğitimin sonunda verilecektir. RF modülünün Arduino Uno ile arayüzlenmesi hakkında daha fazla bilgi edinmek için bağlantıyı takip edin.
Kablosuz RF İletimi için STM32F103C8'i Programlama
STM32F103C8, Arduino IDE kullanılarak programlanabilir. Kodu STM32F103C8'e yüklemek için bir FTDI programcısı veya ST-Link gerekli değildir. STM32'nin USB portu üzerinden PC'ye bağlanın ve ARDUINO IDE ile programlamaya başlayın. Bağlantıyı takip ederek STM32'nizi Arduino IDE'de Programlamayı öğrenebilirsiniz.
Verici bölümünde nesnenin 'cm' cinsinden mesafesi ultrasonik sensör kullanılarak ölçülür ve STM32 ile arayüzlü RF vericisi aracılığıyla iletilen potansiyometre kullanılarak (0'dan 100'e) sayı değeri ayarlanır.
Önce Radiohead kütüphanesi dahil edilir, buradan indirilebilir. Bu kütüphane veri iletmek ve almak için ASK'yı (Genlik Kaydırma Anahtarlama Tekniği) kullandığından. Bu, programlamayı çok kolaylaştırır. Sketch-> include library->.zip kitaplığı ekle seçeneğine giderek taslağa kitaplığı dahil edebilirsiniz .
#Dahil etmek
Verici tarafındaki bu öğreticide olduğu gibi, mesafeyi ölçmek için bir ultrasonik sensör kullanılır, böylece tetik ve yankı pimleri tanımlanır.
#define trigPin PB1 #define echoPin PB0
Daha sonra RH_ASK kitaplığı için nesne adı hız (2000), RX pin (PA9) ve TX pin (PA10) gibi parametrelerle rf_driver olarak ayarlanır.
RH_ASK rf_driver (2000, PA9, PA10);
Daha sonra bu programda ihtiyaç duyulan Strings değişkeni bildirilir.
String transmit_number; String transmit_distance; Dize iletimi;
Daha sonra void kurulumunda (), RH_ASK rf_driver için nesne başlatılır.
rf_driver.init ();
Daha sonra tetik pini OUTPUT pini ve PA0 (potansiyometreye bağlı) ve eko pini INPUT pini olarak ayarlanır. Seri iletişim 9600 baud hızında başlar.
Serial.begin (9600); pinMode (PA0, INPUT); pinMode (echoPin, INPUT); pinMode (trigPin, OUTPUT);
Daha sonra boşluk döngüsünde (), ilk önce analog voltaj girişinin potansiyometre değeri dijital değere dönüştürülür (ADC değeri bulunur). STM32'nin ADC'si 12 bit çözünürlüğe sahip olduğundan. Dolayısıyla, dijital değer (0 ila 4096) arasında değişir ve (0 ila 100) ile eşlenir.
int analoginput = analogRead (PA0); int pwmvalue = eşleme (analog girdi, 0,4095,0,100);
Daha sonra mesafe, 2 mikrosaniye gecikmeyle tetiği yüksek ve düşük ayarlayarak ultrasonik sensör kullanılarak ölçülür.
digitalWrite (trigPin, DÜŞÜK); gecikme Mikrosaniye (2); digitalWrite (trigPin, YÜKSEK); gecikme Mikrosaniye (10); digitalWrite (trigPin, DÜŞÜK);
Eko pimi, yansıyan dalgayı algılar, yani tetiklenen dalganın geri yansıdığı süre formül kullanılarak nesnenin mesafesinin hesaplanmasında kullanılır. Bağlantıyı takip ederek ultrasonik sensörün mesafeyi nasıl hesapladığını öğrenin.
uzun süre = pulseIn (echoPin, HIGH); şamandıra mesafesi = süre * 0,034 / 2;
Şimdi hem veri numarası hem de ölçülen mesafe dizi verilerine dönüştürülür ve ilgili dizi değişkenlerinde saklanır.
transmit_number = Dize (pwmvalue); transmit_distance = Dize (mesafe);
Her iki dizge de tek satır olarak eklenir ve gönderme ve virgül "" adlı dizede saklanır, iki dizeyi ayırmak için kullanılır.
transmit = transmit_pwm + "," + transmit_distance;
İletim dizisi karakter dizisine dönüştürülür.
const karakter * msg = transmit.c_str ();
Veriler iletilir ve gönderilinceye kadar bekleyin.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.waitPacketSent ();
Gönderilen dizi verileri ayrıca Seri Monitörde de görüntülenir.
Serial.println (msg);
Arduino UNO'yu RF Alıcısı Olarak Programlama
Arduino UNO, Arduino IDE kullanılarak programlanmıştır. Alıcı bölümünde, verici bölümünden iletilen ve RF alıcı modülü tarafından alınan veriler ve alınan dizi verileri, ilgili verilere (mesafe ve sayı) bölünür ve 16x2 LCD ekranda görüntülenir.
Kısaca alıcı kodlamasına bakalım:
Verici bölümünde olduğu gibi ilk olarak RadiohHead kitaplığı dahil edilmiştir. Bu kütüphane veri iletmek ve almak için ASK'yı (Genlik Kaydırma Anahtarlama Tekniği) kullandığından. Bu, programlamayı çok kolaylaştırır.
#Dahil etmek
Burada LCD ekran kullanıldığı için likit kristal kütüphanesi de dahil edilmiştir.
#Dahil etmek
Arduino UNO ile bağlanan 16x2 LCD ekran pinleri ise objektif olarak lcd kullanılarak belirtilir ve ilan edilir.
LiquidCrystal lcd (2,3,4,5,6,7);
Ardından, dizi verilerini depolamak için Dize veri değişkenleri bildirilir.
String str_receive; String str_number; String str_distance;
Radiohead kütüphanesinin nesnesi bildirildi.
RH_ASK rf;
Şimdi geçersiz kurulumda (), LCD ekran 16x2 moduna ayarlanmıştır ve bir karşılama mesajı görüntülenir ve silinir.
lcd.begin (16,2); lcd.print ("DEVRE DIGEST"); lcd.setCursor (0,1); lcd.print ("STM32 ile RF"); gecikme (5000); lcd.clear ();
Bundan sonra, rf nesnesi başlatılır.
rf.init ();
Artık void döngüsünde (), Array tampon değeri 7 olarak bildirilir. Vericiden gönderilen verilerde “,” dahil 7 tane olduğundan. Yani, bunu iletilecek verilere göre değiştirin.
uint8_t buf; uint8_t buflen = sizeof (buf);
Dizi, rf alıcı modülünde mevcutsa, if işlevi boyutu kontrol eder ve yürütür. Rf.recv () veri almak için kullanılır.
eğer (rf.recv (buf ve buflen))
Buf böylece daha sonra alınan dize depolanan alınan dize vardır str_receive dize değişkeni.
str_receive = Dize ((karakter *) buf);
Bu for döngüsü, alınan dizeyi iki dizge arasında ',' algılarsa ikiye bölmek için kullanılır.
for (int i = 0; i <str_receive.length (); i ++) { if (str_receive.substring (i, i + 1) == ",") { str_number = str_receive.substring (0, i); str_distance = str_receive.substring (i + 1); kırmak; }
İki değer için iki char dizisi bildirilir ve ikiye bölünen String, dizeyi karakter dizisine dönüştürerek ilgili dizide saklanır.
karakter dizisi; char distancestring; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (numberstring, 3);
Bundan sonra atoi () kullanarak karakter dizisini tam sayıya dönüştürün
int mesafe = atoi (distancestring); int sayı = atoi (sayı dizesi);
Tam sayıya dönüştürüldükten sonra 16x2 LCD ekranda mesafe ve sayı değerleri görüntülenir.
lcd.setCursor (0,0); lcd.print ("Sayı:"); lcd.print (sayı); lcd.setCursor (0,1); lcd.print ("Mesafe:"); lcd.print (mesafe); lcd.print ("cm");
Sırasıyla STM32 ve Arduino UNO'ya her iki kod yani verici ve alıcı yüklendikten sonra STM32 kullanılarak ölçülen sayı ve nesne mesafesi gibi veriler RF Verici aracılığıyla RF alıcıya iletilir ve alınan değerler kablosuz olarak LCD ekranda görüntülenir.
STM 32 tabanlı RF Verici ve Alıcının Test Edilmesi
1. Sayı 0'da ve nesnenin uzaklığı 6cm'de olduğunda.
2. 47 numara ve nesnenin uzaklığı 3 cm olduğunda.