সুচিপত্র:

সাইন-এস ড্রাগন: 10 টি ধাপ (ছবি সহ)
সাইন-এস ড্রাগন: 10 টি ধাপ (ছবি সহ)

ভিডিও: সাইন-এস ড্রাগন: 10 টি ধাপ (ছবি সহ)

ভিডিও: সাইন-এস ড্রাগন: 10 টি ধাপ (ছবি সহ)
ভিডিও: [২য় পর্ব] সেরা কয়েকটি দৃষ্টিভ্রম | Top optical and sound illusion bangla| 2024, জুলাই
Anonim
সাইন-এস ড্রাগন
সাইন-এস ড্রাগন

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

চীনা ড্রাগন "শক্তি, শক্তি এবং সৌভাগ্যের প্রতীক" এবং প্রায়শই এশীয় উপমহাদেশ জুড়ে একটি উচ্চ সাংস্কৃতিক এবং traditionalতিহ্যবাহী মূল্যে অনুষ্ঠিত হয়। সৌভাগ্য নিয়ে আসার পাশাপাশি, চাইনিজ ড্রাগনেরও শক্তিশালী ক্ষমতা রয়েছে যা "জল, বৃষ্টিপাত, টাইফুন এবং বন্যা" নিয়ন্ত্রণ করে। পরিশেষে, চাইনিজ ড্রাগন আবহাওয়ার তথ্য উপস্থাপনের জন্য উপযুক্ত বলে বিবেচিত হয়েছিল।

ভিজ্যুয়ালাইজেশন

সাইন-ইজে ড্রাগন তিনটি প্রধান বিভাগে তিনটি তিনটি বিভাগে আবহাওয়ার পূর্বাভাসের প্রতিনিধিত্ব করে। প্রতিটি 3-ঘন্টা ব্যবধানে, নিম্নলিখিত তথ্য অন্তর্ভুক্ত করা হবে:

  • আবহাওয়ার বর্ণনা - বর্তমান আবহাওয়ার তথ্যের রঙ নির্ধারণ করে।
  • তাপমাত্রা - শরীরের উচ্চতা নির্দিষ্ট করে
  • আর্দ্রতা - LED সেগমেন্টের ঝলকানি
  • বাতাসের গতি - শরীরের বাম এবং ডানে চলার গতি নিয়ন্ত্রণ করে।

প্রয়োজনীয় সামগ্রী

  1. 3 মিমি পাতলা পাতলা কাঠ/পিচবোর্ড
  2. 5 মিমি কাঠের ডোয়েল বা চপস্টিক
  3. 2 কণা ফোটন
  4. 3 Slinky খেলনা
  5. 6 servo মোটর
  6. নিওপিক্সেল লাইট (হয় একটি স্ট্র্যান্ড বা পৃথক আলো একসঙ্গে সেলাই করা হয়)
  7. প্রচুর সুপার গ্লু
  8. পরিবাহী থ্রেড
  9. এক্রাইলিক পেইন্ট
  10. আলংকারিক কাপড়
  11. লেজার কাটার
  12. 3D প্রিন্টার

ধাপ 1: উপরে এবং নিচে

উপর নিচ!
উপর নিচ!
উপর নিচ!
উপর নিচ!
উপর নিচ!
উপর নিচ!

সাইন-ইজে ড্রাগন তৈরির জন্য আপনার প্রথম পদক্ষেপ হল শরীরের উপরের এবং নিচে চলাচল নিয়ন্ত্রণকারী উপাদান তৈরি করা। কি উত্তেজনাকর!

  1. অ্যাডোব ইলাস্ট্রেটর ফাইল (.ai) ডাউনলোড করুন এবং লেজার কাটার মেশিন ব্যবহার করে সেগুলি প্রিন্ট করুন।

    upDownBoxWithPlatform.ai একটি কার্ডবোর্ডে ছাপানো উচিত।

  2. 3D প্রিন্টিং ফাইলগুলি (.stl) ডাউনলোড করুন এবং সেগুলি প্রিন্ট করার জন্য আপনার প্রিয় 3D প্রিন্টার ব্যবহার করুন।

    ডিস্ক বা ডিস্ক টার্নারের ক্ষেত্রে রঙ কোন ব্যাপার না। দ্বিতীয় ছবিতে, ডিস্কের গর্তের ভিতরে ডিস্ক টার্নার োকানো হয়েছে।

  3. প্রথম দুটি উপাদান একত্রিত করুন এবং তাদের 3 থেকে 5 ছবিতে দেখানো হিসাবে একসঙ্গে আঠালো করুন।

    1. প্লাটফর্ম
    2. ডিস্কের জন্য খাঁজ
  4. এখন, নীচের টিপস অনুসরণ করে বাক্সটি একসাথে রাখুন।

    1. সার্ভোর তারগুলি বাক্সের পাশে আয়তক্ষেত্রাকার খোলার মধ্য দিয়ে যেতে হবে।
    2. ডিস্ক টার্নারের সংক্ষিপ্ত প্রান্তটি সার্ভো মাথার সাথে সংযুক্ত হয় এবং দীর্ঘ প্রান্তটি বাক্সের অন্য পাশের গর্তের মধ্য দিয়ে যায় যার উপর একটি বৃত্তাকার গর্ত থাকে। ছবি 6 এ এটি প্রদর্শিত হয়েছে।
  5. এখন, ডিস্ক চালু হয়ে গেলে প্ল্যাটফর্ম সমতল থাকে তা নিশ্চিত করার জন্য আমাদের কিছু দরকার। চপস্টিকটিকে mm৫ মিমি লম্বা লাঠিতে (ছবি 7) কেটে বাক্সের উপরের অংশ দিয়ে গরম আঠা দিয়ে প্ল্যাটফর্মের উপরের অংশে আঠা দিন। নিশ্চিত করুন যে লাঠিগুলি প্ল্যাটফর্মে 90 ডিগ্রিতে সমতল করা হয়েছে।
  6. প্ল্যাটফর্মে বাক্সের উপরের মাঝের গর্তে একটি 212 মিমি লম্বা লাঠি োকান।

মিষ্টি! ড্রাগনের উপরে এবং নিচে চলাচলের জন্য এখন আপনার কাছে একটি সম্পূর্ণ বাক্স (ছবি 8) রয়েছে। এখন, উপরের ধাপগুলি আরও দুইবার পুনরাবৃত্তি করুন!

ধাপ 2: বাম এবং ডান সম্পর্কে কি?

বাম এবং ডান সম্পর্কে কি?!
বাম এবং ডান সম্পর্কে কি?!
বাম এবং ডান সম্পর্কে কি?!
বাম এবং ডান সম্পর্কে কি?!
বাম এবং ডান সম্পর্কে কি?!
বাম এবং ডান সম্পর্কে কি?!
বাম এবং ডান সম্পর্কে কি?!
বাম এবং ডান সম্পর্কে কি?!

এখন, আমরা সাইন-এস ড্রাগনের বাম এবং ডান গতিবিধি সম্পর্কে ভুলে যেতে পারি না, আমরা কি পারি? চলুন দ্বিতীয় ধাপে ঝাঁপ দাও!

  1. অ্যাডোব ইলাস্ট্রেটর ফাইল (.ai) ডাউনলোড করুন এবং লেজার কাটার মেশিন ব্যবহার করে সেগুলি প্রিন্ট করুন।

    1. leftRightBoxWithPlatforms.ai একটি কার্ডবোর্ডে ছাপানো উচিত।
    2. armTurner.ai ফাইল 3 মিমি পুরু একটি উপাদান মুদ্রিত করা উচিত।
  2. 3D প্রিন্টিং ফাইল (.stl) ডাউনলোড করুন এবং সেগুলো প্রিন্ট করতে আপনার প্রিয় 3D প্রিন্টার ব্যবহার করুন।

    আপনি দুটি বাহু মুদ্রণ নিশ্চিত করুন! এখানে রঙ কোন ব্যাপার না।

  3. গরম আঠালো ব্যবহার করে ছবি 3 এ দেখানো হিসাবে দুটি প্ল্যাটফর্ম একত্রিত করুন।
  4. বাক্সটি একসাথে রাখুন। যদিও এটি করা কঠিন হতে পারে, এটি অর্জন করা সহজ:

    1. বাক্সের উভয় পাশে দুটি বড় স্লিটের মধ্যে দুটি প্ল্যাটফর্ম tingোকানো।
    2. উপরের প্ল্যাটফর্মের শীর্ষে প্রথম বাহু রাখা।
    3. বাহু দিয়ে আর্ম টার্নার থ্রেডিং এবং তারপর উপরের প্ল্যাটফর্ম।
    4. নীচের প্ল্যাটফর্মের উপরে দ্বিতীয় বাহু রাখা।
    5. দ্বিতীয় বাহু এবং তারপর নীচের প্ল্যাটফর্মের মাধ্যমে আর্ম টার্নার থ্রেডিং।
    6. 3D মুদ্রিত আর্ম টার্নারের আয়তক্ষেত্র খোলার মাধ্যমে আর্ম টার্নার আটকে রাখা।
    7. টার্নারের অন্য প্রান্তটি সার্ভো মোটরের উপরে যায়।
    8. বাক্সে উপরের, নীচে এবং পিছনের টুকরা যুক্ত করুন।

আপনার চূড়ান্ত একত্রিত বাক্সটি ষষ্ঠ ছবির মতো হওয়া উচিত। এখন, আপনি যে আরো দুই বার পুনরাবৃত্তি পেতে!

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

ধাপ 3: শরীর ধরে রাখা … কিভাবে?

শরীর ধরে রাখা … কিভাবে?
শরীর ধরে রাখা … কিভাবে?

ভাল প্রশ্ন! সেই সময় যখন 3D ডি প্রিন্টেড স্লিংকি হোল্ডাররা আসে। অন্তর্ভুক্ত করা.stl ফাইলটি ডাউনলোড করুন এবং একটি 3D প্রিন্টার ব্যবহার করে প্রিন্ট করুন। 6 টি ভিন্ন বাক্সের জন্য মোট 6 টি ধারক মুদ্রণ করতে ভুলবেন না।

আপনি যদি উপরের স্লিঙ্কি ধারকের ছবিটি দেখে থাকেন তবে বিস্ময় নষ্ট হয়ে গেছে - এটি আমাদের সাইন -এস ড্রাগনের রঙ!

ধাপ 4: কিন্তু সেই বাক্সগুলি এত সুন্দর নয় …

এবং আমি একমত! এই কারণেই আমরা একটি লেজার কাটার ব্যবহার করতে যাচ্ছি যা অনেক বেশি আকর্ষণীয় বাক্স কেটে সেই সব বাক্স ধারণ করে এবং সেগুলি গোপন করে।

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

  1. প্রথম ফাইল (আউটারবক্সফাইনাল_1) থেকে তিনটি টুকরো একসাথে একত্রিত করুন এবং আঠালো করুন।
  2. দ্বিতীয় ফাইল (আউটারবক্সফিনাল_2) থেকে এখনও টুকরোটি যোগ করবেন না।
  3. বাক্সের নীচে তৃতীয় ফাইল (আউটারবক্সফাইনাল_3) থেকে টুকরোটি রাখুন এবং এটি শীর্ষে বন্ধ হওয়া উচিত। বাক্সের নীচে কেবল আঠালো।
  4. ইনারবক্স প্ল্যাটফর্ম দুবার প্রিন্ট করুন। যে দুটি টুকরোতে বড় আয়তক্ষেত্রের ছিদ্র রয়েছে তাদের একসাথে আঠালো করুন। তারপরে, অবশিষ্ট তিনটি টুকরা একসাথে আঠালো করুন। অবশেষে, এটি আঠালো অন্যান্য আঠালো সেট তাদের মধ্যে গর্ত সঙ্গে।
  5. বড় বাক্সের নীচে প্ল্যাটফর্মটি রাখুন।
  6. প্ল্যাটফর্মে তাদের সংশ্লিষ্ট স্পটগুলিতে সমস্ত 6 টি ছোট বাক্স সন্নিবেশ করান।
  7. এখন, বাক্সের শীর্ষে দ্বিতীয় ফাইল (আউটারবক্সফিনাল_2) থেকে টুকরোটি রাখুন এবং প্রান্তের চারপাশে আঠালো করুন। উপরের টুকরোর গর্তগুলি ছোট বাক্সের ছিদ্রগুলির সাথে সারিবদ্ধ হওয়া উচিত। যদি তা না হয় তবে আপনার ছোট বাক্সগুলি পুনর্বিন্যাস করুন। মোটেও ছোট বাক্সে আঠা যোগ করবেন না।
  8. আপনি যদি নীচে একটি চটচটে টুকরোযুক্ত রুটিবোর্ড ব্যবহার করেন তবে এটিকে নীচের অংশের কেন্দ্রের কাছে এমন জায়গায় রাখুন যেখানে আপনি বাক্সটি বন্ধ করলে ফোটন সহ ব্রেডবোর্ডটি অদৃশ্য হয়ে যাবে। নীচের অংশে ছোট ছোট টুকরো রয়েছে যা আপনাকে বাইরে থেকে ফোটনের সাথে সংযুক্ত করা সহজ করে তোলে।

ধাপ 5: Slinky খেলনা ?? আহারে

Slinky খেলনা ?? আহারে!
Slinky খেলনা ?? আহারে!
Slinky খেলনা ?? আহারে!
Slinky খেলনা ?? আহারে!

ড্রাগনের শরীর:

1. গরম আঠা বা টেপ ব্যবহার করে তিনটি স্লিংকি একত্রিত করুন।

2. slinkies দৈর্ঘ্য এবং ব্যাস পরিমাপ এবং আলংকারিক ফ্যাব্রিক একটি টুকরা কাটা।

3. ফ্যাব্রিকের দুই প্রান্ত আনুন এবং তাদের একসঙ্গে সেলাই করুন।

4. সেগুলো সেলাই করা হয়ে গেলে স্লিঙ্কিকে মোজার মতো স্লাইড করুন।

5. সেলাই করা কাপড়ে স্লিংকির প্রান্ত সেলাই করুন।

ধাপ 6: আপনার ড্রাগন মুদ্রণ করুন

ড্রাগনের 3D মুদ্রিত অংশ:

1. অংশগুলি https://www.thingiverse.com/thing:854575 থেকে নেওয়া হয়েছে।

2. আমরা কেবল মাথা, পা এবং চোখ ব্যবহার করেছি।

3. অংশটি 3D প্রিন্ট করার পর, স্যান্ডপেপার এবং এসিটোন ব্যবহার করে এটি মসৃণ করুন।

The. যে অংশগুলো আপনি সাজাতে চান সেভাবে রং করুন।

ধাপ 7: নিওপিক্সেলের সাহায্যে আপনার ড্রাগনকে এগিয়ে নেওয়ার সময়

নিওপিক্সেলের সাহায্যে আপনার ড্রাগনকে এগিয়ে নেওয়ার সময়!
নিওপিক্সেলের সাহায্যে আপনার ড্রাগনকে এগিয়ে নেওয়ার সময়!
নিওপিক্সেলের সাহায্যে আপনার ড্রাগনকে এগিয়ে নেওয়ার সময়!
নিওপিক্সেলের সাহায্যে আপনার ড্রাগনকে এগিয়ে নেওয়ার সময়!

হালকা বিভাগ:

1. আপনি ইচ্ছা করলে লাইট তৈরির জন্য একটি নিওপিক্সেল স্ট্র্যান্ড ব্যবহার করতে পারেন।

2. আমরা 20 টি নিওপিক্সেল লাইট ব্যবহার করেছি এবং তারের সাহায্যে তাদের সংযুক্ত করেছি। এই তারগুলি তাদের উপর বিক্রি করা হয়েছিল এবং লাল তারের সাহায্যে ফোটনের সাথে সংযুক্ত ছিল যাতে এটি ড্রাগনের থিমের সাথে মেলে।

You. আপনি একটি লম্বা কাপড়ের উপর আপনার নিওপিক্সেল লাইট সেলাই করতে পারেন, কিন্তু আমরা সেগুলো ব্যবহার করিনি কারণ আমাদের ধাতু দিয়ে তৈরি একটি স্লিংকি ছিল।

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

ধাপ 8: প্রোগ্রামিং সময়

যেহেতু আমরা দুটি পৃথক ফোটন ব্যবহার করে ছয়টি পৃথক সার্ভো মোটরের সাথে কাজ করব (একটি ফোটন কেবল চারটি দিয়ে কাজ করতে পারে), তাই আমরা মাইক্রোকন্ট্রোলারগুলিতে ফ্ল্যাশ করার জন্য দুটি পৃথক কিন্তু অনুরূপ কোড লিখব।

এখন, প্রথম মাইক্রোকন্ট্রোলারের জন্য …

একটি Arduino ফাইলে (.ino), নিম্নলিখিত লাইব্রেরিগুলি অন্তর্ভুক্ত করুন এবং সংজ্ঞায়িত করুন:

#অন্তর্ভুক্ত "neopixel.h"

#অন্তর্ভুক্ত "ArduinoJson.h"

#PIXEL_PIN D4 সংজ্ঞায়িত করুন

#PIXEL_COUNT 18 নির্ধারণ করুন

পরবর্তী, নিম্নলিখিত ভেরিয়েবল ঘোষণা করুন:

Adafruit_NeoPixel স্ট্রিপ = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN);

Servo servoLeftRight_1; Servo servoUpDown_1; Servo servoLeftRight_2; Servo servoUpDown_2; int positionLeftRight_1 = 0; int positionUpDown_1 = 0; int leftRight_1 = 1; int upDown_1 = 1; int positionLeftRight_2 = 100; // 0 এবং 180 এর মধ্যে হতে হবে (ডিগ্রীতে) int positionUpDown_2 = 180; // 0 থেকে 180 এর মধ্যে হতে হবে (ডিগ্রীতে) int leftRight_2 = 1; // 0 = বাম, 1 = ডান int upDown_2 = 1; // 0 = up, 1 = down const size_t bufferSizeCurrent = JSON_ARRAY_SIZE (1) + JSON_OBJECT_SIZE (1) + 2*JSON_OBJECT_SIZE (2) + JSON_OBJECT_SIZE (4) + JSON_JOZO + JSON_JOZE + 4) 390; const size_t bufferSizeForecast = 38 * JSON_ARRAY_SIZE (1) + + JSON_ARRAY_SIZE (38) + + 2 * JSON_OBJECT_SIZE (0) + + 112 * JSON_OBJECT_SIZE (1) + + 39 * JSON_OBJECT_SIZE (2) + + JSON_OBJECT_SIZE (3) + + 38 * JSON_OBJECT_SIZE (4) + + JSON_OBJECT_SIZE (5) + 76*JSON_OBJECT_SIZE (8) + 12490; স্ট্রিং ওয়েদারএরে [3]; ভাসমান তাপমাত্রা অ্যারে [3]; ভাসমান আর্দ্রতা অ্যারে [3]; ভাসমান windSpeedArray [3]; স্ট্রিং টাইমস্ট্যাম্প অ্যারে [3]; int upDownMaxDegree [3]; int leftRightSpeed [3]; স্ট্রিং allData5DaysForecast;

কিভাবে ওয়েবহুক সেট আপ করতে হয় তা জানতে এখানে ক্লিক করুন। যখন আপনি সম্পন্ন করেন, নিম্নলিখিত ঘোষণা এবং ফাংশন যোগ করুন এবং প্রয়োজনে যথাযথ পরিবর্তন করুন:

অকার্যকর getWeather5DayForecast () {Particle.publish ("get_weather5DayForecast"); allData5DaysForecast = ""; } টাইমার টাইমার ওয়েদারফোরকাস্ট (60000, getWeather5DayForecast); অকার্যকর getCurrentWeather () {Particle.publish ("get_currentWeather"); } টাইমার টাইমার ওয়েদার কারেন্ট (60000, getCurrentWeather);

নিম্নলিখিত কাজগুলি ড্রাগনের উপরে/নিচে এবং বাম/ডান গতি নিয়ন্ত্রণ করে:

void changeLeftRight1 () {if (leftRight_1) {positionLeftRight_1 = positionLeftRight_1 + leftRightSpeed [0]; যদি (positionLeftRight_1> 100) {leftRight_1 = 0; }} অন্য {positionLeftRight_1 = positionLeftRight_1 - leftRightSpeed [0]; যদি (positionLeftRight_1 <0) {leftRight_1 = 1; }} servoLeftRight_1.write (positionLeftRight_1); }

অকার্যকর পরিবর্তন লেফট রাইট 2 () {

যদি (leftRight_2) {positionLeftRight_2 = positionLeftRight_2 + leftRightSpeed [1]; যদি (positionLeftRight_2> 100) {leftRight_2 = 0; }} অন্য {positionLeftRight_2 = positionLeftRight_2 - leftRightSpeed [1]; যদি (positionLeftRight_2 <0) {leftRight_2 = 1; }} servoLeftRight_2.write (positionLeftRight_2); }

void changeUpDown1 () {

যদি (upDown_1) {positionUpDown_1 ++; যদি (positionUpDown_1> upDownMaxDegree [0]) {upDown_1 = 0; }} অন্য {positionUpDown_1--; যদি (positionUpDown_1 <1) {upDown_1 = 1; }} servoUpDown_1.write (positionUpDown_1); }

void changeUpDown2 () {

যদি (upDown_2) {positionUpDown_2 ++; যদি (positionUpDown_2> upDownMaxDegree [1]) {upDown_2 = 0; }} অন্য {positionUpDown_2--; যদি (positionUpDown_2 <1) {upDown_2 = 1; }} servoUpDown_2.write (positionUpDown_2); }

একটি ব্যবধানে আন্দোলন পরিবর্তন করতে সক্ষম হতে, টাইমার তৈরি করা হয়।

টাইমার টাইমার লেফট রাইট 1 (100, চেঞ্জ লেফট রাইট 1);

টাইমার টাইমার লেফট রাইট 2 (100, চেঞ্জ লেফট রাইট 2); টাইমার টাইমারআপডাউন 1 (10, চেঞ্জআপডাউন 1); টাইমার টাইমারআপডাউন 2 (10, চেঞ্জআপডাউন 2);

সেটআপ ফাংশন অবশেষে পরবর্তী যোগ করা হয়। ওয়েবহুকের সাথে সম্পর্কিত কোডের লাইনে যথাযথ পরিবর্তন করতে ভুলবেন না।

অকার্যকর সেটআপ () {// আবহাওয়া টাইমার টাইমার শুরু করুন WeeatherForecast.start (); timerWeatherCurrent.start (); // Neopixels strip.begin (); // পিনমোডের মতো সূচনা করুন এবং এখানে ফাংশন শুরু করুন। // মাইক্রো সার্ভো servoLeftRight_1.attach (D1) সেটআপ করুন; servoUpDown_1.attach (D0); servoLeftRight_2.attach (D3); servoUpDown_2.attach (D2); servoLeftRight_1.write (positionLeftRight_1); // servo অবস্থান শুরু servoUpDown_1.write (positionUpDown_1); // servo অবস্থান শুরু করুন servoLeftRight_2.write (positionLeftRight_2); // servo অবস্থান শুরু servoUpDown_2.write (positionUpDown_2); // সার্ভো পজিশন টাইমার শুরু করুন timerLeftRight2.start (); timerUpDown1.start (); timerUpDown2.start (); // একটি কনসোল Serial.begin (9600) খুলুন; বিলম্ব (2000); Serial.println ("হ্যালো!"); // get_weather5DayForecast এ সাবস্ক্রাইব করুন এবং get_currentWeather webhooks Particle.subscribe ("hook-response/get_weather5DayForecast", gotWeather5DayForecast, MY_DEVICES); Particle.subscribe ("hook-response/get_currentWeather/0", gotCurrentWeatherData, MY_DEVICES); getCurrentWeather (); getWeather5DayForecast (); }

এই প্রকল্পের জন্য একটি লুপ ফাংশন ব্যবহার করা হয় না। ওয়েবহুক থেকে প্রাপ্ত ডেটা হ্যান্ডেল করার জন্য আমরা ফাংশনগুলি ভুলে যেতে পারি না!

অকার্যকর পেয়েছে // সমস্ত ডাটা এক স্ট্রিং এ সংরক্ষণ করে। int allData5DaysForecastLen = allData5DaysForecast.length (); চার বাফার [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (বাফার, allData5DaysForecastLen + 1); // স্ট্রিং int bufferLength = sizeof (buffer) এর জন্য একটি বাফার তৈরি করুন; DynamicJsonBuffer jsonBufferWeather (bufferLength); JsonObject & root = jsonBufferWeather.parseObject (বাফার); // পার্সিং সফল হলে পরীক্ষা করুন। যদি (! root.success ()) {//Serial.println(" পার্সিং আবহাওয়ার জন্য 5 দিনের পূর্বাভাস… ভুল! "); প্রত্যাবর্তন; } int i = 1; JsonArray & list = root ["list"]; (JsonObject & currentObject: list) {if (i <3) {JsonObject & main = currentObject ["main"]; ভাসমান তাপমাত্রা = প্রধান ["টেম্প"]; আর্দ্রতা = প্রধান ["আর্দ্রতা"]; JsonObject & weather = currentObject ["weather"] [0]; const char* weatherInfo = weather ["main"]; float windSpeed = currentObject ["wind"] ["speed"]; const char* timestamp = currentObject ["dt_txt"]; int tempFah = convertToFahrenheit (তাপমাত্রা); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = updateleftRight (windSpeed); leftRightSpeed = servoIncrement; setColor (weatherInfo, i); তাপমাত্রা অ্যারে = tempFah; আর্দ্রতা অ্যারে = আর্দ্রতা; weatherArray = weatherInfo; windSpeedArray = windSpeed; টাইমস্ট্যাম্পআরে = টাইমস্ট্যাম্প; আমি ++; } অন্যথায় {বিরতি; }}}

void gotCurrentWeatherData (const char *event, const char *data) {DynamicJsonBuffer jsonBufferWeather (bufferSizeCurrent); JsonObject & root = jsonBufferWeather.parseObject (ডেটা); // পার্সিং সফল হলে পরীক্ষা করুন। যদি (! root.success ()) {//Serial.println("বর্তমান আবহাওয়ার জন্য পার্সিং … ত্রুটি!"); প্রত্যাবর্তন; } JsonObject & weather = root ["weather"] [0]; const char* weather_main = weather ["main"]; JsonObject & main = root ["main"]; float main_temp = main ["temp"]; int main_humidity = প্রধান ["আর্দ্রতা"]; float wind_speed = root ["wind"] ["speed"]; const char* timestamp = root ["dt_txt"]; int tempFah = convertToFahrenheit (main_temp); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updateleftRight (wind_speed); leftRightSpeed [0] = servoIncrement; setColor (weather_main, 0); weatherArray [0] = weather_main; তাপমাত্রা অ্যারে [0] = tempFah; আর্দ্রতা অ্যারে [0] = প্রধান_ আর্দ্রতা; windSpeedArray [0] = wind_speed; টাইমস্ট্যাম্পআরে [0] = টাইমস্ট্যাম্প; }

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

int updateUpDown (float temp) {// ডিগ্রির মান [0, 180] float servoMaxDegree = temp * 45/31 + (990 /31); Serial.print ("নতুন servo ডিগ্রী:"); Serial.println (servoMaxDegree); ফিরতি servoMaxDegree; }

int updateleftRight (float windSpeed) {

// বাতাসের গতি [1, 100] ভাসমান servoIncrement = windSpeed * 99/26 + 1; Serial.print ("নতুন servo বৃদ্ধি মান:"); Serial.println (servoIncrement); servoIncrement ফেরত; }

int convertToFahrenheit (float tempKel) {

int tempFah = tempKel * 9.0 / 5.0 - 459.67; ফিরে tempFah; }

void setColor (String weatherDesc, int index) {

$ ledIndex = 0; যদি (সূচক == 0) {ledIndex = 0; } অন্যথায় যদি (index == 1) {ledIndex = 6; } অন্যথায় যদি (index == 2) {ledIndex = 12; } অন্য {প্রত্যাবর্তন; } যদি (weatherDesc == "সাফ") {// হলুদ (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (253, 219, 62)); // হলুদ স্ট্রিপ শো (); বিলম্ব (20); }} অন্যথায় যদি (weatherDesc == "মেঘ") {// ধূসর (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (223, 229, 237)); // ধূসর strip.show (); বিলম্ব (20); }} অন্যথায় যদি (weatherDesc == "স্নো") {// সাদা (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (255, 225, 225)); // সাদা strip.show (); বিলম্ব (20); }} অন্যথায় যদি (weatherDesc == "বৃষ্টি") {// নীল জন্য (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (119, 191, 246)); // নীল strip.show (); বিলম্ব (20); }} অন্য {// লাল (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (254, 11, 5)); // লাল strip.show (); বিলম্ব (20); }}}

একবার আপনি আপনার Arduino ফাইলে সবকিছু যোগ করলে, এটি কম্পাইল করুন। যদি কোন ত্রুটি না থাকে তবে এগিয়ে যান এবং প্রথম ফোটনে কোডটি ফ্ল্যাশ করুন। পরবর্তী ধাপ আপনাকে দ্বিতীয় ফোটনে ফ্ল্যাশ করার জন্য অনুরূপ কোড প্রদান করবে।

ধাপ 9: প্রোগ্রামিং অব্যাহত

যেহেতু দ্বিতীয় ফোটনের কোডটি প্রথমটির জন্য প্রায় একই রকম, পুরো কোডটি নীচে কপি এবং আটকানো হয়েছে:

#অন্তর্ভুক্ত "ArduinoJson.h"

Servo servoLeftRight_3;

Servo servoUpDown_3;

int positionLeftRight_3 = 45;

int positionUpDown_3 = 0; int leftRight_3 = 1; int upDown_3 = 1;

const size_t bufferSizeCurrent = JSON_ARRAY_SIZE (1) + JSON_OBJECT_SIZE (1) + 2*JSON_OBJECT_SIZE (2) + JSON_OBJECT_SIZE (4) + JSON_OBJECT_SIZE (JOZONE + 6)

const size_t bufferSizeForecast = 38 * JSON_ARRAY_SIZE (1) + + JSON_ARRAY_SIZE (38) + + 2 * JSON_OBJECT_SIZE (0) + + 112 * JSON_OBJECT_SIZE (1) + + 39 * JSON_OBJECT_SIZE (2) + + JSON_OBJECT_SIZE (3) + + 38 * JSON_OBJECT_SIZE (4) + + JSON_OBJECT_SIZE (5) + 76*JSON_OBJECT_SIZE (8) + 12490;

স্ট্রিং ওয়েদারএরে [3];

ভাসমান তাপমাত্রা অ্যারে [3]; ভাসমান আর্দ্রতা অ্যারে [3]; ভাসমান windSpeedArray [3]; স্ট্রিং টাইমস্ট্যাম্প অ্যারে [3]; int upDownMaxDegree [3]; int leftRightSpeed [3];

স্ট্রিং allData5DaysForecast;

অকার্যকর getWeather5DayForecast ()

{Particle.publish ("get_weather5DayForecast2"); allData5DaysForecast = ""; }

টাইমার টাইমার ওয়েদারফোরকাস্ট (60000, getWeather5DayForecast); // 10, 800, 000 ms = 3 দিন

অকার্যকর getCurrentWeather ()

{Particle.publish ("get_currentWeather2"); }

টাইমার টাইমার ওয়েদার কারেন্ট (60000, getCurrentWeather);

অকার্যকর পরিবর্তন লেফট রাইট 3 () {

যদি (leftRight_3) {positionLeftRight_3 = positionLeftRight_3 + leftRightSpeed [2]; যদি (positionLeftRight_3> 100) {leftRight_3 = 0; }} অন্য {positionLeftRight_3 = positionLeftRight_3 - leftRightSpeed [2]; যদি (positionLeftRight_3 <0) {leftRight_3 = 1; }} servoLeftRight_3.write (positionLeftRight_3); }

void changeUpDown3 () {

যদি (upDown_3) {positionUpDown_3 ++; যদি (positionUpDown_3> upDownMaxDegree [2]) {upDown_3 = 0; }} অন্য {positionUpDown_3--; যদি (positionUpDown_3 <1) {upDown_3 = 1; }} servoUpDown_3.write (positionUpDown_3); }

টাইমার টাইমার লেফট রাইট 3 (100, চেঞ্জ লেফট রাইট 3);

টাইমার টাইমারআপডাউন 3 (10, চেঞ্জআপডাউন 3);

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

// আবহাওয়া টাইমার টাইমার শুরু করুন WeeatherForecast.start (); timerWeatherCurrent.start (); // পিনমোডের মতো সূচনা করুন এবং এখানে ফাংশন শুরু করুন। // মাইক্রো সার্ভো servoLeftRight_3.attach (D1) সেটআপ করুন; servoUpDown_3.attach (D0);

servoLeftRight_3.write (positionLeftRight_3); // সার্ভো অবস্থান আরম্ভ করুন

servoUpDown_3.write (positionUpDown_3); // সার্ভো অবস্থান আরম্ভ করুন

timerLeftRight3.start ();

timerUpDown3.start (); // একটি কনসোল Serial.begin (9600) খুলুন; বিলম্ব (2000); Serial.println ("হ্যালো!"); // get_weather5DayForecast এ সাবস্ক্রাইব করুন এবং get_currentWeather webhooks Particle.subscribe ("hook-response/get_weather5DayForecast2", gotWeather5DayForecast, MY_DEVICES); Particle.subscribe ("hook-response/get_currentWeather2/0", gotCurrentWeatherData, MY_DEVICES); getCurrentWeather (); getWeather5DayForecast (); }

অকার্যকর পেয়েছে Weather5DayForecast (const char *event, const char *data)

{allData5DaysForecast += ডেটা; // সমস্ত ডাটা এক স্ট্রিং এ সংরক্ষণ করে। int allData5DaysForecastLen = allData5DaysForecast.length (); চার বাফার [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (বাফার, allData5DaysForecastLen + 1); // স্ট্রিং int bufferLength = sizeof (buffer) এর জন্য একটি বাফার তৈরি করুন; DynamicJsonBuffer jsonBufferWeather (bufferLength); JsonObject & root = jsonBufferWeather.parseObject (বাফার); // সিরিয়াল.প্রিন্টলন (allData5DaysForecast); // পার্সিং সফল হলে পরীক্ষা করুন। যদি (! root.success ()) {//Serial.println(" পার্সিং আবহাওয়ার জন্য 5 দিনের পূর্বাভাস… ভুল! "); প্রত্যাবর্তন; } int i = 1; JsonArray & list = root ["list"]; (JsonObject & currentObject: list) {if (i <3) {JsonObject & main = currentObject ["main"]; ভাসমান তাপমাত্রা = প্রধান ["টেম্প"]; আর্দ্রতা = প্রধান ["আর্দ্রতা"]; JsonObject & weather = currentObject ["weather"] [0]; const char* weatherInfo = weather ["main"]; float windSpeed = currentObject ["wind"] ["speed"]; const char* timestamp = currentObject ["dt_txt"]; int tempFah = convertToFahrenheit (তাপমাত্রা); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = updateleftRight (windSpeed); leftRightSpeed = servoIncrement; তাপমাত্রা অ্যারে = tempFah; আর্দ্রতা অ্যারে = আর্দ্রতা; weatherArray = weatherInfo; windSpeedArray = windSpeed; টাইমস্ট্যাম্পআরে = টাইমস্ট্যাম্প; আমি ++; } অন্যথায় {বিরতি; }}}

void gotCurrentWeatherData (const char *event, const char *data)

{DynamicJsonBuffer jsonBufferWeather (bufferSizeCurrent); JsonObject & root = jsonBufferWeather.parseObject (ডেটা); // সিরিয়াল.প্রিন্টলন (ডেটা); // পার্সিং সফল হলে পরীক্ষা করুন। যদি (! root.success ()) {//Serial.println("বর্তমান আবহাওয়ার জন্য পার্সিং … ত্রুটি!"); প্রত্যাবর্তন; } JsonObject & weather = root ["weather"] [0]; const char* weather_main = weather ["main"]; JsonObject & main = root ["main"]; float main_temp = main ["temp"]; int main_humidity = প্রধান ["আর্দ্রতা"]; float wind_speed = root ["wind"] ["speed"]; const char* timestamp = root ["dt_txt"]; int tempFah = convertToFahrenheit (main_temp); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updateleftRight (wind_speed); leftRightSpeed [0] = servoIncrement; weatherArray [0] = weather_main; তাপমাত্রা অ্যারে [0] = tempFah; আর্দ্রতা অ্যারে [0] = প্রধান_ আর্দ্রতা; windSpeedArray [0] = wind_speed; টাইমস্ট্যাম্পআরে [0] = টাইমস্ট্যাম্প; }

int updateUpDown (float temp) {

// ডিগ্রির মান [0, 180] ফ্লোট servoMaxDegree = temp * 45/31 + (990/31); Serial.print ("নতুন servo ডিগ্রী:"); Serial.println (servoMaxDegree); ফিরতি servoMaxDegree; }

int updateleftRight (float windSpeed) {

// বাতাসের গতি [1, 100] ভাসমান servoIncrement = windSpeed * 99/26 + 1; Serial.print ("নতুন servo বৃদ্ধি মান:"); Serial.println (servoIncrement); servoIncrement ফেরত; }

int convertToFahrenheit (float tempKel) {

int tempFah = tempKel * 9.0 / 5.0 - 459.67; ফিরে tempFah; }

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

ধাপ 10: আপনার ড্রাগন উপভোগ করুন

অভিনন্দন! আপনি শুরু থেকেই একটি সাইন-এস ড্রাগন তৈরি করেছেন! এখন আপনাকে যা করতে হবে তা হল ফিরে বসে আপনার পরিবেষ্টিত প্রদর্শন উপভোগ করা!

দ্রষ্টব্য: এই প্রকল্পটি জোয়ান বেমপং এবং সৌন্দর্য মুথুভেলের একটি কোর্সওয়ার্কের অংশ হিসাবে নির্মিত হয়েছিল। কোর্সের পাতা পাওয়া যাবে এখানে।

প্রস্তাবিত: