সুচিপত্র:

এলসিডি নোকিয়া 5110: 4 ধাপে প্রদর্শন সহ তাপমাত্রা এবং হালকা স্তরের মনিটর
এলসিডি নোকিয়া 5110: 4 ধাপে প্রদর্শন সহ তাপমাত্রা এবং হালকা স্তরের মনিটর

ভিডিও: এলসিডি নোকিয়া 5110: 4 ধাপে প্রদর্শন সহ তাপমাত্রা এবং হালকা স্তরের মনিটর

ভিডিও: এলসিডি নোকিয়া 5110: 4 ধাপে প্রদর্শন সহ তাপমাত্রা এবং হালকা স্তরের মনিটর
ভিডিও: LCD Nokia 5110 #ardublock #arduino #aliexpress 2024, জুলাই
Anonim
Image
Image

সবাইকে অভিবাদন!

এই বিভাগে আমরা তাপমাত্রা এবং আলোর স্তর পর্যবেক্ষণ করার জন্য সহজ ইলেকট্রনিক ডিভাইস তৈরি করি। এই পরামিতিগুলির পরিমাপ LCD NOKIA 5110 এ প্রদর্শিত হয়। ডিভাইসটি মাইক্রোকন্ট্রোলার AVR ATMEGA328P এর উপর ভিত্তি করে তৈরি। মনিটরিং ডিভাইসটি DS18B20 ডিজিটাল থার্মোমিটার এবং আলোক স্তর পরিমাপের জন্য ফটোরিসিস্টর দিয়ে সজ্জিত।

ধাপ 1: বিবরণ উপাদান

বর্ণনা উপাদান
বর্ণনা উপাদান
বর্ণনা উপাদান
বর্ণনা উপাদান

মনিটরিং ডিভাইসের মৌলিক উপাদান:

  • মাইক্রোকন্ট্রোলার AVR (ATMEGA328P)
  • একরঙা গ্রাফিক LCD (NOKIA 5110)
  • প্রোগ্রামযোগ্য রেজোলিউশন 1-ওয়্যার ডিজিটাল থার্মোমিটার (DS18B20)
  • হালকা নির্ভর প্রতিরোধক
  • তারের

মাইক্রোকন্ট্রোলার AVR (ATMEGA328P)

মনিটরিং ডিভাইস মাইক্রোকন্ট্রোলারের নিম্নলিখিত পেরিফেরাল বৈশিষ্ট্যগুলি ব্যবহার করে:

  1. 16-বিট টাইমার/কাউন্টার বিরতি
  2. 8-চ্যানেল 10-বিট এডিসি
  3. মাস্টার/স্লেভ SPI সিরিয়াল ইন্টারফেস

একরঙা গ্রাফিক LCD (NOKIA 5110)

বিশেষ উল্লেখ:

  1. 48 x 84 ডট এলসিডি ডিসপ্লে
  2. সর্বাধিক উচ্চ গতির 4 Mbits/S সহ সিরিয়াল বাস ইন্টারফেস
  3. অভ্যন্তরীণ নিয়ামক/ড্রাইভার (PCD8544)
  4. LED ব্যাক-লাইট
  5. ভোল্টেজ 2.7-5 ভোল্টে চালান
  6. কম শক্তি খরচ; এটি ব্যাটারি অ্যাপ্লিকেশনের জন্য উপযুক্ত
  7. তাপমাত্রা -25˚C থেকে +70˚C পর্যন্ত
  8. সিগন্যাল সিএমওএস ইনপুট সমর্থন করুন

এলসিডি ঠিকানা পরিচালনা (ঠিকানা):

এলসিডি ডিসপ্লে (DDRAM) এ দেখানো মেমরির ঠিকানা ব্যবস্থা হল ম্যাট্রিক্স যা Y- ঠিকানা 0 থেকে Y- ঠিকানা 5 এবং X- ঠিকানা 0 থেকে X- পর্যন্ত 84 টি কলাম (X ঠিকানা) থেকে 6 সারি (Y ঠিকানা) নিয়ে গঠিত। ঠিকানা 83. যদি ব্যবহারকারী এলসিডি ডিসপ্লেতে ফলাফল প্রদর্শনের অবস্থানে অ্যাক্সেস করতে চান, তাহলে অবশ্যই এক্স-অ্যাড্রেস এবং ওয়াই-অ্যাড্রেসের মধ্যে সম্পর্ক উল্লেখ করতে হবে।

যে ডেটা প্রদর্শনের জন্য পাঠানো হবে তা হল 8 বিট (1 বাইট) এবং এটি উল্লম্ব লাইন হিসাবে সাজানো হবে; এই ক্ষেত্রে, বিট এমএসবি কম হবে এবং বিট এলএসবি উপরের হিসাবে ছবিতে দেখানো হবে।

প্রোগ্রামযোগ্য রেজোলিউশন 1-ওয়্যার ডিজিটাল থার্মোমিটার ডালাস (DS18B20)

বৈশিষ্ট্য:

  1. অনন্য 1-ওয়্যার® ইন্টারফেস যোগাযোগের জন্য শুধুমাত্র একটি পোর্ট পিন প্রয়োজন
  2. ইন্টিগ্রেটেড টেম্পারেচার সেন্সর এবং EEPROM দিয়ে কম্পোনেন্ট কাউন্ট কমানো
  3. তাপমাত্রা -55 ° C থেকে +125 ° C (-67 ° F থেকে +257 ° F) পরিমাপ করে
  4. ± 0.5 ° C -10 ° C থেকে +85 ° C পর্যন্ত নির্ভুলতা
  5. 9 বিট থেকে 12 বিট পর্যন্ত প্রোগ্রামযোগ্য রেজোলিউশন
  6. কোন বাহ্যিক উপাদান প্রয়োজন
  7. পরজীবী শক্তি মোড অপারেশন জন্য শুধুমাত্র 2 পিনের প্রয়োজন (DQ এবং GND)
  8. মাল্টিড্রপ ক্ষমতা সহ বিতরণকৃত তাপমাত্রা-সেন্সিং অ্যাপ্লিকেশনগুলিকে সহজ করে তোলে
  9. প্রতিটি ডিভাইসের একটি অনন্য 64-বিট সিরিয়াল কোড অন-বোর্ড রমে সংরক্ষিত আছে
  10. অ্যালার্ম সার্চ কমান্ড সহ নমনীয় ব্যবহারকারী-নির্ধারিত ননভোলাটাইল (NV) অ্যালার্ম সেটিংস প্রোগ্রামযুক্ত সীমার বাইরে তাপমাত্রা সহ ডিভাইসগুলি সনাক্ত করে

অ্যাপ্লিকেশন:

  1. থার্মোস্ট্যাটিক নিয়ন্ত্রণ
  2. শিল্প ব্যবস্থা
  3. ভোগ্যপণ্য
  4. থার্মোমিটার
  5. তাপীয়ভাবে সংবেদনশীল সিস্টেম

হালকা নির্ভর প্রতিরোধক

লাইট ডিপেন্ডেন্ট রেসিস্টর (এলডিআর) হল একটি ট্রান্সডুসার যা তার পৃষ্ঠের উপর আলো পড়লে তার প্রতিরোধের পরিবর্তন করে।

সাধারণত একটি এলডিআর একটি অন্ধকারে এক মেগা ওহম থেকে দুই মেগা ওহম পর্যন্ত, দশ থেকে বিশ কিলো ওহম দশ লাক্সে, দুই থেকে পাঁচ কিলোহম থেকে 100 লাক্সে থাকবে। সেন্সরের দুটি পরিচিতির মধ্যে প্রতিরোধের তীব্রতা হ্রাস পায় বা সেন্সরের দুটি পরিচিতির মধ্যে পরিবাহিতা বৃদ্ধি পায়।

ভোল্টেজ পরিবর্তনের প্রতিরোধের পরিবর্তনকে রূপান্তর করতে ভোল্টেজ ডিভাইডার সার্কিট ব্যবহার করুন।

পদক্ষেপ 2: মাইক্রোকন্ট্রোলার ফার্মওয়্যার কোড

#ifndef F_CPU #F_CPU 16000000UL সংজ্ঞায়িত করুন // নিয়ন্ত্রক ক্রিস্টাল ফ্রিকোয়েন্সি বলছে (16 MHz AVR ATMega328P) #endif

// SPI ইন্টারফেস ডিফাইন #MOSI 3 ডিফাইন করুন // MOSI এটা পোর্ট B, PIN 3 #ডিফাইন MISO 4 // MISO এটা PORT B, PIN 4 #ডিফাইন SCK 5 // SCK এটা PORT B, PIN 5 #ডিফাইন SS 2 // এসএস এটি পোর্ট বি, পিন 2

// ডিসপ্লে রিসেট করুন #RST 0 নির্ধারণ করুন // এটি পোর্ট বি, পিন 0 রিসেট করুন

// ডিসপ্লে মোড নির্বাচন - কমান্ড/ঠিকানা অথবা ডাটা ইনপুট নির্বাচন করতে ইনপুট। #ডিসি 1 নির্ধারণ করুন // ডিসি এটি পোর্ট বি, পিন 1

// নেগেটিভ সাইনস্ট্যাটিক কনস্ট স্বাক্ষরবিহীন চার নেগের কোড অ্যারে [4] = {0x30, 0x30, 0x30, 0x30};

// সংখ্যার কোডের অ্যারে [0..9] 0x03, 0x03, 0x03, 0x01}, / 0 0x0C, 0x8E, 0xCE, 0xE6, 0xE6, 0xBE, 0x9E, 0x0C, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 2 {0x00, 0x04, 0x0, 0x0, 0x0, 0x0, 0x0,, 0x8C, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 3 {0x3C, 0x3E, 0x7C, 0x60, 0x60, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0x01, 0x03, 0x01}, / 4 4 0xFE, 0xFE, 0x36, 0x36, 0xF6, 0xF6, 0xE4, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01}, // 6 {0x04, 0x06, 0x06, 0x8, 0x8, 0x8,, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00}, // 7 {0xCC, 0xFE, 0xFE, 0x36, 0x36, 0xFE, 0xFE, 0xCC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0 3, 0x01}, // 8 {0x3C, 0x7E, 0x7E, 0x66, 0x66, 0xFE, 0xFE, 0xFC, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01} // 9};

// "TEMP:" শব্দের কোড অ্যারে TEMP_1 [165] = {0x02, 0x06, 0x06, 0xFE, 0xFE, 0xFE, 0x06, 0x06, 0x02, 0x00, 0xFC, 0xFE, 0x26, 0x26, 0x26, 0x26, 0x26 0x24, 0x00, 0xFC, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0x38, 0x1C, 0xFE, 0xFE, 0xFC, 0x00, 0xFC, 0xFE, 0xFE, 0x66, 0x66, 0x7E, 0x7E, 0x3C, 0x00, 0x8C, 0x8C, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0C, 0x1E, 0x33, 0x33, 0x1E, 0x0C, 0x00, 0xF8, 0xFC, 0x0C, 0x9C, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01,};

// শব্দ "LUX:" const স্বাক্ষরবিহীন চার TEMP_2 [60] = {0xFC, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x00, 0xFC, 0xFE,,, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x03, 0x03, 0x01, 0x00, 0x01, 0x01};

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

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

// পোর্ট ইনিশিয়ালাইজেশন এড়িয়ে যান Port_Init () {DDRB = (1 << MOSI) | (1 << SCK) | (1 << SS) | (1 << RST) | (1 << DC); // সেট MOSI, SCK, SS, RST, DC আউটপুট হিসাবে, অন্য সকল ইনপুট PORTB | = (1 << RST); // RST পিনকে উচ্চ PORTB হিসাবে সেট করুন | = (1 << SS); // SS পিনকে উচ্চ হিসাবে সেট করুন - ডিসপ্লে হল DDRC = 0xFFu অক্ষম করুন; // PORTC এর সকল পিন আউটপুট হিসেবে সেট করুন। DDRC & = ~ (1 << 0); // ইনপুট PORTC = 0x00u হিসাবে PORTC এর প্রথম পিন তৈরি করে; // PORTC এর সমস্ত পিন কম সেট করুন যা এটি বন্ধ করে দেয়। }

// ADC ইনিশিয়ালাইজেশন অকার্যকর ADC_init () {// ADC সক্ষম করুন, freq = osc_freq/128 সেট prescaler সর্বোচ্চ মান, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); ADMUX = (1 << REFS0); // ADC এর জন্য ভোল্টেজ রেফারেন্স নির্বাচন করুন // ADC মাল্টিপ্লেক্সার সিলেক্ট রেজিস্টার (ADC0) ব্যবহার করে ডিফল্টরূপে চ্যানেল শূন্য নির্বাচন করুন। }

// এনালগ থেকে ডিজিটাল রূপান্তরের ফলাফল পড়ার ফাংশন uint16_t get_LightLevel () {_delay_ms (10); // চ্যানেলের নির্বাচিত ADCSRA পেতে কিছু সময় অপেক্ষা করুন | = (1 << ADSC); // ADSC বিট সেট করে ADC রূপান্তর শুরু করুন। ADSC এ 1 লিখুন যখন (ADCSRA & (1 << ADSC)); // রূপান্তর সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন // ADSC আবার 0 হয়ে যায়, ততক্ষণ পর্যন্ত লুপ চালান _delay_ms (10); রিটার্ন (এডিসি); // 10-বিট ফলাফল ফিরিয়ে দিন}

/ নিবন্ধন }

// 16 বিট টাইমার 1 আরম্ভ করুন, বিরতি এবং পরিবর্তনশীল অকার্যকর TIMER1_init () {// prescaler = 256 এবং CTC মোড TCCR1B | = (1 << WGM12) | (1 << CS12); // কাউন্টার টিসিএনটি 1 = 0 শুরু করুন; // তুলনা মূল্য শুরু করুন - 1 সেকেন্ড OCR1A = 62500; // সক্ষম তুলনা বিরতি TIMSK1 | = (1 << OCIE1A); // বিশ্বব্যাপী বাধা sei () সক্ষম করুন; }

// Display Enable void SPI_SS_Enable () {PORTB & = ~ (1 << SS); // লজিকের জন্য এসএস পিন সক্ষম করুন 0}

// Display Disable void SPI_SS_Disable () {PORTB | = (1 << SS); // যুক্তিতে SS পিন অক্ষম করুন 1}

// ডিসপ্লে বাফার শূন্য SPI_Tranceiver (স্বাক্ষরবিহীন চার ডেটা) {SPDR = ডেটাতে ডেটা পাঠানোর কাজ; // বাফারে ডেটা লোড করুন (! (SPSR & (1 << SPIF))); // ট্রান্সমিশন সম্পন্ন না হওয়া পর্যন্ত অপেক্ষা করুন}

// শুরুর শুরুতে ডিসপ্লে রিসেট করুন void Display_Reset () {PORTB & = ~ (1 << RST); _ বিলম্ব_এমএস (100); পোর্টবি | = (1 << RST); }

// কমান্ড রাইট ফাংশন void Display_Cmnd (স্বাক্ষরবিহীন চার ডেটা) {PORTB & = ~ (1 << DC); // কমান্ড অপারেশন SPI_Tranceiver (ডেটা) এর জন্য লজিক 0 তে ডিসি পিন তৈরি করুন; // ডেটা রেজিস্টারে তথ্য পাঠান PORTB | = (1 << DC); // ডেটা অপারেশনের জন্য লজিকে হাই করার জন্য ডিসি পিন তৈরি করুন}

// ডিসপ্লে অকার্যকর Display_init () {Display_Reset (); // Display_Cmnd (0x21) ডিসপ্লে রিসেট করুন; // অতিরিক্ত মোড Display_Cmnd (0xC0) এ কমান্ড সেট; // C0 পাঠিয়ে ভোল্টেজ সেট করুন মানে VOP = 5V Display_Cmnd (0x07); // তাপমাত্রা সেট করুন 3 Display_Cmnd (0x13) এর সহগ; // ভোল্টেজ বায়াস সিস্টেম Display_Cmnd (0x20) এর সেট মান; // বেসিক মোডে Display_Cmnd (0x0C) কমান্ড সেট; // সাধারন মোডে প্রদর্শন ফলাফল}

// ডিসপ্লে অকার্যকর Display_Clear () {PORTB | = (1 << DC) সাফ করুন; // (int k = 0; k <= 503; k ++) {SPI_Tranceiver (0x00);} PORTB & = ~ (1 << DC); // লজিকে DC পিন তৈরি করুন কমান্ড অপারেশনের জন্য শূন্য}

// LCD ডিসপ্লে অকার্যকর Display_SetXY (স্বাক্ষরবিহীন x, স্বাক্ষরবিহীন চার y) {Display_Cmnd (0x80 | x); // কলাম (0-83) Display_Cmnd (0x40 | y); // সারি (0-5)}

// নেতিবাচক চিহ্ন অকার্যকর Display_Neg (স্বাক্ষরবিহীন চার নেগ) প্রদর্শন করার কাজ {Display_SetXY (41, 0); // ডিসপ্লেতে অবস্থানের ঠিকানা (int index = 0; index0) {SPDR = 0x30;} // প্রদর্শন করুন প্রদর্শন বাফার (স্পষ্ট নেতিবাচক চিহ্ন) যখন (! (SPSR & (1 << SPIF))); // ট্রান্সমিশন সম্পূর্ণ _delay_ms (100) পর্যন্ত অপেক্ষা করুন; }}

// ডিজিটাল চিহ্ন অকার্যকর Off_Dig (স্বাক্ষরবিহীন অক্ষর x, স্বাক্ষরবিহীন অক্ষর y) {Display_SetXY (x, y); // (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // ডিসপ্লেতে অবস্থানের ঠিকানা সেট করুন y ++; Display_SetXY (x, y); // (int index = 0; index <8; index ++) {SPI_Tranceiver (0);} // প্রদর্শন বাফারে ডাটা লোড করুন ডিজিটাল সাইন এর নিচের অংশ পরিষ্কার করুন)}

// ডিজিটাল সাইন অকার্যকর Display_Dig (int dig, unsigned char x, unsigned char y) প্রদর্শনের ফাংশন {Display_SetXY (x, y); ১ 16 // প্রদর্শন ডেফেল _delay_ms (10) এর বাফারে ডিজিট ডেটার অ্যারে লোড করুন; }}

// DS18B20 স্বাক্ষরবিহীন অক্ষর DS18B20_init () {DDRD | = (1 << 2); // PORTD এর PD2 পিন আউটপুট PORTD & = ~ (1 << 2) হিসাবে সেট করুন; // PD2 পিন কম _delay_us (490) হিসাবে সেট করুন; // প্রারম্ভিক সময় DDRD & = ~ (1 << 2); // PORTD- এর PD2 পিন ইনপুট _delay_us (68) হিসাবে সেট করুন; // টাইমিং OK_Flag = (PIND & (1 << 2)); // সেন্সর পালস _delay_us (422) পান; ফেরত OK_Flag; // রিটার্ন 0-ঠিক সেন্সর হল প্লাগ, 1-ত্রুটি সেন্সর আনপ্লাগ}

// DS18B20 স্বাক্ষরবিহীন চর থেকে বাইট পড়ার ফাংশন read_18b20 () {স্বাক্ষরবিহীন চার i, ডেটা = 0; জন্য (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTD এর PD2 পিন আউটপুট _delay_us (2) হিসাবে সেট করুন; // টাইমিং DDRD & = ~ (1 1; // পরবর্তী বিট যদি (PIND & (1 << 2)) data | = 0x80; // put bit in byte _delay_us (62);} data data;}

// DS18B20 এ বাইট লেখার ফাংশন void write_18b20 (স্বাক্ষরবিহীন চার ডেটা) {স্বাক্ষরবিহীন চার i; জন্য (i = 0; i <8; i ++) {DDRD | = (1 << 2); // PORTD এর PD2 পিন আউটপুট _delay_us (2) হিসাবে সেট করুন; // সময় যদি (ডেটা এবং 0x01) DDRD & = ~ (1 << 2); // যদি আমরা 1 লিখতে চাই, অন্য লাইনটি ছেড়ে দিন DDRD | = (1 1; // পরবর্তী বিট _delay_us (62); // টাইমিং DDRD & = ~ (1 << 2); // সেট PD2 পিন PORTD ইনপুট হিসাবে _delay_us (2);}}

// হালকা স্তরের অকার্যকর Read_Lux () {uint16_t বাফার প্রদর্শন করার ফাংশন; স্বাক্ষরহীন int temp_int_1, temp_int_2, temp_int_3, temp_int_0; // একক সংখ্যা, দ্বিগুণ সংখ্যা, ট্রিপল ডিজিট, কোয়ার্টার ডিজিট বাফার = get_LightLevel (); // এনালগ থেকে ডিজিটাল কনভার্ট লাইট লেভেলের ফলাফল পড়ুন temp_int_0 = বাফার % 10000 /1000; // কোয়ার্টার-ডিজিট temp_int_1 = বাফার % 1000 /100; // ট্রিপল-ডিজিট temp_int_2 = বাফার % 100 /10; // ডাবল ডিজিট temp_int_3 = বাফার % 10; // একক-অঙ্কের যদি (temp_int_0> 0) // যদি ফলাফল হয় চতুর্থাংশের সংখ্যা {Display_Dig (temp_int_0, 32, 2); // আলোর স্তরের Display_Dig এর 1 অঙ্ক প্রদর্শন করুন (temp_int_1, 41, 2); // আলোর স্তরের ডিসপ্লে 2 ডিজিট প্রদর্শন করুন (temp_int_2, 50, 2); // আলোর স্তরের ডিসপ্লে 3 ডিজিট প্রদর্শন করুন (temp_int_3, 59, 2); // আলোর স্তরের 4 ডিজিট প্রদর্শন করুন} অন্যথায় {যদি (temp_int_1> 0) // যদি ফলাফল তিন অঙ্কের সংখ্যা হয় {অফ_ডিগ (32, 2); // Display_Dig (temp_int_1, 41, 2) সংখ্যার 1 টি পরিষ্কার চিহ্ন; // আলোর স্তরের Display_Dig এর 1 অঙ্ক প্রদর্শন করুন (temp_int_2, 50, 2); // আলোর স্তরের 2 ডিজিট প্রদর্শন করুন Display_Dig (temp_int_3, 59, 2); // আলোর স্তরের 3 ডিজিট প্রদর্শন করুন} অন্যথায় {যদি (temp_int_2> 0) // যদি ফলাফল দ্বিগুণ সংখ্যার হয় {Off_Dig (32, 2); // Off_Dig (41, 2) নম্বরের 1 টি পরিষ্কার চিহ্ন; // Display_Dig সংখ্যার স্পষ্ট 2 চিহ্ন (temp_int_2, 50, 2); // আলোর স্তরের Display_Dig এর 1 অঙ্ক প্রদর্শন করুন (temp_int_3, 59, 2); // ডিসপ্লে 2 ডিজিট অফ লাইট লেভেল} অন্য // যদি রেজাল্ট একক ডিজিটের হয় {Off_Dig (32, 2); // Off_Dig (41, 2) নম্বরের 1 টি পরিষ্কার চিহ্ন; // Off_Dig (50, 2) নম্বরের 2 টি পরিষ্কার চিহ্ন; // Display_Dig (temp_int_3, 59, 2) সংখ্যার পরিষ্কার 3 চিহ্ন; // আলোর স্তরের 1 ডিজিট প্রদর্শন করুন}}}}

// তাপমাত্রা অকার্যকর Read_Temp () {স্বাক্ষরবিহীন int বাফার প্রদর্শন করার কাজ; স্বাক্ষরহীন int temp_int_1, temp_int_2, temp_int_3; // একক সংখ্যা, দ্বিগুণ সংখ্যা, ট্রিপল ডিজিট, চতুর্থাংশ সংখ্যা স্বাক্ষরবিহীন অক্ষর Temp_H, Temp_L, OK_Flag, temp_flag; DS18B20_init (); // DS18B20 write_18b20 (0xCC) এর সূচনা; // সেন্সর কোড চেক write_18b20 (0x44); // তাপমাত্রা রূপান্তর শুরু _delay_ms (1000); // সেন্সর পোলিং বিলম্ব DS18B20_init (); // DS18B20 write_18b20 (0xCC) এর সূচনা; // সেন্সর কোড চেক write_18b20 (0xBE); // সেন্সর RAM Temp_L = read_18b20 () এর বিষয়বস্তু পড়ার কমান্ড; // প্রথম দুটি বাইট পড়ুন Temp_H = read_18b20 (); temp_flag = 1; // 1-পজেটিভ তাপমাত্রা, 0-নেগেটিভ তাপমাত্রা // নেতিবাচক তাপমাত্রা পান যদি (টেম্প_এইচ এবং (1 << 3)) // সাইন বিট চেক (যদি বিট সেট করা হয়-নেতিবাচক তাপমাত্রা) {স্বাক্ষরিত ইন্ট টেম্প; temp_flag = 0; // পতাকা সেট 0 - temperatureণাত্মক তাপমাত্রা temp = (Temp_H << 8) | Temp_L; টেম্প = টেম্প; // অতিরিক্ত কোডকে সরাসরি Temp_L = temp এ রূপান্তর করুন; Temp_H = temp >> 8; } বাফার = ((Temp_H 4); temp_int_1 = বাফার % 1000 /100; // ট্রিপল-ডিজিট temp_int_2 = বাফার % 100 /10; // ডাবল ডিজিট temp_int_3 = বাফার % 10; // একক-সংখ্যা

// যদি তাপমাত্রা তাপমাত্রার নেতিবাচক প্রদর্শন চিহ্ন হয়, অন্যথায় পরিষ্কার

যদি (temp_flag == 0) {Display_Neg (1);} অন্যথায় {Display_Neg (0);} if (temp_int_1> 0) // যদি ফলাফল তিন অঙ্কের সংখ্যা হয় {Display_Dig (temp_int_1, 45, 0); // তাপমাত্রা Display_Dig এর 1 অঙ্ক প্রদর্শন (temp_int_2, 54, 0); // তাপমাত্রা Display_Dig এর 2 অঙ্ক প্রদর্শন (temp_int_3, 63, 0); // তাপমাত্রার 3 অঙ্কের প্রদর্শন করুন} অন্য {যদি (temp_int_2> 0) // যদি ফলাফল দ্বিগুণ সংখ্যার হয় {Off_Dig (45, 0); // Display_Dig সংখ্যার 1 টি স্পষ্ট চিহ্ন (temp_int_2, 54, 0); // তাপমাত্রা Display_Dig এর 1 অঙ্ক প্রদর্শন (temp_int_3, 63, 0); // তাপমাত্রার 2 অঙ্কের প্রদর্শন} অন্য // যদি ফলাফল একক-অঙ্কের সংখ্যা হয় {Off_Dig (45, 0); // Off_Dig (54, 0) নম্বরের 1 টি পরিষ্কার চিহ্ন; // Display_Dig সংখ্যার 2 টি স্পষ্ট চিহ্ন (temp_int_3, 63, 0); // তাপমাত্রার 1 অঙ্ক প্রদর্শন করুন}}}

// এই ISR গুলি চালানো হয় যখনই টাইমার গণনার সাথে তুলনা মূল্যের (প্রতি 1 সেকেন্ড) ISR (TIMER1_COMPA_vect) {// পড়া, তাপমাত্রা এবং হালকা স্তরের Read_Temp () প্রদর্শন করা হয়; Read_Lux (); }

// "TEMP" এবং "LUX" অকার্যকর Display_label () {// Word "TEMP" Display_SetXY (0, 0) শব্দ প্রদর্শন করার কাজ; // (int index = 0; index <105; index ++) {if (index == 40) {Display_SetXY (0, 1);} // অবস্থানের ঠিকানা সেট করুন ডিসপ্লেতে (নিচের সারিতে) যদি (index == 80) {Display_SetXY (72, 0);} // ডিসপ্লেতে পজিশনের ঠিকানা সেট করুন (আপ রো) যদি (index == 92) {Display_SetXY (72, 1); } // ডিসপ্লেতে অবস্থানের ঠিকানা সেট করুন (নিচের সারি) SPDR = TEMP_1 [সূচক]; // প্রদর্শন বাফারের মধ্যে কোড অ্যারে ডেটা লোড করার সময় (! (SPSR & (1 << SPIF))); // ট্রান্সমিশন সম্পূর্ণ _delay_ms (10) পর্যন্ত অপেক্ষা করুন; } // শব্দ "LUX" Display_SetXY (0, 2); // (int index = 0; index <60; index ++) {if (index == 30) {Display_SetXY (0, 3);} // অবস্থানের ঠিকানা সেট করুন ডিসপ্লেতে (নিচের সারি) SPDR = TEMP_2 [সূচী]; // প্রদর্শন বাফারের মধ্যে কোড অ্যারে ডেটা লোড করার সময় (! (SPSR & (1 << SPIF))); // ট্রান্সমিশন সম্পূর্ণ _delay_ms (10) পর্যন্ত অপেক্ষা করুন; }}

int প্রধান (শূন্য)

{Port_Init (); // পোর্ট ইনিশিয়ালাইজেশন ADC_init (); // এডিসি আরম্ভ SPI_Init (); // SPI সূচনা SPI_SS_Enable (); // প্রদর্শন DS18B20_init () সক্ষম করুন; // DS18B20 Display_init () এর সূচনা; // প্রদর্শন আরম্ভ Display_Clear (); // ডিসপ্লে ক্লিয়ার Display_label (); // প্রদর্শন শব্দ "TEMP" এবং "LUX" TIMER1_init (); // টাইমার 1 আরম্ভ। পর্যবেক্ষণ শুরু করুন। প্রতি সেকেন্ডে প্যারামিটার পাওয়া। // ইনফিনিটি লুপ যখন (1) {}}

ধাপ 3: মাইক্রোকন্ট্রোলারে ফার্মওয়্যার ফ্ল্যাশ করা

মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরিতে HEX ফাইল আপলোড করা হচ্ছে। মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরি বার্নের বিস্তারিত বিবরণ সহ ভিডিওটি দেখুন: মাইক্রোকন্ট্রোলার ফ্ল্যাশ মেমরি বার্ন হচ্ছে …

ধাপ 4: ডিভাইস সার্কিট সমাবেশ পর্যবেক্ষণ

ডিভাইস সার্কিট সমাবেশ পর্যবেক্ষণ
ডিভাইস সার্কিট সমাবেশ পর্যবেক্ষণ
ডিভাইস সার্কিট সমাবেশ পর্যবেক্ষণ
ডিভাইস সার্কিট সমাবেশ পর্যবেক্ষণ

পরিকল্পিত ডায়াগ্রাম অনুসারে উপাদানগুলি সংযুক্ত করুন।

প্লাগ পাওয়ার এবং এটি কাজ করছে!

প্রস্তাবিত: