در این پروژه یک اسکنر شبکه های ۲٫۴GHz از نوع Wlan در محدوده ۲٫۴GHz با استفاده از برد رادیویی nRF24L01 خواهیم ساخت. پیش از این روش راه اندازی برد NRF24L01 با بردهای آردوینو در دیجی اسپارک آموزش داده شده است. در این پروژه خروجی تمام تداخل ها و اطلاعات موجود در محدوده اسکن شده را به صورت کدهای ASCII تحویل میدهد. در پروژه ساخت اسکنر وای فای از آردوینو نانو به عنوان پردازنده استفاده خواهیم کرد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
برد nRF24L01
این ماژول یک transceiver به حساب می آید به این معنی که هر دو فرآیند ارسال (send) و دریافت (receive) را انجام می دهد. این ماژول ها بسیار ارزان با اندازه کوچک عرضه می شوند، ولتاژ کاری این ماژول nRF24L01 از ۱٫۹ تا ۳٫۶ ولت است، پایه های MOSI, MISO و SCK پایه های SPI ماژول هستند. باید به پایه های مربوط به پروتکل SPI در آردوینو متصل شوند. پایه های CSN و CE برای تنظیم ماژول به حالت فعال و تعویض بین حالت فرمان و انتقال اطلاعات هستند. این دو پایه را می توان به هر پایه دیجیتال در آردوینو متصل کرد. پین IRQ پین وقفه است و لازم به اتصال آن نیست.
برخی از مشخصات این ماژول ها به شرح زیر است:
- مصرف انرژی هنگام ارسال اطلاعات، حدود ۱۲ میلی آمپر است.
-
رنج،در صورت استفاده در فضای باز و با آنتن می تواند تا ۱۰۰ متر هم برسد
-
می تواند داده ها را همزمان ارسال و دریافت کند.
-
هر ماژول می تواند با حداکثر ۶ ماژول دیگر ارتباط برقرار کند.
-
از باند ۲٫۴ گیگاهرتز استفاده می کند.
-
می تواند ۱ تا ۲۵ بایت داده خام با سرعت ۱ مگابایت ارسال کند.
تداخل در باند شبکه های ۲.۴ گیگاهرتز
دستگاه های مختلفی وجود دارند که در رنج ۲٫۴GHz کار میکنند مانند؛ تلفن، بلوتوث، وایفای، دزدگیر ماشین، مایکروویو که به همین تداخلی در این رنج وجود دارند که با استفاده از این پروژه قادر خواهیم بود این مقادیر را اندازه گیری و نمایش دهیم. بهطور معمول پیدا کردن تداخل خیلی سخت نیست. محصولاتی به بازار ارزان میآیند که به عنوان تجزیه و تحلیل طیف عمل میکنند و از یک رابط USB استاندارد به یک لپ تاپ استفاده میکنند، به این معنی که منبع تداخل میتواند به آسانی با یک آنتن برای پیدا کردن دخالت استفاده شود.
برد آردوینو Arduino
مجموعه بردهای آردوینو از جمله بردهای توسعه پرطرفدار بین مهندسین امبدد هستند که در مدل های مختلفی از جمله Micro , proMini , Nano , Uno و همچنین Mega قابل تهیه هستند، هسته مرکزی این برد های محبوب از سری AtMega328 می باشد. آردوینو پلتفرم سختافزاری و نرمافزاری متنباز است. همان طور که قبل تر اشاره کردیم، پلتفرم آردوینو شامل یک میکروکنترلر تکبردی متنباز است که قسمت سختافزار آردوینو را تشکیل میدهد. علاوه بر این، پلتفرم آردوینو یک نرمافزار آردوینو IDE که به منظور برنامهنویسی برای بردهای آردوینو طراحی شدهاست و یک بوت لودر نرمافزاری که بر روی میکروکنترلر بارگذاری میشود را در بر میگیرد.
روش کار پروژه
فعالیت برد رادیویی RF مدل nRF24 از طریق رابط سریال به برد Arduino منتقل شده و هر نوع فعالیتی را به صورت کد های ASCII نمایش میدهد. دامنه در کانالهای مختلف با کمک یک نقشه برداری ساده نمایش داده می شود. در این پروژه اسکنر شبکه های ۲٫۴GHz حتی تداخل امواج مایکروویو و دوربین های وایرلس را نمایش میدهد. البته شاید این سوال برای شما پیش آمده باشد که تفاوت این اسکنر با پکت مانیتور ها چیست؟! در جواب باید این مورد را ذکر کنم که در پک مانیتور تنها در نهایت ۱۴ کانال موجود برای شبکه های WiFi را مانیتور میکند اما در این پروژه ما هر فرکانسی که در رنج ۲٫۴ باشد را میتوانیم تشخیص دهیم و در واقع ببینیم. در پارت دوم به این مورد بیشتر میپردازیم.
وسایل مورد نیاز
اتصالات و راهاندازی
برای راهاندازی ابتدایی این پروژه ابتدا اتصالات بین ماژول nRF24 و آردوینو را برقرار خواهیم کرد، برای برقراری اتصالات از جدول و شماتیک زیر استفاده کنید.
-
شماتیک پروژه اسکنر شبکه های ۲٫۴GHz با استفاده از nRF24L01
در این مرحله بخش های مهمی از کد که نیاز به توضیح دارند را بررسی خواهیم کرد. در قسمت اول کتابخانه مورد نیاز را فراخوانی خواهیم کرد.
1 |
#include <SPI.h> |
در این قسمت مقیاس نمایش مقادیر که به آن مقیاس خاکستری میگویند را مشخص خواهیم کرد.
1 |
char grey[] = " .:-=+*aRW"; |
در این بخش تنظیمان مربوط به پروتکل SPI را راهاندازی میکنیم.
1 2 3 4 |
SPI.begin(); SPI.setDataMode(SPI_MODE0); SPI.setClockDivider(SPI_CLOCK_DIV2); SPI.setBitOrder(MSBFIRST); |
این بخش مربوط به اسکن تمام مقادیر در باند ۲٫۴GHz است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
void scanChannels(void) { disable(); for( int j=0 ; j<200 ; j++) { for( int i=0 ; i<CHANNELS ; i++) { setRegister(_NRF24_RF_CH,(128*i)/CHANNELS); setRX(); delayMicroseconds(40); disable(); if( getRegister(_NRF24_RPD)>0 ) channel[i]++; } } } |
این قسمت مقادیر نمودار grey را مشخص میکنیم و در ادامه این مقادیر را در سریال مانیتور پرینت خواهیم کرد.
1 2 3 4 5 6 7 8 9 |
if( norm!=0 ) pos = (channel[i]*10)/norm; else pos = 0; if( pos==0 && channel[i]>0 ) pos++; if( pos>9 ) pos = 9; Serial.print(grey[pos]); channel[i] = 0; |
کد کامل پروژه اسکنر شبکه های۲٫۴ GHz با استفاده از nRF24L01
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
#include <SPI.h> #define CE 9 #define CHANNELS 64 int channel[CHANNELS]; int line; char grey[] = " .:-=+*aRW"; // nRF24L01P registers we need #define _NRF24_CONFIG 0x00 #define _NRF24_EN_AA 0x01 #define _NRF24_RF_CH 0x05 #define _NRF24_RF_SETUP 0x06 #define _NRF24_RPD 0x09 byte getRegister(byte r) { byte c; PORTB &=~_BV(2); c = SPI.transfer(r&0x1F); c = SPI.transfer(0); PORTB |= _BV(2); return(c); } void setRegister(byte r, byte v) { PORTB &=~_BV(2); SPI.transfer((r&0x1F)|0x20); SPI.transfer(v); PORTB |= _BV(2); } void powerUp(void) { setRegister(_NRF24_CONFIG,getRegister(_NRF24_CONFIG)|0x02); delayMicroseconds(130); } void powerDown(void) { setRegister(_NRF24_CONFIG,getRegister(_NRF24_CONFIG)&~0x02); } void enable(void) { PORTB |= _BV(1); } void disable(void) { PORTB &=~_BV(1); } void setRX(void) { setRegister(_NRF24_CONFIG,getRegister(_NRF24_CONFIG)|0x01); enable(); // this is slightly shorter than // the recommended delay of 130 usec // - but it works for me and speeds things up a little... delayMicroseconds(100); } void scanChannels(void) { disable(); for( int j=0 ; j<200 ; j++) { for( int i=0 ; i<CHANNELS ; i++) { setRegister(_NRF24_RF_CH,(128*i)/CHANNELS); setRX(); delayMicroseconds(40); disable(); if( getRegister(_NRF24_RPD)>0 ) channel[i]++; } } } void outputChannels(void) { int norm = 0; for( int i=0 ; i<CHANNELS ; i++) if( channel[i]>norm ) norm = channel[i]; Serial.print('|'); for( int i=0 ; i<CHANNELS ; i++) { int pos; if( norm!=0 ) pos = (channel[i]*10)/norm; else pos = 0; if( pos==0 && channel[i]>0 ) pos++; if( pos>9 ) pos = 9; Serial.print(grey[pos]); channel[i] = 0; } Serial.print("| "); Serial.println(norm); } void printChannels(void) { Serial.println("> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <"); } void setup() { Serial.begin(57600); Serial.println("Starting 2.4GHz Scanner ..."); Serial.println(); Serial.println("Channel Layout"); printChannels(); // Setup SPI SPI.begin(); SPI.setDataMode(SPI_MODE0); SPI.setClockDivider(SPI_CLOCK_DIV2); SPI.setBitOrder(MSBFIRST); // Activate Chip Enable pinMode(CE,OUTPUT); disable(); powerUp(); setRegister(_NRF24_EN_AA,0x0); setRegister(_NRF24_RF_SETUP,0x0F); line = 0; } void loop() { scanChannels(); outputChannels(); if( line++>12 ) { printChannels(); line = 0; } } |
جمع بندی
در این پروژه با استفاده از برد nRF24 و همچین یک آردوینو nano یک اسکنر در رنج شبکه های ۲٫۴GHz ساختیم که در پروژه های مختلفی مورد استفاده قرار میگیرد، در بخش بعدی از پروژه به تحلیل مقادیر و همچنین نمایش آن ها بصورت گرافیکی و نمودار در نمایشگر Oled نمایش خواهیم داد. از این پروژه میتوانید برای اسکن ترافیک شبکه موجود تا فاصله زیادی استفاده کنید و همچنین با تحلیل نمودار gray میتوانیم تشخیص که این اطلاعات از چه منبعی و برای چه دستگاهی هستند.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.