Სარჩევი:

ალგორითმის მანქანა: 13 ნაბიჯი (სურათებით)
ალგორითმის მანქანა: 13 ნაბიჯი (სურათებით)

ვიდეო: ალგორითმის მანქანა: 13 ნაბიჯი (სურათებით)

ვიდეო: ალგორითმის მანქანა: 13 ნაბიჯი (სურათებით)
ვიდეო: რა ხდება კანონიერი ქურდების საკნებში 2024, ივლისი
Anonim
Image
Image
LED ბარი: 3D ბეჭდვა ნიღაბი
LED ბარი: 3D ბეჭდვა ნიღაბი

მე 15 წელია ვასწავლი კომპიუტერულ მეცნიერებებს კოლეჯის დონეზე და მიუხედავად იმისა, რომ ჩემი გამოცდილება უფრო პროგრამირების სფეროა, მე მაინც საკმაოდ დიდ დროს ვატარებ ძიებისა და დახარისხების სტანდარტული ალგორითმების დაფარვაზე. სწავლების თვალსაზრისით ცენტრალური საკითხია გამოთვლების სირთულე: რამდენი დრო სჭირდება თითოეულ ალგორითმს კონკრეტული ზომის შეყვანის გათვალისწინებით? მაგრამ არსებობს მრავალი ნიუანსი. მაგალითად, აქვს თუ არა ალგორითმებს განსხვავებული გაშვების დრო კონკრეტული შეყვანის მნიშვნელობების მიხედვით (ზომისგან განსხვავებით)? რომელ შემთხვევებში აირჩევთ დახარისხების ერთ ალგორითმს მეორეზე? მიუხედავად იმისა, რომ ჩვენ განვიხილავთ ამ საკითხებს აბსტრაქტულად, ის ყოველთვის მაბრაზებდა, რომ არ იყო ადვილი გზა იმის დანახვა, თუ როგორ მუშაობს სხვადასხვა ალგორითმი სხვადასხვა პირობებში.

მიზნები

ამ პროექტის მთავარი მიზანი იყო სტუდენტებისთვის ინტერაქტიული ჩვენების შექმნა ალგორითმების ვიზუალიზაციისა და შესასწავლად. მე შემოვიფარგლე ალგორითმებით, რომლებიც მუშაობენ მნიშვნელობების მასივებზე (მთელი რიცხვები), ასე რომ შემიძლია გამოვიყენო მიმართვადი RGB LED ზოლები მასივის შინაარსის ვიზუალიზაციისთვის. მასივს აქვს 100 ელემენტი და თითოეული მთელი რიცხვი ასახულია ფერიზე ცისარტყელას თანმიმდევრობით, ისე რომ მაშინვე ცხადი ხდება მასივის დახარისხების, ნაწილობრივ დახარისხების ან რანდომიზაციისას. ღირებულებების გარდა, მე მინდოდა ალგორითმის საკონტროლო ასპექტების ვიზუალიზაციის საშუალება - მაგალითად, მასივის რომელი ელემენტები ამჟამად შედარებულია ან იცვლება.

კონკრეტული მიზნებია:

- უზრუნველყოს ძიებისა და დახარისხების სხვადასხვა ალგორითმები

- ვიზუალიზაცია მასივი ღირებულებები ისე, რომ ხაზს უსვამს ალგორითმის პროგრესს

- ვიზუალიზაცია ალგორითმის კონტროლი; კერძოდ, განსახილველი ელემენტები.

- მიეცით საშუალება მომხმარებლებს აირჩიონ შეყვანის მონაცემთა შაბლონები, ვიდრე ყოველთვის არ შექმნან შემთხვევითი მნიშვნელობები

- მიეცით საშუალება მომხმარებლებს გააკონტროლონ სიჩქარე და შეაჩერონ ალგორითმი

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

- აჩვენეთ ნაბიჯების რაოდენობა ალგორითმის შემდგომ

ვიზუალიზაცია

ფიზიკური დიზაინის თვალსაზრისით ამ პროექტის ყველაზე საინტერესო ნაწილია მასივის ვიზუალიზაცია. მე ვცდილობდი როგორ მეჩვენებინა მონაცემები და კონტროლი და როგორ აეშენებინა ჩვენების მოწყობილობა. ჩემი მიზანი იყო მონაცემების მნიშვნელობების ჩვენება ფერადი წრეების სახით და საკონტროლო წერტილები ფერადი ისრების სახით, რომლებიც მიუთითებენ მონაცემთა მნიშვნელობებზე. გარკვეული ექსპერიმენტების შემდეგ დავდექი დიზაინზე ორი პარალელური ზოლით 100 RGB LED (WS2812) თითოეული მონაცემების LED- ზე წრიული ნიღბით და თითოეულ საკონტროლო LED- ზე სამკუთხა ნიღბით. მე გავაკეთე ნიღბის 3D მოდელი 10 წყვილი წრეებითა და სამკუთხედებით, შემდეგ კი 3D- ით დაბეჭდა 10 ამ მოდულიდან სულ 100 წრეზე და 100 სამკუთხედზე. ჩემი ნიღბის ზომა და ინტერვალი განკუთვნილია ზოლებისთვის 100 LED- ით მეტრზე. 3D მოდელის ფაილები მოცემულია მოგვიანებით ამ აღწერილობაში.

ელექტრონიკა და დანართი

დანარჩენი მოწყობილობა არის პირდაპირი, ელექტრონიკის თვალსაზრისით. ორი LED ზოლის გარდა, არის რამოდენიმე მომენტალური ღილაკი, მბრუნავი კოდირება (სიჩქარის კონტროლისთვის) და 7 სეგმენტიანი ეკრანი (ნაბიჯების საჩვენებლად). ამდენი ღილაკითა და კონტროლით მე ავირჩიე ESP32 მიკროკონტროლის გამოყენება, რადგან ის ბევრ ქინძისთავს ავლენს და რადგან ის საკმაოდ ძლიერია. მე გავაანალიზებ გაყვანილობის სტრატეგიას, მაგრამ ეს არის საკმაოდ ძირითადი. თქვენ ალბათ შეძლებთ რაიმე ჭკვიანურად გააკეთოთ ცვლის რეგისტრატორებით, თუ გსურთ გამოიყენოთ ნაკლები ქინძისთავები.

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

პროგრამული უზრუნველყოფა

ამ მოწყობილობის კოდი თავისუფლად არის ხელმისაწვდომი GitHub– ზე და მე ყველაფერი გავაკეთე იმის დასადასტურებლად, თუ როგორ მუშაობს იგი და როგორ ხდება მისი კონფიგურაცია. ერთადერთი გარე ბიბლიოთეკა გჭირდებათ FastLED WS2812 ზოლების მართვისთვის.

მარაგები

ელექტრონიკა

1 ESP32 განვითარების დაფა (მაგ., 2 WS2812 ან მსგავსი LED ზოლები, სიმკვრივე 100 LED ნათურა მეტრზე (მაგ., 1 სამკუთხედის "დაწყება" ღილაკი (მაგ., 12 მომენტალური ღილაკი (მაგალითად, https://amzn.com/B01N4D4750) - განსხვავებული ფორმები, თუ გსურთ

1 პაკეტი (20) წინასწარ შეკრული ღილაკის კონექტორები (მაგ., 1 პაკეტი JST კონექტორები (მაგ., 1 მბრუნავი კოდირება (მაგ., 1 სახელური მბრუნავი კოდირებისთვის (მაგ., 1 პაკეტი Dupont კონექტორები (მაგ., Https://amzn.com/B014YTPFT8) - ასევე ღირს დასაკეცი ინსტრუმენტის მიღება.

1 ლულის ბუდე (სიმძლავრისთვის) (მაგალითად, 1 TM1637 7-სეგმენტიანი რიცხვითი ჩვენება (მაგ., შედუღების და გაყვანილობის მექანიზმი

3D მოდელის ფაილები

თქვენ შეგიძლიათ იპოვოთ 3D მოდელი წყვილი 10 სინათლის მოდულისთვის Thingiverse– ზე:

www.thingiverse.com/thing:4178181

თქვენ დაგჭირდებათ ამ მოდელის ხუთჯერ დაბეჭდვა სულ 10 მოდულისთვის.

პროგრამული უზრუნველყოფა

github.com/samguyer/AlgorithmMachine

დანართი

ხე, პლექსიგლასი, უჟანგავი ფოლადის ჭანჭიკები და ხრახნები

დიფუზიის მასალა. ჩემი რჩეული არის ლი ფილტრები #216 სრული თეთრი დიფუზია, მაგრამ არის სხვა ვარიანტებიც. უბრალო თეთრი ქაღალდიც კი კარგ საქმეს აკეთებს.

ნაბიჯი 1: ალგორითმები 101

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

ალგორითმის ძირითადი მახასიათებელი კონკრეტული პრობლემის გადასაჭრელად არის ის, რომ ის არის დეტალური და ზუსტი, ისე რომ ვიღაცამ გამოიყენოს იგი გამოსავლის მისაღებად, იმის გაგების გარეშე, თუ როგორ მუშაობს იგი საერთოდ; უბრალოდ მიყევით მექანიკურ ნაბიჯებს და მიიღებთ სწორ პასუხს. თქვენ ხედავთ, თუ როგორ ეხმარება ეს კომპიუტერების დაპროგრამებაში, რადგან მათ სჭირდებათ დეტალების ეს დონე. კომპიუტერს არ შეუძლია შეავსოს დაკარგული დეტალები ან გამოიტანოს დასკვნები, ისე როგორც ადამიანს შეუძლია.

Რამდენი ხანი დასჭირდება?

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

ალგორითმის ღირებულების აღსაწერად, ჩვენ პირველ რიგში ვირჩევთ ოპერაციას, რომელიც წარმოადგენს ერთ „ნაბიჯს“- ჩვეულებრივ რაღაც მარტივს, როგორიცაა ორი რიცხვის შედარება ან დამატება, რომლის გაკეთებასაც გარკვეული დრო სჭირდება. შემდეგ ჩვენ ვიღებთ ფორმულას, რომელიც აღწერს რამდენ ნაბიჯს გადადგამს ალგორითმი მონაცემების გარკვეული რაოდენობის გათვალისწინებით. ისტორიული მიზეზების გამო, ჩვენ თითქმის ყოველთვის აღვნიშნავთ მონაცემთა ერთეულების რაოდენობას N– ით.

მაგალითად, N ტელეფონის ნომრების ჩამონათვალის დათვალიერება მოითხოვს N ნაბიჯებს. სიის ორჯერ გადახედვა მოითხოვს 2N ნაბიჯს. ორივეს ეწოდება წრფივი დროის ალგორითმები - ნაბიჯების საერთო რაოდენობა შეყვანის ზომის რამოდენიმეა. სხვა ალგორითმები არის კვადრატული (N კვადრატული დრო) ან კუბური (N კუბურად) ან ლოგარითმული (ჟურნალი N) ან მათი კომბინაცია. ზოგიერთი ყველაზე რთული გამოთვლითი პრობლემა მოითხოვს დროის ექსპონენციალურ ალგორითმს (2^N).

კარგი, მერე რა?

როდესაც მონაცემთა ერთეულების რაოდენობა N მცირეა, ამას დიდი მნიშვნელობა არ აქვს. მაგალითად, N = 10 – ისთვის 10N არის ეს სახელი N კვადრატში. მაგრამ რაც შეეხება N = 1000 -ს? ან N = 1000000? მილიონი კვადრატში საკმაოდ დიდი რიცხვია. თუნდაც ძალიან სწრაფ კომპიუტერზე, კვადრატულ ალგორითმს შეიძლება დიდი დრო დასჭირდეს, თუ შეყვანა საკმარისად დიდია. ექსპონენციალური ალგორითმები გაცილებით უფრო პრობლემურია: N = 50 – ისთვის ექსპონენციალურ ალგორითმს ორი კვირა დასჭირდება, თუნდაც კომპიუტერზე, სადაც თითოეული ნაბიჯი არის მხოლოდ ერთი ნანოწამი (წამის 1 მილიარდი ნაწილი). ოჰ!

მასშტაბის მეორე ბოლოში გვაქვს ლოგარითმული დროის ალგორითმები, რომლებიც ძალიან სწრაფია. ჟურნალის დრო არის ექსპონენციალური დროის საპირისპირო: შეყვანის ზომა N, ნაბიჯების რაოდენობა არის ექსპონენტი T ფორმულაში 2^T = N. მაგალითად, თუ ჩვენი შეყვანის ზომა არის მილიარდი, მაშინ ჟურნალის დროის ალგორითმი მოითხოვს მხოლოდ 30 ნაბიჯები, რადგან 2^30 = 1, 000, 000, 000. რა ტკბილია ეს?! ??!

ალბათ გაინტერესებთ, ვის აინტერესებს მილიონობით ან მილიარდობით შემოსავალი? დაფიქრდით: რამდენი მომხმარებელი არის ფეისბუქზე? რამდენი ვებ გვერდია ინდექსირებული Google- ის მიერ? რამდენი ფუძე წყვილია ადამიანის გენომში? რამდენი გაზომვა ხდება ამინდის სიმულაციაში?

ნაბიჯი 2: ალგორითმები

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

ხაზოვანი ძებნა

მოძებნეთ ღირებულებების ჩამონათვალი სათითაოდ, თავიდანვე. მოითხოვს წრფივ დროს.

ორობითი ძებნა

მოძებნეთ სია რამდენჯერმე გაყოთ შუაზე. მოითხოვს შესვლის დროს, მაგრამ სია უნდა დალაგდეს იმისათვის, რომ ის იმუშაოს.

ბუშტების დახარისხება

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

ჩასმის დახარისხება

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

Quicksort

დაალაგეთ სია რამდენჯერმე გაყავით სია და გადაიტანეთ ყველა მნიშვნელობა მედიანზე ნაკლები პირველ ნახევარში, ხოლო ყველა მნიშვნელობა უფრო დიდი ვიდრე მედიანა მეორე ნახევარში. პრაქტიკაში, ჩვენ არ შეგვიძლია ეფექტურად ვიპოვოთ მედიანა, ამიტომ ჩვენ ვირჩევთ მნიშვნელობას შემთხვევით. შედეგად ეს ალგორითმი შეიძლება იყოს კვადრატული უარეს შემთხვევაში, მაგრამ ჩვეულებრივ მოითხოვს N * logN დროს.

შერწყმის დალაგება

დაალაგეთ სია ნახევრად გაყოფით, ორი ნაწილის ცალ -ცალკე დახარისხებით (შერწყმის დახარისხების გამოყენებით), შემდეგ კი მათ ერთმანეთთან შერწყმით მნიშვნელობების შეჯვარებით. ყოველთვის მოითხოვს N * logN დროს.

გროვის დახარისხება

დაალაგეთ სია მონაცემთა სტრუქტურის აგებით, სახელწოდებით გროვა, რომელიც საშუალებას გაძლევთ იპოვოთ ყველაზე მცირე მნიშვნელობა ჟურნალის დროში. ყოველთვის მოითხოვს N * logN დროს.

ბიტონური დალაგება

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

ნაბიჯი 3: LED ბარი: 3D ბეჭდვა ნიღაბი

LED ბარი: 3D ბეჭდვა ნიღაბი
LED ბარი: 3D ბეჭდვა ნიღაბი
LED ბარი: 3D დაბეჭდეთ ნიღაბი
LED ბარი: 3D დაბეჭდეთ ნიღაბი

LED ბარის მშენებლობის პირველი ნაბიჯი არის ნიღბის 3D დაბეჭდვა, რომელიც სინათლეებს აძლევს ფორმას. თითოეული მოდული მოიცავს მასივის ათ ელემენტს, 10 მნიშვნელობას (წრეებს) და 10 ინდიკატორს (სამკუთხედს), ასე რომ თქვენ დაგჭირდებათ სულ 10 მოდული. STL ფაილი, რომელსაც მე აქ ვაწვდი შეიცავს მოდულის ორ მაგალითს, ასე რომ თქვენ დაგჭირდებათ ბეჭდვის ხუთი ციკლის გაკეთება. მე არ მაქვს საუკეთესო 3D პრინტერი, ამიტომ მომიწია მათზე ხელით გაწმენდა ფაილებისა და სანდლის გამოყენებით. ყველაზე მნიშვნელოვანი ის არის, რომ წრიული და სამკუთხა ხვრელები სუფთა იყოს.

ფოტოებში ნახავთ ჩემს სატესტო პარამეტრს: მე დავამაგრე ორი LED ზოლი და მიკროკონტროლერის საშუალებით დავამაგრე პურის დაფაზე. ეს ნაბიჯი არ არის აუცილებელი, მაგრამ მინდოდა მენახა როგორ გამოიყურებოდა მანამ, სანამ არ დავიწყებდი შეკრების დაწყებას. ნიღბის მოდულები ორ LED ზოლზე დავდე და უბრალო ჩანახატი შემთხვევითი ფერებით გავაკეთე. დიფუზიური მასალის ზოლით, ფორმები და ფერები ნამდვილად ჩნდება.

ნაბიჯი 4: LED ბარის ალტერნატივები

LED ბარის ალტერნატივები
LED ბარის ალტერნატივები
LED ბარის ალტერნატივები
LED ბარის ალტერნატივები
LED ბარის ალტერნატივები
LED ბარის ალტერნატივები

როდესაც პირველად დავიწყე ეს პროექტი, მე ექსპერიმენტი გავაკეთე LED ნიღბის დამზადების სხვა გზებზე. თუ თქვენ არ გაქვთ 3D პრინტერი, შეგიძლიათ განიხილოთ ერთ -ერთი ასეთი ვარიანტი. სიმართლე გითხრათ: ამ ნაწილების დამზადება უზარმაზარი ტკივილია.

წრეებისთვის შევიძინე 13/32 სპილენძის მილი, რომელიც თითქმის ზუსტად 1 სმ დიამეტრისაა. მე მას ვჭრი ასი 1 სმ სიგრძის სეგმენტებად და შემდეგ სპრეით ვხატავ მათ თეთრად.

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

ნაბიჯი 5: LED ბარი დანართი

LED ბარი დანართი
LED ბარი დანართი
LED ბარი დანართი
LED ბარი დანართი
LED ბარი დანართი
LED ბარი დანართი

ჩემი დანართი საკმაოდ მარტივია: ხის ორი ზოლი გვერდებისთვის და ორი პლექსიგლასის ზედა და ქვედა ნაწილები. ყველა ნაწილი დაახლოებით 102 სმ სიგრძისაა (1 მეტრი LED- ებისთვის, პლუს ცოტა ზედმეტი გაყვანილობის დასაყენებლად). მხარეები უნდა იყოს ოდნავ მაღალი ვიდრე 1 სმ, რათა ადგილი გაეცნოს LED ზოლებს. ზოლების მოჭრის შემდეგ მე მათ შორის დავდე 3D დაბეჭდილი ნიღბის ნაჭრები, რათა გავზომოთ პლექსიგლასის სიგანე. გაჭერით პლექსიგლასის ორი ნაჭერი ბარის სიგანეზე და სიგრძეზე. დაბოლოს, გაჭერით დიფუზიის მასალის ზოლები, რომ მოათავსოთ ნიღაბი.

დიფუზიისათვის მე ძალიან მომწონს ლი ფილტრები #216 (სრული თეთრი დიფუზია). ეს არის თხელი პლასტიკური ფურცელი, რომელიც იძლევა დიფუზიასაც კი ბევრი შუქის დაკარგვის გარეშე. მაგრამ ძვირი ღირს. ზოგჯერ თქვენ შეგიძლიათ იპოვოთ გასაყიდად პატარა ფურცლები ინტერნეტში, მაგრამ მთელი რულეტი დაგიბრუნებთ დაახლოებით $ 125. სხვა ვარიანტებია თეთრი ქაღალდი ან სხვა სახის ატლასის ან ყინვაგამძლე პლასტიკური. პოპულარული არჩევანია თხელი პლასტიკური ჭრის საგებები.

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

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

შემდეგი, განათავსეთ ორი LED ზოლები ერთმანეთის გვერდით ნიღბების თავზე. დარწმუნდით, რომ LED- ები დგას ქვემოთ და დარწმუნდით, რომ თითოეული LED შეესაბამება ნიღბის შესაბამის ხვრელს. დაამატეთ ცხელი წებო ან ლენტი, რომ LED ზოლები დაიჭიროთ ადგილზე. და ბოლოს, ხრახნიანი პლექსიგლასის უკანა ნაწილს.

გაუშვით საცდელი ნიმუში. სასიამოვნო სამუშაო! თქვენ გააკეთეთ ყველაზე რთული ნაწილი!

ნაბიჯი 6: მართვის პანელი

Მართვის პანელი
Მართვის პანელი
Მართვის პანელი
Მართვის პანელი
Მართვის პანელი
Მართვის პანელი
Მართვის პანელი
Მართვის პანელი

მართვის პანელი არის ნაწილი, რომელიც იძლევა ყველაზე შემოქმედებით თავისუფლებას. მას უბრალოდ უნდა ჰქონდეს ყველა კონტროლი და ელექტრონიკა, ერთად LED ბარი. უმარტივესი დიზაინია მართკუთხა დაფები: გაბურღეთ ხვრელები ღილაკებისა და კონტროლისთვის და მიამაგრეთ LED ბარი. მე მომწონს ხის, პლექსიგლასისა და სხვა მასალების შერწყმა, რათა მივიღო ერთგვარი სტეამპუნკი / რეტრო-თანამედროვე იერი. ამ შემთხვევაში, მე დავჭრა ნაჭერი მძიმე მოქნილი პლექსიგლასი ალგორითმის ძირითადი ღილაკების შესანახად, ხოლო ხის ბარი დანარჩენი ელექტრონიკის შესანახად. მე გავაღე ხვრელები არკადული ღილაკების ზომის შესატყვისად. გაყვანილობა უკანა მხარეს ჩანს, მაგრამ მე მომწონს!

მე ასევე გავწურე ადგილი 7 სეგმენტიანი ეკრანისთვის, მბრუნავი კოდირებისთვის და ზოგიერთი გაყვანილობისთვის უკანა მხარეს. მე დავჭერი დადო ზევით, რომ ეკავა LED ბარი.

ნაბიჯი 7: ღილაკის აღკაზმულობა

ღილაკის აღკაზმულობა
ღილაკის აღკაზმულობა
ღილაკის აღკაზმულობა
ღილაკის აღკაზმულობა
ღილაკის აღკაზმულობა
ღილაკის აღკაზმულობა

ბევრი ღილაკის გაყვანილობა შეიძლება იყოს ნამდვილი ტკივილი. საბედნიეროდ, ადამიანები, რომლებიც ქმნიან არკადულ მანქანებს, გამოიგონეს სტანდარტული კონექტორები, რომელთა გამოყენებაც შეგიძლიათ. თითოეულ ღილაკზე დამაკავშირებელ კაბელს აქვს ორი მავთული, ერთი VCC და ერთი მიწისთვის. ერთ ბოლოში არის ყვავიანი კონექტორები, რომლებიც ჯდება ღილაკების უკანა ნაწილზე - მიამაგრეთ მიწა "ჩვეულებრივ გახსნილ" ტყვიას და VCC "საერთო" ტყვიას. ამ კონფიგურაციაში, როდესაც მომხმარებელი აჭერს ღილაკს, წრე სრულდება და მიკროკონტროლერი წაიკითხავს HIGH შესაბამის შეყვანის პინზე.

კაბელის მეორე ბოლოში არის JST კონექტორი (პატარა თეთრი ნივთი). რა სასიამოვნოა ამ კონექტორებში ის არის, რომ ისინი მხოლოდ ერთნაირად შედიან კონტეინერში, ასე რომ არ არსებობს გზა, რომ შემთხვევით შეცვალოთ VCC და მიწა.

რაც მე გავაკეთე, არის პატარა აღკაზმულობა ამ კონექტორებისთვის. მე შევაერთე JST საცობების სერია პროტობორდის ნაწილზე და შემდეგ მავთულები დავუბრუნე Dupont კონექტორებს, რომლებიც მიკროკონტროლერში ჩავრთე. წითელი მავთული არის VCC ხაზი და ის უკავშირდება JST– ის ყველა კონტეინერს. ლურჯი მავთულები არის ის, რაც ცალკეა თითოეული ღილაკისთვის.

ნაბიჯი 8: მბრუნავი კოდირება

მბრუნავი კოდირება
მბრუნავი კოდირება

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

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

ნაბიჯი 9: ჩვენება 7 სეგმენტიდან

7 სეგმენტიანი ჩვენება
7 სეგმენტიანი ჩვენება

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

უკანა მხარეს აქვს ოთხი ქინძისთავები: VCC, მიწა და ორი მავთული სერიული პროტოკოლისთვის. შევაერთე 4-პინიანი სათაური, რომელიც აკავშირებს მიკროკონტროლერთან დაკავშირებულ შესაბამის დუპონის კონექტორს.

ნაბიჯი 10: მთავარი მაკონტროლებელი საბჭო

მთავარი მაკონტროლებელი საბჭო
მთავარი მაკონტროლებელი საბჭო
მთავარი მაკონტროლებელი საბჭო
მთავარი მაკონტროლებელი საბჭო
მთავარი მაკონტროლებელი საბჭო
მთავარი მაკონტროლებელი საბჭო

მთავარი კონტროლერის დაფაზე განთავსებულია თავად მიკროკონტროლერი და კონტროლის ყველა კონექტორი (ღილაკები, ეკრანი, LED- ები). მიკროკონტროლი არის ESP32, რომელიც უზრუნველყოფს უამრავ გამოთვლილ ძალასა და მეხსიერებას და გამოავლენს უამრავ ქინძისთავს. გაყვანილობა საკმაოდ სტანდარტულია, მაგრამ მე აღვნიშნავ რამდენიმე საინტერესო ნაწილს.

შენიშვნა: შეიძლება დაგჭირდეთ გადახედოთ კოდს (https://github.com/samguyer/AlgorithmMachine) სანამ დაიწყებთ ძირითადი დაფის გაყვანილობას, ისე რომ თქვენი პინის კონფიგურაცია ემთხვეოდეს ჩემსას.

მე შევაერთე ლულის ბუდე დაფაზე ძალაზე და დავუკავშირე ორი ძროხის სპილენძის მავთული გამგეობის დენის და მიწის რელსებს. მიზეზი ის არის, რომ LED ბარს შეუძლია ბევრი ენერგიის მოზიდვა, თუ სიკაშკაშე მაღალია და მე არ მსურს მთელი ამ სიმძლავრის ამოღება მიკროკონტროლერის USB კონექტორის საშუალებით.

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

მნიშვნელოვანია: დენის ღილაკები (წითელი მავთული) უნდა იყოს დაკავშირებული მიკროკონტროლერის 3.3 ვ ელექტროენერგიის ხაზთან. ESP32 არის 3.3V ჩიპი, ამიტომ მხოლოდ 3.3V წყაროები უნდა იყოს მიმაგრებული მონაცემთა ქინძისთავებზე.

მიკროკონტროლერი ენერგიას (ან უბიძგებს ენერგიას) რელსებზე (დაფის ქვედა მხარე, როგორც ნაჩვენებია) 5V USB პინით და მიწით. ყველა სხვა წითელი/შავი მავთული არის VCC და მიწა.

ორი ცისფერი მავთული არის მონაცემთა ხაზები LED ზოლებისთვის (WS2812s).ყვითელი/მწვანე წყვილი არის მბრუნავი კოდირების მონაცემთა ხაზები, ხოლო ყვითელი წყვილი არის სერიული კავშირი 7 სეგმენტის ეკრანზე.

ნაბიჯი 11: შეკრება

შეკრება
შეკრება
შეკრება
შეკრება
შეკრება
შეკრება
შეკრება
შეკრება

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

სანამ ამას ვამუშავებდი, მე რამდენიმე შემოწმება გავაკეთე, რათა თავიდან ავიცილო რაიმე უსიამოვნო სიურპრიზი. კერძოდ, რათა დავრწმუნდე, რომ მე არ მქონია დენის/მიწის კონექტორები უკანა მხარეს და არც მოკლე ჩართვა. დააყენეთ თქვენი მულტიმეტრი, რომ შეამოწმოთ უწყვეტობა - ის გახმაურდება, როდესაც ელექტრული ბილიკი ორ ლიდერს შორის იქნება. მიამაგრეთ ერთი ბმული საერთო VCC ხაზზე ღილაკებზე. შემდეგ მიამაგრეთ მეორე ტყვიები აღკაზმულობის თითოეულ პინზე სათითაოდ. მულტიმეტრი უნდა იყოს მხოლოდ მაშინ, როდესაც დააჭირეთ ღილაკს. თუ თქვენ მიიღებთ რაიმე სხვა სიგნალს, ეს ნიშნავს რომ თქვენ გაქვთ უკუქცევა ან მოკლე. მიჰყევით მას და გაასწორეთ სანამ დენი ჩართავთ!

ნაბიჯი 12: კოდი

პირველი, გახსენით თქვენი Arduino IDE და დარწმუნდით, რომ დაინსტალირებული გაქვთ FastLED ბიბლიოთეკა.

ჩამოტვირთეთ ალგორითმის აპარატის კოდი GitHub– დან:

github.com/samguyer/AlgorithmMachine.git

თქვენ შეგიძლიათ კლონირება მოახდინოთ პირდაპირ თქვენს Arduino საქაღალდეში, ან დააკოპიროთ ხელით.

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

ატვირთეთ და ისიამოვნეთ!

ნაბიჯი 13: როგორ გამოვიყენოთ

ალგორითმის მანქანა მარტივი გამოსაყენებელია და ღილაკების თითქმის ნებისმიერი კომბინაცია კარგია!

პირველი, გამოიყენეთ მონაცემთა ღილაკები მასივში მნიშვნელობების დასაწყებად. სამი არჩევანია: (1) რანდომიზირება, (2) ერთი შემთხვევითი მნიშვნელობის დამატება და (3) მასივის გადაბრუნება. გაითვალისწინეთ, რომ მნიშვნელობები მუდმივია, ასე რომ თქვენ შეგიძლიათ გააკეთოთ ისეთი რამ, როგორიცაა მათი დალაგება, შემდეგ ხმაურის დამატება, შემდეგ სხვა დახარისხების ან ძიების ალგორითმის გაშვება.

შეარჩიეთ ძიების ან დახარისხების ალგორითმი ღილაკების სხვა ვარიანტებიდან. ამჟამად, არ არსებობს უკუკავშირი ამ არჩევანის გაკეთებისას (რაღაც მომავალი სამუშაოსთვის). შემდეგ დააჭირეთ ღილაკს "თამაში".

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

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

STEM კონკურსი
STEM კონკურსი
STEM კონკურსი
STEM კონკურსი

დიდი პრიზი STEM კონკურსში

გირჩევთ: