সুচিপত্র:

ডোরমেট সহ ট্রাফিক রিপোর্ট চেক (NL): 6 টি ধাপ
ডোরমেট সহ ট্রাফিক রিপোর্ট চেক (NL): 6 টি ধাপ

ভিডিও: ডোরমেট সহ ট্রাফিক রিপোর্ট চেক (NL): 6 টি ধাপ

ভিডিও: ডোরমেট সহ ট্রাফিক রিপোর্ট চেক (NL): 6 টি ধাপ
ভিডিও: DIY Jute Door Mat Handmade|| Make at home it's easy|| #Jute DIY,Rug 2024, জুলাই
Anonim
ডোরমেট সহ ট্রাফিক রিপোর্ট চেক (এনএল)
ডোরমেট সহ ট্রাফিক রিপোর্ট চেক (এনএল)

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

আমি একটি NodeMCU 1.0 (ESP0-12E মডিউল) এ কাজ করব। এই প্রকল্পের কোড অন্যান্য ডিভাইসেও কাজ করতে পারে (উদা Ar Arduino বোর্ড)। এই প্রকল্পটি ট্রাফিক প্রতিবেদনের জন্য একটি ডাচ উৎসের উপর ভিত্তি করে, ANWB।

এই প্রকল্পের জন্য আমাদের যা প্রয়োজন:

- নোড এমসিইউ - জাম্পার তার - এলইডি লাইট বা স্ট্রিপ - এনালগ সেন্সর (অ্যালুমিনিয়াম ফয়েল, স্পঞ্জ) - ওয়াই -ফাই সংযোগ - ডোরমেট

আমাদের যা পদক্ষেপ নিতে হবে:

1. NodeMCu কে ওয়াই-ফাইতে সংযুক্ত করুন 2. ANWB.nl থেকে HTTPS এর মাধ্যমে ডেটা অনুরোধ করুন 3. ব্যবহারযোগ্য তথ্যে ডেটা চালু করুন 4. ট্রিগার ইনস্টল করুন 5. প্রতিক্রিয়া ডিজাইন করুন

ধাপ 1: NodeMCU কে Wi-Fi এর সাথে সংযুক্ত করুন

এই ধাপটি দেখাবে কিভাবে ডিভাইসটি ইন্টারনেটের সাথে সংযুক্ত আছে তা দেখতে একটি সফল HTTPSRequest করতে হবে।

প্রথমে, Arduino IDE এ ESP8266 লাইব্রেরি ইনস্টল করুন ESP8266> HTTPSRequest উদাহরণ থেকে খুলুন।

আপনার কোডের উপরে আপনার Wi-Fi শংসাপত্রগুলি পূরণ করুন, যেমনটি নীচে দেখানো হয়েছে:

const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASS";

আপনার ডিভাইসে কোড আপলোড করুন এবং NodeMCU ইন্টারনেটে সংযোগ করছে কিনা তা পরীক্ষা করুন। HTTPSRequest উদাহরণ Github ব্যবহার করে তার ডিফল্ট হিসাবে তথ্য পেতে। যখন HTTPSRequest সফল হয়, আপনি সিরিয়াল মনিটরে Github ডেটা পান।

পদক্ষেপ 2: ANWB.nl থেকে HTTPS থেকে ডেটা অনুরোধ করুন

এই দ্বিতীয় ধাপে, আপনি ডেটা উৎসকে ডিফল্ট থেকে এই প্রকল্পের জন্য প্রয়োজনীয় উৎসে পরিবর্তন করুন: ANWB.nl.

আপনার কোডের শীর্ষে, char* host পরিবর্তন করুন www.anwb.nl (অথবা অন্য কোন উৎস থেকে আপনি আপনার ডেটা পেতে চান):

const char* host = "www.anwb.nl";!! আপনি যদি অন্য উৎস ব্যবহার করেন, ধাপ 3 আমার কোড থেকে আলাদা হবে। ব্যবহারযোগ্য তথ্য পুনরুদ্ধারের জন্য ধাপ 3 এর নির্দিষ্ট কোডিং প্রয়োজন!

পরবর্তী, ফাংশন সেটআপের স্ট্রিং url পরিবর্তন করুন "/feeds/gethf", যে পথ থেকে তথ্য নেওয়া হয়েছে:

স্ট্রিং url = "/feeds/gethf";!! আপনি যদি অন্য উৎস ব্যবহার করেন তাহলে আপনার উৎসের পথ ব্যবহার করুন!

যখন আপনি কোড আপলোড করবেন তখন আপনাকে www.anwb.nl/feeds/gethf থেকে সমস্ত ডেটা সহ একটি প্রতিক্রিয়া পেতে হবে। এই কোডটি লাইন নামক একটি স্ট্রিং এ সংরক্ষিত হয়।

ধাপ 3: ব্যবহারযোগ্য তথ্যে ডেটা চালু করুন

এখন পর্যন্ত, কোডটি কেবল তখনই চলত যখন নোডএমসিইউ শুরু হয়েছিল বা পুনরায় সেট করা হয়েছিল, কারণ সমস্ত কোড সেটআপ ফাংশনে রয়েছে। কোডটি ক্রমাগত চালানোর জন্য ট্রিগার সেট করতে, আপনাকে সেই কোডের অবস্থান পরিবর্তন করতে হবে যা HTTPS অনুরোধ চালায়। লুপ ফাংশন নীচে, আপনি অন্য ফাংশন যোগ করুন। আমি এটা অকার্যকর extractData বলা হয়েছে:

extractData () {

}

সেটআপ ফাংশন থেকে কোডের অংশটি extractData () এ কপি করুন। সেটআপ ফাংশন শেষ না হওয়া পর্যন্ত নিম্নলিখিত লাইন দিয়ে শুরু করুন:

if (! client.connect (host, কোডটি এখন আপনার নতুন ফাংশনে রয়েছে, তাই সেটআপ ফাংশন থেকে কপি করা কোডটি সরান।

এরপরে, লুপ ফাংশনে extractData ফাংশনটি কল করুন এবং নোড এমসিইউকে বিশ্রামের সময় দিতে কিছু বিলম্ব যোগ করুন:

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

extractData (); বিলম্ব (30000); // এটি পরে সরানো হবে যখন আমাদের একটি এনালগ সেন্সর থাকবে}

যেহেতু আপনার প্রাপ্ত ডেটা একটি স্ট্রিং -এ সংরক্ষিত থাকে এবং এই স্ট্রিং -এর শুধুমাত্র কিছু অংশ প্রয়োজন হয়, তাই আপনাকে লুপের জন্য কয়েকটি লিখতে হবে।

প্রথমে 'সড়ক' শব্দের সমস্ত অবস্থান পরীক্ষা করুন। 'সড়ক' শব্দের পরে, রাস্তার নাম অনুসরণ করা হবে (A1, A2, ইত্যাদি)।

লুপের জন্য লেখা শুরু করার আগে, আপনাকে কিছু ভেরিয়েবল ঘোষণা করতে হবে যা আপনি ব্যবহার করতে যাচ্ছেন:

int noOfPos = 0;

বুলিয়ান hasRunOnce = মিথ্যা; = 0 থেকে int; int roadArray [20];

এখন সময় এসেছে কিছু লুপ লেখার। আমি extractData ফাংশনের নীচে লুপের জন্য লিখেছি। আমি এটিকে আলাদা ফাংশনে বিভক্ত করার চেষ্টা করেছি, কিন্তু আমি এটি কাজ করতে পারিনি।

লুপ নং 1 এর জন্য: স্ট্রিং লাইনে রোড শব্দটির অবস্থান খুঁজুন:

জন্য (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos+= 1; + 1; যদি (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = সত্য; }

এরপরে, উপর থেকে লুপের অবস্থানগুলি ব্যবহার করে কোন রাস্তায় যানজট আছে তা পরীক্ষা করুন। রাস্তার নামের অবস্থান সবসময় একই থাকে এবং 7 অক্ষর শুরু করে এবং 10 শব্দের পরে শেষ করে।

এখন আমরা অ্যারের নাম সংজ্ঞায়িত করি OffRoadArray, যা পরবর্তী লুপের জন্য পূরণ করা হবে:

স্ট্রিং nameOfRoadArray [20];

লুপ নং 2 এর জন্য: লুপ নং থেকে ইনপুট সহ রাস্তার সমস্ত নাম খুঁজুন। ঘ

জন্য (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }

অ্যারের নাম OfRoudArray সিগন্যাল করা সমস্ত ট্রাফিক জ্যামে ভরাট করা উচিত।

পরবর্তী, আপনি যাচাই করতে যাচ্ছেন যে আপনার রাস্তাটি ট্র্যাফিক জ্যাম সহ রাস্তার সারিতে আছে কিনা। ডেটাতে রাস্তা পেতে নাম ওফরোডআরে প্রিন্ট করুন। Serial.println (nameOfRoadArray [k]) যোগ করে এটি করুন; দ্বিতীয়টিতে লুপের জন্য:

জন্য (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }

যদি এটি ঠিক হয় তবে আপনি সিরিয়াল মনিটরে ট্রাফিক জ্যাম সহ সমস্ত রাস্তা দেখতে পাবেন।

শেষের জন্য লুপ লেখার আগে, আপনাকে একটি বুলিয়ানকে বৈশ্বিক পরিবর্তনশীল হিসাবে ঘোষণা করতে হবে। ট্রাফিকজাম নামক বুলিয়ান ডিফল্টভাবে মিথ্যা এবং ফাংশন extractData ট্র্যাফিক জ্যামের জন্য সত্য হয়ে গেলে পরিবর্তন হবে। নিম্নলিখিত কোডটি.ino ফাইলের উপরে যায়:

বুলিয়ান ট্র্যাফিকজাম = মিথ্যা;

লুপ নং 3 এর জন্য: রাস্তা, এই ক্ষেত্রে A1, ট্র্যাফিক জ্যামের তালিকায় আছে কিনা তা পরীক্ষা করুন।

জন্য (int l = 0; l <20; l ++) {যদি (nameOfRoadArray [l] == "A1 \" ") {// আপনার অনুকূল রাস্তায় A1 পরিবর্তন করুন ট্র্যাফিকজাম = সত্য;}

আপনি যদি সিরিয়াল মনিটরে ট্রাফিকজাম প্রিন্ট করেন, আপনি জানেন A1 তে ট্রাফিক জ্যাম আছে কি না।

ExtractData ফাংশনের নীচে এই কোডটি রাখুন:

Serial.println (trafficJam); // যানজট আছে কিনা দেখুন

এই তথ্যের সাথে আমরা ধাপ 5 এ সিস্টেমের প্রতিক্রিয়া সম্পর্কে আরও কাজ করতে যাচ্ছি।

ধাপ 4: ট্রিগার ইনস্টল করুন

ট্রিগার ইনস্টল করুন
ট্রিগার ইনস্টল করুন
ট্রিগার ইনস্টল করুন
ট্রিগার ইনস্টল করুন
ট্রিগার ইনস্টল করুন
ট্রিগার ইনস্টল করুন

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

এনালগ সেন্সর তৈরি করা

আমি 2 টুকরা অ্যালুমিনিয়াম ফয়েল, দুটি জাম্পার তার এবং একটি স্পঞ্জ ব্যবহার করেছি।

স্পঞ্জের মধ্যে একটি গর্ত ড্রিল করুন, এটি সেই জায়গা যেখানে অ্যালুমিনিয়াম ফয়েল যোগাযোগ করবে। স্পঞ্জের দুই পাশে আঠালো অ্যালুমিনিয়াম ফয়েল। অ্যালুমিনিয়াম ফয়েলের সাথে জাম্পার তারগুলি সংযুক্ত করুন। জাম্পার তারগুলিকে নোড এমসিইউতে সংযুক্ত করুন। একপাশে A0- পিন এবং অন্যটি V3- পিনের দিকে। স্পঞ্জটি আপনার ডোরমেটের নিচে রাখুন এবং আপনি সবেমাত্র আপনার ডোরমেটটিকে সেন্সরে পরিবর্তন করেছেন। অসাধারণ!

সেন্সর থেকে মান পড়ার কোডটি দেখতে যে কেউ দরজায় দাঁড়িয়ে আছে কিনা:

int sensorValue = analogRead (A0);

যদি (sensorValue == 1024) {extractData (); }

যখন অ্যালুমিনিয়াম ফয়েল যোগাযোগ করে (যখন কেউ মাদুরের উপর দাঁড়িয়ে থাকে), সেন্সরভ্যালু 1024। এর ফলে এক্সট্রাক্টডাটা () ফায়ারিং হয়। এবং ঠিক সেটাই আমরা সিস্টেম করতে চাই।

ধাপ 5: ডিজাইন প্রতিক্রিয়া

আমি ব্যবহারকারীকে মতামত দিতে একটি LEDstrip ব্যবহার করেছি। যখন ট্রাফিক জ্যাম থাকে, তখন আলো লাল রঙ করবে। রাস্তা যখন যেতে ভালো হবে, তখন সবুজ হয়ে যাবে। আমি আমার LEDstrip নিয়ন্ত্রণ করতে adafruit neopixel লাইব্রেরি ব্যবহার করেছি।

LEDstrip সংজ্ঞায়িত করা হয়েছে তা নিশ্চিত করতে আপনার ফাইলের উপরে এই কোডটি লিখুন:

#অন্তর্ভুক্ত

#ডিফাইন PIXEL_PIN D5 #ডিফাইন PIXEL_COUNT 10 #PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel পিক্সেল = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_PIN;

সেটআপ ফাংশনে পরবর্তী কোড লিখুন:

// নিওপিক্সেল

পিক্সেল শুরু (); পিক্সেল শো ();

এবং লুপ ফাংশনে নিম্নলিখিত কোড:

যদি (trafficJam == true) {

জন্য (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // লাল পিক্সেল।শো (); বিলম্ব (200); }} অন্য {জন্য (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // সবুজ পিক্সেল শো (); বিলম্ব (200); }

উপরের কোডে একটি if/else ফাংশন আছে। যখন ফাংশন extractData একটি ট্রাফিক জ্যাম উপস্থিতি ফেরত LEDstrip লাল হয়ে যাবে। যদি না হয়, LEDstrip সবুজ হয়ে যাবে।

ধাপ 6: কোডটি চালান

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

একটি নিরাপদ যাত্রা এবং পড়ার জন্য ধন্যবাদ। আমি আশা করি আপনি কিছু অনুপ্রেরণা বা তথ্য পেয়েছেন। আপনি যদি কিছু মতামত পান, তাহলে নির্দ্বিধায় সাড়া দিন!

প্রস্তাবিত: