بسم الله الرحمن الرحيم
مما لا شك فيه ان الدرون تعد من أحد التكنولوجيا الحديثة
يعتبر هذا المشروع من أحد اكبر المشاريع التى يمكن تصميمها بواسطة الأردوينو
فسنقوم اليوم بعمل طائرة درون عن طريق الأردوينو وسنتحكم فى الإتجاهات الحركة
عن طريق متحكم سنقوم بتصميمه ايضا عن طريق الأردوينو
وتحديد الميلان الخاص بالدرون لكى نقوم بإتزان الطائرة وتحديد المجسم المستخدم وكيفية إعداد المواتير الخاصة بالدرون و كيفية الحركة الخاصة بالمواتير
وسنقوم بتحديد الإتصال بين الدرون والمتحكم عن طريق شريحة nrf24 او شريحة الراديو
اولا المجسم :
مما لاشك فيه ان المجسم من أهم الأشياء التى يجب الإهتمام بها لضمان الحركة الممتازة ويجب ايضا الإهتمام بالوزن الخاص بالدرون لأنه أهم شئ فى الدرون فيجب الا يكون الوزن الخاص بالدرون كبير جدا فسنقوم اليوم بتصميم المجسم الخاص بنا بحجم 1 كيلو جرام مع الحسابات المحددة
بالنسبة للمجسم :
توجد العديد من المجسمات الصالحة للإستخدام مع الدرون
ولكن أشهر تصميم وهو التصميم على حرف X كما هو موضح فى الصورة الأتيه حيث يتميز هذا التصميم بسهولة التركيب وخفته و بساطته
ويوضح هذا الفيديو لقناة : Creative Channel
كيفية تصميم هذا المجسم بالمقاسات المحددة وبطريقة مبسطة جدا
حيث كل ما عليكم اتباع الفيديو من ناحية انشاء اجزاء المجسم والمقاسات المحددة المستخدمة و من ناحية تثبيت المواتير على الطائرة
كل ما عليكم تغيير ابعاد القاعدة لحجم الأردوينو نانو
ثانيا الحركة :
تعد الحركة جزء أساسى لكى تطير الدرون من الأساس
فكما هو موضح بالصورة يدور موتور a مع عقارب الساعة
وبدور الموتور b عكس عقارب الساعة
يدور الموتور d مع عقارب الساعة ويدور الموتور c عكس عقارب الساعة
هذه الإتجاهات اساسية لكى تحلق الطائرة وترتفع لأعلى
وللحصول على الحركة للأمام أو للخلف
فكما هو موضح
الحركة للأمام نزيد سرعة الموتور c و d ونقلل سرعة الموتور a و b
الحركة للخلف نزيد سرعة الموتور a و b ونقلل سرعة الموتور c و d
وللإتجاه يمينا نزيد سرعة الموتور b و c ونقلل سرعة الموتور a و d
للإتجاه يسارا نزيد سرعة الموتور a و d ونقلل سرعة الموتور b و c
ثالثا الأدوات : (الدرون)
4x 180dc motor
4x 2N4401BU transistor
arduino nano
nrf24
180dc motor
إنه نوع من نوع المواتير التى تعمل على تيار dc ويتميز هذا الموتور بسرعة دورانه وخفة وزنة
wights
4 x 180dc = 4 X 35 = 140 gm
work on 6 - 9 vdc
30000 rpm
6V, no-load current is about 0.4A, about 20,000 rpm
9V, no-load current is about 0.5A, about 30,000 rpm
12V, no-load current is about 0.7A, about 40,000 rpm
2N4401BU transistor
هذا أحد أنواع الترانزستورات من نوع npn
بحيث عندما نعطى المنفذ الخاص بقاعدة الترانزستور موجب يمر التيار من خلال الترانزستور
4 x 2N4401BU = 4 x 2 = 8 gm
Transistor Type NPN
Current - Collector (Ic) (Max) 600mA
Voltage - Collector Emitter Breakdown (Max) 40V
arduino nano
تعتبر هذه المتحكم الذى سنستخدمه للتعامل مع البيانات و يتميز هذا النوع بخفة وزنة وإمكانياته الجيدة
weight:
7gm
nrf24
تعد هذه الشريحة التى تقوم بإستلام البيانات وتعتمد هذه الشريحة بشكل كامل على موجات الراديو
ومداه يعتبر جيد جدا بحيث يتراوح مداها بين 75 الى 300 متر
رابعا دائرة الإمداد بالطاقة :
أ - الأدوات :
لتنظيم الجهد من 9 فولت الى 5 فولت : voltage regulator
مصدر الجهد : battery 9v
استخدامها لتجنب الصدمات الكهربائية : capacitor 0.33 uf
capacitor 0.2 uf
ب - توصيل الدائرة
حيث يحتوى منظم الجهد على ثلاثة منافذ
input : 9v
output : 5v
ref : gnd
فيتم اتباع التوصيلات الموضحة فى الصورة السابقة للحصول على 5 فولت تغذية للأردوينو نانو
إستخدام المقاومة لكى تكون كحمل ليس الا وسيتم الإستغناء عنها عند التجربة
عند قياس الجهد قبل وبعد نلاحظ
قبل الجهد كان 9 فولت
بعد الجهد اصبح 5 فولت
خامسا التوصيلات الخاصة بالدرونز
تحتوى التوصيلات على العديد من النقاط المهمة
اولا : تعتمد شريحة nrf24 فى التوصيل على بروتوكول spi
بحيث تحتوى الشريحة على منافذ
mosi : mosi : digital pin 11
miso : miso : digital pin 12
sck : sck : digital pin 13
ويتم توصيل منفذين cs و ce الى أى منفذين رقمين
قمت بتوصيلهم الى المنافذ 7 و 8
يجب توصيل هذه الشريحة الى 3.3 فولت لتجنب حرق الشريحة
يجب توصيل هذه الشريحة الى 3.3 فولت لتجنب حرق الشريحة
يتم توصيل المواتير الى مصدر الجهد 9 فولت و توصيل طرف إخر الى الترانزستور وتوصيل الطرف الآخر من الترانزيستور للسالب
وتوصيل القاعدة الى الأردوينو للتحكم بها
يجب تجربة منافذ الموتور للحصول على إتجاه الحركة المناسب كما هو موضح فى الصورة الآتيه
(سادسا : (الأدوات المتحكم
lcd screen
joystick module
nrf24
arduino nano
switch
switch
lcd screen
تعتبر هذه الشاشة التى سنعرض عليها حالة الدرون فى الحركة
joystick module
ستكون هذه الشريحة المتحكم الخاص بالإتجاهات الخاصة بالدرونز
يتم إستخدام السويتش للتحكم فى الإرتفاع الخاص بالدرون
فعند الضغك عليه ترتفع الدرون لأعلى وعند إفلاته تحتفظ الدرون بمسافتها
سابعا التوصيلات : (المتحكم)
تحتوى هذه الصورة على العديد من النقاط المهمة
أ - يحتوى joystick على منفذان يتم إخراج خلالهما قيمة الحركة x و y
ويتم توصيل المنفذان على المداخل التماثلية
ب -توصيل شاشة lcd
gnd : gnd
vcc : 5v
vo : gnd
rs : digital pin
rw : gnd
e : digital pin
d4 : digital pin
d5: digital pin
d6 : digital pin
d7 : digital pin
ledA : 330 ohm to 5v
ledC : gnd
ثامنا الكود : (المتحكم) :
#include <LiquidCrystal.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
LiquidCrystal lcd(3,4,5,6,7,8);
const byte address[6] = "00001";
const char text1[] = "f";
const char text2[] = "r";
const char text3[] = "b";
const char text4[] = "l";
bool state =1 ;
int sw = 2;
void setup() {
lcd.begin(16 ,2); lcd.clear();
pinMode(sw,INPUT_PULLUP);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();}
void loop() {
int i = 0;
i = digitalRead(2);
switch(digitalRead(2)){
case 0:
radio.write(&i,sizeof(i));
delay(500);
break;
case 1:
radio.write(&i,sizeof(i));
delay(500);
break;
}
int x1 = analogRead(A0);
int y = analogRead(A1);
if(state==1){
if(x1<=1023&&x1>=900&&y>=500&&y<=600){
radio.write(&text1,sizeof(text1));
lcd.print("move front"); }
if(x1<=150&&x1>=0&&y>=500&&y<=600){
radio.write(&text3,sizeof(text3));
lcd.print("move back"); }
if(x1<=500&&x1>=600&&y>=900&&y<=1023){
radio.write(&text2,sizeof(text2));
lcd.print("move right"); }
if(x1<=500&&x1>=600&&y>=0&&y<=150){
radio.write(&text4,sizeof(text4));
lcd.print("move back"); }}}
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
LiquidCrystal lcd(3,4,5,6,7,8);
const byte address[6] = "00001";
const char text1[] = "f";
const char text2[] = "r";
const char text3[] = "b";
const char text4[] = "l";
bool state =1 ;
int sw = 2;
void setup() {
lcd.begin(16 ,2); lcd.clear();
pinMode(sw,INPUT_PULLUP);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();}
void loop() {
int i = 0;
i = digitalRead(2);
switch(digitalRead(2)){
case 0:
radio.write(&i,sizeof(i));
delay(500);
break;
case 1:
radio.write(&i,sizeof(i));
delay(500);
break;
}
int x1 = analogRead(A0);
int y = analogRead(A1);
if(state==1){
if(x1<=1023&&x1>=900&&y>=500&&y<=600){
radio.write(&text1,sizeof(text1));
lcd.print("move front"); }
if(x1<=150&&x1>=0&&y>=500&&y<=600){
radio.write(&text3,sizeof(text3));
lcd.print("move back"); }
if(x1<=500&&x1>=600&&y>=900&&y<=1023){
radio.write(&text2,sizeof(text2));
lcd.print("move right"); }
if(x1<=500&&x1>=600&&y>=0&&y<=150){
radio.write(&text4,sizeof(text4));
lcd.print("move back"); }}}
سنقوم بشرح النقاط الأساسية فى الكود
فى البداية قمت بتعريف المكتبات الخاصة ب nrf24
وهم
#inculde<RF24.h>
#include <nRF24L01.h>
#include<SPI.h>
nrf24 حيث هذه هى المكتبات الأساسية لكى يتم التعامل مع
lcd ثم قمت بإضافة المكتبة الخاصة بشاشات العرض
#include <LiquidCrystal.h>
ثم قمت بتعريف المنافذ داخل المكتبات عن طريق
RF24 radio (7,8);
حيث يتم كتابة فى الخانة الأولى ce و الخانة الثانية csn الخاصة بالردايو موديول
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
تعريف شاشة lcd للتعامل مع الأردوينو
بعد ذلك قمت بتعريف الحروف التى سيتم إرسالها الى الدرون عند تحريك joystick
بعد ذلك قمت بتحديد أبعاد الشاشة
lcd.begin(16,2);
بعد ذلك قمت بتهيئة شريحة الراديو موديول للإستخدام عن طريق
radio.begin()
ثم قمت بتحديد العنوان الذي سيتم إرسال البيانات إليه عن طريق
radio.openWritingPipe(address);
ثم قمت بتهيئة الوضع لإرسال البيانات عن طريق
radio.stopListening();
بعد ذلك قمت بأخذ قراءة قيمة
x و y الخاصة ب joystick
وعمل مقارنات عليها كما هو موضح امامكم فى الكود السابق
هذا أهم النقاط التى تخص الكود السابق
وقمت ايضًا بإضافة خاصية التحكم فى الإرتفاع بحيث يمكننا التحكم فى الإرتفاع الخاص بالدرون من حيث
عند الضغط على السويتش ترتفع الدرون لأعلى
عند عدم الضغط على السويتش يزال الدرون على مستوى الإرتفاع الخاص به
تاسعا كود (الدرون) :
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
static int i = 0;
void setup() {
pinMode(3,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(9,OUTPUT);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();}
void loop() {
if (radio.available()) {
char val[32] = "";
radio.read(&val, sizeof(val));
if(val=='f'){
analogWrite(5,255);
analogWrite(3,255);
analogWrite(9,100);
analogWrite(6,100);
} if(val=='b'){
analogWrite(5,100);
analogWrite(3,100);
analogWrite(9,255);
analogWrite(6,255);
} if(val=='r'){
analogWrite(5,255);
analogWrite(3,100);
analogWrite(9,100);
analogWrite(6,255);
} if(val=='l'){
analogWrite(5,100);
analogWrite(3,255);
analogWrite(9,255);
analogWrite(6,100);
}
switch((int)val){
case 0:
for(int g=0;g<17;g++){
i=i+15;
analogWrite(5,i);
analogWrite(3,i);
analogWrite(9,i);
analogWrite(6,i);
delay(500);
if(digitalRead(2)==1){goto lable11;}
}
break;
lable11 : case 1:
break;
}
}
delay(100);}
لن نتطرق لشرح الكود لاننا قمنا بشرح العديد من الأكواد مثله
لايزال هذا المشروع من أهم المشاريع التى يمكن تصميمها مع الأردوينو و يحتوى هذا المشروع على العديد من التطبيقات العديدة
وسنقوم بشرح العديد من التطبيقات مستقبلا
رائع جدا
ردحذفشكرا جزيلا
حذفحلو جدا هل اقد احمله بصيغهpdf
ردحذفللأسف لا يمكن اخى
حذفجزاكم الله خير على كل شيء
ردحذفبارك الله فيكم وجزاكم الله خير الجزاء
ردحذف