সুচিপত্র:

কোভিড -১ St পরিসংখ্যান + রাস্পবেরি পাই + আই ২ সি এলসিডি: Ste টি ধাপ
কোভিড -১ St পরিসংখ্যান + রাস্পবেরি পাই + আই ২ সি এলসিডি: Ste টি ধাপ

ভিডিও: কোভিড -১ St পরিসংখ্যান + রাস্পবেরি পাই + আই ২ সি এলসিডি: Ste টি ধাপ

ভিডিও: কোভিড -১ St পরিসংখ্যান + রাস্পবেরি পাই + আই ২ সি এলসিডি: Ste টি ধাপ
ভিডিও: Getting Tested for the Flu or COVID-19 - Dr. DeGrauw 2024, জুলাই
Anonim
কোভিড -১ St পরিসংখ্যান + রাস্পবেরি পাই + আই ২ সি এলসিডি
কোভিড -১ St পরিসংখ্যান + রাস্পবেরি পাই + আই ২ সি এলসিডি

তাই এলোমেলোভাবে একদিন নীল থেকে বের হয়ে, আমি সিদ্ধান্ত নিয়েছিলাম যে আমি আমার চারপাশে পড়ে থাকা কয়েকটি অংশ নিয়ে আসব এবং এমন কিছু তৈরি করব যা আমাকে কোভিড -১ on এর বাস্তব সময়ের পরিসংখ্যান সরবরাহ করবে। আমি এটিকে সুন্দর দেখাতে বেশি সময় দেইনি কারণ যখন এই ইভেন্টটি ঘটবে না তখন কেন স্থায়ী কিছু তৈরি করবেন? অতএব, আমার ডিসপ্লেটি কেবল একটি ছোট কার্ডবোর্ড বাক্সে মাউন্ট করা হয়েছে।

প্রয়োজনীয় যন্ত্রাংশ:

  • রাস্পবেরি পাই - যে কোনও মডেল। আমি রাস্পবেরি পাই 3A+ ব্যবহার করেছি
  • 20x4 I2C LCD ডিসপ্লে - কোন বিশেষ ব্র্যান্ড নয়… কিন্তু I2C ব্যাকপ্যাকের প্রয়োজন আছে
  • মহিলা থেকে মহিলা জাম্পার তার - I2C কে Pi এর সাথে সংযুক্ত করতে তাদের মধ্যে মাত্র 4 টি

www.adafruit.com/product/4027

www.amazon.com/gp/product/B01GPUMP9C/ref=p…

www.amazon.com/gp/product/B01L5ULRUA/ref=p…

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

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

ধাপ 1: হার্ডওয়্যার সেটআপ

হার্ডওয়্যার সেটআপ
হার্ডওয়্যার সেটআপ

সংযুক্ত পিনআউট ছবি উল্লেখ করুন। এটি B+বলে, কিন্তু এটি প্রতিটি রাস্পবেরি পাই মডেলের ক্ষেত্রে প্রযোজ্য যা তার পরেও এসেছে।

এলসিডি ডিসপ্লেতে সংযুক্ত একটি I2C ব্যাকপ্যাকের সাথে, এই সংযোগটি কাজ করার জন্য শুধুমাত্র 4 টি তারের প্রয়োজন।

রাস্পবেরি পাই এর যে কোন একটি গ্রাউন্ড পিনের সাথে GND সংযুক্ত করুন: 6, 9, 14, 20, 25, 30, 34, 39 পিন। আমি এটি পিন 6 এর সাথে সংযুক্ত করেছি।

রাস্পবেরি পাই -তে 5 ভোল্ট পিনের যেকোন একটিতে VCC কে সংযুক্ত করুন: পিন 2, 4. আমি পিন 4 ব্যবহার করেছি

পিন 3 এ SDA সংযুক্ত করুন।

এসসিএলকে পিন 5 এর সাথে সংযুক্ত করুন।

আপনি যদি আমার সেটআপ অনুসরণ করেন, তাহলে আপনি GPIO হেডারগুলিতে 2x2 প্যাটার্নে সমস্ত 4 টি তারের সাথে শেষ করবেন।

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

আমি আমার পাই 3 এ+এর 4 টি কোণে নাইলন স্পেসারের সাথে একটি বাদাম এবং বোল্ট সংযুক্ত করেছি। এটি কঠোরভাবে optionচ্ছিক। আমি এটি করেছি কারণ আমার মাঝে মাঝে এটি একটি ধাতব পৃষ্ঠে থাকে, একটি পিআইতে আমার অস্থায়ী সেটআপগুলি পছন্দ করে না যা একটি কেসের ভিতরে থাকে, এবং এটি জগাখিচুড়ি করার ঝুঁকি নিতে চায় না কারণ আমি ধাতু থেকে এটি সরাতে ভুলে গেছি এটি চালু করার আগে পৃষ্ঠ।

ধাপ 2: পাই সফটওয়্যার সেটআপ

পাই সফটওয়্যার সেটআপ
পাই সফটওয়্যার সেটআপ
পাই সফটওয়্যার সেটআপ
পাই সফটওয়্যার সেটআপ
পাই সফটওয়্যার সেটআপ
পাই সফটওয়্যার সেটআপ

আমি ভূমিকাতে বলেছি, আপনি রাস্পবেরি পাই মডেলটি ব্যবহার করেন তা কোন ব্যাপার না। আমি এটি একটি রাস্পবেরি পাই 3A+ এ ওয়াইফাই এর মাধ্যমে ব্যবহার করছি কিন্তু ইথারনেট ক্যাবলের রাস্পবেরি পাই 2 এও এটি পরীক্ষা করেছি, এবং রাস্পবেরি পাই জিরো সংস্করণ 1.3 (সিরিয়াল ক্যামেরা সংযোগকারী সহ প্রথম পাই জিরো) একটি ইউএসবি ওয়াইফাই ডংলের সাথে।

আমি একটি মাইক্রোএসডি কার্ডে রাস্পবিয়ান কিভাবে ইনস্টল করব তা টাইপ করতে যাচ্ছি না কারণ এটি কীভাবে করতে হবে তার লক্ষ লক্ষ নির্দেশনা রয়েছে। আমার একটি 16GB মাইক্রোএসডি রয়েছে যা রাস্পবিয়ান বাস্টার লাইট চালাচ্ছে। একটি পার্শ্ব নোট, আমি প্রায় সবসময় রাস্পবিয়ান লাইট ব্যবহার করি কারণ আমার কোন প্রকল্পে অন্য অপ্রয়োজনীয় সফটওয়্যার প্যাকেজের প্রয়োজন নেই। যদি আমি apt-get ব্যবহার করে সফ্টওয়্যার ইনস্টল করি, তাহলে এটি অনুপস্থিত পূর্বশর্তগুলি ইনস্টল করবে।

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

Ptionচ্ছিক, কিন্তু আপনি PuTTY ব্যবহার করে SSH সংযোগ করতে সক্ষম হতে পারেন। আমি করেছিলাম.

সবকিছু আপডেট করুন তারপর রিবুট করুন:

sudo apt আপডেট

sudo apt upgrade -y sudo apt dist-upgrade sudo rpi-update sudo রিবুট

এটি একটি সেটআপ যা আমি এখানে দিয়ে যাব। আবার, এটি করার লক্ষ লক্ষ উপায় রয়েছে, তবে আমি যে সেরা রেফারেন্সটি পেয়েছি তা এখানে:

এখানে হাইলাইটস:

sudo apt i2c-tools ইনস্টল করুন

sudo apt python-smbus ইনস্টল করুন

আপনাকে I2C সক্ষম করতে হবে

sudo raspi-config

- 5 ইন্টারফেসিং বিকল্প

- P5 I2C

পরিবর্তনগুলি প্রয়োগ করতে পুনরায় বুট করুন

sudo রিবুট

এখন দেখার সময় হয়েছে যে আপনি এতদূর সঠিকভাবে এটি করেছেন কিনা

i2cdetect -y 1

যদি আপনার ডিসপ্লেটি চালিত হয় এবং আপনার রাস্পবেরি পাই দ্বারা দেখা যায়, তাহলে আপনার কাছে একটি চার্ট থাকবে। আমি অ্যামাজনে কেনা 20x4 এর ঠিকানা এবং এই প্রকল্পের জন্য ব্যবহার করছি 27. টেকনিক্যালি এটি পাইথন স্ক্রিপ্টগুলির জন্য 0x27 হিসাবে চিহ্নিত হবে যা পরে আসবে। আমি 2 16x2 ডিসপ্লেগুলির জন্য একই ঠিকানা প্রদর্শন করেছি যা আমি অ্যামাজনেও কিনেছি এবং একটি 40x2 আমি ইবেতে পেয়েছি।

ধাপ 3: পাইথন সেটআপ

তাই এখন জটিল জিনিসের জন্য। আমি যতটা সম্ভব সহজ রাখার চেষ্টা করব। শুরু করার জন্য, আমি শুধু হোম ডিরেক্টরিতে ফাইল লিখব।

I2C_LCD_driver.py স্পর্শ করুন

ন্যানো I2C_LCD_driver.py

আপনার নতুন তৈরি পাইথন স্ক্রিপ্টে নীচের বিষয়বস্তু আটকান।

#-*-কোডিং: utf-8-*- # মূল কোড এখানে পাওয়া যায়: #

"""

Compiled, mashed and generally mutilated 2014-2015 by Denis Pleic Made available under GNU GENERAL PUBLIC LICENSE

# Modified Python I2C library for Raspberry Pi

# as found on https://gist.github.com/DenisFromHR/cc863375a6e19… # Joined existing 'i2c_lib.py' and 'lcddriver.py' into a single library # added bits and pieces from various sources # By DenisFromHR (Denis Pleic) # 2015-02-10, ver 0.1

"""

# i2c bus (0 -- original Pi, 1 -- Rev 2 Pi)

I2CBUS = 0

# LCD Address

ADDRESS = 0x27

import smbus

from time import sleep

class i2c_device:

def _init_(self, addr, port=I2CBUS): self.addr = addr self.bus = smbus. SMBus(port)

# Write a single command

def write_cmd(self, cmd): self.bus.write_byte(self.addr, cmd) sleep(0.0001)

# Write a command and argument

def write_cmd_arg(self, cmd, data): self.bus.write_byte_data(self.addr, cmd, data) sleep(0.0001)

# Write a block of data

def write_block_data(self, cmd, data): self.bus.write_block_data(self.addr, cmd, data) sleep(0.0001)

# Read a single byte

def read(self): return self.bus.read_byte(self.addr)

# Read

def read_data(self, cmd): return self.bus.read_byte_data(self.addr, cmd)

# Read a block of data

def read_block_data(self, cmd): return self.bus.read_block_data(self.addr, cmd)

# commands

LCD_CLEARDISPLAY = 0x01 LCD_RETURNHOME = 0x02 LCD_ENTRYMODESET = 0x04 LCD_DISPLAYCONTROL = 0x08 LCD_CURSORSHIFT = 0x10 LCD_FUNCTIONSET = 0x20 LCD_SETCGRAMADDR = 0x40 LCD_SETDDRAMADDR = 0x80

# flags for display entry mode

LCD_ENTRYRIGHT = 0x00 LCD_ENTRYLEFT = 0x02 LCD_ENTRYSHIFTINCREMENT = 0x01 LCD_ENTRYSHIFTDECREMENT = 0x00

# flags for display on/off control

LCD_DISPLAYON = 0x04 LCD_DISPLAYOFF = 0x00 LCD_CURSORON = 0x02 LCD_CURSOROFF = 0x00 LCD_BLINKON = 0x01 LCD_BLINKOFF = 0x00

# flags for display/cursor shift

LCD_DISPLAYMOVE = 0x08 LCD_CURSORMOVE = 0x00 LCD_MOVERIGHT = 0x04 LCD_MOVELEFT = 0x00

# flags for function set

LCD_8BITMODE = 0x10 LCD_4BITMODE = 0x00 LCD_2LINE = 0x08 LCD_1LINE = 0x00 LCD_5x10DOTS = 0x04 LCD_5x8DOTS = 0x00

# flags for backlight control

LCD_BACKLIGHT = 0x08 LCD_NOBACKLIGHT = 0x00

En = 0b00000100 # Enable bit

Rw = 0b00000010 # Read/Write bit Rs = 0b00000001 # Register select bit

class lcd:

#initializes objects and lcd def _init_(self): self.lcd_device = i2c_device(ADDRESS)

self.lcd_write(0x03)

self.lcd_write(0x03) self.lcd_write(0x03) self.lcd_write(0x02)

self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)

self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON) self.lcd_write(LCD_CLEARDISPLAY) self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT) sleep(0.2)

# clocks EN to latch command

def lcd_strobe(self, data): self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT) sleep(.0005) self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT)) sleep(.0001)

def lcd_write_four_bits(self, data):

self.lcd_device.write_cmd(data | LCD_BACKLIGHT) self.lcd_strobe(data)

# write a command to lcd

def lcd_write(self, cmd, mode=0): self.lcd_write_four_bits(mode | (cmd & 0xF0)) self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0))

# write a character to lcd (or character rom) 0x09: backlight | RS=DR< # works! def lcd_write_char(self, charvalue, mode=1): self.lcd_write_four_bits(mode | (charvalue & 0xF0)) self.lcd_write_four_bits(mode | ((charvalue << 4) & 0xF0)) # put string function with optional char positioning def lcd_display_string(self, string, line=1, pos=0): if line == 1: pos_new = pos elif line == 2: pos_new = 0x40 + pos elif line == 3: pos_new = 0x14 + pos elif line == 4: pos_new = 0x54 + pos

self.lcd_write(0x80 + pos_new)

for char in string:

self.lcd_write(ord(char), Rs)

# clear lcd and set to home

def lcd_clear(self): self.lcd_write(LCD_CLEARDISPLAY) self.lcd_write(LCD_RETURNHOME)

# define backlight on/off (lcd.backlight(1); off= lcd.backlight(0)

def backlight(self, state): # for state, 1 = on, 0 = off if state == 1: self.lcd_device.write_cmd(LCD_BACKLIGHT) elif state == 0: self.lcd_device.write_cmd(LCD_NOBACKLIGHT)

# add custom characters (0 - 7)

def lcd_load_custom_chars(self, fontdata): self.lcd_write(0x40); for char in fontdata: for line in char: self.lcd_write_char(line)

The address in that content assumes your LCD address is 0x27. If this is not the case for you, you will need to change it on the line "ADDRESS = 0x27" before you type Ctrl+X to save and exit. Otherwise, just save and exit. This file will need to exist in the same directory as the script that we will use later.

That code was on "https://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/" just in case it did not paste correctly onto this page.

Now create and edit the main python script:

touch covid19.py

nano covid19.py

Paste the below text into your newly created python script.

import I2C_LCD_driverimport socket import time import fcntl import struct import json import urllib2

display = I2C_LCD_driver.lcd()

url = ("https://coronavirus-19-api.herokuapp.com/countries/usa") data = json.load(urllib2.urlopen(url))

try:

while True: data = json.load(urllib2.urlopen(url)) cases = data['cases'] todaycases = data['todayCases'] deaths = data['deaths'] todaydeaths = data['todayDeaths'] recovered = data['recovered'] active = data['active'] critical = data['critical'] casesperonemillion = data['casesPerOneMillion'] deathsperonemillion = data['deathsPerOneMillion'] display.lcd_display_string("COVID-19 Total Stats", 1) display.lcd_display_string("Cases: " + str(cases), 2) display.lcd_display_string("Deaths: " + str(deaths), 3) display.lcd_display_string("Recovered: " + str(recovered), 4) time.sleep(30) display.lcd_display_string(" ", 1) display.lcd_display_string(" ", 2) display.lcd_display_string(" ", 3) display.lcd_display_string(" ", 4) display.lcd_display_string("COVID-19: " + "%s" %time.strftime("%Y/%m/%d"), 1) display.lcd_display_string("Cases: " + str(todaycases), 2) display.lcd_display_string("Deaths: " + str(todaydeaths), 3) display.lcd_display_string("Active: " + str(active), 4) time.sleep(20) display.lcd_display_string(" ", 1) display.lcd_display_string(" ", 2) display.lcd_display_string(" ", 3) display.lcd_display_string(" str(recovered),="">

আমি জানি এই স্ক্রিপ্টটি বেশ অগোছালো, কিন্তু এটি কার্যকর। এটি যুক্তরাষ্ট্রে কোভিড -১ cases মামলার বর্তমান পরিসংখ্যান দেখাবে। মূল ডাটাবেস প্রতি 5 মিনিটে আপডেট করা হয়। আমার স্ক্রিপ্টটি 3 পৃষ্ঠার মধ্যে সম্পূর্ণ চক্র হতে 1 মিনিট সময় নেয় এবং প্রতিবার চক্রটি আবার শুরু হওয়ার সময় আপডেট করা সংখ্যাগুলি টানবে।

ধাপ 4: পাইথন চালান

পাইথন চালান
পাইথন চালান
পাইথন চালান
পাইথন চালান

চল শুরু করি:

পাইথন covid19.py

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

এই স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে চালানোর উপায় রয়েছে, তবে আমি এখানে সে সম্পর্কে বিস্তারিত জানব না। আমি এসএসএইচ এর সাথে পটিটির মাধ্যমে সংযুক্ত হওয়ার পরে আমি কেবল আমার কমান্ড চালাই। এটি চলার সময়, আপনি Ctrl+C না চাপলে অন্য কোন কমান্ড চালাতে পারবেন না।

ধাপ 5: যদি আমি মার্কিন যুক্তরাষ্ট্রে না থাকি?

অন্যান্য দেশের পরিসংখ্যান দেখানোর জন্য এই স্ক্রিপ্ট পরিবর্তন করা যেতে পারে। আপনি দেখতে পাচ্ছেন, আমার স্ক্রিপ্টের URL এখানে একটি API থেকে টেনে আনা হয়েছে: (এই পৃষ্ঠাগুলি দেখতে ইন্টারনেট এক্সপ্লোরার ব্যবহার করবেন না। এটি একটি.json ফাইল ডাউনলোড করার চেষ্টা করবে। আমি ক্রোম ব্যবহার করেছি)

coronavirus-19-api.herokuapp.com/countries/usa

এখন একই ঠিকানায় যান, কিন্তু একটি ফোল্ডার উচ্চতর

coronavirus-19-api.herokuapp.com/countries

এটি প্রতিটি দেশের পরিসংখ্যান তালিকাভুক্ত করে। স্পষ্টতই এই পৃষ্ঠা থেকে API ডেটা টানার চেষ্টা করা দু nightস্বপ্ন হবে। সুতরাং আপনার নির্দিষ্ট দেশের জন্য পৃষ্ঠাটি খোলা ভাল। কানাডায় আমাদের বন্ধুদের এই URL- এ স্ক্রিপ্ট সম্পাদনা করতে হবে:

coronavirus-19-api.herokuapp.com/countries/canada

এখানে খুব গুরুত্বপূর্ণ নোট। এপিআই -এর ইউআরএল সুনির্দিষ্ট হওয়া দরকার … মানে ইউআরএলে কোনও ফাঁকা জায়গা নেই। ওয়েব ব্রাউজিংয়ে, একটি ওয়েব ঠিকানায় স্পেসগুলি "%20" দ্বারা প্রতিস্থাপিত হয় এবং এর সাথে বলা হয়েছে, উদাহরণস্বরূপ নিউজিল্যান্ডের মতো 2 অংশের নামের দেশগুলিতে আমাদের বন্ধুদের এই স্ক্রিপ্টের ইউআরএল প্রতিস্থাপন করতে হবে:

coronavirus-19-api.herokuapp.com/countries/new%20zealand

ধাপ 6: চূড়ান্ত চিন্তা

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

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

যে কেউ পড়ার জন্য, আমি এই নির্দেশযোগ্য একটি চিৎকার দিতে চান:

www.instructables.com/id/DIY-Hand-Sanitize…

আমি এখনও এটি চেষ্টা করিনি, কিন্তু আমার কাছে সেই সঠিক উপাদানগুলি রয়েছে, এবং আমি এটি কিছু সময় চেষ্টা করতে পারি।