সুচিপত্র:

ZenWheels মাইক্রোকারের জন্য হ্যাকযোগ্য রিমোট কন্ট্রোল: 7 টি ধাপ
ZenWheels মাইক্রোকারের জন্য হ্যাকযোগ্য রিমোট কন্ট্রোল: 7 টি ধাপ

ভিডিও: ZenWheels মাইক্রোকারের জন্য হ্যাকযোগ্য রিমোট কন্ট্রোল: 7 টি ধাপ

ভিডিও: ZenWheels মাইক্রোকারের জন্য হ্যাকযোগ্য রিমোট কন্ট্রোল: 7 টি ধাপ
ভিডিও: 2020 - 2021 এ 10 সর্বাধিক নতুন মিনি যানগুলি উপলভ্য 2024, জুন
Anonim
Image
Image
সমাবেশ
সমাবেশ

এই টিউটোরিয়ালে আমরা ZenWheels মাইক্রোকারের জন্য একটি কাস্টম রিমোট কন্ট্রোল তৈরি করতে যাচ্ছি। ZenWheels মাইক্রোকার একটি 5 সেমি খেলনা গাড়ি যা একটি Android বা Iphone অ্যাপ্লিকেশনের মাধ্যমে নিয়ন্ত্রণযোগ্য। যোগাযোগ প্রোটোকল সম্পর্কে জানতে এবং কিভাবে আপনি আরডুইনো এবং জাইরোস্কোপ ব্যবহার করে একটি রিমোট কন্ট্রোল তৈরি করতে পারেন তা জানতে অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিকে কিভাবে রিভার্স ইঞ্জিনিয়ার করতে হয় তা আমি আপনাকে দেখাতে যাচ্ছি।

ধাপ 1: উপাদান এবং সরঞ্জাম

অংশ:

1. ZenWheels মাইক্রোকার

2. Arduino pro mini 328p

3. ব্রেডবোর্ড

4. MPU6050 জাইরোস্কোপ

5. শক্তির উৎস <= 5 v (কিছু ব্যাটারি যা আমরা রুটিবোর্ডের সাথে সংযুক্ত করতে পারি)

6. U- আকৃতির জাম্পার তারগুলি (চ্ছিক)। আমি এই জাম্পার কেবলগুলি ব্যবহার করেছি কারণ সেগুলি রুটিবোর্ডে আরও ভাল দেখাচ্ছে। পরিবর্তে নিয়মিত জাম্পার তারগুলি ব্যবহার করা যেতে পারে

7. HC-05 ব্লুটুথ মডিউল (AT মোডে প্রবেশের জন্য একটি বোতাম সহ)

সরঞ্জাম:

1. ইউএসবি থেকে সিরিয়াল এফটিডিআই অ্যাডাপ্টার FT232RL আরডুইনো প্রো মিনি প্রোগ্রাম করার জন্য

2. Arduino IDE

3. অ্যান্ড্রয়েড ফোন

4. অ্যান্ড্রয়েড স্টুডিও [ptionচ্ছিক]

ধাপ 2: ZenWheels অ্যান্ড্রয়েড অ্যাপ্লিকেশন রিভার্স ইঞ্জিনিয়ারিং [alচ্ছিক]

এই অংশটি বোঝার জন্য জাভা এবং অ্যান্ড্রয়েডের কিছু জ্ঞান প্রয়োজন।

প্রকল্পের লক্ষ্য একটি জাইরোস্কোপ ব্যবহার করে মাইক্রোকার নিয়ন্ত্রণ করা। এর জন্য আমাদের এই খেলনা এবং অ্যান্ড্রয়েড অ্যাপের মধ্যে ব্লুটুথ যোগাযোগ সম্পর্কে আরও জানতে হবে।

এই ধাপে আমি ব্যাখ্যা করব কিভাবে মাইক্রোকার এবং অ্যান্ড্রয়েড অ্যাপের মধ্যে যোগাযোগের প্রোটোকল ইঞ্জিনিয়ারকে বিপরীত করা যায়। আপনি যদি কেবল রিমোট তৈরি করতে চান তবে এই পদক্ষেপটি প্রয়োজনীয় নয়। প্রোটোকল আবিষ্কার করার একটি উপায় হল সোর্স কোড দেখা। হুম কিন্তু এটি সরাসরি এগিয়ে নয়, অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলি সংকলিত হয় এবং কেউ গুগল প্লে এর মাধ্যমে এপিকে ইনস্টল করতে পারে।

তাই আমি এটি করার জন্য একটি মৌলিক নির্দেশিকা তৈরি করেছি:

1. APK ডাউনলোড করুন। একটি অ্যান্ড্রয়েড প্যাকেজ কিট (সংক্ষেপে APK) হল প্যাকেজ ফাইল ফরম্যাট যা অ্যান্ড্রয়েড অপারেটিং সিস্টেম মোবাইল অ্যাপস বিতরণ ও ইনস্টলেশনের জন্য ব্যবহার করে

প্রথমে গুগল প্লে স্টোরে অ্যাপ্লিকেশনটি অনুসন্ধান করুন, আমাদের ক্ষেত্রে "জেনুইলস" অনুসন্ধান করুন এবং আপনি অ্যাপ্লিকেশনের লিঙ্কটি পাবেন

তারপরে গুগলে "অনলাইন এপিকে ডাউনলোডার" অনুসন্ধান করুন এবং এপিকে ডাউনলোড করতে একটি ব্যবহার করুন। সাধারণত তারা অ্যাপ্লিকেশনের লিঙ্ক (যেটা আমরা আগে পেয়েছিলাম) চাইবে, তারপর আমরা একটি ডাউনলোড বাটন চাপব এবং আমাদের কম্পিউটারে সেভ করব।

2. APK ডিকম্পাইল করুন। আমাদের অবস্থার মধ্যে একটি ডিকম্পাইলার হল একটি টুল যা APK গ্রহণ করে এবং জাভা সোর্স কোড তৈরি করে।

সবচেয়ে সহজ সমাধান হল কাজটি করার জন্য একটি অনলাইন ডিকম্পাইলার ব্যবহার করা। আমি "অনলাইন decompliler" এর জন্য গুগলে অনুসন্ধান করেছি এবং আমি https://www.javadecompilers.com/ বেছে নিয়েছি। আপনি শুধু আগে প্রাপ্ত APK আপলোড করতে হবে এবং

ডিকম্পাইল টিপুন। তারপরে আপনি কেবল উত্সগুলি ডাউনলোড করুন।

3. কোডটি দেখে ইঞ্জিনিয়ারকে বিপরীত করার চেষ্টা করুন

প্রকল্পটি খুলতে আপনার একটি টেক্সট এডিটর বা আরও ভাল একটি IDE (সমন্বিত উন্নয়ন পরিবেশ) প্রয়োজন। অ্যান্ড্রয়েড প্রকল্পগুলির জন্য ডিফল্ট আইডিই হল অ্যান্ড্রয়েড স্টুডিও (https://developer.android.com/studio)। আপনি অ্যান্ড্রয়েড স্টুডিও ইনস্টল করার পরে প্রকল্প ফোল্ডারটি খুলুন।

যেহেতু আমাদের গাড়িটি ব্লুটুথ দ্বারা নিয়ন্ত্রিত হয় তাই আমি "ব্লুটুথ" শব্দটি দিয়ে ডিকম্পাইল করা কোডে আমার অনুসন্ধান শুরু করি, যেসব ঘটনা আমি পেয়েছি তা থেকে "ব্লুটুথসিরিয়াল সার্ভিস" যোগাযোগের হ্যান্ডেলে ছিল। যদি এই ক্লাসটি যোগাযোগ পরিচালনা করে তবে এটি অবশ্যই একটি সেন্ড কমান্ড পদ্ধতি থাকতে হবে। দেখা যাচ্ছে যে একটি লেখার পদ্ধতি রয়েছে যা ব্লুটুথ চ্যানেলের মাধ্যমে ডেটা পাঠায়:

পাবলিক অকার্যকর লেখা (বাইট আউট)

এটি একটি ভাল শুরু, আমি। লেখার জন্য অনুসন্ধান করেছি (পদ্ধতিটি ব্যবহার করা হচ্ছে এবং সেখানে একটি "ZenWheelsMicrocar" শ্রেণী রয়েছে যা আমাদের "BluetoothSerialService" সম্প্রসারিত করে। এই শ্রেণীতে ব্লুটুথের মাধ্যমে আমাদের যোগাযোগের বেশিরভাগ যুক্তি রয়েছে। এর অন্যান্য অংশ যুক্তি নিয়ন্ত্রকদের মধ্যে রয়েছে: বেস কন্ট্রোলার এবং স্ট্যান্ডার্ড কন্ট্রোলার।

BaseController- এ আমাদের সার্ভিস ইনিশিয়ালাইজেশন, এবং স্টিয়ারিং এবং থ্রটল চ্যানেলের সংজ্ঞাও আছে, চ্যানেলগুলি আসলে কমান্ড উপসর্গ নির্দিষ্ট করে যে কিছু ধরনের কমান্ড অনুসরণ করবে:

সুরক্ষিত ZenWheelsMicrocar microcar = নতুন ZenWheelsMicrocar (this, this.btHandler);

সুরক্ষিত ChannelOutput আউটপুট = {নতুন TrimChannelOutput (ZenWheelsMicrocar. STEERING_CHANNEL), নতুন TrimChannelOutput (ZenWheelsMicrocar. THROTTLE_CHANNEL)};

স্ট্যান্ডার্ড কন্ট্রোলারে স্টিয়ারিংটি পরিচালনা করা হয়:

পাবলিক ভয়েড হ্যান্ডেল স্টিয়ারিং (টাচ ইভেন্ট টাচ ইভেন্ট) {

… This.microcar.setChannel (steeringOutput.channel, steeringOutput.resolveValue ()); }

পদ্ধতি বিশ্লেষণ করে, steeringOutput.channel এর মান 129 (স্টিয়ারিং এর জন্য ব্যবহৃত চ্যানেল) এবং steeringOutput.resolveValue () এর মান হতে পারে -90 এবং 90 এর মধ্যে। চ্যানেল মান (129) সরাসরি পাঠানো হয়, এবং স্টিয়ারিং মান সংশোধন বিটওয়াইজ অপারেশন প্রয়োগ করে:

ব্যক্তিগত চূড়ান্ত int value_convert_out (int মান) {

বুলিয়ান নেগেটিভ = মিথ্যা; যদি (মান <0) {negativeণাত্মক = f6D; } int value2 = মান & 63; if (নেগেটিভ) {return value2 | 64; } ফেরত মান 2; }

স্ট্যান্ডার্ড কন্ট্রোলার নামে একটি অনুরূপ পদ্ধতি রয়েছে

পাবলিক অকার্যকর হ্যান্ডেল থ্রটল (টাচ ইভেন্ট টাচ ইভেন্ট)

ধাপ 3: উপাদান

অংশ:

1. Arduino pro mini 328p 2 $

2. ব্রেডবোর্ড

3. MPU6050 জাইরোস্কোপ 1.2 $

4. HC-05 মাস্টার-স্লেভ 6 পিন মডিউল 3 $

5. 4 x AA ব্যাটারি প্যাক 4 ব্যাটারী সহ

6. U- আকৃতির জাম্পার তারগুলি (চ্ছিক)। আমি এই জাম্পার কেবলগুলি ব্যবহার করেছি কারণ সেগুলি রুটিবোর্ডে আরও ভাল দেখাচ্ছে এবং এইভাবে লেডগুলি আরও দৃশ্যমান। আপনার যদি এই তারগুলি না থাকে তবে আপনি সেগুলিকে ডুপন্ট তারের সাথে প্রতিস্থাপন করতে পারেন।

উপরের দামগুলি ইবে থেকে নেওয়া হয়েছে।

সরঞ্জাম:

1. ইউএসবি থেকে সিরিয়াল FTDI অ্যাডাপ্টার FT232RL আরডুইনো প্রো মিনি প্রোগ্রাম করার জন্য

2. Arduino IDE

3. অ্যান্ড্রয়েড স্টুডিও (engineerচ্ছিক যদি আপনি নিজে ইঞ্জিনিয়ার বিপরীত করতে চান)

ধাপ 4: সমাবেশ

সমাবেশ
সমাবেশ

সমাবেশটি খুব সহজ কারণ আমরা এটি একটি ব্রেডবোর্ডে করছি:)

- প্রথমে আমরা আমাদের উপাদানগুলিকে ব্রেডবোর্ডে রাখি: মাইক্রোকন্ট্রোলার, ব্লুটুথ মডিউল এবং জাইরোস্কোপ

- HC-05 ব্লুটুথ RX এবং TX পিনগুলিকে arduino 10 এবং 11 পিনের সাথে সংযুক্ত করুন। জাইরোস্কোপ এসডিএ এবং এসসিএল আরডুইনো এ 4 এবং এ 5 পিনের সাথে সংযুক্ত হওয়া উচিত

- ব্লুটুথ, গাইরো এবং আরডুইনোতে পাওয়ার পিন সংযুক্ত করুন। পিনগুলি + এবং - রুটিবোর্ডের পাশে সংযুক্ত হওয়া উচিত

- সর্বশেষ একটি পাওয়ার সাপ্লাই (3.3V থেকে 5V এর মধ্যে) রুটিবোর্ডের সাথে সংযুক্ত করুন, আমি একটি ছোট LiPo এক সেল ব্যাটারি ব্যবহার করেছি কিন্তু যতক্ষণ পর্যন্ত এটি পাওয়ার রেঞ্জে থাকবে ততক্ষণ

আরো বিস্তারিত জানার জন্য উপরের ছবিগুলি দেখুন

ধাপ 5: মাইক্রোকারে HC-05 ব্লুটুথ যুক্ত করুন

HC-05 ব্লুটুথকে মাইক্রোকারে যুক্ত করুন
HC-05 ব্লুটুথকে মাইক্রোকারে যুক্ত করুন
HC-05 ব্লুটুথকে মাইক্রোকারে যুক্ত করুন
HC-05 ব্লুটুথকে মাইক্রোকারে যুক্ত করুন
HC-05 ব্লুটুথকে মাইক্রোকারে যুক্ত করুন
HC-05 ব্লুটুথকে মাইক্রোকারে যুক্ত করুন

এর জন্য আপনার একটি Android ফোন, ব্লুটুথ HC-05 মডিউল এবং তারের সাথে সিরিয়াল FTDI অ্যাডাপ্টারের প্রয়োজন হবে। এছাড়াও আমরা ব্লুটুথ মডিউলের সাথে যোগাযোগ করতে Arduino IDE ব্যবহার করব।

প্রথমে আমাদের মাইক্রোকার ব্লুটুথ ঠিকানা খুঁজে বের করতে হবে:

- আপনার ফোনে ব্লুটুথ সক্ষম করুন

- গাড়িতে চালান এবং অ্যান্ড্রয়েডে আপনার সেটিংসের ব্লুটুথ বিভাগে যান

- নতুন ডিভাইসের জন্য অনুসন্ধান করুন এবং "মাইক্রোকার" নামে কিছু ডিভাইস উপস্থিত হওয়া উচিত

- এই ডিভাইসের সাথে জোড়া

- তারপর ব্লুটুথ ম্যাক বের করার জন্য, আমি গুগল প্লে সিরিয়াল ব্লুটুথ টার্মিনাল থেকে এই অ্যাপটি ব্যবহার করেছি

এই অ্যাপ্লিকেশনটি ইনস্টল করার পরে, মেনু -> ডিভাইসগুলিতে যান এবং সেখানে আপনার সমস্ত ব্লুটুথ যুক্ত ডিভাইসগুলির একটি তালিকা থাকবে। আমরা কেবল "মাইক্রোকার" খনির নীচের কোডে আগ্রহী 00: 06: 66: 49: A0: 4B

পরবর্তী ব্লুটুথ মডিউল এফটিডিআই অ্যাডাপ্টার সংযুক্ত করুন। প্রথমে VCC এবং GROUND পিন এবং তারপর FTDI RX ব্লুটুথ TX এবং FTDI TX থেকে ব্লুটুথ RX। এছাড়াও ব্লুটুথ মডিউলে একটি পিন থাকা উচিত যা ভিসিসির সাথে সংযুক্ত হওয়া উচিত। এটি করলে ব্লুটুথ মডিউল একটি "প্রোগ্রামযোগ্য মোডে" প্রবেশ করে। আমার মডিউলের একটি বোতাম আছে যা VCC কে সেই বিশেষ পিনের সাথে সংযুক্ত করে। যখন আপনি ইউএসবিতে এফটিডিআই প্লাগ করেন তখন এই বিশেষ প্রোগ্রামযোগ্য মোডে প্রবেশ করতে পিন সংযুক্ত / বোতাম টিপে থাকা উচিত। ব্লুটুথ প্রতি 2 সেকেন্ডে ধীরে ধীরে ঝলকানি দিয়ে এই অপারেশন মোডে প্রবেশ নিশ্চিত করে।

আরডুইনো আইডিইতে সিরিয়াল পোর্ট নির্বাচন করুন, তারপরে সিরিয়াল মনিটর খুলুন (9600 বড রেটের সাথে এনএল এবং সিআর উভয়ই)। এটি টাইপ করুন এবং মডিউলটি "ঠিক আছে" দিয়ে নিশ্চিত করা উচিত।

মডিউলটিকে মাস্টার মোডে রাখতে "AT+ROLE = 1" টাইপ করুন। আপনার ব্লুটুহ মডিউলের সাথে যুক্ত করতে লিখুন: "AT+BIND = 0006, 66, 49A04B", লক্ষ্য করুন কিভাবে আমাদের "00: 06: 66: 49: A0: 4B" "0006, 66, 49A04B" তে রূপান্তরিত হয়। ভাল আপনি আপনার bluetooh MAC জন্য একই রূপান্তর করা উচিত।

এখন Zenwheels গাড়িতে পাওয়ার তারপর FTDI আনপ্লাগ করুন এবং বোতাম টিপে / বিশেষ পিন সংযুক্ত না করে এটি আবার প্লাগ করুন। কিছুক্ষণ পরে এটি গাড়ির সাথে সংযুক্ত হওয়া উচিত এবং আপনি লক্ষ্য করবেন যে গাড়িটি একটি নির্দিষ্ট সংযোগ সফল শব্দ তৈরি করছে।

সমস্যা সমাধান:

- আমি দেখেছি যে আমার কাছে থাকা সমস্ত ব্লুটুথ মডিউল থেকে, কেবল একটি বোতামযুক্ত একজন মাস্টার হিসাবে কাজ করেছে!

- গাড়িটি পুরোপুরি চার্জ করা হয়েছে তা নিশ্চিত করুন

- নিশ্চিত করুন যে গাড়িটি ফোনের সাথে সংযুক্ত নয়

- যদি ব্লুটুথ এটি মোডে প্রবেশ করে (আস্তে আস্তে জ্বলে ওঠে) কিন্তু এটি কমান্ডের সাড়া দেয় না তা নিশ্চিত করে যে আপনার উভয় এনএল এবং সিআর রয়েছে এবং অন্যান্য BAUD রেটের সাথে পরীক্ষা করুন

- ডাবল চেক করুন RX টিএক্স এর সাথে সংযুক্ত এবং এর বিপরীত

- এই টিউটোরিয়ালটি চেষ্টা করুন

ধাপ 6: কোড এবং ব্যবহার

প্রথমে আপনাকে দুটি লাইব্রেরি ডাউনলোড এবং ইনস্টল করতে হবে:

1. জাইরোস্কোপের জন্য MPU6050 লাইব্রেরি

2. I2CDev লাইব্রেরির উৎস

তারপর এখান থেকে আমার লাইব্রেরি ডাউনলোড এবং ইনস্টল করুন অথবা নীচে থেকে এটি অনুলিপি করুন:

/** * লাইব্রেরি: * https://github.com/jrowberg/i2cdevlib * https://github.com/jrowberg/i2cdevlib */#include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #অন্তর্ভুক্ত "ওয়্যার.h " #অন্তর্ভুক্ত" SoftwareSerial.h"

const int MAX_ANGLE = 45;

const বাইট কমান্ড স্টারিং = 129; const বাইট commandSpeed = 130;

বুল আরম্ভ = মিথ্যা; // DMP init সফল হলে // সেট সত্য

uint8_t mpuIntStatus; // MPU uint8_t devStatus থেকে প্রকৃত বাধা অবস্থা বাইট ধারণ করে; // প্রতিটি ডিভাইস অপারেশনের পর রিটার্ন স্ট্যাটাস (0 = সাফল্য,! 0 = ত্রুটি) uint16_t প্যাকেট সাইজ; // প্রত্যাশিত DMP প্যাকেটের আকার (ডিফল্ট 42 বাইট) uint16_t fifoCount; // FIFO uint8_t fifoBuffer এ বর্তমানে সমস্ত বাইটের সংখ্যা [64]; // FIFO স্টোরেজ বাফার Quaternion q; // [w, x, y, z] quaternion ধারক VectorFloat মাধ্যাকর্ষণ; // [x, y, z] মাধ্যাকর্ষণ ভেক্টর ফ্লোট ypr [3]; // [ইয়াও, পিচ, রোল] ইয়াও/পিচ/রোল ধারক এবং মাধ্যাকর্ষণ ভেক্টর অস্থির বুল mpuInterrupt = মিথ্যা; // নির্দেশ করে যে এমপিইউ ইন্টারাপ্ট পিন বেশি হয়ে গেছে কিনা

স্বাক্ষরবিহীন দীর্ঘ lastPrintTime, lastMoveTime = 0;

সফটওয়্যার সিরিয়াল বিটি সিরিয়াল (10, 11);

MPU6050 mpu;

অকার্যকর সেটআপ()

{Serial.begin (9600); BTserial.begin (38400); Serial.println ("প্রোগ্রাম শুরু"); ইনিশিয়ালাইজেশন = initializeGyroscope (); }

অকার্যকর লুপ () {

if (! initialization) {return; } mpuInterrupt = মিথ্যা; mpuIntStatus = mpu.getIntStatus (); fifoCount = mpu.getFIFOCount (); যদি (hasFifoOverflown (mpuIntStatus, fifoCount)) {mpu.resetFIFO (); প্রত্যাবর্তন; } if (mpuIntStatus & 0x02) {while (fifoCount <packetSize) {fifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (fifoBuffer, packetSize); fifoCount -= packetSize; mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& মাধ্যাকর্ষণ, & q); mpu.dmpGetYawPitchRoll (ypr, & q, & gravity); স্টিয়ার (ypr [0] * 180/M_PI, ypr [1] * 180/M_PI, ypr [2] * 180/M_PI); }}

/*

* 0 থেকে 180 পর্যন্ত কোণ গ্রহণ করে যেখানে 0 সর্বোচ্চ বাম এবং 180 সর্বাধিক ডান * -90 থেকে 90 পর্যন্ত গতি পায় যেখানে -90 সর্বোচ্চ পিছনে এবং 90 সর্বোচ্চ এগিয়ে থাকে */ অকার্যকর moveZwheelsCar (বাইট এঙ্গেল, ইন্ট স্পিড) {যদি (মিলিস () - lastMoveTime = 90) {resultAngle = মানচিত্র (কোণ, 91, 180, 1, 60); } অন্যথায় যদি (কোণ 0) {resultSpeed = মানচিত্র (গতি, 0, 90, 0, 60); } অন্যথায় যদি (গতি <0) {resultSpeed = মানচিত্র (গতি, 0, -90, 120, 60); } Serial.print ("actualAngle ="); Serial.print (কোণ); Serial.print (";"); Serial.print ("actualSpeed ="); Serial.print (resultSpeed); Serial.println (";"); BTserial.write (commandStering); BTserial.write (resultAngle); BTserial.write (commandSpeed); BTserial.write ((বাইট) resultSpeed); lastMoveTime = মিলিস (); }

অকার্যকর স্টিয়ার (int x, int y, int z)

{x = constrain (x, -1 * MAX_ANGLE, MAX_ANGLE); y = constrain (y, -1 * MAX_ANGLE, MAX_ANGLE); z = constrain (z, -MAX_ANGLE, MAX_ANGLE); int কোণ = মানচিত্র (y, -MAX_ANGLE, MAX_ANGLE, 0, 180); int গতি = মানচিত্র (z, -MAX_ANGLE, MAX_ANGLE, 90, -90); মুদ্রণ ডিবাগ (x, y, z, কোণ, গতি); moveZwheelsCar (কোণ, গতি); }

অকার্যকর মুদ্রণ ডিবাগ (int x, int y, int z, int angle, int speed)

{if (millis () - lastPrintTime <1000) {return; } 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 ("speed ="); Serial.print (speed); Serial.println (";"); lastPrintTime = মিলিস (); }

বুল আরম্ভ জাইরোস্কোপ ()

{Wire.begin (); mpu.initialize (); Serial.println (mpu.testConnection ()? F ("MPU6050 সংযোগ সফল"): F ("MPU6050 সংযোগ ব্যর্থ")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); যদি (devStatus! = 0) {Serial.print (F ("DMP ইনিশিয়ালাইজেশন ব্যর্থ (কোড")); Serial.println (devStatus); মিথ্যা ফেরত দিন; বাধা সনাক্তকরণ (Arduino বহিরাগত বাধা 0) … ")); attachInterrupt (0, dmpDataReady, RISING); = mpu.dmpGetFIFOPacketSize (); সত্য ফিরে আসুন;}

অকার্যকর dmpDataReady ()

{mpuInterrupt = সত্য; }

বুলিয়ান আছে

{return mpuIntStatus & 0x10 || fifoCount == 1024; }

Arduino এ FTDI অ্যাডাপ্টার ব্যবহার করে কোড আপলোড করুন তারপর ব্যাটারি সংযুক্ত করুন।

রিমোট ব্যবহার করে:

Arduino চালিত হওয়ার পরে, গাড়িতেও শক্তি। HC-05 মডিউলটি গাড়ির সাথে সংযুক্ত হওয়া উচিত, যখন এটি ঘটবে তখন গাড়ি একটি শব্দ নির্গত করবে। যদি এটি কাজ না করে তবে দয়া করে আগের ধাপ এবং সমস্যা সমাধান বিভাগটি পরীক্ষা করুন।

আপনি যদি ব্রেডবোর্ডকে সামনের দিকে ঝুঁকান তাহলে গাড়ীটি সামনের দিকে, ডান দিকে এবং গাড়িটি ডানদিকে চলবে। এটি আরও ধীরে ধীরে চলাচল করে যেমন একটু সামনের দিকে ঝুঁকতে এবং কিছুটা বাম হলে এই ক্ষেত্রে গাড়ি ধীরে ধীরে বাম দিকে যাবে।

গাড়ী যদি ব্রেডবোর্ডের দিকে ঝুঁকতে কিছু ভিন্ন পথে যায় তবে প্রথমে রুটিবোর্ডটি বিভিন্ন দিকে ধরে রাখুন।

কিভাবে এটা কাজ করে:

স্কেচ জিরোস্কোপ প্রতি 100 এমএস সমন্বয় পায়, গণনা করে এবং তারপর ব্লুটুথের মাধ্যমে গাড়ির কমান্ডগুলি প্রেরণ করে। প্রথমে একটি "স্টিয়ার" পদ্ধতি আছে যা কাঁচা x, y এবং z কোণ দিয়ে বলা হয়। এই পদ্ধতিটি স্টিয়ারিংকে 0 থেকে 180 ডিগ্রির মধ্যে এবং -90 এবং 90 এর মধ্যে ত্বরণকে রূপান্তরিত করে। এই পদ্ধতিটি কল করে

অকার্যকর সরানো

যে কারণে আমি দুটি ধাপে রূপান্তর করেছি, তা হল পুনর্ব্যবহারযোগ্যতা। যদি আমি এই স্কেচটিকে রিমোট কন্ট্রোলের সাথে অন্য কোন ডিভাইসে খাপ খাইয়ে নিতে চাই তবে আমি বেস পদ্ধতি "স্টিয়ার" থেকে শুরু করব যা ইতিমধ্যেই গতি এবং স্টিয়ারিংকে কিছু দরকারী মানের মানচিত্র করে।

ধাপ 7: বিকল্প

"রিভার্স ইঞ্জিনিয়ারিং" এর বিকল্প। আমি অ্যান্ড্রয়েড অ্যাপ্লিকেশন দিয়ে শুরু করে কীভাবে প্রকল্পটি প্রকৌশলীকে বিপরীত করতে হয় সে সম্পর্কে কথা বলেছি। কিন্তু এর একটি বিকল্প আছে আপনি একটি সিরিয়াল FTDI + ব্লুটুথ স্লেভ সেট করতে পারেন (মাস্টার সেটিংস উল্লেখ না করে নিয়মিত HC-05)। তারপর ZenWheels অ্যাপ থেকে "মাইক্রোকার" এর পরিবর্তে HC-05 এর সাথে সংযোগ স্থাপন করুন।

কমান্ডগুলি ডিকোড করার জন্য আপনাকে কিছু অবস্থানে স্টিয়ারিং হুইল ধরে রাখতে হবে, তারপর একটি পাইথন স্ক্রিপ্ট ব্যবহার করে সিরিয়াল যোগাযোগ বিশ্লেষণ করুন। আমি একটি পাইথন স্ক্রিপ্ট সুপারিশ করছি কারণ অ মুদ্রণযোগ্য অক্ষর এবং Arduino IDE এটি এর জন্য উপযুক্ত নয়। আপনি লক্ষ্য করবেন যে যদি আপনি চাকাটিকে এক অবস্থানে ধরে রাখেন তবে অ্যাপটি একই একই দুটি বাইট প্রেরণ করবে। আপনি যদি চাকার অবস্থান পরিবর্তন করেন মুষ্টি বাইট একই থাকবে দ্বিতীয় পরিবর্তন হবে। অনেক পরীক্ষার পর আপনি স্টিয়ারিং অ্যালগরিদম নিয়ে আসতে পারেন, তারপর রিভার্স ইঞ্জিনিয়ার থ্রোটল ইত্যাদি।

আরডুইনো ভিত্তিক রিমোটের বিকল্প হবে রাস্পবেরিপি রিমোট। রাস্পবেরি পাইতে একটি এম্বেডেড ব্লুটুথ মডিউল রয়েছে যা "মাস্টার" মোডে সেট আপ করার জন্য ব্যথাহীন এবং পাইথন ব্লুটুথ লাইব্রেরি একটি আকর্ষণের মতো কাজ করে। এছাড়াও আরো কিছু আকর্ষণীয় প্রকল্প যেমন আলেক্সা ইকো ব্যবহার করে গাড়ি নিয়ন্ত্রণ করা সম্ভব:)

আমি আশা করি আপনি প্রকল্পটি উপভোগ করেছেন এবং দয়া করে নীচের মন্তব্যগুলি ছেড়ে দিন!

প্রস্তাবিত: