সুচিপত্র:

IOT123 - সোলার ট্র্যাকার - কন্ট্রোলার: 8 টি ধাপ
IOT123 - সোলার ট্র্যাকার - কন্ট্রোলার: 8 টি ধাপ

ভিডিও: IOT123 - সোলার ট্র্যাকার - কন্ট্রোলার: 8 টি ধাপ

ভিডিও: IOT123 - সোলার ট্র্যাকার - কন্ট্রোলার: 8 টি ধাপ
ভিডিও: IOT123 - BYKO LIVE RIDE 2024, নভেম্বর
Anonim
Image
Image
IOT123 - সোলার ট্র্যাকার - কন্ট্রোলার
IOT123 - সোলার ট্র্যাকার - কন্ট্রোলার
IOT123 - সোলার ট্র্যাকার - কন্ট্রোলার
IOT123 - সোলার ট্র্যাকার - কন্ট্রোলার

এটি নির্দেশযোগ্য একটি এক্সটেনশন

IOT123 - সোলার ট্র্যাকার - টিল্ট/প্যান, প্যানেল ফ্রেম, এলডিআর মাউন্ট রিগ। এখানে আমরা servos এর নিয়ামক, এবং সূর্যের অবস্থানের সেন্সরগুলিতে মনোনিবেশ করি। এটি উল্লেখ করা গুরুত্বপূর্ণ যে এই নকশাটি অনুমান করে 2 এমসিইউ নিযুক্ত করা হবে: সৌর ট্র্যাকারের জন্য একটি (3.3V 8mHz Arduino Pro Mini), এবং আপনার সেন্সর/অভিনেতাদের জন্য একটি স্বাধীন MCU।

এটি সংস্করণ 0.3।

সম্পূর্ণ পরিতৃপ্তির পরে সমস্ত প্রকল্প প্রকাশ করার পরিবর্তে, আমি ক্রমাগত একীকরণের অনুশীলন করব এবং আমার প্রয়োজন অনুসারে যা সরবরাহ করেছি তা পরিবর্তন করে আরও বেশি কিছু সরবরাহ করব। আমি ব্যাটারি চার্জারের জন্য আরেকটি নির্দেশযোগ্য লিখব, _ যখন_ কন্ট্রোলার সফটওয়্যার/হার্ডওয়্যারের অপ্টিমাইজেশন সম্পূর্ণ। আমি নির্দেশ করব যেখানে অপ্টিমাইজেশান প্রয়োজন যেখানে আমরা এই মাধ্যমে পদক্ষেপ।

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

এই কি অন্তর্ভুক্ত:

  1. সূর্যের আনুমানিক অবস্থান অনুধাবন করতে মূল নির্দেশিকা থেকে এলডিআর ব্যবহার করুন।
  2. সূর্যের মুখোমুখি হতে সার্ভোসগুলি সরান।
  3. আন্দোলনের সংবেদনশীলতার জন্য বিকল্প।
  4. সূর্যের দিকে যাওয়ার সময় ধাপের আকারের বিকল্প।
  5. Servos এ ব্যবহৃত কৌণিক সীমাবদ্ধতার জন্য বিকল্প।
  6. আন্দোলনের বিলম্বের জন্য বিকল্প।
  7. MCU- এর মধ্যে মান নির্ধারণ/পাওয়ার জন্য I2C ইন্টারফেস।
  8. আন্দোলনের মধ্যে গভীর ঘুম।

এটি কি অন্তর্ভুক্ত করে না (এবং সময় পারমিট হিসাবে সম্বোধন করা হবে):

  1. শুধুমাত্র দিনের আলো সময় শক্তি ব্যবহার।
  2. ভোরের অবস্থানের কথা মনে রাখা এবং সন্ধ্যার শাটডাউনে সেখানে যাওয়া।
  3. MCU থেকে নিয়ন্ত্রক সরানো হচ্ছে।
  4. MCU- তে LED (গুলি) নিষ্ক্রিয় করা।
  5. RAW এর পরিবর্তে VCC এর মাধ্যমে ক্ষমতা পুনরায় চালু করা।
  6. ইউএসবি থেকে সিরিয়াল টিটিএল কনভার্টারে নিয়ন্ত্রিত শক্তি ছাড়াই ফ্ল্যাশ করার জন্য কার্যকারিতা প্রদান।
  7. ব্যাটারি ভোল্টেজ মনিটর।

ইতিহাস

ডিসেম্বর 20, 2017 V0.1 কোড

প্রাথমিক সংস্করণ আলোর উৎস ট্র্যাক করে, সর্বদা চালু থাকে, কোন চার্জিং নেই

জানুয়ারী 7, 2018 V0.2 কোড

  • হার্ডওয়্যার পরিবর্তন

    • I2C পিন যোগ করুন
    • Servo GNDs এ সুইচ যোগ করুন
    • কন্ট্রোলার বক্স ফ্যাসিয়ায় মুদ্রিত লেবেল
  • সফ্টওয়্যার পরিবর্তন

    • EEPROM থেকে কনফিগারেশন পড়ুন
    • I2C বাস অন্য MCU এর দাস হিসেবে সমর্থন করে (3.3V)
    • I2C এর মাধ্যমে কনফিগারেশন সেট করুন
    • I2C এর মাধ্যমে সক্ষম সেট করুন
    • I2C এর মাধ্যমে কনফিগারেশন পান
    • I2C এর মাধ্যমে রানটাইম বৈশিষ্ট্য পান (বর্তমানে সক্ষম, এবং বর্তমান আলো তীব্রতা)
    • সিরিয়াল লগিং সরান (এটি I2C মানগুলিকে প্রভাবিত করে)

জানুয়ারী 19, 2018 V0.3 কোড

  • হার্ডওয়্যার

    লেবেল আপডেট করা হয়েছে। সুইচ এখন কনফিগ বা ট্র্যাক মোড বেছে নিতে ব্যবহৃত হয়

  • সফটওয়্যার

    • I2C শুধুমাত্র কনফিগারেশনের জন্য ব্যবহৃত হয়
    • ট্র্যাকিং শুরু করার আগে কন্ট্রোলার 5 সেকেন্ড অপেক্ষা করে, হাত সরানোর অনুমতি দেয়
    • I2C কনফিগারেশন ব্যবহার করতে, SPDT অবশ্যই CONFIG- এ ইউনিট বুট হিসেবে থাকতে হবে
    • ট্র্যাকিং মুভমেন্টের মধ্যে, ইউনিট কনফিগারেশন ভ্যালু SLEEP MINUTES (ডিফল্ট ২০ মিনিট) এর জন্য গভীর ঘুমের মোডে থাকে।

ধাপ 1: উপকরণ এবং সরঞ্জাম

উপকরণ এবং সরঞ্জাম
উপকরণ এবং সরঞ্জাম
উপকরণ এবং সরঞ্জাম
উপকরণ এবং সরঞ্জাম
উপকরণ এবং সরঞ্জাম
উপকরণ এবং সরঞ্জাম

এখন উপকরণ এবং উত্সের একটি সম্পূর্ণ বিল রয়েছে।

  1. 3D মুদ্রিত অংশ।
  2. Arduino Pro Mini 3.3V 8mHz
  3. 4x6cm ডাবল সাইড প্রোটোটাইপ PCB ইউনিভার্সাল প্রিন্টেড সার্কিট বোর্ডের 1 টি (অর্ধেক করে কাটা)
  4. 40P পুরুষ হেডারের 1 টি (আকারে কাটা হবে)।
  5. 40P মহিলা হেডার বন্ধ 1 (আকারে কাটা হবে)।
  6. 10K 1/4W restistors 4 বন্ধ।
  7. হুকআপ তার।
  8. ঝাল এবং লোহা।
  9. 4G x 6mm স্টেইনলেস প্যান হেড সেল্ফ ট্যাপিং স্ক্রু।
  10. 4 অফ 4G x 6 মিমি স্টেইনলেস কাউন্টারসঙ্ক সেলফ ট্যাপিং স্ক্রু।
  11. 3.7V LiPo ব্যাটারি এবং হোল্ডারে 1 টি বন্ধ
  12. 1P 2P পুরুষ সমকোণ শিরোলেখ
  13. 1 বন্ধ SPDT সুইচ 3 পিন 2.54 মিমি পিচ
  14. শক্তিশালী Cyanoacrylate আঠালো
  15. Dupont সংযোগকারী মহিলা 1P হেডার (1 নীল বন্ধ, 1 সবুজ বন্ধ)।

ধাপ 2: সার্কিট একত্রিত করা

সার্কিট একত্রিত করা
সার্কিট একত্রিত করা
সার্কিট একত্রিত করা
সার্কিট একত্রিত করা
সার্কিট একত্রিত করা
সার্কিট একত্রিত করা

সার্কিটটিতে বর্তমানে ভোল্টেজ ডিভাইডার সার্কিট (ভোল্ট মিটার) নেই।

  1. 4x6cm ডাবল সাইড প্রোটোটাইপ PCB ইউনিভার্সাল প্রিন্টেড সার্কিট বোর্ড লম্বা অক্ষ জুড়ে অর্ধেক কেটে ফেলুন।
  2. 40 পি পুরুষ হেডার টুকরো টুকরো করুন:

    1. 12P বন্ধ 2
    2. 3P 3P বন্ধ
    3. 2P বন্ধ 6।
  3. 40 পি মহিলা হেডার টুকরো টুকরো করুন:

    1. 12P বন্ধ 2
    2. 6P এ 1
  4. সোল্ডার 2 বন্ধ 12Phemale হেডার দেখানো হিসাবে।
  5. একটি 3P পুরুষ (অতিরিক্ত) হেডার থেকে SPDT সুইচের নিচের দিকে সায়ানোয়াক্রাইলেট আঠা দিয়ে সরানো স্পেসার আঠালো করুন
  6. অন্য পাশের জায়গায় তারপর সোল্ডার 6 বন্ধ 2P, 2 বন্ধ 3Pmale হেডার এবং SPDT সুইচটি দেখানো হয়েছে।
  7. 10K প্রতিরোধক (A, B, C, D কালো) থেকে 4 টি সোল্ডার GND পিন হেডার (#2 কালো) এবং A0 - A3 হেডার পিন (#5, #6, #7, #8) এর মাধ্যমে তারপর গর্তের মাধ্যমে (হলুদ) দেখানো হয়েছে (3 টি ছবি + 1 চিত্র)।
  8. LDR PINS সোল্ডারিং PINS #4, #6, #8, #10 থেকে 3.3V ট্রেস এবং থ্রেড যদিও ফিমেল হেডার VCC পিন (সবুজ)।
  9. PINS #1, #12, #15 এ (লাল) সোল্ডারিং অনুযায়ী মহিলা হেডার সাইডে 3.3V ট্রেস করুন।
  10. 3.3V ছিদ্রের মাধ্যমে সোল্ডার ওভার সাইড (লাল) RAW হেডার পিন #1।
  11. পিন #11 থেকে গর্তের মাধ্যমে কমলা হুকআপ ট্রেস করে অন্য দিকে সোল্ডার মহিলা পিন দেখানো হয়েছে।
  12. #20 থেকে #30 এবং #31 থেকে #13 এবং #16 পর্যন্ত নীল হুকআপ তারের ট্রেস এবং সোল্ডার।
  13. সোল্ডার মহিলা হেডার পিন #11 থেকে পুরুষ হেডার পিন #11 গর্তের মাধ্যমে।
  14. মহিলা 1 পি হেডার (1 নীল বন্ধ, 1 সবুজ বন্ধ) সহ 2 মিটার লম্বা 2 টি ডুপন্ট সংযোগকারী প্রস্তুত করুন। স্ট্রিপ এবং টিনের অন্য প্রান্ত।
  15. #28 তে সোল্ডার নীল ডুপন্ট তার; #29 তে সোল্ডার সবুজ ডুপন্ট তার।
  16. Arduino এর উপরের দিকে 6P মহিলা হেডার তারপর ঝাল ঠিক করুন।
  17. Arduino এর উপরের দিকে 2P ডান কোণ মহিলা হেডার int #29 এবং #30 তারপর ঝাল ঠিক করুন।
  18. Arduino এর নীচে 12P এর 2 টি এবং 3P পুরুষ পিনের বন্ধ 1 তারপর ঝাল।
  19. PCB 12P মহিলা হেডারের মধ্যে Arduino পুরুষ 12P পিন সন্নিবেশ করান।

ধাপ 3: MCU ঝলকানো

MCU ঝলকানো
MCU ঝলকানো
MCU ঝলকানো
MCU ঝলকানো
MCU ঝলকানো
MCU ঝলকানো

Arduino Pro Mini 6P মহিলা হেডার ব্যবহার করে FTDI232 USB থেকে TTL রূপান্তরকারী ব্যবহার করে সুবিধামত ফ্ল্যাশ করা হয়। 2 টি বোর্ডের সারিবদ্ধতার জন্য উপরের ছবিটি দেখুন।

আপনার FTDI232 এ 3.3V সেটিং নির্বাচন করা হয়েছে তা নিশ্চিত করুন। নীচের কোড ব্যবহার করে এখানে নির্দেশাবলী অনুসরণ করুন (জিআইএসটি লিঙ্ক ব্যবহার করুন)।

লো পাওয়ার লাইব্রেরি (সংযুক্ত এবং https://github.com/rocketscream/Low-Power) ইনস্টল করতে হবে।

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

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

/*
* কোড থেকে পরিবর্তন করা হয়েছে
* ম্যাথিয়াস লেরয় দ্বারা
*
* V0.2 সংশোধন
** I2C সেট পান
** EEPROM সেট পান
** সিরিয়াল আউটপুট অপসারণ - I2C প্রভাবিত
** ট্র্যাকিং সক্ষম/অক্ষম করুন
** I2C এর মাধ্যমে সীমাবদ্ধতার জন্য পরিষেবাগুলি সরান
** I2C এর মাধ্যমে চলতি গড় অন্তর্দৃষ্টি পড়ুন
* V0.3 সংশোধন
** 2 মোডের জন্য সুইচ করুন - ট্র্যাক (কোন I2C) এবং কনফিগার (I2C ব্যবহার করে)
** ট্র্যাক মোডে ঘুমান (8 সেকেন্ডের অংশে খুব কম প্রেসক্রিপশন)
** স্লিপ/জেগে ডিটেক/অ্যাটাক সার্ভিস (ট্রানজিস্টার ব্যবহার করা হয়
** কনফিগারযোগ্য প্রাথমিক অবস্থান (অপ্রয়োজনীয়) সরান
** কনফিগারযোগ্য জাগ্রত সেকেন্ডগুলি সরান (অপ্রয়োজনীয়)
** কনফিগারযোগ্য সক্ষম/অক্ষম (অপ্রয়োজনীয়) সরান
** কনফিগারযোগ্য ট্র্যাকার সক্ষম করুন (হার্ডওয়্যার সুইচ ব্যবহার করুন)
** ভোল্টেজ গেটার সরান - আলাদা I2C কম্পোনেন্ট ব্যবহার করবে
** সিরিয়াল লগিং যোগ করুন যখন I2C ব্যবহার করছেন না
*/
#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
#defineEPROM_VERSION1
#defineI2C_MSG_IN_SIZE3
#definePIN_LDR_TL A0
#definePIN_LDR_TR A1
#definePIN_LDR_BR A3
#definePIN_LDR_BL A2
#definePIN_SERVO_V11
#definePIN_SERVO_H5
#defineIDX_I2C_ADDR0
#defineIDX_V_ANGLE_MIN1
#defineIDX_V_ANGLE_MAX2
#defineIDX_V_SENSITIVITY3
#defineIDX_V_STEP4
#defineIDX_H_ANGLE_MIN5
#defineIDX_H_ANGLE_MAX6
#defineIDX_H_SENSITIVITY7
#defineIDX_H_STEP8
#defineIDX_SLEEP_MINUTES9
#defineIDX_V_DAWN_ANGLE10
#defineIDX_H_DAWN_ANGLE11
#defineIDX_DAWN_INTENSITY12 // সকল LDRS- এর গড়
#defineIDX_DUSK_INTENSITY13 // সকল LDRS- এর গড়
#defineIDX_END_EEPROM_SET14
#defineIDX_CURRENT_INTENSITY15 // সমস্ত LDRS এর গড় - IDX_DAWN_INTENSITY পরিবেষ্টিত অ -সরাসরি আলো গণনার জন্য ব্যবহৃত
#defineIDX_END_VALUES_GET16
#defineIDX_SIGN_117
#defineIDX_SIGN_218
#defineIDX_SIGN_319
Servo _servoH;
Servo _servoV;
বাইট _i2cVals [20] = {10, 10, 170, 20, 5, 10, 170, 20, 5, 20, 40, 10, 30, 40, 0, 0, 0, 0, 0, 0};
int _servoLoopDelay = 10;
int _slowingDelay = 0;
int _angleH = 90;
int _angleV = 90;
int _averageTop = 0;
int _averageRight = 0;
int _averageBottom = 0;
int _averageLeft = 0;
বাইট _i2cResponse = 0;
bool _inConfigMode = মিথ্যা;
অকার্যকর সেটআপ()
{
Serial.begin (115200);
getFromEeprom ();
যদি (inConfigMode ()) {
Serial.println ("কনফিগ মোড");
সিরিয়াল.প্রিন্ট ("I2C ঠিকানা:");
Serial.println (_i2cVals [IDX_I2C_ADDR]);
Wire.begin (_i2cVals [IDX_I2C_ADDR]);
Wire.onReceive (receiveEvent);
Wire.onRequest (requestEvent);
} অন্য {
Serial.println ("ট্র্যাকিং মোড");
বিলম্ব (5000); // ব্যাটারি ইত্যাদি সংযোগ করলে হাত থেকে বেরিয়ে আসার সময়।
}
}
voidloop ()
{
getLightValues ();
যদি (! _inConfigMode) {
// টোডো: ট্রান্সিস্টর সুইচ চালু করুন
_servoH.attach (PIN_SERVO_H);
_servoV.attach (PIN_SERVO_V);
জন্য (int i = 0; i <20; i ++) {
যদি (আমি! = 0) {
getLightValues ();
}
moveServos ();
}
বিলম্ব (500);
_servoH.detach ();
_servoV.detach ();
// টোডো: ট্রান্সিস্টর সুইচ বন্ধ করুন
বিলম্ব (500);
ঘুমের জন্য ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8);
}
}
// --------------------------------- বর্তমান মোড
boolinConfigMode () {
pinMode (PIN_SERVO_H, ইনপুট);
_inConfigMode = digitalRead (PIN_SERVO_H) == 1;
_inConfigMode ফিরুন;
}
// --------------------------------- EEPROM
voidgetFromEeprom () {
যদি (
EEPROM.read (IDX_SIGN_1)! = 'S' ||
EEPROM.read (IDX_SIGN_2)! = 'T' ||
EEPROM.read (IDX_SIGN_3)! = EEPROM_VERSION
EEPROM_write_default_configuration ();
EEPROM_read_configuration ();
}
voidEEPROM_write_default_configuration () {
Serial.println ("EEPROM_write_default_configuration");
জন্য (int i = 0; i <IDX_END_EEPROM_SET; i ++) {
EEPROM.update (i, _i2cVals );
}
EEPROM.update (IDX_SIGN_1, 'S');
EEPROM.update (IDX_SIGN_2, 'T');
EEPROM.update (IDX_SIGN_3, EEPROM_VERSION);
}
voidEEPROM_read_configuration () {
Serial.println ("EEPROM_read_configuration");
জন্য (int i = 0; i <IDX_END_EEPROM_SET; i ++) {
_i2cVals = EEPROM.read (i);
//Serial.println(String(i) + "=" + _i2cVals );
}
}
// --------------------------------- I2C
voidreceiveEvent (int count) {
যদি (গণনা == I2C_MSG_IN_SIZE)
{
char cmd = Wire.read ();
বাইট সূচক = Wire.read ();
বাইট মান = Wire.read ();
সুইচ (cmd) {
কেস 'জি':
যদি (সূচী <IDX_END_VALUES_GET) {
_i2cResponse = _i2cVals [সূচক];
}
বিরতি;
কেস ':
যদি (সূচী <IDX_END_EEPROM_SET) {
_i2cVals [সূচক] = মান;
EEPROM.update (সূচক, _i2cVals [সূচক]);
}
বিরতি;
ডিফল্ট:
প্রত্যাবর্তন;
}
}
}
voidrequestEvent ()
{
Wire.write (_i2cResponse);
}
// --------------------------------- এলডিআর
voidgetLightValues () {
int valueTopLeft = analogRead (PIN_LDR_TL);
int valueTopRight = analogRead (PIN_LDR_TR);
int valueBottomRight = analogRead (PIN_LDR_BR);
int valueBottomLeft = analogRead (PIN_LDR_BL);
_averageTop = (valueTopLeft + valueTopRight) / 2;
_averageRight = (valueTopRight + valueBottomRight) / 2;
_averageBottom = (valueBottomRight + valueBottomLeft) / 2;
_averageLeft = (valueBottomLeft + valueTopLeft) / 2;
int avgIntensity = (valueTopLeft + valueTopRight + valueBottomRight + valueBottomLeft) / 4;
_i2cVals [IDX_CURRENT_INTENSITY] = মানচিত্র (গড় তীব্রতা, 0, 1024, 0, 255);
}
// --------------------------------- সার্ভিস
voidmoveServos () {
Serial.println ("moveServos");
যদি ((_averageLeft-_averageRight)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH-_i2cVals [IDX_H_STEP])> _ i2cVals [IDX_H_ANGLE_MIN]) {
// বামে যাচ্ছে
Serial.println ("moveServos বাম দিকে যাচ্ছে");
বিলম্ব (_slowingDelay);
জন্য (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH--);
বিলম্ব (_servoLoopDelay);
}
}
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) {
// ঠিক যাচ্ছে
Serial.println ("moveServos বাম দিকে যাচ্ছে");
বিলম্ব (_slowingDelay);
জন্য (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH ++);
বিলম্ব (_servoLoopDelay);
}
}
অন্য {
// কিছু করতেছি না
Serial.println ("moveServos কিছুই করছে না");
বিলম্ব (_slowingDelay);
}
যদি ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) {
// উপরে যাচ্ছে
Serial.println ("moveServos going up");
বিলম্ব (_slowingDelay);
জন্য (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV ++);
বিলম্ব (_servoLoopDelay);
}
}
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) {
// নিচে যাচ্ছে
Serial.println ("moveServos নিচে যাচ্ছে");
বিলম্ব (_slowingDelay);
জন্য (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV--);
বিলম্ব (_servoLoopDelay);
}
}
অন্য {
Serial.println ("moveServos কিছুই করছে না");
বিলম্ব (_slowingDelay);
}
}
//---------------------------------ঘুম
voidasleepFor (স্বাক্ষরহীন আট সেকেন্ড সেগমেন্ট) {
Serial.println ("ঘুমানোর জন্য");
জন্য (স্বাক্ষরহীন স্লিপ কাউন্টার = আট সেকেন্ড সেগমেন্ট;
{
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
}
}

GitHub দ্বারা with দিয়ে হোস্ট করা rawtilt_pan_tracker_0.3.ino দেখুন

ধাপ 4: সার্কিট কেসিং একত্রিত করা

সার্কিট কেসিং একত্রিত করা
সার্কিট কেসিং একত্রিত করা
সার্কিট কেসিং একত্রিত করা
সার্কিট কেসিং একত্রিত করা
সার্কিট কেসিং একত্রিত করা
সার্কিট কেসিং একত্রিত করা
  1. পিসিবিতে হেডারের মধ্যে Ardiuno Pro Mini ertedোকানো নিশ্চিত করুন।
  2. সোলার ট্র্যাকার কন্ট্রোলার বক্স বেস সোলার ট্র্যাকার কন্ট্রোলার বক্সের দেয়ালে andোকান এবং 4G x 6mm স্টেইনলেস কাউন্টারসঙ্ক সেলফ ট্যাপিং স্ক্রু দিয়ে 2 বন্ধ করুন।
  3. সোলার ট্র্যাকার কন্ট্রোলার বক্স বেসে 6P হেডার স্লোটিং সহ Ardiuno Pro Mini + PCB সন্নিবেশ করান।
  4. সোলার ট্র্যাকার কন্ট্রোলার বক্সের সোলার ট্র্যাকার কন্ট্রোলার বক্সের দেয়ালে andোকান এবং 4G x 6mm স্টেইনলেস কাউন্টারসঙ্ক সেল্ফ ট্যাপিং স্ক্রু দিয়ে 2 বন্ধ করুন।
  5. 4G 4 x 6 মিমি স্টেইনলেস কাউন্টারসঙ্ক স্ব -লঘুপাত স্ক্রু সহ 4 টি প্যানেল ফ্রেমের বেসের উপরে সমাবেশটি সংযুক্ত করুন।

ধাপ 5: রিগ সংযোগ কন্ট্রোলারের দিকে নিয়ে যায়

রিগ সংযোগ করা নিয়ন্ত্রকের দিকে নিয়ে যায়
রিগ সংযোগ করা নিয়ন্ত্রকের দিকে নিয়ে যায়
রিগ সংযোগ করা নিয়ন্ত্রকের দিকে নিয়ে যায়
রিগ সংযোগ করা নিয়ন্ত্রকের দিকে নিয়ে যায়
রিগ সংযোগ করা নিয়ন্ত্রকের দিকে নিয়ে যায়
রিগ সংযোগ করা নিয়ন্ত্রকের দিকে নিয়ে যায়

পূর্ববর্তী নির্দেশিকা থেকে প্রস্তুত প্রাসঙ্গিক সংযোগগুলি হল 2P LDR সংযোগ থেকে 4 টি এবং সার্ভিস থেকে 3P সংযোগ বন্ধ। রিচার্জ প্রস্তুত না হওয়া পর্যন্ত যা সাময়িক তা হল ব্যাটারি। একটি 3.7V LiPo ব্যবহার করুন যা আপাতত 2P DuPont সংযোগে বন্ধ হয়ে যায়।

  1. এলডিআর সংযোগগুলি (োকান (কোন পোলারিটি নেই) উপরে থেকে:

    1. উপরের ডানে
    2. উপরে বাঁদিকে
    3. নিচের ডানে
    4. নিচে বামে
  2. উপরে থেকে Servo সংযোগ (বাম দিকে সংকেত তারের সঙ্গে) সন্নিবেশ করান:

    1. অনুভূমিক
    2. উল্লম্ব
  3. তারপর পরীক্ষার জন্য অপেক্ষা করুন: উপরে 3.7V ডিসি পাওয়ার সীসা +ve,োকান, নীচে -ve।

ধাপ 6: নিয়ামক পরীক্ষা করা

Image
Image

আগেই বলা হয়েছে, সফটওয়্যারটি সোলার চার্জিং ওয়ার্কফ্লোর জন্য অপ্টিমাইজ করা হয়নি। এটি প্রাকৃতিক (সূর্য) এবং অপ্রাকৃতিক আলোর উত্স ব্যবহার করে পরীক্ষা এবং পরিবর্তন করা যেতে পারে।

একটি নিয়ন্ত্রিত পরিবেশে ট্র্যাকিং পরীক্ষা করার জন্য স্লিপ মিনিটগুলিকে কম মূল্যে সেট করা সুবিধাজনক হতে পারে (পরবর্তী ধাপ দেখুন)।

ধাপ 7: কনসোল ইনপুট ব্যবহার করে I2C এর মাধ্যমে কনফিগার করা

এটি একটি দ্বিতীয় MCU এর মাধ্যমে নিয়ামক কনফিগার করার ব্যাখ্যা দেয়, একটি কনসোল উইন্ডোতে সেটিংস প্রবেশ করে।

  1. নিম্নলিখিত স্ক্রিপ্টটি একটি D1M WIFI BLOCK (বা Wemos D1 Mini) এ আপলোড করুন।
  2. পিসি থেকে ইউএসবি সংযোগ বিচ্ছিন্ন করুন
  3. পিন সংযোগ: -ve (কন্ট্রোলার) => GND (D1M)+ve (কন্ট্রোলার) => 3V3 (D1M) SCL (কন্ট্রোলার) => D1 (D1M)

    SDA (কন্ট্রোলার) => D2 (D1M)

  4. SPDT সুইচটি CONFIG এ চালু করুন
  5. পিসিতে ইউএসবি সংযুক্ত করুন
  6. Arduino IDE থেকে সঠিক COM পোর্ট সহ একটি কনসোল উইন্ডো শুরু করুন
  7. নিশ্চিত করুন যে "নিউলাইন" এবং "9600 বড" নির্বাচন করা হয়েছে
  8. কমান্ড সেন্ড টেক্সটবক্সে প্রবেশ করে তারপর এন্টার কী
  9. কমান্ডগুলি অক্ষর বাইট বাইট বিন্যাসে রয়েছে
  10. যদি দ্বিতীয় বাইট (তৃতীয় বিভাগ) অন্তর্ভুক্ত না হয় 0 (শূন্য) স্ক্রিপ্ট দ্বারা পাঠানো হয়
  11. সিরিয়াল ইনপুট ব্যবহার করে সতর্ক থাকুন; "এন্টার" কী চাপার আগে আপনি কী প্রবেশ করেছেন তা পর্যালোচনা করুন। যদি আপনি লক আউট হয়ে থাকেন (উদাহরণস্বরূপ I2C ঠিকানাটি ভুলে যাওয়া মানে পরিবর্তন করা) আপনাকে আবার নিয়ামক ফার্মওয়্যার ফ্ল্যাশ করতে হবে।

কমান্ড প্রথম অক্ষর সমর্থিত বৈচিত্র হল:

  • কনফিগারেশনের সময় চলাচল বন্ধ করার জন্য দরকারী E (সার্ভো ট্র্যাকিং সক্ষম করুন)। এটি ব্যবহার করে ইনপুট: E 0
  • ডিভাইস রিবুট না করলে স্বয়ংক্রিয় ট্র্যাকিং শুরু করতে দরকারী ডি (সার্ভো ট্র্যাকিং অক্ষম করুন)। এটি ইনপুট ব্যবহার করে: D 0
  • G (কনফিগারেশন মান পান) EEPROM এবং IN -MEMORY থেকে মান পড়ে: এটি ইনপুট ব্যবহার করে: G (সূচক বৈধ বাইট মান 0 - 13 এবং 15)
  • S (EEPROM মান সেট করুন) EEPROM- এ মান সেট করে যা রিবুট করার পর পাওয়া যায়। এটি ব্যবহার করে ইনপুট: এস (সূচক বৈধ বাইট মান 0 - 13, মান বৈধ বাইট মান এবং প্রতি সম্পত্তি পরিবর্তিত হয়)

কোডটি সূচকের জন্য সত্যের বিন্দু কিন্তু বৈধ মান/মন্তব্যগুলির জন্য একটি গাইডের জন্য নিম্নলিখিতটি ব্যবহার করা হয়:

  • I2C ঠিকানা 0 - নিয়ামক দাসের ঠিকানা, নিয়ন্ত্রকের সাথে যোগাযোগের জন্য মাস্টারের এটির প্রয়োজন (ডিফল্ট 10)
  • ন্যূনতম উল্লম্ব কোণ 1 - কোণ উল্লম্ব servo নিম্ন সীমা (ডিফল্ট 10, পরিসীমা 0 - 180)
  • সর্বাধিক উল্লম্ব কোণ 2 - কোণ উল্লম্ব servo উপরের সীমা (ডিফল্ট 170, পরিসীমা 0 - 180)
  • সংবেদনশীলতা উল্লম্ব LDR 3 - উল্লম্ব LDR পড়ার মার্জিন (ডিফল্ট 20, পরিসীমা 0 - 1024)
  • উল্লম্ব কোণ ধাপ 4 - প্রতিটি সমন্বয় উপর কোণ উল্লম্ব servo পদক্ষেপ (ডিফল্ট 5, পরিসীমা 1 - 20)
  • ন্যূনতম অনুভূমিক কোণ 5 - কোণ অনুভূমিক servo নিম্ন সীমা (ডিফল্ট 10, পরিসীমা 0 - 180)
  • সর্বাধিক অনুভূমিক কোণ 6 - কোণ অনুভূমিক servo উপরের সীমা (ডিফল্ট 170, পরিসীমা 0 - 180)
  • সংবেদনশীল হরিজন্টাল এলডিআর 7 - অনুভূমিক এলডিআর পড়ার মার্জিন (ডিফল্ট 20, পরিসীমা 0 - 1024)
  • HORIZONTAL ANGLE STEP 8 - প্রতিটি অ্যাডজাস্টমেন্টের উপর কোণ অনুভূমিক servo ধাপ (ডিফল্ট 5, পরিসীমা 1 - 20)
  • ঘুমের মিনিট 9 - ট্র্যাকিংয়ের মধ্যে আনুমানিক ঘুমের সময়কাল (ডিফল্ট 20, পরিসীমা 1 - 255)
  • উল্লম্ব ভোরের কোণ 10 - ভবিষ্যতের ব্যবহার - সূর্য ডুবে গেলে ফিরে আসার জন্য উল্লম্ব কোণ
  • হরিজন্টাল ডন এঙ্গেল 11 - ভবিষ্যতের ব্যবহার - সূর্য ডুবে গেলে ফিরে আসার জন্য অনুভূমিক কোণ
  • ভোরের অন্তর্দৃষ্টি 12 - ভবিষ্যতের ব্যবহার - সমস্ত এলডিআরগুলির ন্যূনতম গড় যা প্রতিদিনের সূর্য ট্র্যাকিং শুরু করে
  • সন্ধ্যা তাত্ত্বিকতা 13 - ভবিষ্যতের ব্যবহার - সমস্ত এলডিআরগুলির ন্যূনতম গড় যা প্রতিদিনের সূর্য ট্র্যাকিংয়ের সমাপ্তি ট্রিগার করে
  • EEPROM ভ্যালু মার্কার 14 - মান ব্যবহার করা হয় না
  • বর্তমান ইন্টেনসিটি 15 - আলোর তীব্রতার বর্তমান গড় শতাংশ
  • মেমরি ভ্যালু মার্কার 16 এর শেষ - মান ব্যবহার করা হয়নি।

সিরিয়াল ইনপুট (কনসোল উইন্ডোতে কীবোর্ড ইনপুট) ক্যাপচার করে এবং চার, বাইট, বাইট ফরম্যাটে একটি I2C স্লেভের কাছে ফরওয়ার্ড করে।

#অন্তর্ভুক্ত
#defineI2C_MSG_IN_SIZE2
#defineI2C_MSG_OUT_SIZE3
#defineI2C_SLAVE_ADDRESS10
বুলিয়ান _ নিউডাটা = মিথ্যা;
const বাইট _numChars = 32;
char _receivedChars [_numChars]; // প্রাপ্ত ডেটা সংরক্ষণ করার জন্য একটি অ্যারে
অকার্যকর সেটআপ() {
Serial.begin (9600);
Wire.begin (D2, D1);
বিলম্ব (5000);
}
voidloop () {
recvWithEndMarker ();
parseSendCommands ();
}
voidrecvWithEndMarker () {
স্ট্যাটিক বাইট ndx = 0;
char endMarker = '\ n';
char rc;
while (Serial.available ()> 0 && _newData == false) {
rc = Serial.read ();
যদি (rc! = endMarker) {
_receivedChars [ndx] = rc;
ndx ++;
যদি (ndx> = _numChars) {
ndx = _numChars - 1;
}
} অন্য {
_receivedChars [ndx] = '\ 0'; // স্ট্রিং বন্ধ করুন
ndx = 0;
_ নিউডাটা = সত্য;
}
}
}
voidparseSendCommands () {
যদি (_newData == সত্য) {
constchar delim [2] = "";
চার *টোকেন;
টোকেন = strtok (_receivedChars, delim);
char cmd = _receivedChars [0];
বাইট সূচক = 0;
বাইট মান = 0;
int i = 0;
while (টোকেন! = NULL) {
// সিরিয়াল.প্রিন্টলন (টোকেন);
আমি ++;
সুইচ (i) {
মামলা 1:
টোকেন = strtok (NULL, delim);
সূচক = atoi (টোকেন);
বিরতি;
case2:
টোকেন = strtok (NULL, delim);
যদি (টোকেন! = শূন্য) {
মান = atoi (টোকেন);
}
বিরতি;
ডিফল্ট:
টোকেন = শূন্য;
}
}
sendCmd (cmd, সূচক, মান);
_ নতুন ডেটা = মিথ্যা;
}
}
voidsendCmd (চার cmd, বাইট সূচক, বাইট মান) {
Serial.println ("-----");
Serial.println ("সেন্ডিং কমান্ড:");
Serial.println ("\ t" + স্ট্রিং (cmd) + "" + স্ট্রিং (সূচক) + "" + স্ট্রিং (মান));
Serial.println ("-----");
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // ডিভাইসে প্রেরণ
Wire.write (cmd); // একটি চর পাঠায়
Wire.write (সূচক); // একটি বাইট পাঠায়
Wire.write (মান); // একটি বাইট পাঠায়
Wire.endTransmission ();
বাইট প্রতিক্রিয়া = 0;
bool hadResponse = মিথ্যা;
যদি (cmd == 'G') {
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1);
যখন (Wire.available ()) // স্লেভ অনুরোধের চেয়ে কম পাঠাতে পারে
{
hadResponse = সত্য;
প্রতিক্রিয়া = Wire.read ();
}
যদি (hadResponse == true) {
Serial.println ("সাড়া পাওয়া:");
Serial.println (সাড়া);
} অন্য {
Serial.println ("কোন সাড়া নেই, ঠিকানা/সংযোগ চেক করুন");
}
}
}

GitHub দ্বারা d দিয়ে হোস্ট করা rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino দেখুন

ধাপ 8: পরবর্তী পদক্ষেপ

সফ্টওয়্যার/হার্ডওয়্যারের পরিবর্তনগুলি পরীক্ষা করার জন্য পর্যায়ক্রমে ফিরে যান।

আপনার প্রয়োজনীয়তা অনুযায়ী সফ্টওয়্যার/হার্ডওয়্যার পরিবর্তন করুন।

কোন অনুরোধ/অপ্টিমাইজেশান মন্তব্য।

প্রস্তাবিত: