Mündəricat:
- Addım 1: Komponentlər və Alətlər
- Addım 2: ZenWheels Android Tətbiqini tərsinə çevirin [isteğe bağlı]
- Addım 3: Komponentlər
- Addım 4: Montaj
- Addım 5: HC-05 Bluetooth-u Microcar ilə qoşun
- Addım 6: Kod və İstifadə
- Addım 7: Alternativlər
Video: ZenWheels Microcar üçün Hackable Uzaqdan İdarəetmə: 7 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Bu təlimatda ZenWheels mikrokar üçün xüsusi bir uzaqdan idarəetmə quracağıq. ZenWheels mikro avtomobili, Android və ya Iphone tətbiqi ilə idarə edilə bilən 5 sm ölçülü oyuncaq avtomobildir. Ünsiyyət protokolu haqqında məlumat əldə etmək və arduino və giroskopdan istifadə edərək uzaqdan idarəetmə qurmağı öyrənmək üçün sizə Android tətbiqini tərs mühəndis etməyi göstərəcəyəm.
Addım 1: Komponentlər və Alətlər
Parçalar:
1. ZenWheels mikrokar
2. Arduino pro mini 328p
3. Çörək lövhəsi
4. MPU6050 giroskopu
5. enerji mənbəyi <= 5 v (çörək taxtasına qoşa biləcəyimiz bəzi batareya)
6. U formalı tullanan kabellər (isteğe bağlı). Çörək taxtasında daha yaxşı göründükləri üçün bu tullanan kabellərdən istifadə etdim. Bunun əvəzinə adi keçid kabelləri istifadə edilə bilər
7. HC-05 bluetooth modulu (AT rejiminə daxil olmaq üçün düymə ilə)
Alətlər:
1. Arduino pro mini proqramlaşdırmaq üçün FT232RL seriyalı FTDI adapterindən USB
2. Arduino IDE
3. Android Telefon
4. Android Studio [İsteğe bağlı]
Addım 2: ZenWheels Android Tətbiqini tərsinə çevirin [isteğe bağlı]
Bu hissəni başa düşmək üçün bəzi Java və Android bilikləri tələb olunur.
Layihənin məqsədi mikroavtobusu giroskopla idarə etməkdir. Bunun üçün bu oyuncaqla android tətbiqi arasındakı bluetooth əlaqəsi haqqında daha çox məlumat əldə etməliyik.
Bu addımda mikrokarla android tətbiqi arasındakı əlaqə protokolunu necə tərsinə mühəndis edəcəyimi izah edəcəyəm. Yalnız uzaqdan idarəetmə qurmaq istəyirsinizsə, bu addım lazım deyil. Protokolu kəşf etməyin bir yolu mənbə koduna baxmaqdır. Hmm, amma bu, düz deyil, android tətbiqləri tərtib edilir və Google Play vasitəsilə apk yükləyə bilərsiniz.
Buna görə bunu etmək üçün əsas bir bələdçi hazırladım:
1. APK yükləyin. Bir Android Paket Kit (qısa olaraq APK), Android əməliyyat sisteminin mobil tətbiqlərin paylanması və quraşdırılması üçün istifadə etdiyi paket fayl formatıdır.
Əvvəlcə proqramı Google play mağazasında axtarın, bizim vəziyyətimizdə "zenwheels" axtarın və tətbiqin bağlantısını əldə edəcəksiniz
Sonra google -da "onlayn apk yükləyicisi" axtarın və apk -ı yükləmək üçün birini istifadə edin. Adətən tətbiq bağlantısını istəyəcəklər (əvvəllər əldə etdiyimiz), sonra bir yükləmə düyməsini basaraq kompüterimizdə saxlayacağıq.
2. APK -nı yenidən tərtib edin. Vəziyyətimizdəki bir dekompilyator APK götürən və Java mənbə kodunu istehsal edən bir vasitədir.
Ən sadə həll işi etmək üçün onlayn dekompilyatordan istifadə etməkdir. Google -da "onlayn dekompilyator" axtardım və https://www.javadecompilers.com/ seçdim. Yalnız əvvəllər əldə etdiyiniz APK yükləməlisiniz
dekompilyasiya düyməsini basın. Sonra yalnız mənbələri yükləyin.
3. Kodu nəzərdən keçirərək mühəndisi tərsinə çevirməyə çalışın
Layihəni açmaq üçün bir mətn redaktoru və ya daha yaxşı bir IDE (inteqrasiya edilmiş inkişaf mühiti) lazımdır. Android Layihələri üçün standart IDE Android Studio'dur (https://developer.android.com/studio). Android Studio qurduqdan sonra layihə qovluğunu açın.
Avtomobilimiz bluetooth ilə idarə olunduğundan, "bluetooth" sözü ilə ayrılmış kodda axtarışa başladım, "BluetoothSerialService" ünsiyyətin əlində olduğunu gördüm. Bu sinif ünsiyyəti idarə edərsə, göndərmə əmr metoduna malik olmalıdır. Məlum olur ki, bluetooth kanalı vasitəsilə məlumat göndərən bir yazma üsulu var:
ictimai boşluq yazma (bayt çıxarmaq)
Bu yaxşı bir başlanğıcdır. Yazmağı axtardım (istifadə olunan metod və "BluetoothSerialService" inizi genişləndirən "ZenWheelsMicrocar" sinfi var. Bu sinif Bluetooth üzərindən ünsiyyətimizin ən çox məntiqini ehtiva edir. Digər hissəsi məntiq nəzarətçilərdədir: BaseController və StandardController.
BaseController -də xidmətin başlanğıcına, həmçinin sükan və qaz tənzimləyici kanallarının təriflərinə sahibik, kanallar əslində bir növ əmrin yerinə yetiriləcəyini təyin etmək üçün komanda prefiksləridir:
qorunan ZenWheelsMicrocar mikrokar = yeni ZenWheelsMicrocar (bu, bu.btHandler);
qorunan ChannelOutput çıxışları = {yeni TrimChannelOutput (ZenWheelsMicrocar. STEERING_CHANNEL), yeni TrimChannelOutput (ZenWheelsMicrocar. THROTTLE_CHANNEL)};
StandardController -də sükan idarə olunur:
ictimai boşluq idarəetmə (TouchEvent touchEvent) {
… Bu.microcar.setChannel (steeringOutput.channel, steeringOutput.resolveValue ()); }
Metodu təhlil edərək, steeringOutput.channel 129 (sükan üçün istifadə olunan kanal) dəyərinə malikdir və steeringOutput.resolveValue () -90 ilə 90 arasında ola bilər. Kanal dəyəri (129) birbaşa göndərilir və sükan dəyəri dəyişdirilir bit əməliyyatları tətbiq edərək:
şəxsi son int dəyəri_dönüşü_ (int dəyəri) {
boolean mənfi = yalan; əgər (dəyər <0) {mənfi = f6D; } int dəyəri2 = dəyər & 63; if (mənfi) {qaytarılma dəyəri2 | 64; } qaytarılma dəyəri2; }
StandardController -də oxşar bir üsul var
ictimai boşluq tutacaq
Addım 3: Komponentlər
Parçalar:
1. Arduino pro mini 328p 2 $
2. Çörək lövhəsi
3. MPU6050 giroskopu 1.2 $
4. HC-05 master-slave 6 pinli modul 3 $
5. 4 ədəd 4 ədəd AA batareya paketi
6. U formalı tullanan kabellər (isteğe bağlı). Çörək taxtasında daha yaxşı göründükləri üçün bu keçid kabellərini istifadə etdim və ledlər bu şəkildə daha çox görünür. Bu kabellər yoxdursa, onları dupont telləri ilə əvəz edə bilərsiniz.
Yuxarıdakı qiymətlər eBay -dan götürülmüşdür.
Alətlər:
1. Arduino pro mini proqramlaşdırmaq üçün FT232RL seriyalı FTDI adapterindən USB
2. Arduino IDE
3. Android Studio (özünüzü tərs mühəndis etmək istəyirsinizsə, isteğe bağlı)
Addım 4: Montaj
Quraşdırma çox sadədir, çünki bunu çörək taxtasında edirik:)
- əvvəlcə komponentlərimizi çörək taxtasına yerləşdiririk: mikrokontrolör, bluetooth modulu və giroskop
- HC-05 bluetooth RX və TX pinlərini arduino 10 və 11 pinlərinə qoşun. Gyroscope SDA və SCL arduino A4 və A5 pinlərinə bağlanmalıdır
- güc pinlərini bluetooth, gyro və arduino -ya qoşun. sancaqlar çörək taxtasının yan tərəfindəki + və - ilə bağlanmalıdır
- son olaraq çörək taxtasına bir enerji təchizatı bağlayın (3.3V ilə 5V arasında), kiçik bir LiPo bir hüceyrəli batareya istifadə etdim, amma güc aralığında olduğu müddətdə hər kəs bunu edəcək.
Ətraflı məlumat üçün yuxarıdakı şəkilləri yoxlayın
Addım 5: HC-05 Bluetooth-u Microcar ilə qoşun
Bunun üçün bir Android telefonu, bluetooth HC-05 modulu və telli FTDI seriyalı adapterə ehtiyacınız olacaq. Ayrıca Bluetooth modulu ilə əlaqə qurmaq üçün Arduino IDE -dən istifadə edəcəyik.
Əvvəlcə mikrokar bluetooth ünvanını öyrənməliyik:
- telefonunuzda bluetooth aktiv edin
- maşını işə salın və Android -də parametrlərinizin bluetooth bölməsinə keçin
- yeni cihazlar axtarın və "Microcar" adlı bir cihaz görünməlidir
- bu cihazla qoşun
- sonra bluetooth MAC çıxarmaq üçün bu proqramı google play Serial Bluetooth Terminalından istifadə etdim
Bu proqramı quraşdırdıqdan sonra menyuya -> cihazlara gedin və orada bütün bluetooth qoşalaşmış cihazların olduğu bir siyahı olacaq. Yalnız "Microcar" minasının altındakı kodla maraqlanırıq 00: 06: 66: 49: A0: 4B
Sonra FTDI adapterini bluetooth moduluna qoşun. Əvvəlcə VCC və GROUND pinləri və sonra bluetooth TX -ə FTDI RX və bluetooth RX -ə FTDI TX. Ayrıca Bluetooth modulunda VCC -yə qoşulmalı olan bir pin olmalıdır. Bunu etmək üçün bluetooth modulu "proqramlaşdırıla bilən bir rejim" ə girir. Modulumda VCC -ni o xüsusi pinə bağlayan bir düymə var. FTDI -ni USB -yə qoşduğunuzda, bu xüsusi proqramlaşdırıla bilən rejimə daxil olmaq üçün bağlı pin / düymə sıxılmış vəziyyətdə olmalıdır. Bluetooth hər 2 saniyədə yavaş -yavaş yanıb -sönərək bu iş rejiminə daxil olduğunu təsdiqləyir.
Arduino IDE -də serial portunu seçin, sonra seriyalı monitoru açın (Həm NL, həm də CR 9600 baud dərəcəsi ilə). AT yazın və modul "OK" ilə təsdiqlənməlidir.
Modulu master rejiminə qoymaq üçün "AT+ROLE = 1" yazın. Bluetooh modulunuzla cütləşmək üçün yazın: "AT+BIND = 0006, 66, 49A04B", "00: 06: 66: 49: A0: 4B" nin "0006, 66, 49A04B" yə necə çevrildiyinə diqqət yetirin. Bluetooh MAC üçün eyni çevrilməni etməlisiniz.
İndi Zenwheels avtomobilini işə salın, sonra FTDI -ni ayırın və düyməni basmadan / xüsusi pin bağlamadan yenidən qoşun. Bir müddət sonra maşına qoşulmalıdır və avtomobilin müəyyən bir əlaqə qurduğunu görərsən.
Giderme:
- Sahib olduğum bütün Bluetooth modullarından yalnız düyməni olan birinin usta işlədiyini gördüm!
- maşının tam doldurulduğundan əmin olun
- maşının telefona bağlı olmadığından əmin olun
- Bluetooth AT rejiminə girərsə (yavaş -yavaş yanıb -sönür), lakin əmrinə cavab vermirsə, həm NL & CR -ə malik olduğunuzdan əmin olun, həm də digər BAUD dərəcələri ilə sınaqdan keçirin.
- RX -in TX -ə qoşulduğunu və əksinə iki dəfə yoxlayın
- bu təlimatı sınayın
Addım 6: Kod və İstifadə
Əvvəlcə iki kitabxananı yükləməli və quraşdırmalısınız:
1. Giroskop üçün MPU6050 kitabxanası
2. I2CDev kitabxana mənbəyi
Sonra kitabxanamı buradan yükləyin və quraşdırın və ya aşağıdan kopyalayın:
/** * Kitabxanalar: * https://github.com/jrowberg/i2cdevlib * https://github.com/jrowberg/i2cdevlib */#include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #include "Wire.h " #" "SoftwareSerial.h" daxil edin
const int MAX_ANGLE = 45;
const bayt əmriStering = 129; const bayt əmriSpeed = 130;
bool başlatma = yanlış; // DMP başlanğıcı uğurlu olsaydı doğru olaraq təyin edin
uint8_t mpuIntStatus; // MPU uint8_t devStatus -dan faktiki fasilə statusu baytını saxlayır; // hər cihaz əməliyyatından sonra vəziyyəti qaytarın (0 = uğur,! 0 = səhv) uint16_t packetSize; // gözlənilən DMP paket ölçüsü (standart 42 baytdır) uint16_t fifoCount; // hazırda FIFO -da olan bütün baytların sayı uint8_t fifoBuffer [64]; // FIFO saxlama buferi Quaternion q; // [w, x, y, z] quaternion konteyner VectorFloat çəkisi; // [x, y, z] cazibə vektoru float ypr [3]; // [yaw, pitch, roll] yaw/pitch/roll konteyner və cazibə vektoru uçucu bool mpuInterrupt = false; // MPU kəsmə pininin yüksək olub olmadığını göstərir
imzasız uzun lastPrintTime, lastMoveTime = 0;
SoftwareSerial BTserial (10, 11);
MPU6050 mpu;
boş quraşdırma ()
{Serial.begin (9600); BTserial.begin (38400); Serial.println ("Proqram başladı"); başlatma = başlatmaGiroskop (); }
boşluq döngəsi () {
if (! başlatma) {qayıt; } mpuInterrupt = yanlış; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); qayıtmaq; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= paket ölçüsü; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& cazibə qüvvəsi, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & cazibə qüvvəsi); idarə etmək (ypr [0] * 180/M_PI, ypr [1] * 180/M_PI, ypr [2] * 180/M_PI); }}
/*
* 0 -dan maksimum sola və 180 -dən maksimum sağa doğru olan 0 -dan 180 -ə qədər bucaq alır millis () - lastMoveTime = 90) {resultAngle = xəritə (bucaq, 91, 180, 1, 60); } else if (bucaq 0) {resultSpeed = xəritə (sürət, 0, 90, 0, 60); } else if (sürət <0) {resultSpeed = xəritə (sürət, 0, -90, 120, 60); } Serial.print ("actualAngle ="); Serial.print (bucaq); Serial.print (";"); Serial.print ("actualSpeed ="); Serial.print (resultSpeed); Serial.println (";"); BTserial.write (commandStering); BTserial.write (resultAngle); BTserial.write (commandSpeed); BTserial.write ((bayt) resultSpeed); lastMoveTime = milis (); }
boş idarəetmə (int x, int y, int z)
{x = məhdudlaşdır (x, -1 * MAX_ANGLE, MAX_ANGLE); y = məhdudlaşdır (y, -1 * MAX_ANGLE, MAX_ANGLE); z = məhdudlaşdır (z, -MAX_ANGLE, MAX_ANGLE); int açısı = xəritə (y, -MAX_ANGLE, MAX_ANGLE, 0, 180); int sürəti = xəritə (z, -MAX_ANGLE, MAX_ANGLE, 90, -90); printDebug (x, y, z, bucaq, sürət); moveZwheelsCar (bucaq, sürət); }
void printDebug (int x, int y, int z, int açısı, int sürəti)
{if (millis () - lastPrintTime <1000) {qaytar; } Serial.print ("z ="); Serial.print (x); Serial.print (";"); Serial.print ("y ="); Serial.print (y); Serial.print (";"); Serial.print ("z ="); Serial.print (z); Serial.print (";"); Serial.print ("bucaq ="); Serial.print (bucaq); Serial.print (";"); Serial.print ("speed ="); Serial.print (speed); Serial.println (";"); lastPrintTime = milis (); }
bool başlatmaGiroskop ()
{Wire.begin (); mpu.initialize (); Serial.println (mpu.testConnection ()? F ("MPU6050 bağlantısı uğurlu"): F ("MPU6050 bağlantısı uğursuz oldu")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); if (devStatus! = 0) {Serial.print (F ("DMP Başlatması uğursuz oldu (kod")); Serial.println (devStatus); yalnış qaytar;} mpu.setDMPEnabled (doğru); Serial.println (F ("Aktivləşdirmə) kəsilmə aşkarlanması (Arduino xarici müdaxilə 0)… ")); attachInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP hazırdır! İlk kəsilməni gözləyir … ")); packetSize = mpu.dmpGetFIFOPacketSize (); doğruya qayıt;}
void dmpDataReady ()
{mpuInterrupt = doğru; }
boolean hasFifoOverflown (int mpuIntStatus, int fifoCount)
{mpuIntStatus və 0x10 qayıt || fifoCount == 1024; }
FTDI adapterindən istifadə edərək kodu arduinoya yükləyin və sonra batareyaları qoşun.
Uzaqdan istifadə:
Arduino işə salındıqdan sonra avtomobili də işə salın. HC-05 modulu avtomobilə qoşulmalıdır, bu baş verdikdə avtomobil səs çıxaracaq. İşləmirsə, əvvəlki addımı və problemlərin aradan qaldırılması bölməsini yoxlayın.
Çörək taxtasını irəli meyl edirsinizsə, avtomobil irəli, sağa və maşın sağa hərəkət etməlidir. Bir az irəli və bir az sola meyl etmək kimi daha tədricən hərəkətlər edir, bu vəziyyətdə avtomobil yavaş -yavaş sola gedərdi.
Çörək taxtasına meyl edərkən avtomobil fərqli bir şəkildə gedirsə, əvvəlcə çörəyi fərqli istiqamətlərdə tutun.
Bu necə işləyir:
Eskiz hər 100 ms -də giroskopun koordinatlarını alır, hesablamalar aparır və sonra avtomobilin əmrlərini bluetooth vasitəsilə ötürür. Əvvəlcə x, y və z x bucaqları ilə çağırılan "idarə etmək" üsulu var. Bu üsul sükanı 0 ilə 180 dərəcə arasında dəyişir və sürətləndirməni -90 ilə 90 arasında dəyişir. Bu üsul çağırır
sükan və sürətləndirməni ZenWheels spesifikasiyasına çevirən və sonra bluetooth istifadə edərək əmrləri ötürən boş hərəkətZwheelsCar (bayt bucağı, int sürəti).
Transformasiyanı iki addımda etməyimin səbəbi yenidən istifadə oluna bilməsidir. Bu eskizi başqa bir cihaza uzaqdan idarə etmək üçün uyğunlaşdırmaq lazım olsaydı, sürəti və sükanı bəzi faydalı dəyərlərə uyğunlaşdıran "idarə etmək" əsas metodundan başlayardım.
Addım 7: Alternativlər
"Tərs mühəndislik" ə alternativ. Android tətbiqindən başlayaraq layihəni necə tərsinə mühəndis etmək barədə danışdım. Ancaq bunun alternativi var ki, FTDI + bluetooth seriyasını (master parametrlərini göstərmədən müntəzəm HC-05) qura bilərsiniz. Sonra ZenWheels tətbiqindən "mikrokar" yerinə HC-05-ə qoşulun.
Əmrləri deşifr etmək üçün sükanı bir mövqedə tutmalısınız, sonra python skriptindən istifadə edərək serial rabitəsini təhlil edin. Bir python skriptini təklif edirəm, çünki çap olunmayan simvollar var və Arduino IDE bunun üçün uyğun deyil. Sükanı bir mövqedə saxlasanız, tətbiqin eyni iki baytı müntəzəm olaraq ötürəcəyini müşahidə edəcəksiniz. Təkər mövqeyini dəyişsəniz, ilk bayt eyni qalacaq, ikincisi dəyişəcək. Bir çox sınaqdan sonra sükan idarəetmə alqoritmi, sonra tərs mühəndis qazı və s.
Arduino əsaslı pulta alternativ RaspberryPi pultu olardı. Moruq pi -nin "master" rejimində qurulması ağrısız olan bir bluetooth modulu var və python bluetooth kitabxanası cazibədarlıq kimi işləyir. Alexa echo istifadə edərək maşını idarə etmək kimi daha maraqlı layihələr də mümkündür:)
Ümid edirəm ki, layihədən zövq aldınız və aşağıda şərhlər buraxın!
Tövsiyə:
Hayward ColorLogic üçün Wi-Fi Uzaqdan İdarəetmə: 3 Addım
Hayward ColorLogic üçün Wi-Fi Uzaqdan İdarəetmə: Hayward ColorLogic, üzgüçülük hovuzları, spa, gölməçələr və digər su xüsusiyyətlərinə məşhur bir əlavədir. Hər bir işıqda bir çox parlaq rənglər və işıq şouları təmin etmək üçün bir çox parlaq LED dəsti və məntiq var. Bu qurğular 12 VAC gücündən istifadə edir, bu da
HT12D HT12E istifadə edərək RF 433MHZ Radio İdarəetmə - 433mhz ilə HT12E və HT12D istifadə edərək Rf Uzaqdan İdarəetmə edilməsi: 5 addım
HT12D HT12E istifadə edərək RF 433MHZ Radio İdarəetmə | HT12E və HT12D -dən 433mhz istifadə edərək Rf Uzaqdan İdarəetmə edilməsi: Bu təlimatda sizə HT12E kodlu 433mhz ötürücü qəbuledici modulu istifadə edərək RADIO uzaqdan idarə etməyi göstərəcəyəm. HT12D kod deşifratoru IC. Bu təlimatda çox ucuz komponentləri istifadə edərək məlumat göndərə və ala bilərsiniz: HT
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan sürüşdürün: 3 Addım (Şəkillərlə birlikdə)
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan Sürüşdürün: Oh Amazon, Fire TV'niz çox gözəldir, niyə bizə pultunuzda səs idarəetməsini vermədiniz? Yaxşı ki, Amazon -da 5 dollardan aşağı qiymətə bu sevimli kiçik uzaqdan, güc, səssiz satın ala bilərsiniz. , həcmi və hamısı kiçik bir paketdə. 3d printerə daxil edin
Adi Uzaqdan İdarəetmə Dəsti Dörd Kanallı RC Oyuncaq Uzaqdan İdarəetmə Sisteminə Çevrildi: 4 Addım
Adi Uzaqdan İdarəetmə Dəsti Dörd Kanallı RC Oyuncaq Uzaqdan İdarəetmə Sisteminə Çevrildi: 如何 通用 遥控 器 套件 转换 为 玩具 中 中 遥控 采用 采用 6 6 6 6 6 6 6 6 2262 和 2272 和 433 模块 构建 构建改造 方法 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照
IR Uzaqdan Uzaqdan Uzaqdan Çevirin: 9 Addım (Şəkillərlə birlikdə)
IR Uzaqdan Uzaqdan Uzaqdan RF -yə çevirin: Bugünkü Təlimat kitabında, ümumi bir RF modulunu mikro nəzarətçi olmadan necə istifadə edə biləcəyinizi sizə göstərəcəyəm ki, nəticədə hər hansı bir cihazın IR uzaqdan idarəetmə cihazını RF -yə çevirə biləcəyiniz bir layihə hazırlayaq. Uzaqdan. Çevirmənin əsas üstünlüyü