Სარჩევი:
ვიდეო: $ 1 LED განწყობის ნათურა ATtiny13 და WS2812: 7 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:15
ავტორი: arduinocelentano
ეს არის დაბალი განწყობის ნათურა ოთხი რეჟიმით.
1. ცისარტყელას ნაპერწკალი. სინათლის ნაპერწკალი დროდადრო მაღლა მოძრაობს და თანდათან ცვლის ფერს.
2. ცისარტყელის ბრწყინვალება. სტაბილური ბზინვარება, რომელიც თანდათან ცვლის ფერს.
3. სანთლის ცეცხლის სიმულაცია.
4. გამორთულია.
თქვენ შეგიძლიათ შეცვალოთ რეჟიმი ზევით შეხების ღილაკზე დაჭერით. მიმდინარე რეჟიმი ინახება EEPROM მეხსიერებაში გამორთვის შემდეგ.
რამდენად პატარაა ATtiny13?
იდეა იყო მინიმალური აღჭურვილობის მაქსიმალური მახასიათებლების მიღება, რაც უფრო რთული იყო ვიდრე ავტომატური გადამრთველი ან თერმომეტრი, პროექტი ამ პატარა მიკროკონტროლერის პირას. ყოველივე ამის შემდეგ, შეზღუდვები გიბიძგებთ შემოქმედებითად იფიქროთ, არა? ისე, თავიდან ასე გამოიყურებოდა.
ამ პროექტში ყველაზე რთული იყო ყველა კოდის შეტანა ATtiny13– ში. მიკროკონტროლერს აქვს 1K ბაიტიანი ფლეშ და მხოლოდ 64 ბაიტიანი ოპერატიული მეხსიერება. დიახ, როდესაც ვამბობ "ბაიტს", ვგულისხმობ მათ, ვინც რვა ბიტისგან შედგება. 64 ბაიტი ყველა თქვენი ადგილობრივი ცვლადისთვის და ზარის დასტისთვის. გასაგებად რომ ვთქვათ, ჩვენ უნდა გავაკონტროლოთ 8 RGB LED. თითოეული მათგანი განისაზღვრება 3 ბაიტით (ერთი შესაბამისად წითელი, მწვანე და ლურჯი არხებისთვის). ამრიგად, მხოლოდ 8 LED- ის მდგომარეობის შესანახად, ჩვენ დაგვჭირდება 8 სტრუქტურის მასივის დანერგვა, თითოეული 3 ბაიტი და ამ მასივის დასაწყისის მაჩვენებელი კიდევ ერთ ბაიტს მიიღებს. ამრიგად, 64 ბაიტიდან 25 გამოდის. ჩვენ ახლახან გამოვიყენეთ ოპერატიული მეხსიერების 39% და ჯერ არ დავიწყეთ. გარდა ამისა, ცისარტყელას შვიდი ძირითადი ფერის შესანახად დაგჭირდებათ 7 × 3 = 21 ბაიტი, ასე რომ ოპერატიული მეხსიერების 72% ამოიწურება. რაც შეეხება ძირითად ფერებს, მე ვაჭარბებ: ჩვენ არ გვჭირდება ყველა მათგანი ერთდროულად RAM– ში და ისინი არასოდეს იცვლება, ამიტომ ისინი შეიძლება განხორციელდეს როგორც მუდმივი მასივი, რომელიც ინახება ფლეშში RAM– ის ნაცვლად. ყოველ შემთხვევაში, ის საერთო შთაბეჭდილებას ტოვებს გამოყენებული ტექნიკის შესახებ.
გავიხსენე კნუთის განცხადება ნაადრევი ოპტიმიზაციის შესახებ, დავიწყე სამი ნათურის რეჟიმის პროტოტიპირება ცალკე იმის სანახავად, რა ხდება. მე ისინი ცალკე გამოვცადე, რათა დავრწმუნდე, რომ ისინი სწორად მუშაობენ და თითოეული მათგანი შეესაბამება ჩემს მიკროკონტროლერს. რამდენიმე საღამო დასჭირდა მის შესასრულებლად და ყველაფერი კარგად წავიდა… სანამ არ შევეცადე მათი გაერთიანება გადამრთველის განცხადებაში. avr-size უტილიტა აცხადებდა 1.5 Kb ტექსტის მონაკვეთის ზომას (avr-gcc –s დროშით). იმ მომენტში ჩემი პირველადი განზრახვა იყო ავიღო რაღაც ATtiny25 2 კბ სიჩქარით და ეს შეიძლებოდა ყოფილიყო ამ ამბის ბედნიერი დასასრული.
მაგრამ რატომღაც ვიგრძენი, რომ მნიშვნელოვანი ოპტიმიზაციის შემდეგ შემეძლო შემემცირებინა ეს უაზრო კოდი 1 კბ. თუმცა, კიდევ ერთი კვირა დასჭირდა იმის გააზრებას, რომ შეუძლებელია და კიდევ ერთი კვირა მაინც. ცისარტყელა ხუთ ძირითად ფერს მომიწია (მნიშვნელოვანი ვიზუალური განსხვავების გარეშე). მოვიშორე შემთხვევის განცხადებები და ორობითი კოდის ზომის შესამცირებლად გამოვიყენე if-then-if- ის ჯაჭვი. ცეცხლის ანიმაციას სჭირდება ფსევდო შემთხვევითი რიცხვების გენერატორი, რომელიც საკმაოდ მოცულობითია, ამიტომ მე განვახორციელე LFSR– ის გამარტივებული ვერსია მუდმივი საწყისი მნიშვნელობით. მე არ მაინტერესებს PRNG სრული ციკლის ხანგრძლივობა და უბრალოდ ვეძებ დაბალანსებას კოდის ზომასა და "რეალისტური ცეცხლის ანიმაციას" შორის. მე ასევე განვახორციელე ბევრი უმნიშვნელო ოპტიმიზაცია, რომელიც ახლა არ მახსოვს და კიდევ შევძელი ჩიპში ცეცხლის გარდა ყველა რეჟიმის ჩაქრობა. როდესაც იდეები დამთავრდა, ჩემი საერთო კოდი იყო დაახლოებით 1200 ბაიტი.
მე დრო გავიდა და ბევრს ვკითხულობდი AVR კოდის ოპტიმიზაციის შესახებ. ახლოს ვიყავი დანებებაზე და ყველაფერი ასამბლეის ენაზე გადამეწერა, მაგრამ ბოლო შანსი მივეცი. ოპტიმიზაციის საბოლოო მსვლელობისას მე ცისარტყელა დავჭრა სამ ძირითად ფერში და სხვებიც გამოთვალეთ ფრენის დროს, მე ყველაფერი გადავამოწმე და AVR– ის ოპტიმიზაციის რეკომენდაციებს მივყევი და ბოლოს…
avrdude: წერის ფლეშ (1004 ბაიტი):
წერა | #################################################### | 100% 0.90 წ
არ არის საჭირო იმის თქმა, რომ მე გამოვიყენე თითქმის მთელი ოპერატიული მეხსიერება და მხოლოდ ერთი ბაიტი EEPROM მიმდინარე რეჟიმის შესანახად. მე არ ვგულისხმობ, რომ ეს არის იდეალური და საბოლოო განხორციელება. ის უბრალოდ მუშაობს და ჯდება მიკროკონტროლერთან. დარწმუნებული ვარ, შენ შეგიძლია ამის გაკეთება უკეთესად. მე ნამდვილად ვარ. მე უბრალოდ მინდა გაგიზიაროთ ერთი შეხედვით არაპრაქტიკული პრობლემის გადაჭრის გართობა, რომელსაც თავიდან თითქმის შეუძლებლად თვლით.”ამრიგად, ჰაკერი ნიშნავს შესაძლებლობის საზღვრების შესწავლას…” -რიჩარდ სტოლმანი.
მასალები:
1x ATtiny13 MCU ($ 0.28 = $ 0.24 MCU– სთვის SOP-8 პაკეტში და $ 0.04 DIP8 ადაპტერისთვის)
8x WS2812 RGB LED- ები (გირჩევთ დაფა ან LED ზოლის ნაჭერი) ($ 0.42)
1x TTP223 სენსორული ღილაკი ($ 0.10)
1x Micro USB to DIP ადაპტერი ($ 0.14)
1x 10kΩ რეზისტორი (<$ 0.01)
1x 100nF კერამიკული კონდენსატორი (<$ 0.01)
1x 10–47µF ელექტროლიტური კონდენსატორი (<$ 0,01)
სულ <$ 0.97
ნაბიჯი 1: პროგრამული უზრუნველყოფის დაყენება
თქვენ დაგჭირდებათ avr-gcc ინსტრუმენტთა ქსელი წყაროს კოდის შესადგენად და avrdude კომუნალური მიკროკონტროლერის ROM ატვირთვისთვის. ინსტალაციის პროცესი საკმაოდ მარტივი და პირდაპირია, მაგრამ ეს დამოკიდებულია თქვენს ოპერაციულ სისტემაზე. თუ იყენებთ რაიმე სახის GNU/Linux– ს, თქვენ ალბათ უკვე გაქვთ შესაბამისი პაკეტები თქვენს საცავში. ამ პროექტის კოდის გადმოწერა შესაძლებელია აქ:
github.com/arduinocelentano/t13_ws2812_lamp
თქვენ ასევე დაგჭირდებათ light_ws2812 ბიბლიოთეკა:
github.com/cpldcpu/light_ws2812
მას შემდეგ რაც მიიღებთ avr-gcc ინსტრუმენტთა ქსელს და პროექტის წყაროს, გაუშვით თქვენი ტერმინალი და ჩაწერეთ შემდეგი კოდი:
cd ბილიკი/პროექტამდე
გააკეთოს
ნაბიჯი 2: მიკროკონტროლერის დაპროგრამება
თუ თქვენ გაქვთ რაიმე სახის USBASP პროგრამისტი, უბრალოდ დაუკავშირეთ იგი Attiny– ს მისი პინუტის მიხედვით. ჩვეულებრივ, ასე გამოიყურება, მაგრამ მე გირჩევთ შეამოწმოთ თქვენი რეალური პინუტი!
გარდა ამისა, თქვენ შეგიძლიათ გამოიყენოთ Arduino დაფა, როგორც პროგრამისტი. გახსენით Arduino IDE და იპოვეთ Arduino ISP მაგალითი "ფაილი amples მაგალითები" მენიუში. ესკიზის ატვირთვის შემდეგ, თქვენი Arduino დაფა მოქმედებს როგორც პროგრამისტი. ესკიზის კოდში მოცემული კომენტარები მოგცემთ მინიშნებას დასადგენად.
ახლა გაიქეცი
გააკეთე ფლეშ
ააფეთქოს MCU და
დაუკრა
დაუკრავენ ბიტების დაყენებას.
გირჩევთ:
3D დაბეჭდილი LED განწყობის ნათურა: 15 ნაბიჯი (სურათებით)
3D დაბეჭდილი LED განწყობის ნათურა: მე ყოველთვის მქონდა ეს აღფრთოვანება ნათურებით, ასე რომ, 3D ბეჭდვისა და Arduino- ს LED- ებთან ერთად შერწყმის უნარი იყო ის, რაც მე მჭირდებოდა. კონცეფცია ძალიან მარტივია და შედეგი არის ერთ -ერთი ყველაზე დამაკმაყოფილებელი ვიზუალური გამოცდილება, რომელიც შეგიძლიათ განათავსოთ
განწყობის ნათურა RGB Led– ით: 4 ნაბიჯი
განწყობის ნათურა RGB Led– ით: ეს არის პროექტორატი, რომელიც გამოიყენება თქვენი ლამპარის მიერ * sentimientos * utilizando un Arduino Uno. Primero se necesitan varios materiales como jumpers, leds RGB o Neopixel, დამოკიდებული de cómo se desee hacer. ეს არის ის ფაქტი, რომ იყენებთ RGB– ს, რომელიც მოიცავს RGB– ს
განწყობის სპიკერი- ძლიერი სპიკერი იმისთვის, რომ განწყობის მუსიკა უკრავს გარემოს ტემპერატურაზე დაყრდნობით: 9 ნაბიჯი
Mood Speaker- ძლიერი სპიკერი Mood Music– ის დასაკრავად, გარემოს ტემპერატურაზე დაყრდნობით: გამარჯობა! ჩემი სკოლის პროექტისთვის MCT Howest Kortrijk– ში, მე გავაკეთე Mood Speaker ეს არის ჭკვიანი Bluetooth სპიკერი მოწყობილობა სხვადასხვა სენსორებით, LCD და WS2812b ledstrip შედის. სპიკერი უკრავს ფონურ მუსიკას ტემპერატურის მიხედვით, მაგრამ შეუძლია
დაბალი პოლი LED განწყობის ნათურა: 9 ნაბიჯი (სურათებით)
დაბალი პოლი LED განწყობის ნათურა: შესანიშნავი დამატება ნებისმიერ მაგიდას, თაროზე ან მაგიდაზე! დისკრეტული ღილაკი, რომელიც მდებარეობს ბაზაზე, საშუალებას გაძლევთ გადაადგილდეთ LED განათების სხვადასხვა შაბლონებით. არ აქვს მნიშვნელობა გსურთ გამოიყენოთ თქვენი ნათურა სწავლისთვის, დასასვენებლად ან თუნდაც წვეულებისთვის … არსებობს განცალკევება
LED განწყობის ნათურა: 9 ნაბიჯი (სურათებით)
LED განწყობის ნათურა: მე ცოტა ხნის წინ წავაწყდი გრეგ დავილის LED კუბს. ეს შესანიშნავი ნამუშევარია. მისმა შთაგონებამ, თუნდაც მე მინდოდა მსგავსი რამ გამეკეთებინა. მაგრამ ეს იყო გამოსავალი ჩემი ლიგიდან. მე გადავწყვიტე ერთი ნაბიჯის გადადგმა და გავზარდე გზა