সুচিপত্র:
- ধাপ 1: ভূমিকা
- ধাপ 2: বৈশিষ্ট্য
- ধাপ 3: ESP01 128 জিপিআইও থাকতে পারে
- ধাপ 4: MCP23016
- ধাপ 5: ঘড়ি
- ধাপ 6: ঠিকানা
- ধাপ 7: কমান্ড
- ধাপ 8: বিভাগ:
- ধাপ 9: যোগাযোগের জন্য কাঠামো
- ধাপ 10: প্রোগ্রাম
- ধাপ 11: ESP01
- ধাপ 12: ESP01 মাউন্ট করা
- ধাপ 13: NodeMCU ESP-12E
- ধাপ 14: NodeMCU ESP-12E মাউন্ট করা
- ধাপ 15: ওয়াইফাই নোড MCU-32S ESP-WROOM-32
- ধাপ 16: ওয়াইফাই মাউন্টিং নোড MCU-32S ESP-WROOM-32
- ধাপ 17: লাইব্রেরি এবং পরিবর্তনশীল
- ধাপ 18: সেটআপ
- ধাপ 19: কনফিগার পোর্ট
- ধাপ 20: WriteBlockData & CheckButton
- ধাপ 21: ReadPin এবং ValueFromPin
- ধাপ 22: ESP8266 প্রোগ্রাম
- ধাপ 23: গুরুত্বপূর্ণ
- ধাপ 24: ফাইল
ভিডিও: ESP32, ESP8266, এবং Arduino এর জন্য IO Expander: 24 ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 08:02
আপনি কি আপনার ESP32, ESP8266, বা Arduino এর IO গুলি প্রসারিত করতে চান? এবং আপনি কি 16 টি নতুন GPIO- এর সম্ভাবনার কথা ভেবেছেন যা I2C বাস ব্যবহার করে নিয়ন্ত্রণ করা যায়? আচ্ছা আজ, আমি আপনাকে GPIO সম্প্রসারণকারী MCP23016 এর সাথে পরিচয় করিয়ে দেব। এছাড়াও, আমি আপনাকে MCP23016 এর সাথে একটি মাইক্রোকন্ট্রোলারের সাথে কীভাবে যোগাযোগ করব তা দেখাব। আমি একটি প্রোগ্রাম তৈরির কথাও বলব যেখানে আমরা এই মাইক্রোকন্ট্রোলারের মাত্র 2 টি পিন ব্যবহার করব সম্প্রসারণকারীর সাথে যোগাযোগের জন্য। আমরা এলইডি এবং বোতাম নিয়ন্ত্রণের জন্য এটি ব্যবহার করব।
ধাপ 1: ভূমিকা
MCP23016 ডিভাইসটি I2C বাস ব্যবহার করে GPIO সম্প্রসারণের জন্য 16 বিট সরবরাহ করে। প্রতিটি বিট পৃথকভাবে কনফিগার করা যেতে পারে (ইনপুট বা আউটপুট)।
MCP23016 ইনপুট, আউটপুট এবং পোলারিটি নির্বাচনের জন্য একাধিক 8-বিট সেটিংস নিয়ে গঠিত।
অন্যান্য উদাহরণের মধ্যে সুইচ, সেন্সর, বোতাম এবং এলইডির জন্য আইওগুলির প্রয়োজন হলে সম্প্রসারণকারীরা একটি সহজ সমাধান প্রদান করে।
ধাপ 2: বৈশিষ্ট্য
16 ইনপুট / আউটপুট পিন (16 ইনপুট মান)
দ্রুত I2C বাস ঘড়ির ফ্রিকোয়েন্সি (0-400 kbit/s)
তিনটি হার্ডওয়্যার অ্যাড্রেস পিন আটটি ডিভাইস পর্যন্ত ব্যবহারের অনুমতি দেয়
ইন্টারাপ্ট পোর্ট ক্যাপচার রেকর্ডার
ইনপুট পোর্ট ডেটার পোলারিটি সেট করার জন্য পোলারিটি রিভার্সিং রেজিস্টার
বেশিরভাগ মাইক্রোকন্ট্রোলারের সাথে সামঞ্জস্যপূর্ণ
ধাপ 3: ESP01 128 জিপিআইও থাকতে পারে
একটি উদাহরণ যা এই সম্প্রসারণকারীর মাত্রা দেখায় তা হল ESP01 এর সাথে এর ব্যবহার, যা মাত্র দুটি IOS দিয়ে আটটি সম্প্রসারণকারীর সাথে সংযুক্ত হতে পারে, 128 GPIO- তে পৌঁছতে পারে।
ধাপ 4: MCP23016
এখানে, আমাদের সম্প্রসারণকারীর পরিকল্পিত আছে, যার আটটি বিটের দুটি গ্রুপ রয়েছে। এটি মোট 16 টি পোর্টের জন্য তৈরি করে। একটি বিঘ্নিত পিন ছাড়াও, এটিতে CLK পিন রয়েছে, যা ক্যাপাসিটর এবং প্রতিরোধককে সংযুক্ত করে, যা একটি লজিক পোর্টে অভ্যন্তরীণভাবে সংযুক্ত থাকে। এটি একটি স্ফটিক অসিলেটরের ধারণা ব্যবহার করে ঘড়িটি তৈরি করা, যার জন্য 1MHz ঘড়ি প্রয়োজন। টিপি পিন ঘড়ি পরিমাপ করতে ব্যবহৃত হয়। পিন A0, A1, এবং A2 বাইনারি ঠিকানা।
ধাপ 5: ঘড়ি
MCP23016 অতএব অভ্যন্তরীণ ঘড়ির গতি নির্ধারণের জন্য একটি বাহ্যিক আরসি সার্কিট ব্যবহার করে। যথাযথভাবে কাজ করার জন্য 1 মেগাহার্টজের একটি অভ্যন্তরীণ ঘড়ি প্রয়োজন (সাধারণত)। অভ্যন্তরীণ ঘড়িটি টিপি পিনে পরিমাপ করা যায়। REXT এবং CEXT এর জন্য প্রস্তাবিত মান নিচে দেখানো হয়েছে।
ধাপ 6: ঠিকানা
MCP23016 এর ঠিকানা সংজ্ঞায়িত করার জন্য, আমরা তারপর পিন A0, A1, এবং A2 ব্যবহার করি। ঠিকানা পরিবর্তনের জন্য তাদের উচ্চ বা নিম্ন এ ছেড়ে দিন।
ঠিকানাটি নিম্নরূপ গঠিত হবে:
MCP_Address = 20 + (A0 A1 A2)
যেখানে A0 A1 A2 উচ্চ / নিম্ন মান নিতে পারে, এটি 0 থেকে 7 পর্যন্ত একটি বাইনারি সংখ্যা গঠন করে।
উদাহরণ স্বরূপ:
A0> GND, A1> GND, A2> GND (মানে 000, তারপর 20 + 0 = 20)
অথবা, A0> উচ্চ, A1> GND, A2> উচ্চ (মানে 101, তারপর 20 + 5 = 25)
ধাপ 7: কমান্ড
নীচে যোগাযোগের জন্য কমান্ড সহ একটি টেবিল রয়েছে। আসুন GP0 এবং GP1, সেইসাথে IODIR0 এবং IODIR1 ব্যবহার করি।
ধাপ 8: বিভাগ:
GP0 / GP1 - ডেটা পোর্ট রেজিস্টার
দুটি রেজিস্টার রয়েছে যা দুটি জিপিআইও পোর্টে অ্যাক্সেস প্রদান করে।
রেজিস্টার পড়া সেই বন্দরের পিনের অবস্থা প্রদান করে।
বিট = 1> উচ্চ বিট = 0> কম
OLAT0 / OLAT1 - আউটপুট LACTCH রেজিস্টার
দুটি পোর্টের আউটপুট পোর্টে প্রবেশের জন্য দুটি রেজিস্টার রয়েছে।
IPOL0 / IPOL1 - ইনপুট পোলারিটি রেজিস্টার
এই নিবন্ধগুলি ব্যবহারকারীকে ইনপুট পোর্ট ডেটার (GP0 এবং GP1) পোলারিটি কনফিগার করার অনুমতি দেয়।
IODIR0 / IODIR1
দুটি রেজিস্টার আছে যা পিন মোড নিয়ন্ত্রণ করে। (ইনপুট বা আউটপুট)
বিট = 1> ইনপুট বিট = 0> আউটপুট
INTCAP0 / INTCAP1 - ইন্টারাপ্ট ক্যাপচার রেজিস্টার
এগুলি এমন রেজিস্টার যা পোর্টের মান ধারণ করে যা বাধা সৃষ্টি করে।
IOCON0 / IOCON1 - I / O Expander Control Register
এটি MCP23016 এর কার্যকারিতা নিয়ন্ত্রণ করে।
বিট 0 সেট করা
Bit0 = 0> (ডিফল্ট) সর্বোচ্চ পোর্ট কার্যকলাপ সনাক্তকরণের সময় 32ms (কম বিদ্যুত ব্যবহার)
Bit0 = 1> বন্দরে সর্বাধিক কার্যকলাপ সনাক্তকরণের সময় 200usec (উচ্চ-শক্তি খরচ)
ধাপ 9: যোগাযোগের জন্য কাঠামো
আমি এখানে ওয়্যার ক্লাস দেখাই, যা আমাদের মূল আরডুইনোতে I2C যোগাযোগ, যা সম্প্রসারণকারীকে Arduino Uno এবং Mega এর সাথে কাজ করার অনুমতি দেয়। যাইহোক, পরবর্তীতে ইতিমধ্যে বেশ কয়েকটি আইও রয়েছে। আমরা এখানে চিপের ঠিকানা, অ্যাক্সেস কন্ট্রোল, যা রেজিস্টারের কোড, পাশাপাশি ডেটা নিয়ে কাজ করি।
ধাপ 10: প্রোগ্রাম
আমাদের প্রোগ্রামে আরও GPIO ব্যবহার করার জন্য MCP23016 এর সাথে ESP32 যোগাযোগ করা হয়। আমাদের তখন MCP23016 এর সাথে একটি বাটন এবং কিছু LED সংযুক্ত থাকবে। আমরা শুধুমাত্র I2C বাস ব্যবহার করে তাদের সবাইকে নিয়ন্ত্রণ করব। সুতরাং, শুধুমাত্র দুটি ESP32 পিন ব্যবহার করা হবে। আপনি ভিডিওতে নীচের ছবির সার্কিট দেখতে পারেন।
ধাপ 11: ESP01
এখানে, আমি ESP01 এর Pinout দেখাই।
ধাপ 12: ESP01 মাউন্ট করা
এই উদাহরণে, আমাদের SDI- তে GPIO0 সংযুক্ত আছে, এবং GPIO2 এসসিএলে সংযুক্ত আছে। আমাদের একটি রিলে বোর্ড, একটি বুজার এবং একটি LED রয়েছে। অন্য বন্দরে, GP1.0 এ, আমাদের একটি রোধক সহ আরো একটি LED আছে।
ধাপ 13: NodeMCU ESP-12E
এখানে, আমাদের NodeMCU ESP-12E এর Pinout আছে।
ধাপ 14: NodeMCU ESP-12E মাউন্ট করা
এই ক্ষেত্রে, প্রথম উদাহরণ থেকে একমাত্র পার্থক্য হল যে আপনি যথাক্রমে SDA এবং SC- এ D1 এবং D2 সংযুক্ত করেছেন।
ধাপ 15: ওয়াইফাই নোড MCU-32S ESP-WROOM-32
এখানে WiFi NodeMCU-32S ESP-WROOM-32 এর পিনআউট।
ধাপ 16: ওয়াইফাই মাউন্টিং নোড MCU-32S ESP-WROOM-32
এই সময়, অন্য দুটি উদাহরণ থেকে প্রধান পার্থক্য হল বোতাম, এবং তিনটি জ্বলজ্বলে LEDs। এখানে, এসডিএ জিপিআইও 19 এর সাথে সংযুক্ত, যখন এসসিএল জিপিআইও 23 এর সাথে সংযুক্ত।
ধাপ 17: লাইব্রেরি এবং পরিবর্তনশীল
প্রথমত, আমরা Wire.h অন্তর্ভুক্ত করব, যা i2c যোগাযোগের জন্য দায়ী, সেইসাথে MCP23016 এর i2c ঠিকানা সেট করা। আমি বেশ কয়েকটি কমান্ড দেখাই, এমনকি কিছু যা আমরা এই প্রকল্পে ব্যবহার করি না।
#অন্তর্ভুক্ত // Wire.h লাইব্রেরির ব্যবহার নির্দিষ্ট করুন। // endereço I2C do MCP23016 #MCPAddress সংজ্ঞায়িত করুন 0x20 // রেজিস্টার রিলেশনশিপের জন্য কমান্ড বাইট: টেবিল: 1-3 মাইক্রোচিপ MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x0 // DATA PORT 0 পোর্ট রেজিস্টার 1 #ডিফাইন OLAT0 0x02 // আউটপুট লাচ রেজিস্টার 0 #ডিফাইন OLAT1 0x03 // আউটপুট ল্যাচ রেজিস্টার 1 #ডিফাইন আইপিএল 0 0x04 // ইনপুট পোলারিটি পোর্ট রেজিস্টার 0 #আইডাইন পোর্ট 0 #আইডাইন 0 0 /I/O দিকনির্দেশক নিবন্ধক 0 #IODIR1 0x07 // I/O নির্দেশ নিবন্ধনকারী 1 #সংজ্ঞায়িত করুন INTCAP0 0x08 // অন্তর্দৃষ্টি ক্যাপচার নিবন্ধক 0 #নির্ধারিত INTCAP1 0x09 // অন্তর্বর্তী ক্যাপচার I080/08 রেজিস্টার 0 #IOCON1 0x0B নির্ধারণ করুন // I/O এক্সপেন্ডার কন্ট্রোল রেজিস্টার 1
ধাপ 18: সেটআপ
এখানে আমাদের চারটি ভিন্ন ধরণের মাইক্রোকন্ট্রোলার শুরু করার কাজ রয়েছে। আমরা ফ্রিকোয়েন্সি পরীক্ষা করি, জিপিআইও সেট আপ করি এবং পিন সেট করি। লুপে, আমরা বোতামের অবস্থা পরীক্ষা করি।
অকার্যকর সেটআপ () {Serial.begin (9600); বিলম্ব (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // Frequencia // configura o GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // configura o GPIO1 como INPUT o GP1.0 e como OUTPUT os outros GP1 configurePort (IODIR1, 0x01); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); } void loop () {// verifica e o botão GP foi pressionado checkButton (GP1); } // শেষ লুপ
ধাপ 19: কনফিগার পোর্ট
এই ধাপে, আমরা GPIO পিনের মোড কনফিগার করি এবং পোর্টগুলির মোড চিহ্নিত করি।
// configura o GPIO (GP0 ou GP1) // como parametro passamos: // port: GP0 ou GP1 // custom: INPUT para todos as portas do GP trabalharem como entrada // OUTPUT para todos as portas do GP trabalharem como saya/ / custom um valor de 0-255 indicando o modo das portas (1 = INPUT, 0 = OUTPUT) // ex: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, o restando como saya void configurePort (uint8_t পোর্ট, uint8_t কাস্টম) {if (custom == INPUT) {writeBlockData (port, 0xFF); } অন্যথায় যদি (কাস্টম == আউটপুট) {writeBlockData (পোর্ট, 0x00); } অন্যথায় {writeBlockData (পোর্ট, কাস্টম); }}
ধাপ 20: WriteBlockData & CheckButton
এখানে, আমরা i2c বাসের মাধ্যমে MCP23016- এ ডেটা পাঠাই, বোতামের অবস্থা পরীক্ষা করি এবং চাপ দেওয়ার বা না থাকার শর্ত বিবেচনা করে পরবর্তী পদক্ষেপ নির্দেশ করি।
// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (registrador) // data: dados (0-255) void writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (তথ্য); Wire.endTransmission (); বিলম্ব (10); }
// verifica se o botão foi pressionado // parametro GP: GP0 ou GP1 void checkButton (uint8_t GP) {// faz a leitura do pino 0 no GP fornecido uint8_t btn = readPin (0, GP); // se botão pressionado, seta para HIGH as portas GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
ধাপ 21: ReadPin এবং ValueFromPin
আমরা এখানে একটি নির্দিষ্ট পিন পড়া, এবং পছন্দসই অবস্থানে বিট মান ফেরত নিয়ে কাজ করি।
// faz a leitura de um pino específico // pin: pino desejado (0-7) // gp: GP0 ou GP1 // retorno: 0 ou 1 uint8_t readPin (uint8_t pin, uint8_t gp) {uint8_t statusGP = 0; Wire.beginTransmission (MCPAddress); Wire.write (জিপি); Wire.endTransmission (); Wire.requestFrom (MCPAddress, 1); // ler do chip 1 byte statusGP = Wire.read (); রিটার্ন মান ফ্রমপিন (পিন, স্ট্যাটাস জিপি); } // retorna o valor do bit na posição desejada // pin: posição do bit (0-7) // statusGP: valor lido do GP (0-255) uint8_t valueFromPin (uint8_t pin, uint8_t statusGP) {return (statusGP & (0x0001 << পিন)) == 0? 0: 1; }
ধাপ 22: ESP8266 প্রোগ্রাম
এখান থেকে, আমরা দেখব কিভাবে আমরা ESP-01 এবং NodeMCU ESP-12E এ যে প্রোগ্রামটি ব্যবহার করেছি তা তৈরি করা হয়েছে, যা আমাদের বুঝতে সাহায্য করে যে তাদের মধ্যে পার্থক্যগুলি কীভাবে ন্যূনতম।
আমরা শুধুমাত্র i2c কমিউনিকেশন কনস্ট্রাক্টরের লাইন পরিবর্তন করব, যা ওয়্যার অবজেক্টের শুরু পদ্ধতি।
আমরা যে প্লেটটি সংকলন করতে যাচ্ছি সে অনুযায়ী লাইনটিকে কেবল অসম্পূর্ণ করুন।
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ইএসপি -01
সেটআপ
লক্ষ্য করুন যে নির্মাতা এখনও মন্তব্য করেছেন। অতএব, আপনার বোর্ড অনুযায়ী অস্বস্তি (ESP-01 বা nodeMCU ESP12-E)।
অকার্যকর সেটআপ () {Serial.begin (9600); বিলম্ব (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // Frequencia // configura o GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // configura o GPIO1 como OUTPUT (todos os pinos) configurePort (IODIR1, OUTPUT); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000001); }
লুপ
লুপে, আমরা প্রতি 1 সেকেন্ডে পিনগুলি স্যুইচ করি। এইভাবে, যখন GP0 এর pin0 চালু থাকে, GP1 এর পিনগুলি বন্ধ থাকে। যখন GP1 এর pin0 চালু থাকে, GP0 পিন বন্ধ থাকে।
void loop () {// seta o pino 7 do GP0 como HIGH e os demais como LOW writeBlockData (GP0, B10000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); বিলম্ব (1000); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta o pino 0 do GP1 como HIGH e os demais como LOW writeBlockData (GP1, B00000001); বিলম্ব (1000); } // শেষ লুপ
ধাপ 23: গুরুত্বপূর্ণ
ব্যবহৃত ভেরিয়েবল এবং লাইব্রেরি একইভাবে আমরা ESP32 এর জন্য যে প্রোগ্রামটি করেছি, সেইসাথে কনফিগারপোর্ট এবং রাইটব্লকডাটা পদ্ধতি।
ধাপ 24: ফাইল
ফাইল ডাউনলোড করুন:
পিডিএফ
INO (ESP8266)
INO (ESP32)
প্রস্তাবিত:
কার্ডবোর্ড থেকে DIY পিসি স্টিয়ারিং হুইল এবং প্যাডেল! (প্রতিক্রিয়া, প্যাডেল শিফটার, ডিসপ্লে) রেসিং সিমুলেটর এবং গেমসের জন্য: 9 টি ধাপ
কার্ডবোর্ড থেকে DIY পিসি স্টিয়ারিং হুইল এবং প্যাডেল! (প্রতিক্রিয়া, প্যাডেল শিফটার, ডিসপ্লে) রেসিং সিমুলেটর এবং গেমসের জন্য: আরে সবাই! এই বিরক্তিকর সময়ে, আমরা সবাই কিছু করার জন্য খুঁজছি। বাস্তব জীবনের রেসিং ইভেন্টগুলি বাতিল করা হয়েছে এবং সিমুলেটর দিয়ে প্রতিস্থাপিত হয়েছে। আমি একটি সস্তা সিমুলেটর তৈরির সিদ্ধান্ত নিয়েছি যা নিশ্ছিদ্রভাবে কাজ করে, যা
ESP8266 NodeMCU অ্যাক্সেস পয়েন্ট (AP) ওয়েব সার্ভারের জন্য DT11 তাপমাত্রা সেন্সর এবং মুদ্রণ তাপমাত্রা এবং ব্রাউজারে আর্দ্রতা সহ: 5 টি পদক্ষেপ
ওয়েব সার্ভারের জন্য ESP8266 NodeMCU অ্যাক্সেস পয়েন্ট (AP) DT11 তাপমাত্রা সেন্সর এবং মুদ্রণ তাপমাত্রা এবং ব্রাউজারে আর্দ্রতা: হাই বন্ধুরা আমরা বেশিরভাগ প্রকল্পে ESP8266 ব্যবহার করি এবং বেশিরভাগ প্রকল্পে আমরা ESP8266 ব্যবহার করি একটি ওয়েব সার্ভার হিসাবে যাতে ডেটা অ্যাক্সেস করা যায় ESP8266 দ্বারা হোস্ট করা ওয়েবসাইট সার্ভার অ্যাক্সেস করে ওয়াইফাই এর উপর যেকোনো ডিভাইস কিন্তু একমাত্র সমস্যা হল আমাদের জন্য একটি ওয়ার্কিং রাউটার দরকার
অতিস্বনক সেন্সরের জন্য 3.3V মোড (ESP32/ESP8266, কণা ফোটন, ইত্যাদি 3.3V লজিকের জন্য HC-SR04 প্রস্তুত করুন): 4 টি ধাপ
অতিস্বনক সেন্সরের জন্য 3.3V মোড (ESP32/ESP8266, কণা ফোটন, ইত্যাদি 3.3V লজিকের জন্য HC-SR04 প্রস্তুত করুন): TL; ভোল্টেজ ডিভাইডার (ইকো ট্রেস -> 2.7kΩ -> ইকো পিন -> 4.7kΩ -> জিএনডি) সম্পাদনা: ESP8266 আসলে GPIO তে 5V সহনশীল কিনা তা নিয়ে কিছু বিতর্ক হয়েছে
নিজেকে 12V -এর জন্য পুনর্নির্মাণের পরিবর্তে LED লাইট স্ট্রিংগুলির জন্য 12V-to-AC- লাইন বৈদ্যুতিন সংকেতের মেরু বদল করার জন্য নিজেকে বোঝান: 3 ধাপ
নিজেকে 12V এর জন্য রি-ওয়ারিংয়ের পরিবর্তে LED লাইট স্ট্রিংগুলির জন্য 12V-to-AC- লাইন বৈদ্যুতিন সংকেতের মেরু বদল করার জন্য নিজেকে বোঝান: আমার পরিকল্পনাটি সহজ ছিল। আমি একটি প্রাচীর-চালিত LED আলোর স্ট্রিংকে টুকরো টুকরো করে কাটতে চেয়েছিলাম এবং 12 ভোল্ট বন্ধ করার জন্য এটিকে পুনরায় চালিত করেছিলাম। বিকল্প ছিল একটি পাওয়ার ইনভার্টার ব্যবহার করা, কিন্তু আমরা সবাই জানি তারা ভয়ানক অদক্ষ, তাই না? ঠিক? নাকি তারা?
গিটার এম্প টিল্ট সম্পূর্ণ মাথা বা অর্ধেক স্ট্যাকের জন্য পৃথক মাথা, এবং আরও অনেক কিছুর জন্য দাঁড়িয়ে আছে: 5 টি ধাপ
গিটার এম্প টিল্ট স্ট্যান্ড সম্পূর্ণ বা অর্ধেক স্ট্যাকের জন্য পৃথক মাথা, এবং আরো জন্য। স্থানীয় মিউজিক স্টোরের ঝাঁকুনি আমাকে তার মূল্যবান নতুন মার্শাল স্ট্যাকগুলি রাখতে দেয় না এবং আমাকে ছুড়ে ফেলে দেয়। আমি তাকে এত ছোট মনের জন্য দোষ দিতে পারি না