সুচিপত্র:

Attiny85 সঙ্গে মিনি আবহাওয়া স্টেশন: 6 ধাপ (ছবি সহ)
Attiny85 সঙ্গে মিনি আবহাওয়া স্টেশন: 6 ধাপ (ছবি সহ)

ভিডিও: Attiny85 সঙ্গে মিনি আবহাওয়া স্টেশন: 6 ধাপ (ছবি সহ)

ভিডিও: Attiny85 সঙ্গে মিনি আবহাওয়া স্টেশন: 6 ধাপ (ছবি সহ)
ভিডিও: How to program ATtiny 13/13A Microcontroller using Arduino 2024, জুলাই
Anonim
Attiny85 সহ মিনি ওয়েদার স্টেশন
Attiny85 সহ মিনি ওয়েদার স্টেশন
Attiny85 সহ মিনি ওয়েদার স্টেশন
Attiny85 সহ মিনি ওয়েদার স্টেশন
Attiny85 সহ মিনি ওয়েদার স্টেশন
Attiny85 সহ মিনি ওয়েদার স্টেশন

একটি সাম্প্রতিক নির্দেশে Indigod0g একটি মিনি ওয়েদার স্টেশন বর্ণনা করেছে যা দুটি Arduinos ব্যবহার করে বেশ ভাল কাজ করে। হয়তো সবাই আর্দ্রতা এবং তাপমাত্রা রিডিং পেতে 2 টি Arduinos উৎসর্গ করতে চায় না এবং আমি মন্তব্য করেছি যে দুটি Attiny85 এর সাথে অনুরূপ ফাংশন করা সম্ভব হওয়া উচিত। আমি মনে করি কথা বলা সহজ, তাই আমি আমার টাকা যেখানে আমার মুখ আছে সেখানে রাখি।

আসলে, যদি আমি দুটি পূর্বের নির্দেশাবলী একত্রিত করি তবে আমি লিখেছিলাম:

Arduino বা Attiny- এর জন্য 2-Wire LCD ইন্টারফেস এবং Attiny85 (Arduino IDE 1.06) এর মধ্যে ডেটা গ্রহণ এবং প্রেরণ করা হলে অধিকাংশ কাজ ইতিমধ্যেই সম্পন্ন হয়েছে। শুধু সফটওয়্যারটিকে একটু মানিয়ে নিতে হবে।

আমি একটি I2C LCD এর পরিবর্তে একটি শিফট রেজিস্টারের সাথে দুটি তারের এলসিডি সমাধানের জন্য বেছে নিয়েছি কারণ অ্যাট্টিনিতে শিফট রেজিস্টারটি I2C বাসের চেয়ে বাস্তবায়ন করা সহজ। যাইহোক … যদি আপনি উদাহরণস্বরূপ একটি BMP180 বা BMP085 প্রেসার সেন্সর পড়তে চান, তাহলে আপনার যেভাবেই হোক I2C প্রয়োজন যাতে আপনি I2C LCD ব্যবহার করতে পারেন। TinyWireM একটি Attiny তে I2C এর জন্য একটি ভাল লাইব্রেরি (কিন্তু এর জন্য অতিরিক্ত জায়গা প্রয়োজন)।

BOM ট্রান্সমিটার: DHT11 Attiny85 10 k প্রতিরোধক 433MHz ট্রান্সমিটার মডিউল

রিসিভার Attiny85 10k প্রতিরোধক 433 MHz রিসিভার মডিউল

ডিসপ্লে 74LS164 শিফট রেজিস্টার 1N4148 ডায়োড 2x1k রোধ 1x1k ভেরিয়েবল রেজিস্টার একটি LCD ডিসপ্লে 2x16

ধাপ 1: Attiny85 সহ মিনি ওয়েদার স্টেশন: ট্রান্সমিটার

Attiny85 সহ মিনি ওয়েদার স্টেশন: ট্রান্সমিটার
Attiny85 সহ মিনি ওয়েদার স্টেশন: ট্রান্সমিটার
Attiny85 সহ মিনি ওয়েদার স্টেশন: ট্রান্সমিটার
Attiny85 সহ মিনি ওয়েদার স্টেশন: ট্রান্সমিটার
Attiny85 সহ মিনি ওয়েদার স্টেশন: ট্রান্সমিটার
Attiny85 সহ মিনি ওয়েদার স্টেশন: ট্রান্সমিটার
Attiny85 সহ মিনি ওয়েদার স্টেশন: ট্রান্সমিটার
Attiny85 সহ মিনি ওয়েদার স্টেশন: ট্রান্সমিটার

ট্রান্সমিটারটি রিসেট লাইনে একটি পুল আপ রেজিস্টার সহ Attiny85 এর একটি খুব মৌলিক কনফিগারেশন।একটি ট্রান্সমিটার মডিউল ডিজিটাল পিন '0' এবং DHT11 ডেটা পিন ডিজিটাল পিন 4 এর সাথে সংযুক্ত থাকে। (অনেক ভালো অ্যান্টেনার জন্য ধাপ 5 দেখুন) সফটওয়্যারটি নিম্নরূপ:

// Attiny // RF433 = D0 pin 5 এ কাজ করবে

// DHT11 = D4 পিন 3 // লাইব্রেরি #অন্তর্ভুক্ত // রব Tillaart থেকে #অন্তর্ভুক্ত dht DHT11; #DHT11PIN 4 নির্ধারণ করুন #TX_PIN 0 // পিন সংজ্ঞায়িত করুন যেখানে আপনার ট্রান্সমিটার সংযুক্ত আছে // ভেরিয়েবল ফ্লোট h = 0; ভাসা t = 0; int transmit_t = 0; int transmit_h = 0; int transmit_data = 0; অকার্যকর সেটআপ () {পিনমোড (1, ইনপুট); man.setupTransmit (TX_PIN, MAN_1200); } অকার্যকর লুপ () {int chk = DHT11.read11 (DHT11PIN); h = DHT11. আর্দ্রতা; t = DHT11. তাপমাত্রা; // আমি জানি, আমি এখানে 3 টি পূর্ণসংখ্যা ভেরিয়েবল ব্যবহার করছি // যেখানে আমি 1 ব্যবহার করতে পারি // কিন্তু এটি ঠিক তাই transmit_h = 100* (int) h অনুসরণ করা সহজ; transmit_t = (int) t; transmit_data = transmit_h+transmit_t; man.transmit (transmit_data); বিলম্ব (500); }

সফটওয়্যারটি ডেটা পাঠানোর জন্য ম্যানচেস্টার কোড ব্যবহার করে। এটি DHT11 পড়ে এবং তাপমাত্রা এবং আর্দ্রতা 2 টি পৃথক ফ্লোটে সংরক্ষণ করে। যেহেতু ম্যানচেস্টার কোড ভাসমান পাঠায় না, কিন্তু একটি পূর্ণসংখ্যা, আমার কাছে বেশ কয়েকটি বিকল্প রয়েছে: 1- ভাসমানগুলিকে দুটি পূর্ণসংখ্যায় বিভক্ত করুন এবং সেগুলি পাঠান 2- প্রতিটি ভাসা একটি পূর্ণসংখ্যা হিসাবে পাঠান 3- দুটি ভাসমানকে একটি পূর্ণসংখ্যা হিসাবে পাঠান 1 বিকল্পের সাথে আমাকে একত্রিত করতে হবে পূর্ণসংখ্যা পুনরায় রিসিভারে ভাসতে থাকে এবং আমাকে চিহ্নিত করতে হবে কোন পূর্ণসংখ্যা কি, কোডটি দীর্ঘ ঘূর্ণায়মান করে বিকল্প 2 এর সাথে আমাকে এখনও সনাক্ত করতে হবে কোন পূর্ণসংখ্যা আর্দ্রতার জন্য এবং কোনটি তাপমাত্রার জন্য। যদি একটি পূর্ণসংখ্যা সংক্রমণে হারিয়ে যায় তবে আমি একা ক্রম অনুসারে যেতে পারি না, তাই আমাকে পূর্ণসংখ্যার সাথে সংযুক্ত একটি শনাক্তকারী পাঠাতে হবে 3 বিকল্পের সাথে, আমি কেবল একটি পূর্ণসংখ্যা পাঠাতে পারি। স্পষ্টতই এটি রিডিংগুলিকে কিছুটা কম নির্ভুল করে তোলে - 1 ডিগ্রির মধ্যে- এবং কেউ শূন্য তাপমাত্রার নিচে পাঠাতে পারে না, তবে এটি কেবল একটি সহজ কোড এবং এর চারপাশে উপায় রয়েছে। আপাতত এটা শুধু নীতির কথা।তাই আমি যা করি তা হল আমি ফ্লোটগুলিকে পূর্ণসংখ্যায় পরিণত করি এবং আর্দ্রতাকে 100 দিয়ে গুণ করি। তারপর আমি গুণিত আর্দ্রতার সাথে তাপমাত্রা যোগ করি। সর্বোচ্চ নম্বরটি আমি 9900 পাবো। এই সত্য যে, তাপমাত্রাও 100 ডিগ্রির উপরে থাকবে না, সর্বোচ্চ সংখ্যা 99 হবে, তাই সর্বোচ্চ নম্বরটি আমি পাঠাব 9999 এবং এটি রিসিভারের পাশে আলাদা করা সহজ। আমার গণনা যেখানে আমি 3 টি পূর্ণসংখ্যা ব্যবহার করি তা অতিমাত্রায় হয় কারণ এটি সহজেই 1 ভেরিয়েবল দিয়ে করা যেতে পারে। আমি শুধু কোডটি অনুসরণ করা সহজ করতে চেয়েছিলাম কোড এখন এইভাবে কম্পাইল করে:

বাইনারি স্কেচ সাইজ: 2, 836 বাইট (সর্বোচ্চ 8, 192 বাইটের) যাতে একটি Attiny 45 বা 85 এর মধ্যে মানানসই dht.h লাইব্রেরি ব্যবহার করি যা রব টিলার্টের একটি। সেই লাইব্রেরিটি একটি DHT22 এর জন্যও উপযুক্ত। আমি 1.08 সংস্করণ ব্যবহার করছি। যাইহোক Attiny85 লাইব্রেরির নিম্ন সংস্করণ সহ DHT22 পড়তে সমস্যা হতে পারে। এটি আমার কাছে নিশ্চিত হয়েছে যে 1.08 এবং 1.14 - যদিও নিয়মিত Arduino তে কাজ করছে - Attiny85 এ DHT22 পড়তে সমস্যা হচ্ছে। আপনি যদি Attiny85 এ DHT22 ব্যবহার করতে চান, তাহলে এই লাইব্রেরির 1.20 সংস্করণ ব্যবহার করুন। এটা সব সময় সঙ্গে করতে হবে। লাইব্রেরির 1.20 সংস্করণটি একটি দ্রুত পঠনযোগ্য। (সেই ব্যবহারকারীর অভিজ্ঞতার জন্য ধন্যবাদ জেরোইন)

ধাপ 2: Attiny85 সহ মিনি ওয়েদার স্টেশন: রিসিভার

Attiny85 সহ মিনি ওয়েদার স্টেশন: রিসিভার
Attiny85 সহ মিনি ওয়েদার স্টেশন: রিসিভার

আবার Attiny85 একটি মৌলিক কনফিগারেশনে ব্যবহার করা হয় যার সাথে রিসেট পিনটি 10 k রোধক দিয়ে উঁচুতে টানা হয়। রিসিভার মডিউল ডিজিটাল পিন 1 (চিপে পিন 6) এর সাথে সংযুক্ত। এলসিডি ডিজিটাল পিন 0 এবং দুই এর সাথে সংযুক্ত। অ্যান্টেনা হিসাবে 17.2 সেমি একটি তার সংযুক্ত করুন। কোডটি নিম্নরূপ:

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

#অন্তর্ভুক্ত তরল ক্রিস্টাল_এসআর এলসিডি (0, 2, TWO_WIRE); #ডিফাইন RX_PIN 1 // = শারীরিক পিন 6 অকার্যকর সেটআপ () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } অকার্যকর লুপ () {যদি (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("আর্দ্র:"); lcd.print (m/100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m%100); }}

কোডটি মোটামুটি সহজ: প্রেরিত পূর্ণসংখ্যা ভেরিয়েবল 'মি' -তে প্রাপ্ত এবং সংরক্ষণ করা হয়। এটি আর্দ্রতা দিতে 100 দিয়ে বিভক্ত এবং 100 এর মডুলো তাপমাত্রা দেয়। সুতরাং ধরুন প্রাপ্ত পূর্ণসংখ্যা ছিল 33253325/100 = 333325 % 100 = 25 এই কোডটি 3380 বাইট হিসাবে সংকলিত হয় এবং সেইজন্য শুধুমাত্র একটি attiny85 দিয়ে ব্যবহার করা যায়, 45 এর সাথে নয়

ধাপ 3: Attiny85/45 সহ মিনি ওয়েদার স্টেশন: ডিসপ্লে

Attiny85/45 সহ মিনি ওয়েদার স্টেশন: ডিসপ্লে
Attiny85/45 সহ মিনি ওয়েদার স্টেশন: ডিসপ্লে
Attiny85/45 সহ মিনি ওয়েদার স্টেশন: ডিসপ্লে
Attiny85/45 সহ মিনি ওয়েদার স্টেশন: ডিসপ্লে

ডিসপ্লের জন্য এটা সবচেয়ে ভালো যে আমি একটি দুই তারের ডিসপ্লেতে আমার নির্দেশাবলী উল্লেখ করি। সম্ভব, কিন্তু তারপর আপনি Attiny একটি I2C প্রোটোকল বাস্তবায়ন করতে হবে। Tinywire প্রোটোকল এটি করতে পারে। যদিও কিছু সূত্র বলছে যে এটি 1 মেগাহার্টজ ঘড়ি আশা করে, 8 মেগাহার্টজে এটি ব্যবহার করতে আমার কোন সমস্যা হয়নি (অন্য প্রকল্পে) যাই হোক না কেন আমি এখানে বিরক্ত হইনি এবং একটি শিফট রেজিস্টার ব্যবহার করেছি।

ধাপ 4: Attiny85/45 সহ মিনি ওয়েদার স্টেশন: সম্ভাবনা/উপসংহার

Attiny85/45 সহ মিনি ওয়েদার স্টেশন: সম্ভাবনা/সিদ্ধান্ত
Attiny85/45 সহ মিনি ওয়েদার স্টেশন: সম্ভাবনা/সিদ্ধান্ত
Attiny85/45 সহ মিনি ওয়েদার স্টেশন: সম্ভাবনা/সিদ্ধান্ত
Attiny85/45 সহ মিনি ওয়েদার স্টেশন: সম্ভাবনা/সিদ্ধান্ত
Attiny85/45 সহ মিনি ওয়েদার স্টেশন: সম্ভাবনা/সিদ্ধান্ত
Attiny85/45 সহ মিনি ওয়েদার স্টেশন: সম্ভাবনা/সিদ্ধান্ত

যেমনটি বলা হয়েছে, আমি এই নির্দেশনাটি দেখিয়েছি যে কেউ দুটি attiny85 (এমনকি একটি attiny85+ 1 attiny45 সহ) একটি মিনি ওয়েদার স্টেশন তৈরি করতে পারে। এটি শুধুমাত্র আর্দ্রতা এবং তাপমাত্রা পাঠায়, একটি DHT11 ব্যবহার করে।, 6 এমনকি কিছু ছলচাতুরি দিয়ে। অতএব আরো সেন্সর থেকে ডেটা পাঠানো সম্ভব।আমার প্রজেক্টে- যেমন স্ট্রিপবোর্ডে এবং একটি পেশাদারী PCB (OSHPark) এর ছবিতে দেখা যায়- আমি একটি DHT11 থেকে তথ্য পাঠাই/গ্রহণ করি, একটি LDR থেকে এবং একটি PIR থেকে, সব ব্যবহার করে দুটি attiny85 এর রিসিভার হিসাবে একটি attiny85 ব্যবহার করার সীমাবদ্ধতা যদিও একটি চটকদার শৈলীতে তথ্য উপস্থাপনা। যেহেতু মেমরি সীমিত: 'তাপমাত্রা, আর্দ্রতা, হালকা স্তর, বিষয় নিকটবর্তী' মত টেক্সট মূল্যবান মেমরি স্থানটি খুব দ্রুত পূরণ করবে। তবুও, তাপমাত্রা এবং আর্দ্রতা প্রেরণ/গ্রহণের জন্য দুটি Arduino ব্যবহার করার কোন কারণ নেই। অতিরিক্ত, এটি সম্ভব ট্রান্সমিটারকে ঘুমাতে যেতে হবে এবং প্রতি 10 মিনিটে ডাটা পাঠানোর জন্য এটি জেগে উঠবে এবং এইভাবে এটি একটি বোতাম সেল থেকে খাওয়ানো যাবে। পাশাপাশি মাটির আর্দ্রতা রিডিং, অথবা একটি অ্যানিমোমিটার বা একটি বৃষ্টি মিটার যোগ করুন

ধাপ 5: মিনি ওয়েদার স্টেশন: অ্যান্টেনা

মিনি ওয়েদার স্টেশন: অ্যান্টেনা
মিনি ওয়েদার স্টেশন: অ্যান্টেনা

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

ধাপ 6: একটি BMP180 যোগ করা

একটি BMP180 যোগ করা হচ্ছে
একটি BMP180 যোগ করা হচ্ছে

BMP180 এর মত ব্যারোমেট্রিক প্রেসার সেন্সর যোগ করতে চান? আমার অন্যান্য নির্দেশাবলী পরীক্ষা করুন।

প্রস্তাবিত: