Სარჩევი:

TheAir - გაზის სენსორის პროექტი: 10 ნაბიჯი
TheAir - გაზის სენსორის პროექტი: 10 ნაბიჯი

ვიდეო: TheAir - გაზის სენსორის პროექტი: 10 ნაბიჯი

ვიდეო: TheAir - გაზის სენსორის პროექტი: 10 ნაბიჯი
ვიდეო: ოსკარ უაილდი - "დორიან გრეის პორტრეტი" - აუდიო წიგნი 2024, ივლისი
Anonim
TheAir - გაზის სენსორის პროექტი
TheAir - გაზის სენსორის პროექტი

ნახშირორჟანგი და ნახშირორჟანგი, ასევე ცნობილი როგორც CO და CO2. გაზები, რომლებიც უფერო, უსუნო, უგემოვნო და გულწრფელად საშიშია, როდესაც დახურულ ოთახში მაღალი კონცენტრაციაა. თუ თქვენ ცხოვრობთ, თქვით, მაგალითად, სტუდენტურ ოთახში, რომელიც ცუდად არის იზოლირებული, არ არის კარგი ჰაერი და რატომღაც, ტოსტერი უცნაურ ხმას გამოსცემს სადღეგრძელოს გაკეთებისას. შემდეგ თქვენ შეიძლება შეხვიდეთ ამ გაზებთან და როდესაც ეს მოხდება, ვიმედოვნებთ, რომ ის მხოლოდ მცირე თავის ტკივილით მთავრდება, რაც იწვევს მაღალი კონცენტრაციით, შეიძლება დაგაკვალიანოთ ან თუნდაც მოგკლათ (თუმცა ძალიან იშვიათად).

ამიტომ გადავწყვიტე ამ პროექტის შემუშავება. ჩემი იდეა მარტივია, გამოიყენეთ ფანები ჰაერის ნაკადის შესაქმნელად. კარგი ჰაერი და ცუდი ჰაერი ასე ვთქვათ. დამატებითი სარგებლობისთვის, მე დავამატე დამატებითი ტემპერატურის სენსორი, ღილაკი ხელით გააქტიურების თაყვანისმცემლებისთვის და ასევე ვებ – გვერდი მათთვის, ვისაც უყვარს სტატისტიკის ნახვა და/ან თაყვანისმცემლების გააქტიურება მათი კომპიუტერიდან.

როგორც სტუდენტი, მშობელი, მარტოხელა ადამიანი ან ცოცხალი არსება. ეს არის ის, რისი თავიდან აცილებაც გსურთ, როდესაც ცხოვრობთ საკუთარი სახლის კომფორტში. ეს ეხმარება მათ, ვისაც უყვარს მათი ცხოვრება ოდნავ გაუადვილოს.

მარაგები

  • ჟოლო Pi 3+
  • მინი USB დამტენი 5V/2.5A
  • მიკრო SD ბარათი
  • სენსორები

    • MQ-7 (CO)
    • MQ-135 (CO2)
    • DS18B20 (ტემპერატურა)
  • 2 x 12V DC ვენტილატორი
  • 2 x 2n2222 ტრანზისტორი
  • LCD ეკრანი 16*2
  • Pushbutton
  • MCP3008
  • ლოგის დონის გადამყვანი
  • Ethernet კაბელი (დაყენების მიზეზების გამო)

ნაბიჯი 1: ჟოლოს დაყენება

ჟოლოს დაყენება
ჟოლოს დაყენება
ჟოლოს დაყენება
ჟოლოს დაყენება

Rpi– სთან მუშაობის დაწყებამდე დაგვჭირდება პროგრამული უზრუნველყოფა.

  • WinSCP ან FilleZilla (სურვილისამებრ თუ გსურთ ფაილების გადატანა თქვენი კომპიუტერიდან Rpi– ზე)
  • Win32 დისკი ან Etcher (რომელსაც თქვენ უფრო მეტად ანიჭებთ უპირატესობას)
  • Putty ან MobaXterm (რომელიც თქვენ უფრო გირჩევნიათ)
  • რასპბიური სურათი დესკტოპით

სანამ დავიწყებ, მინდა აღვნიშნო, რომ ამ გაკვეთილის გაკეთებისას, როდესაც მე ვირჩევ პროგრამას სხვაზე, არ ნიშნავს იმას, რომ მე გირჩევთ მას. მაგალითად, მე მომწონს etcher– ის გამოყენება, რადგან უფრო მოსახერხებელია, მაგრამ Win32– ს აქვს შესაძლებლობა შექმნას სარეზერვო ასლები. ახლა ეს არის ჩემი სისტემის გარეთ, დავიწყოთ.

თუ თქვენ უკვე გაქვთ Rpi, რომელიც დაკავშირებულია თქვენს wifi ქსელთან, გადადით მე –3 საფეხურზე.

ჯერ ჩვენ გამოვიყენებთ Etcher- ს Raspbian გამოსახულების თქვენს SD ბარათზე დასაყენებლად. სანამ SD ბარათს ამოვიღებთ, ჩვენ შევცვლით cmdline.txt ფაილში არსებულ რაღაცეებს, რომელთა ნახვაც შესაძლებელია სურათზე. გახსენით.txt ფაილი -> დაამატეთ ეს სტრიქონი "ip = 169.254.10.1" (ბრჭყალების გარეშე) ხაზის ბოლოს (ყველა 1 სტრიქონზე) -> ფაილის შენახვა

მეორე გააკეთეთ ცარიელი საქაღალდე სახელწოდებით "ssh" ჩატვირთვის დანაყოფში (ბრჭყალების გარეშე).

ამის შემდეგ შეგიძლიათ უსაფრთხოდ ამოიღოთ Microsd და ჩადოთ Rpi– ში.

მყარი კოდირებული სტატიკური IP– ის მიზეზი არის ის, რომ გაუადვილოს Rpi– სთან დაკავშირება. თუ რაიმე მიზეზით Rpi– ს არ აქვს IP DHCP– ით, მაშინ თქვენ მარტივად გამოიყენებთ სტატიკურ IP– ს.

ნაბიჯი 2: კავშირის დამყარება და Rpi უკაბელო კავშირი თქვენს ადგილობრივ ქსელთან

კავშირის დამყარება და Rpi უკაბელო კავშირი თქვენს ადგილობრივ ქსელთან
კავშირის დამყარება და Rpi უკაბელო კავშირი თქვენს ადგილობრივ ქსელთან
კავშირის დამყარება და Rpi უკაბელო კავშირი თქვენს ადგილობრივ ქსელთან
კავშირის დამყარება და Rpi უკაბელო კავშირი თქვენს ადგილობრივ ქსელთან
კავშირის დამყარება და Rpi უკაბელო კავშირი თქვენს ადგილობრივ ქსელთან
კავშირის დამყარება და Rpi უკაბელო კავშირი თქვენს ადგილობრივ ქსელთან
კავშირის დამყარება და Rpi უკაბელო კავშირი თქვენს ადგილობრივ ქსელთან
კავშირის დამყარება და Rpi უკაბელო კავშირი თქვენს ადგილობრივ ქსელთან

ჩვენ ვაპირებთ ჩავტვირთოთ Rpi -> დავუკავშიროთ Ethernet კაბელი კომპიუტერსა და Rpi- ს შორის.

  1. დაიწყეთ Putty და შეავსეთ ეს:

    • მასპინძლის სახელი (ან IP მისამართი): 169.254.10.1
    • პორტი: 22
  2. გამოჩნდება ტერმინალი და ჩაწერეთ ნაგულისხმევი მომხმარებლის სახელი და პაროლი:

    • მომხმარებლის სახელი: pi
    • პაროლი: ჟოლო

ახლა, როდესაც ჩვენ ადგილობრივად ვართ დაკავშირებული rpi– სთან, ჩვენ გვსურს, რომ Rpi– ს ჰქონდეს კავშირი თქვენს wifi– სთან.

  1. დამატებითი: ჩაწერეთ "sudo raspi-config"
  2. აქ დაგჭირდებათ პაროლის შეცვლა pi მომხმარებლისთვის (უსაფრთხოების მიზეზები)
  3. ამის შემდეგ გადადით ლოკალიზაციის პარამეტრებზე -> დროის შეცვლა (აირჩიეთ სწორი) -> შემდეგ გადადით Wifi ქვეყანა -> აირჩიეთ ქვეყანა.
  4. დახურეთ raspi-config და გადატვირთეთ.
  5. სისტემაში შესვლისას დროებით გახადეთ root მომხმარებელი -> sudo -i
  6. ჩაწერეთ ეს ბრძანება, რომ დაამატოთ თქვენი ქსელი Rpi- ში (კოდი ქვემოთ ჩამოთვლილია)

    • პაროლი = "პაროლი" (ბრჭყალებით)
    • სახელი ქსელი = "SSID"
    • დაიმახსოვრე ორმაგი გამოყენება >>! მნიშვნელოვანია!

ექო "პაროლი" | wpa_passphrase "SSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

ახლა ისევ გადატვირთეთ

ხელახლა დაკავშირებისას შეამოწმეთ თქვენი ip აკრეფით:

ifconfig

და შეამოწმე wlan0, ინეტის გვერდით.

ახლა, როდესაც ჩვენ გვაქვს ინტერნეტ კავშირი, მოდით გავაკეთოთ "სწრაფი" განახლება.

sudo apt განახლება

sudo apt dist -upgrade -y

ამას შეიძლება გარკვეული დრო დასჭირდეს.

ნაბიჯი 3: სენსორი DS18B20 (ტემპერატურა)-1 მავთული

სენსორი DS18B20 (ტემპერატურა)-1 მავთული
სენსორი DS18B20 (ტემპერატურა)-1 მავთული
სენსორი DS18B20 (ტემპერატურა)-1 მავთული
სენსორი DS18B20 (ტემპერატურა)-1 მავთული

ყოველი პროექტით, ყოველთვის იქნება რაღაც განსაკუთრებული, რაც უნდა გაკეთდეს, თორემ ის არ იმუშავებს მომენტში.

ამჯერად ჩვენ გვაქვს ის DS18B20 ტემპერატურის სენსორით, რომელიც მოითხოვს 1 მავთულს, რომელსაც მე არ ავხსნი რატომ, მაგრამ მე აგიხსნით, თუ როგორ უნდა იმუშაოს მაინც.

ამისათვის ჩვენ უნდა დავუბრუნდეთ raspi- კონფიგურაციას Rpi– ზე, ლამაზი ლურჯი ეკრანით.

  1. გადადით ინტერფეისის პარამეტრებზე
  2. აირჩიეთ 1 მავთული და აირჩიეთ ჩართვა.

Შესრულებულია…

Უბრალოდ ვხუმრობ.

ახლა ჩვენ უნდა შევცვალოთ /boot/config.txt

sudo nano /boot/config.txt

დაამატეთ ეს ხაზი ბოლოში.

# ჩართეთ ონლაინ

dtoverlay = w1-gpio

ახლა sudo გადატვირთეთ ეს საქმე და ახლა ჩვენ დავასრულეთ.

იმის შესამოწმებლად მუშაობს თუ არა, დაუკავშირეთ სენსორი Rpi– ს, შემდეგ დაუბრუნდით ტერმინალს და ჩაწერეთ ეს კოდი (იხილეთ შემდეგი ნაბიჯი ტექნიკა, თუ როგორ უნდა დააკავშიროთ ტემპერატურის სენსორი).

cd/sys/bus/w1/devices/w1_bus_master1

ლს

თქვენ უნდა ნახოთ ციფრებითა და ასოებით მუქი ლურჯი ზედა მარცხნივ, დარწმუნდით, რომ ჩაწერეთ ეს ინფორმაცია მოგვიანებით, როდესაც ჩვენ ვიმუშავებთ კოდით github– დან.

თუ რაიმე მიზეზით ის არ მუშაობს, შეამოწმეთ ეს ბმული, რომელიც უფრო ღრმაა მასში.

ნაბიჯი 4: MCP3008 - ანალოგური ზონდირება

MCP3008 - ანალოგური ზონდირება
MCP3008 - ანალოგური ზონდირება
MCP3008 - ანალოგური ზონდირება
MCP3008 - ანალოგური ზონდირება

როგორც ჩვენ შევიტანეთ ცვლილება ტემპერატურის სენსორში, ასევე უნდა შევიტანოთ ცვლილებები სხვა სენსორებში, ვინაიდან ჩვენ გვჭირდება წაკითხვა ანალოგურ მონაცემებში. სადაც MCP3008 გამოდგება, ჩვენ ასევე უნდა შევცვალოთ SPI ინტერფეისი.

sudo raspi-config

გადადით ინტერფეისის პარამეტრებზე -> აირჩიეთ SPI -> ჩართვა.

შემდეგ დასრულება.

ნაბიჯი 5: აპარატურა

ჩვენ არ ვართ სრულყოფილად შესრულებული Rpi– ით, მაგრამ საკმარისია იმისათვის, რომ დავიწყოთ ტექნიკის შექმნა და აწყობა.

რჩევა არის საფუძვლიანად შეამოწმოთ თქვენი კავშირები მშენებლობისას, რათა დარწმუნდეთ, რომ არ… ააფეთქეთ Rpi.

ასევე, სქემატურში შეამჩნევთ, რომ ზოგიერთი კომპონენტი მასზეა მხოლოდ ერთხელ, მიუხედავად იმისა, რომ ჩვენ ვმუშაობთ ერთზე მეტ კომპონენტზე. ეს მხოლოდ იმას ნიშნავს, რომ თქვენ უნდა გაიმეოროთ იგივე 1 კომპონენტის აგების პროცესი. არის 1 მცირე გამონაკლისი, mq-x სენსორებს არ სჭირდებათ დამატებითი დონის გადამყვანი ან MCP3008. უბრალოდ დაამატეთ დამატებითი მწვანე კაბელი (pdf) დონის კონვერტორს და MCP3008.

დამატებითი რედაქტირება: ფანებმა უნდა გამოიყენონ ტრანზისტორი გადამრთველად. მე ვიყენებ 2n2222A ტრანზისტორს 1 ვენტილატორისთვის, რადგან 2 ვენტილატორი შეიძლება იყოს მძიმე დატვირთვა.

თუ თქვენ გაქვთ ტრანზისტორი, რომელსაც შეუძლია გაუმკლავდეს უფრო დიდ დენს, მაშინ გამოტოვეთ ამ ნაბიჯის ბოლო ნაწილი.

თუ თქვენ არ გყავთ ჩემნაირი, მაშინ ასე უნდა მოიქცეთ, 1 ფანი = 1 ტრანზისტორი, 2 ვენტილატორი = 2 ტრანზისტორი და ასე შემდეგ (ყველა გულშემატკივარს აქვს საკუთარი ტრანზისტორი + დიოდი როგორც pdf– ში).

თქვენ ასევე დაგჭირდებათ კოდის დამატება app.py backend_project– ში მოგვიანებით, ნაბიჯი 7: Git კოდი….

ნაბიჯი 6: მარიადბის მონაცემთა ბაზის შექმნა

მარიადბის მონაცემთა ბაზის შექმნა
მარიადბის მონაცემთა ბაზის შექმნა

როგორც სათაურიდან ჩანს, ჩვენ ვაპირებთ შევქმნათ მონაცემთა ბაზა ისე, რომ გვქონდეს ადგილი ჩვენი სენსორული მონაცემების შესანახად.

უპირველეს ყოვლისა, ჩამოტვირთეთ მარიადბი Rpi– ზე.

sudo apt-get დააინსტალირეთ mariadb-server

ინსტალაციის შემდეგ, მოდით გამოვიყენოთ იგი.

mysql -u ფესვი

პაროლი ცარიელია, ამიტომ არაფერი აკრიფეთ. დააჭირეთ Enter.

მოდით შევქმნათ მომხმარებელი ახლა.

შექმენით USER 'user'@'%' IDENTIFIED BY 'userdb';

მიანიჭეთ ყველა პრივილეგიას *. * 'მომხმარებელს'@'%' გრანტის არჩევით;

FLUSH პრივილეგიები;

დააჭირეთ Ctrl + C გასასვლელად და სწრაფად გადატვირთეთ სერვისი:

sudo სერვისი mysql გადატვირთვა

შედით მომხმარებლის სახელით: მომხმარებელი და პაროლი: userdb:

mysql -u მომხმარებელი -p

დროა შევქმნათ მონაცემთა ბაზა.

შექმენით მონაცემთა ბაზა project_db DEFAULT CHARACTER SET utf8;

USE project_db

შექმენით ცხრილი "historiek" (ნიშნავს ისტორიას).

შექმენით ცხრილი, თუ არ არსებობს `historiek` (` id` INT NOT NULL AUTO_INCREMENT, `sensorID` VARCHAR (5) NOT NULL,` datum` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `waarde` FLOAT (4) NULL DEFAULT 0, PRIMARY KEY (` id`)) ENGINE = InnoDB;

და მაინც, მონაცემთა ბაზა მზადდება.

ნაბიჯი 7: Github კოდი და ტესტირება

Github კოდი და ტესტირება
Github კოდი და ტესტირება

ჩვენ ვუახლოვდებით ჩვენი პროექტის დასრულებას.

სანამ კოდს მივიღებთ, ჩვენ გვჭირდება რამდენიმე მოდულის იმპორტი Rpi– ში:

pip3 დააინსტალირეთ Flask_MySQL

pip3 დააინსტალირეთ flask-socketio

pip3 install -U flask -cors

pip3 დააინსტალირეთ spidev

ახლა ჩვენ გვჭირდება კოდი მუშაობისთვის, ჩაწერეთ ტერმინალი:

git კლონი

შეამოწმეთ არის თუ არა საქაღალდე:

ლს

ახლა დაგჭირდებათ 2 ტერმინალი, ასე რომ მოსახერხებელია დააწკაპუნეთ ტერმინალზე მარჯვენა ღილაკით და დააწკაპუნეთ დუბლიკატი სესიებზე:

გადადით backend_project და temperature cd ბრძანების გამოყენებით.

სანამ ჩვენ დავიწყებთ პროგრამებს ტესტირების მიზნით. კიდევ გახსოვთ ნაბიჯი 3 1 მავთულის სენსორით, სადაც უნდა ჩაწეროთ რიცხვები? არ ინერვიულოთ, თუ გაქვთ, უბრალოდ სწრაფად გადახედეთ მე –3 ნაბიჯს.

ჩვენ ვაპირებთ ამ რიცხვების დამატებას კოდში, რადგან მისი გამოყენებისას უნდა იცოდეს სწორი სენსორი.

ტერმინალი ტემპერატურის საქაღალდით, თქვენ ნახავთ app.py. ჩვენ ვაპირებთ მის გახსნას.

sudo nano app.py

მოძებნეთ ფუნქცია, რომელსაც ეწოდება "def temperatuur ():", იქ თქვენ უნდა შეცვალოთ "**" თქვენს მიერ დაწერილი რიცხვებით. ჩემს შემთხვევაში მე მივიღებ კოდის ამ ხაზს (თითოეული ნომერი უნიკალურია).

sensor_file_name = '/sys/devices/w1_bus_master1/28-0316a4be59ff/w1_slave

ტესტირების დრო. ორივე ტერმინალი ორივე backend_project და ტემპერატურის საქაღალდეში, ჩაწერეთ:

python3 აპლიკაცია. py

ახლა დაიმახსოვრე ნაბიჯი 5: ტექნიკა, სადაც თქვენ უნდა დაამატოთ კოდი, თუ იყენებთ მრავალ გულშემატკივარს და ტრანზისტორს?

კარგია, თუ არა დაუბრუნდით მე –5 საფეხურს.

ახლა ჩვენ უნდა დავამატოთ კოდი, როგორც აღვნიშნე app.py– ში backend_project– ში. გასაადვილებლად, მე ამის მაგალითი გავაკეთე კოდში. კომენტარის კოდის ყველა სტრიქონი, რომელსაც აქვს "fan1", გაუკეთეთ კომენტარი ამ ხაზებს და voila, ახლა თქვენ შეგიძლიათ გამოიყენოთ 2 ფანი.

თუ გსურთ გამოიყენოთ მხოლოდ 2 გულშემატკივარი, დააკოპირეთ და ჩასვით იგივე კოდი მის ქვეშ, მაგრამ განსხვავებული ნომრით. ამის ნაკლი არის უფრო პირადი სამუშაო თქვენთვის და ნაკლები gpio.pin. არ არსებობს არანაირი უპირატესობა, რაც მე ვიცი.

ნაბიჯი 8: გაუშვით კოდი ჩატვირთვისას

გაუშვით კოდი ჩატვირთვისას
გაუშვით კოდი ჩატვირთვისას

ჩვენ გვსურს, რომ ეს 2 პითონის სკრიპტი იმუშაოს იმ მომენტში, როდესაც ჩვენი Rpi ჩატვირთვისას და იმ შემთხვევაში, თუ სკრიპტი დაიშლება, ის უნდა გადატვირთოს თავისთავად. ამისათვის ჩვენ ვაპირებთ გავაკეთოთ 2 მომსახურება.

ამისათვის ჩაწერეთ:

sudo nano /etc/systemd/system/temperature.service

დააკოპირეთ და ჩასვით ეს ტემპერატურისთვის. სერვისი:

[ერთეული] აღწერა = ტემპერატურის სერვისი შემდეგ = multi-user.target

[სერვისი] ტიპი = მარტივი

ExecStart =/usr/bin/python3 /home/pi/Documents/nmct-s2-project-1-TheryBrian/temperature/app.py

StandardInput = tty-force

გადატვირთვა = უკმარისობა

გადატვირთვა = 60 წ

[Დაინსტალირება]

WantedBy = multi-user.target

დახურეთ და კვლავ გააკეთეთ, მაგრამ შემდეგ backend_project.service:

პირველი ღია ტექსტი:

sudo nano /etc/systemd/system/backend_project.service

შემდეგ კვლავ დააკოპირეთ და ჩასვით:

[ერთეული] აღწერა = backend_project სერვისი

შემდეგ = multi-user.target

[სერვისი]

ტიპი = მარტივი

ExecStart =/usr/bin/python3 /home/pi/Documents/nmct-s2-project-1-TheryBrian/backend_project/app.py

StandardInput = tty-force

გადატვირთვა = უკმარისობა

გადატვირთვა = 60 წ

[Დაინსტალირება]

WantedBy = multi-user.target

Შეინახე და დახურე.

ბოლო ნაწილი აკრიფებს ამას:

sudo systemctl daemon-reload

sudo systemctl ტემპერატურის ჩართვა. მომსახურება sudo გადატვირთვა

ახლა ჩვენი 2 პითონის სკრიპტი ავტომატურად უნდა ჩაირთოს ჩატვირთვისას.

ნაბიჯი 9: ვებსაიტის დაყენება

საცავის გადმოტვირთვისას თქვენ ასევე უნდა მიიღოთ საქაღალდე სახელწოდებით front. ეს არის ის, სადაც შინაარსია ვებსაიტისთვის.

პირველი ჩვენ გვჭირდება apache სანამ ჩვენ შეგვიძლია გამოვიყენოთ საქაღალდე. მიჰყევით ამ ბმულზე მითითებულ აპაჩეს.

როცა მზად იქნები. გადადით იქ, სადაც მდებარეობს წინა საქაღალდე:

cd /Documents /nmct-s2-project-1-TheryBrian

შემდეგ ჩაწერეთ:

sudo mv წინა/var/www/html

როდესაც ეს კეთდება, გადადით html საქაღალდეში, მოემზადეთ დამღლელი სამუშაოსთვის (ჩემი ბრალია).

cd/var/www/html/

შემდეგ გადადით წინა საქაღალდეში და დაიწყეთ ყველაფრის გადატანა html საქაღალდეში.

მაგალითი:

sudo mv css/var/www/html

შემდეგ წაშალეთ წინა საქაღალდე.

და ჩვენ დავასრულეთ ყველაფერი.

Წარმატებები:).

ნაბიჯი 10: სურვილისამებრ - მინიატურული პროტოტიპი

სურვილისამებრ - მინიატურული პროტოტიპი
სურვილისამებრ - მინიატურული პროტოტიპი
სურვილისამებრ - მინიატურული პროტოტიპი
სურვილისამებრ - მინიატურული პროტოტიპი

ტესტირების მიზეზების გამო, მე შევქმენი პროტოტიპი ყუთში, რომელშიც იყო ყველა ტექნიკა, ასე რომ მე ვხედავ, მუშაობს თუ არა ყველაფერი შეკვეთით.

როგორც წესი, ეს პროექტი უფრო მასშტაბური იქნებოდა. მაგალითად: ოთახი, სახლი, ქარხანა, მაღაზია და ასე შემდეგ …

მაგრამ აშკარად სანამ დავიწყებთ კედლებში ხვრელების გაკეთებას (სასიამოვნო რითმა). ჩვენ პირველ რიგში გვინდა ვნახოთ მუშაობს თუ არა. თქვენ ნამდვილად არ გჭირდებათ ყუთის გაკეთება ტესტირებისთვის, მაგრამ ხელოსნობის გაკეთება ყოველთვის სახალისოა.

აქ არის ჩემი მაგალითი.

გირჩევთ: