ویژگی های ماژول مکان یابی DWM1000
DWM1000 یک ماژول ترنسیور سازگار با IEEE802.15.4-2011 UWB است که بر پایه ی آی سی DecaWave’s DW1000 ساخته شده است. این ماژول با استفاده از سیستم مکان یابی بی درنگ یا به اختصار RTLS می تواند موقعیت اجسام را با دقت 10 سانتی متر اندازه گیری کند. این ماژول قابلیت ایجاد ارتباط با سرعت 6.8Mb/s و دامنه ارتباطی 300 متر را دارد. از این ماژول همچنین در شبکه های سنسور وایرلس (WSN) نیز استفاده می شود.
جهت دریافت دیتاشیت ماژول مکان یابی DWM1000 اینجا کلیک کنید.
DWM1000 Transceiver Module Datasheet
معرفی پایه ها (Pinout) ماژول مکان یابی DWM1000
ماژول DWM1000 دارای 24 پایه به شرح زیر است:
- 3V: تغذیه ماژول – 3.3 ولت
- GND: زمین
- IRQ: وقفه از سوی ماژول
- SCK: همزمان سازی برای پروتکل SPI
- MOSI: خط ارسالی اطلاعات برای پروتکل SPI
- MISO: خط دریافتی اطلاعات برای پروتکل SPI
- CS: انتخاب دستگاه های زیر مجموعه برای پروتکل SPI
پین اوت (Pinout) این ماژول را می توانید در تصویر زیر مشاهده کنید.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
راه اندازی ماژول مکان یابی DWM1000 با آردوینو
گام اول: سیم بندی
مطابق مدار زیر، ماژول را به آردوینو وصل کنید.
گام دوم: کد
ابتدا کتابخانه زیر را بر آردوینوی خود نصب کنید.
توجه
اگر نیاز به راهنمایی بیشتر برای نصب کتابخانه بر روی آردوینو دارید، می توانید به آموزش نصب کتابخانه بر آردوینو مراجعه کنید.
کد زیر را روی برد اول آردوینوی خود آپلود کنید.
/**
*
* @todo
* - move strings to flash (less RAM consumption)
* - fix deprecated convertation form string to char* startAsAnchor
* - give example description
*/
#include <SPI.h>
#include "DW1000Ranging.h"
// connection pins
const uint8_t PIN_RST = 9; // reset pin
const uint8_t PIN_IRQ = 2; // irq pin
const uint8_t PIN_SS = SS; // spi select pin
void setup() {
Serial.begin(115200);
delay(1000);
//init the configuration
DW1000Ranging.initCommunication(PIN_RST, PIN_SS, PIN_IRQ); //Reset, CS, IRQ pin
//define the sketch as anchor. It will be great to dynamically change the type of module
DW1000Ranging.attachNewRange(newRange);
DW1000Ranging.attachBlinkDevice(newBlink);
DW1000Ranging.attachInactiveDevice(inactiveDevice);
//Enable the filter to smooth the distance
//DW1000Ranging.useRangeFilter(true);
//we start the module as an anchor
DW1000Ranging.startAsAnchor("82:17:5B:D5:A9:9A:E2:9C", DW1000.MODE_LONGDATA_RANGE_ACCURACY);
}
void loop() {
DW1000Ranging.loop();
}
void newRange() {
Serial.print("from: "); Serial.print(DW1000Ranging.getDistantDevice()->getShortAddress(), HEX);
Serial.print("\t Range: "); Serial.print(DW1000Ranging.getDistantDevice()->getRange()); Serial.print(" m");
Serial.print("\t RX power: "); Serial.print(DW1000Ranging.getDistantDevice()->getRXPower()); Serial.println(" dBm");
}
void newBlink(DW1000Device* device) {
Serial.print("blink; 1 device added ! -> ");
Serial.print(" short:");
Serial.println(device->getShortAddress(), HEX);
}
void inactiveDevice(DW1000Device* device) {
Serial.print("delete inactive device: ");
Serial.println(device->getShortAddress(), HEX);
}
کد زیر را روی برد دوم آردوینوی خود آپلود کنید.
/**
*
* @todo
* - move strings to flash (less RAM consumption)
* - fix deprecated convertation form string to char* startAsTag
* - give example description
*/
#include <SPI.h>
#include "DW1000Ranging.h"
// connection pins
const uint8_t PIN_RST = 9; // reset pin
const uint8_t PIN_IRQ = 2; // irq pin
const uint8_t PIN_SS = SS; // spi select pin
void setup() {
Serial.begin(115200);
delay(1000);
//init the configuration
DW1000Ranging.initCommunication(PIN_RST, PIN_SS, PIN_IRQ); //Reset, CS, IRQ pin
//define the sketch as anchor. It will be great to dynamically change the type of module
DW1000Ranging.attachNewRange(newRange);
DW1000Ranging.attachNewDevice(newDevice);
DW1000Ranging.attachInactiveDevice(inactiveDevice);
//Enable the filter to smooth the distance
//DW1000Ranging.useRangeFilter(true);
//we start the module as a tag
DW1000Ranging.startAsTag("7D:00:22:EA:82:60:3B:9C", DW1000.MODE_LONGDATA_RANGE_ACCURACY);
}
void loop() {
DW1000Ranging.loop();
}
void newRange() {
Serial.print("from: "); Serial.print(DW1000Ranging.getDistantDevice()->getShortAddress(), HEX);
Serial.print("\t Range: "); Serial.print(DW1000Ranging.getDistantDevice()->getRange()); Serial.print(" m");
Serial.print("\t RX power: "); Serial.print(DW1000Ranging.getDistantDevice()->getRXPower()); Serial.println(" dBm");
}
void newDevice(DW1000Device* device) {
Serial.print("ranging init; 1 device added ! -> ");
Serial.print(" short:");
Serial.println(device->getShortAddress(), HEX);
}
void inactiveDevice(DW1000Device* device) {
Serial.print("delete inactive device: ");
Serial.println(device->getShortAddress(), HEX);
}
Comments (20)
باسلام و عرض ادب
من میخوام تو فضای بسته مثلا ساختمون، روی میز چندتا نود بکارم که فاصله این نودا از هم کمه، مثلا سی چهل سانتی متر، بعدش محل این نود ها بصورت انلاین به
سیستم رایانم ارسال بشه. نمیخوام از GPS استفاده کنم و اینکه یکبار شکل رو مربع در نظر بگیریم. حالا اگه تعداد بیشتر بشه (مثلا برای 8 ضلعی بخوام موقعیت نود هارو بدست بیارم) باید چیکار کنم؟ شما میدونید من باید از کجا شروع کنم؟ تخصص من این نیست فقط میخوام از این سنسورا استفاده کنم. ممنون میشم در اسرع وقت راهنماییم بفرمایید
بااحترام
موسوی
سلام.
برای این کار نیاز به 8 سنسور dwm1000 به همراه 8 تا برد آردوینو دارید. که یکی از این بردهای آردوینو به عنوان مستر با بقیه آردوینوها در ارتباط باشه و همچنین اطلاعات رو به رایانه منتقل کنه. یعنی به تعداد نودها به برد آردوینو و این سنسور نیاز دارید.
ایمیل من seyyedrasoulmousavi95@gmail.com هستش. اگه شما نحوه ساختشو میدونید لطفا پیام بدید بتونم با شما در ارتباط باشم برای ساختش. بابت هزینه هم صحبت میکنیم اگه کار رو بپذیرید.
سلام
وقتتون بخیر
امکان استفاده از nodemcu و حذف مبدل منطقی دو طرفه و ماژول تنظیم کننده ولتاژ وجود دارد؟
سپاس
سلام
وقت شما هم بخیر
بله، در صورتی که از بردی مثل NodeMCU و یا سایر میکروکنترلرهایی که بر پایه 3ولت کار میکنن استفاده کنید نیازی دیگه به استفاده از مبدل منطقی دوطرفه و ماژول تنظیمکننده ولتاژ نیست.
سلام
وقتتون بخیر
ما در نظر داریم دوتا وسیله ی متحرک با سرعت نسبتا زیاد را مسافت یابی کنیم. به صورت آنی.
چه ماژول UWB را توصیه میکنید؟
اگر این ماژول را خریداری کنیم موفق به این کار میشویم؟ لنگر ثابت هم نداشته باشیم
این دوتا خودشان دو به دو میتوانند فاصله را محاسبه کنند؟ یا نیاز به میکرو برای محاسبات دارد؟؟
و برای اینکه فاصله ی محاسبه شده ی اینها را داشته باشیم روی گوشی موبایل را روی PC باید این فاصله ی محاسبه شده را با چه رابطی دریافت کنیم؟
سلام وقت بخیر
سرعت زیادی که میفرمایید دقیقا چه قدر هست؟
سرعت انتقال دیتای این ماژول تا 6 مگابیت بر ثانیه است که کاربرد real time location هم داره
این سنسور دارای cpu مجزا نیست پس برای کار کردن باهاش یه میکروکنترلر یا برد جدا میخوایید
فاصله محاسبه شده رو میتونید به Esp32 بدید بعدش از طریق Wifi یا BLE به گوشیتون بفرستید
سلام
وقت بخیر
میخواستم دلیل استفاده از میکروکنترلر خارجی مثل Arduino رو بدونم، دقیقا برای چی این میکروکنترلر کنار ماژول dwm1000 استفاده میشه؟
فقط برای پروگرم کردن هستش یا اینکه پردازش و … هم روی میکروی خارجی متصل به dwm1000 انجام میشه؟
سلام
شما از ماژول dwm1000 به تنهایی نمیتونید استفاده کنید ، خودش دارای میکرو یا پردازنده ایی نیست
برای استفاده از این ماژول حتما بردی با پردازشگر باید باشه
سلام
میخوام بدونم بر چه اساسی این کد نوشته شده؟
با سلام
در ابتدای آموزش ذکر شده است رفرنسی که از آن برای نوشتن این آموزش استفاده شده است چه چیزی می باشد.
می توانید رفرنس را مطالعه بفرمایید
من با کسی که کد راه اندازی dwm1000 نوشته کار دارم لطفا ایمیل بدین یه راهنمایی ازتون میخواستم.
با سلام
سوال خودتون رو بپرسید
در توانمان باشد جواب خواهیم داد
آقای دمیرچی من به کمکتون نیاز دارم میشه آی دی در بله یا ایتا بهم بدین تا باهاتون مستقیم در ارتباط باشم
من باید این ماژول را با آرم راه اندازی کنم اما قبلش باید درکی از ماژول و نحوه عملکردش داشته باشم تا کد را بهتر و با درک بالا بنویسیم دیتاشیت را میخونم اما درکش نمیکنم ماژول چطور داره کار میکنه به طور مثال tag چه اطلاعاتی برای anchor ارسال میکنه و اون چی جواب میده
سلام وقتتون بخیر
یه سوال داشتم خدمتتون
آیا برای tag ها هم استفاده از میکروکنترلر واجب هست؟
یعنی میتونیم ماژولی که به صورت tag توسط میکرو پیکربندی شده رو از میکرو جدا کنیم و فقط به تغذیه وصل بشه؟
با سلام
بلی باید از میکروکنترلر در هر 2 سمت استفاده شود.
سلام وقت بخير
در حالتي كه ما از ماژول DWM1000 به عنوان tag استفاده مي كنيم، پس از تظيمات اوليه آيا بايد به صورت مداوم به ميكرو متصل باشه تا اطلاعات رو براي anchor ارسال كنه؟
ايميل بنده fa.mohammadi@ut.ac.ir
با سلام
استفاده از میکروکنترلر الزامی می باشد.
سلام وقت بخیر
من میخوام بدون gps یک ربات پرنده را موقعیت یابی کنم، برای اینکار مدنظرم هست که از uwb و ins به صورت تلفیقی استفاده کنم.
بنظر شما برای کاربرد گفته شده این روش مناسب هست؟
ممنون میشم اگه نظری دارید بفرمایید.
با سلام
جناب سنسور های موقعیت یاب مشابه DWM1000 یا uwb از 4 سنسور تشکل می شود که 3 عدد از آنها به عنوان محیط فضای کلی شما می شود و باید این 3 عدد را به صورت مثلثی با فاصله از هم قرار بدهید
سنسور چهارم نیز در این وسط قرار میگیرد و براساس موقعیت مکانی که نسبت به این 3 سنسور دارند موقعیت یابی میشود.
از آنجایی که شما میخواهید از ربات پرنده استفاده کنید پیشنهاد میکنم از همان gps استفاده کنید و در صورتی که مشکل شما دقت اندازه گیری می باشد می توانید از gps هایی که مود rtk را ساپورت میکنند استفاده کنید. دقت خیلی بالاتری را به شما میدهند.