Სარჩევი:
- ნაბიჯი 1: გამოიყენეთ შემთხვევა: ADC გაზომვების გასწორება
- ნაბიჯი 2: გამოიყენეთ საქმე: მიკროფონის სიგნალის DC კომპონენტის გაზომვა
- ნაბიჯი 3: გაანგარიშება
- ნაბიჯი 4: კოდი
- ნაბიჯი 5: დამატებითი
- ნაბიჯი 6: დასკვნა
ვიდეო: საშუალო გაშვება თქვენი მიკროკონტროლის პროექტებისთვის: 6 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:16
ამ სასწავლო ინსტრუქციაში მე აგიხსნით რა არის საშუალო გაშვება და რატომ უნდა იზრუნოთ მასზე, ასევე გაჩვენებთ თუ როგორ უნდა განხორციელდეს ის გამოთვლითი მაქსიმალური ეფექტურობისთვის (არ ინერვიულოთ სირთულის გამო, მისი გაგება ძალიან მარტივია და მე უზრუნველყავით ადვილად გამოსაყენებელი ბიბლიოთეკა თქვენი არდუინოს პროექტებისთვისაც:)
გაშვებული საშუალო, ასევე ჩვეულებრივ მოიხსენიება, როგორც მოძრავი საშუალო, მოძრავი საშუალო ან გაშვებული საშუალო, არის ტერმინი, რომელიც გამოიყენება მონაცემთა სერიების ბოლო N მნიშვნელობების საშუალო მნიშვნელობის აღსაწერად. ის შეიძლება გამოითვალოს ისევე როგორც საშუალო საშუალო ან შეგიძლიათ გამოიყენოთ ხრიკი, რომ მას მინიმალური გავლენა მოახდინოს თქვენი კოდის მუშაობაზე.
ნაბიჯი 1: გამოიყენეთ შემთხვევა: ADC გაზომვების გასწორება
Arduino– ს აქვს ღირსეული 10 ბიტიანი ADC ძალიან მცირე ხმაურით. როდესაც ვზომავთ მნიშვნელობას სენსორზე, როგორიცაა პოტენომეტრი, ფოტორეზისტორი ან სხვა მაღალი ხმაურის კომპონენტები, ძნელი დასაჯერებელია, რომ გაზომვა სწორია.
ერთი გამოსავალი არის მრავალჯერადი გაზომვის გაკეთება ყოველ ჯერზე, როდესაც გსურთ თქვენი სენსორის წაკითხვა და მათი საშუალო გაანგარიშება. ზოგიერთ შემთხვევაში ეს არის სიცოცხლისუნარიანი გამოსავალი, მაგრამ არა ყოველთვის. თუ გსურთ რომ ADC წაიკითხოთ 1000 ჯერ წამში, თქვენ უნდა გქონდეთ 10 000, თუ საშუალოდ 10 გაზომვას მიიღებთ. გამოთვლის დროის უზარმაზარი დაკარგვა.
ჩემი შემოთავაზებული გამოსავალია გაზომვების ჩატარება წამში 1000 -ჯერ, ყოველ ჯერზე განახლდეს გაშვებული საშუალო და გამოვიყენოთ იგი როგორც ამჟამინდელი მნიშვნელობა. ეს მეთოდი შემოაქვს გარკვეული შეფერხება, მაგრამ ამცირებს თქვენი განაცხადის გამოთვლის სირთულეს, რაც გაცილებით მეტ დროს მოგცემთ დამატებითი დამუშავებისთვის.
ზემოთ მოცემულ სურათზე მე გამოვიყენე ბოლო 32 გაზომვის საშუალო მაჩვენებელი. თქვენ დაინახავთ, რომ ეს მეთოდი არ არის 100% -ით წარუმატებელი, მაგრამ მნიშვნელოვნად აუმჯობესებს სიზუსტეს (ეს არ არის უარესი, ვიდრე ყოველ ჯერზე საშუალოდ 32 ნიმუშს). თუ თქვენ გინდათ გამოთვალოთ საშუალოდ 32 გაზომვა ყოველ ჯერზე, ეს მხოლოდ 0.25 ms დასჭირდება Arduino UNO– ს გაზომვებისთვის!
ნაბიჯი 2: გამოიყენეთ საქმე: მიკროფონის სიგნალის DC კომპონენტის გაზომვა
Arduino– ს შეუძლია გაზომოს ძაბვები 0 – დან Vcc– მდე (ჩვეულებრივ 5 V). აუდიო სიგნალი არის მთლიანად AC და თუ გსურთ გაზომოთ იგი მიკროკონტროლერზე, თქვენ უნდა შეაფასოთ იგი 1/2 Vcc– ის გარშემო. Arduino UNO– ს პროექტში, რაც ნიშნავს დაახლოებით 2.5 V (DC) + აუდიო სიგნალს (AC). 10 ბიტიანი ADC და 5 V კვების ბლოკის გამოყენებისას, 2.5 V მიკერძოება უნდა იყოს 512 -ის ტოლი. ასე რომ სიგნალის AC მნიშვნელობის მისაღებად 512 უნდა გამოვაკლოთ ADC გაზომვას და ეს არის, არა?
იდეალურ სამყაროში, ეს სიმართლე იქნებოდა. სამწუხაროდ, რეალური ცხოვრება უფრო გართულებულია და ჩვენი სიგნალის მიკერძოება მიდრეკილია მოძრაობისკენ. ძალიან ხშირია 50 Hz ხმაური (60 Hz თუ ცხოვრობთ აშშ – ში) ელექტრო ქსელიდან. როგორც წესი, ეს არ არის ძალიან პრობლემატური, მაგრამ კარგია ვიცოდეთ, რომ ის არსებობს. უფრო პრობლემატურია კომპონენტების გათბობიდან წრფივი დაშორება. თქვენ საგულდაგულოდ ადგენთ DC ოფსეტური შესწორებას დასაწყისში და ის ნელ -ნელა შორდება თქვენი აპლიკაციის მუშაობისას.
ამ პრობლემის ილუსტრაციას გავაკეთებ (მუსიკალური) სცემის დეტექტორით. თქვენ ადგენთ თქვენი მიკერძოების მოცილებას და დარტყმები ნათელია (სურათი 2). გარკვეული დროის შემდეგ, DC მიკერძოება მოძრაობს და დარტყმები ძლივს შესამჩნევია მიკროკონტროლერისთვის (სურათი 3). სცემის გამოვლენის ალგორითმი შემდგომში სიღრმისეულად იქნება შესწავლილი, რადგან ის აღემატება ამ სტატიის ფარგლებს.
საბედნიეროდ, არსებობს ხერხი, რომ მუდმივად შევინარჩუნოთ აუდიოს DC კომპენსაცია. გასაკვირი არ იქნება, რომ გაშვებული საშუალო, ამ ინსტრუქციის თემა, გამოსავალს იძლევა.
ჩვენ ვიცით, რომ ნებისმიერი AC სიგნალის საშუალო მნიშვნელობა არის 0. ამ ცოდნის გამოყენებით შეგვიძლია გამოვაკლოთ AC+DC სიგნალის საშუალო მნიშვნელობა არის DC მიკერძოება. მისი ამოღების მიზნით, ჩვენ შეგვიძლია ავიღოთ ბოლო რამდენიმე მნიშვნელობის საშუალო მაჩვენებელი და გამოვაკლოთ ADC– ს მიმდინარე კითხვისგან. გაითვალისწინეთ, რომ თქვენ უნდა გამოიყენოთ საკმარისად გრძელი საშუალო მაჩვენებელი. აუდიოსთვის, წამის მეათედი (ნიმუშების რაოდენობა დამოკიდებულია თქვენს შერჩევის მაჩვენებელზე) საკმარისი იქნება, მაგრამ იცოდეთ, რომ საშუალო საშუალო მაჩვენებლები უკეთესად მუშაობს. პირველ სურათზე თქვენ ხედავთ რეალური DC მიკერძოების გაანგარიშების მაგალითს გაშვებული საშუალო მაჩვენებლით 64 ელემენტით 1 kHz ნიმუშის სიხშირით (იმაზე ნაკლები ვიდრე ვურჩევდი მაგრამ მაინც მუშაობს).
ნაბიჯი 3: გაანგარიშება
თქვენ შეგიძლიათ წარმოიდგინოთ საშუალო გაშვება, როგორც ექიმის მოსაცდელში მყოფი ადამიანების საშუალო წონა. ექიმი ასრულებს ერთი პაციენტის გამოკვლევას და ერთდროულად ახალი შემოდის მოსაცდელში.
ლოდინის ოთახში მყოფი ყველა პაციენტის საშუალო წონის გასარკვევად, მედდას შეეძლო დაეკითხა თითოეული პაციენტი მათი წონის შესახებ, დაემატებინა ეს რიცხვები და გაყო პაციენტთა რაოდენობაზე. ყოველ ჯერზე, როდესაც ექიმი იღებს ახალ პაციენტს, ექთანი იმეორებდა მთელ პროცესს.
თქვენ ალბათ ფიქრობთ: "ეს არ ჩანს ძალიან ეფექტურად … უნდა არსებობდეს ამის უკეთესი გზა." და მართალი იქნებით.
ამ პროცესის ოპტიმიზაციისათვის მედდას შეეძლო ჩაეტარებინა პაციენტების ჯგუფის საერთო წონა. მას შემდეგ რაც ექიმი დარეკავს ახალ პაციენტს, ექთანი ჰკითხავს მას წონის შესახებ და გამოაკლებს მას ჯგუფს და გაუშვებს. მედდა მაშინ ჰკითხავს პაციენტს, რომელიც მხოლოდ მოსაცდელ ოთახში შევიდა მისი წონის შესახებ და დაამატა ჯამში. თითოეული ცვლის შემდეგ პაციენტების საშუალო წონა იქნება წონის ჯამი გაყოფილი პაციენტების რაოდენობაზე (დიახ, იგივე როგორც ადრე, მაგრამ ახლა ექთნმა მხოლოდ ორ ადამიანს ჰკითხა მათი წონის შესახებ ყველა მათგანის ნაცვლად). მე მესმის, რომ ეს პუნქტი შეიძლება ცოტა დამაბნეველი იყოს, ასე რომ გთხოვთ იხილოთ ილუსტრაცია დამატებითი სიცხადისთვის (ან დასვით შეკითხვები კომენტარებში).
მაგრამ მაშინაც კი, თუ ბოლო აბზაცი არ აღმოჩნდა დამაბნეველი, შეიძლება გქონდეთ კითხვები, როგორიცაა რა უნდა იყოს აკუმულატორში დასაწყისში, როგორ ჩავწერო ის, რაც ახლახან წავიკითხე რეალურ C კოდში? ეს იქნება განხილული შემდეგ ეტაპზე, სადაც ასევე მიიღებთ ჩემს კოდს.
ნაბიჯი 4: კოდი
იმისათვის, რომ გამოთვალოთ გაშვებული საშუალო, თქვენ ჯერ გჭირდებათ გზა შეინახოთ ბოლო N მნიშვნელობები. თქვენ შეგიძლიათ გქონდეთ მასივი N ელემენტებით და გადაიტანოთ მთელი შინაარსი ერთ ადგილას ყოველ ჯერზე, როდესაც დაამატებთ ელემენტს (გთხოვთ, ნუ გააკეთებთ ამას), ან შეგიძლიათ გადაწეროთ ერთი ძველი ელემენტი და მომართოთ მომდევნო ელემენტის მაჩვენებელი:)
აკუმულატორი უნდა იწყებოდეს 0 -მდე, იგივე ეხება დაგვიანების ხაზის ყველა ელემენტს. სხვა შემთხვევაში თქვენი საშუალო მაჩვენებელი ყოველთვის არასწორი იქნება. თქვენ ნახავთ, რომ delayLine_init ზრუნავს დაგვიანების ხაზის ინიციალიზაციას, თქვენ თვითონ უნდა იზრუნოთ აკუმულატორზე.
ელემენტის დამატება ხაზის დაგვიანებით ისეთივე ადვილია, როგორც უახლესი ელემენტის ინდექსის 1 -ით შემცირება, დარწმუნდით, რომ იგი არ მიუთითებს დაგვიანების ხაზის მასივის მხარეს. ინდექსის შემცირების შემდეგ, როდესაც ის 0 -ია, ის მარყუჟდება 255 -მდე (რადგან ეს არის 8 ბიტიანი ხელმოუწერელი მთელი რიცხვი). მოდულოს (%) ოპერატორი ზომით მასივის დაგვიანებით უზრუნველყოფს ინდექსის მითითებას მოქმედ ელემენტზე.
საშუალო გაანგარიშება ადვილი გასაგები უნდა იყოს, თუ წინა ნაბიჯზე მიჰყვებოდი ჩემს ანალოგიას. ამოიღეთ უძველესი ელემენტი აკუმულატორიდან, დაამატეთ უახლესი მნიშვნელობა აკუმულატორს, დააწექით უახლეს მნიშვნელობას დაგვიანების ხაზზე, დააბრუნეთ აკუმულატორი გაყოფილი ელემენტების რაოდენობაზე.
ადვილია, არა?
გთხოვთ, მოგერიდოთ ექსპერიმენტი თანდართული კოდის გამოყენებით, რათა უკეთ გაიგოთ როგორ მუშაობს ეს ყველაფერი. დღევანდელი მდგომარეობით, arduino კითხულობს ანალოგურ მნიშვნელობას ანალოგურ pin A0- ზე და ბეჭდავს "[ADC მნიშვნელობა], [გაშვებული საშუალო]" სერიულ პორტზე 115200 baud სიჩქარით. თუ თქვენ გახსნით arduino– ს სერიულ პლოტერს ბოდის სწორ სიჩქარეზე, ნახავთ ორ ხაზს: ADC მნიშვნელობა (ლურჯი) და გათლილი მნიშვნელობა (წითელი).
ნაბიჯი 5: დამატებითი
არის რამოდენიმე რამ, რაც სულაც არ უნდა იცოდეთ იმისათვის, რომ გამოიყენოთ საშუალო პროექტი თქვენს პროექტში, არ გეცოდინებათ მათი ცოდნა.
შეფერხება: დავიწყებ საუბარს ამ ნაბიჯის ილუსტრაციაზე. თქვენ შეამჩნევთ, რომ მეტი ელემენტის საშუალო გაშვება უფრო დიდ შეფერხებას იწვევს. თუ თქვენი რეაგირების დრო მნიშვნელობის შესაცვლელად არის გადამწყვეტი, შეიძლება დაგჭირდეთ გამოიყენოთ საშუალო მოკლე გაშვება ან გაზარდოთ ნიმუშის მაჩვენებელი (უფრო ხშირად გაზომეთ).
მოძრაობს.
ინიციალიზაცია: როდესაც მე ვსაუბრობ აკუმულატორის და დაგვიანების ელემენტების ინიციალიზაციაზე, მე ვთქვი, რომ ისინი უნდა იყოს ინიციალიზებული 0 -მდე. ალტერნატიულად თქვენ შეგიძლიათ დაიწყოთ დაგვიანების ხაზის ინიციალიზაცია თქვენთვის სასურველ რამეზე, მაგრამ აკუმულატორი უნდა დაიწყოს როგორც უახლესი N ელემენტების ჯამი დაგვიანების ხაზში (სადაც N არის ელემენტების რაოდენობა თქვენს გაშვებულ საშუალოზე). თუ აკუმულატორი იწყება ნებისმიერი სხვა მნიშვნელობით, გამოთვლილი საშუალო იქნება არასწორი - ან ძალიან დაბალი ან ძალიან მაღალი, ყოველთვის ერთი და იგივე ოდენობით (იგივე საწყისი პირობების გათვალისწინებით). მე გირჩევთ სცადოთ გაიგოთ რატომ ხდება ასე "კალმისა და ქაღალდის სიმულაციის" გამოყენებით.
აკუმულატორის ზომა: თქვენ ასევე უნდა გაითვალისწინოთ, რომ აკუმულატორი უნდა იყოს საკმარისად დიდი, რომ შეინახოს ყველა ელემენტის ჯამი დაგვიანების ხაზში, თუ ისინი ყველა დადებითი ან უარყოფითი მაქსიმუმია. პრაქტიკულად ეს ნიშნავს, რომ აკუმულატორი უნდა იყოს მონაცემთა ერთი ტიპი უფრო დიდი ვიდრე დაგვიანებული ხაზის ელემენტები და ხელმოწერილი, თუ დაგვიანებული ხაზის ელემენტები ხელმოწერილია.
ხრიკი: გრძელი დაგვიანების ხაზები დიდ მეხსიერებას იკავებს. ეს შეიძლება სწრაფად გახდეს პრობლემა. თუ მეხსიერება ძალიან შეზღუდული გაქვთ და დიდად არ გაინტერესებთ სიზუსტე, შეგიძლიათ მიახლოებითი გაანგარიშება, თუ გამოტოვებთ მთლიანად დაგვიანებას და ამის ნაცვლად გააკეთებთ: აკუმულატორიდან გამოაკლეთ 1/N * აკუმულატორი და დაამატეთ ახალი მნიშვნელობა (8 გრძელვადიანი საშუალო მაგალითის მაგალითზე: აკუმულატორი = აკუმულატორი * 7/8 + newValue). ეს მეთოდი იძლევა არასწორ შედეგს, მაგრამ ეს არის ღირსეული მეთოდი გაანგარიშების საშუალო, როდესაც თქვენ გაქვთ დაბალი მეხსიერება.
ენათმეცნიერება: "გაშვებული საშუალო/საშუალო" ჩვეულებრივ გამოიყენება რეალურ დროში საშუალოს მიმართებისას, ხოლო "მოძრავი საშუალო/საშუალო" ჩვეულებრივ ნიშნავს ალგორითმის მუშაობას სტატიკურ მონაცემთა ნაკრებზე, როგორიცაა Excel ცხრილები.
ნაბიჯი 6: დასკვნა
ვიმედოვნებ, რომ ეს ინსტრუქცია საკმაოდ ადვილი გასაგები იყო და ის დაგეხმარებათ მომავალ პროექტებში. გთხოვთ თავისუფლად განათავსოთ კითხვები ქვემოთ მოცემულ კომენტარებში, თუ რაიმე გაუგებარია.
გირჩევთ:
ეკრანის / ეკრანის გარეშე გაშვება Raspberry Pi ან სხვა Linux / unix დაფუძნებული კომპიუტერები: 6 ნაბიჯი
ეკრანის / ეკრანის გარეშე გაშვება Raspberry Pi– ზე ან Linux– ზე დაფუძნებულ სხვა კომპიუტერებზე: როდესაც ადამიანების უმეტესობა ყიდულობს Raspberry PI– ს, მათ ჰგონიათ, რომ მათ სჭირდებათ კომპიუტერის ეკრანი. ნუ დახარჯავთ ფულს არასაჭირო კომპიუტერის მონიტორებსა და კლავიშებზე. ნუ დაკარგავთ დროს კომპიუტერებს შორის კლავიატურების და მონიტორების გადაადგილებას. არ დაუკავშიროთ ტელევიზორი, როდესაც ის არ არის
Rainbow LED- ები თქვენი პროექტებისთვის: 4 ნაბიჯი (სურათებით)
Rainbow LED- ები თქვენი პროექტებისთვის: გამარჯობა ყველას! მე ვიყენებდი ამ LED- ებს ბევრ დეკორატიულ პროექტში და შედეგი ყოველთვის გასაოცარია, ამიტომ მინდა გაგიზიაროთ ჩემი გამოცდილება, დავინახე ბევრი ადამიანი, ვინც ყიდულობს RGB LED ზოლის კონტროლერს და იყენებს 3 ან 5 -ს ფერის შეცვლის რეჟიმი მხოლოდ
განაახლეთ თქვენი კოსმოსური გაშვება კერბალის კოსმოსური პროგრამის ფიზიკური დადგმის ღილაკით: 6 ნაბიჯი
განაახლეთ თქვენი კოსმოსური გაშვება კერბალის კოსმოსური პროგრამის ფიზიკური დადგმის ღილაკით: მე ახლახანს ავიღე კერბალის კოსმოსური პროგრამის დემო ვერსია. Kerbal Space Program არის სიმულატორის თამაში, რომელიც საშუალებას გაძლევთ შეიმუშაოთ და გაუშვათ რაკეტები და ნავიგაცია მოახდინოთ მათ შორეულ მთვარეებსა და პლანეტებზე. მე ჯერ კიდევ ვცდილობ წარმატებით ჩავიდე მთვარეზე (ო
პარტიზანული ბატარეის დამჭერი თქვენი Breadboard / Arduino პროექტებისთვის: 3 ნაბიჯი
პარტიზანული ბატარეის მფლობელი თქვენი Breadboard / Arduino პროექტებისთვის: მე ექსპერიმენტებს ვატარებ DS1307 და Arduino– ზე, მე უნდა ვიპოვო გზა CR1212 ბატარეის დასაკავშირებლად. შევედი ჩემს კონექტორთა ყუთში და ვერაფერი ვნახე, რამაც დახმარება არ შემიძლია. მაშინ, eur ê ka! მე მქონდა განათება
უფასო პერსონალის ** სია თქვენი პროექტებისთვის: 8 ნაბიჯი
უფასო პერსონალის ** სია თქვენი პროექტებისთვის: ეს არის იმ ადგილების ჩამონათვალი, საიდანაც შეგიძლიათ მიიღოთ უფასო ნივთები, შეგიძლიათ გამოიყენოთ თქვენს პროექტებში …. ის უფასოა და ნივთები გაიგზავნება უფასოდ, ასე რომ, დიახ, იმედია მოგეწონებათ სია! კარგი, მე მოვაწყე ეს ინსტრუქცია პროდუქტის ტიპის მიხედვით. PM მომწერეთ თუ გაქვთ საიტი