პროქტი№7 – შუქდიოდის ცვალებადი სიკაშკაშე, პულსირება.

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

დაგვჭირდება:

შუქდიოდი, (იყოს მწვანე)  

150-200Ω წინაღობა              

სქემის აწყობა 

სტანდარტული გაფრთხილება: ყურადღებით დააკვირდით და გამორთულ არდუინოზე ააწყვეთ ქვემოთ მოყვანილი სქემა. მე-11 კონტაქტიდან -> წინაღობა -> შუქდიოის ანოდი, კათოდი კი ->მიწაზე.

სურ. 3-3.  სქემა, პულსირებადი შუქდიოდი

პროგრამული კოდი

აკრიფეთ ქვემოთ მოყვანილი კოდი, შეამოწმეთ და ჩატვირთეთ არდუინოში.
// int ტიპის ცვლადი სახელად ledPin 
// (კონტაქტის № რომელზეც მიერთებულა შუქდიოდი)
int ledPin = 11; 
// float ტიპის ცვლადი სახელად 
// sinVal (შინაარსი: სინუსის მნიშვნელობა)
float sinVal; 
// int ტიპის ცვლადი სახელად ledVal 
// (შინაარსი: შუქდიოდის კაშკაშის მნიშვნელობა)
int ledVal; 

void setup() { 
 pinMode(ledPin, OUTPUT);//ledPin=11 კონტაქტი არის გამომსვლელი
}
void loop() {
 for (int x=0; x<180; x++) { // კუთხის ზრდა 10 ბიჯით
       /*შემდეგ სტრიქონში ხდება კუთხის გრადუსული 
       ზომის გადაყვანა რადიანებში და შესაბამისი სინუსის გამოთვლა */
       sinVal = (sin(x*(3.1412/180)));
   ledVal = int(sinVal*255);//მიღებული სინუსის გადაეცემა ledVal-ს
       // ledVal-ის გადაცემა გამომსვლელ კონტაქტზე
       analogWrite(ledPin, ledVal);
   delay(25); // დაყოვნება 25 მილიწამით
   }
}

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

კოდის განხილვა.

ზემოთ მოყვანილი პროგრამული კოდი მარტივია, მაგრამ აუცილებელია ზოგიერთი განმარტების გაკეთება. გამოსასვლელი კონტაქტისთვის შემოვიღეთ int ტიპის ცავლადი ledPin. სინუსის გამოსათვლელად float ტიპის ცვლადი. ხოლო  №11 PWM გამომსვლელ კონტაქტზე გადასაცემად კი int ტიპის ცვლადი ledVal.

იდეა მდგომარეობს იმაში, რომ სიკაშკაშის ცვლილებისათვის გამოვიყენოთ სინუსის ფუნქციის თვისება მიიღოს მნიშვნელობები (0; 1; 0) შუალედში, როდესაც არგუმენტი იცვლება 00 გრადუსიდან 1800 გრადუსამდე (1800-3600 არ გვჭირდება რადგან ამ შუალედში სინუსი უარყოფითია).

სინუსის გამოსათვლელად საჭიროა გრადუსული ზომის გადაყვანა რადიანებში x*(3.1412/180).

(ერთი შეხედვით რა საჭიროა ჯერ გრადუსული ზომის აღება და მერე მისი გადაყვანა რადიანებში, არ ჯობდა პირდაპირ რადიანები აგვეღო? არ ჯობდა იმიტომ, რომ გრადუსული ზომისთვის ინკრემენტი for (int x=0; x<180; x++) მარტივია). მიღებულ sinVal მნიშვნელობას ვამრავლებთ 255-ზე და ვღებულობთ ledVal-ს მნიშვნელობებს 0 დან 255 მაქსიმუმამდე. თან float ტიპის sinVal გარდაიქმნება int ტიპად შემდეგ გამოცხადებით:int()

ledVal = int(sinVal*255);

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

ამის შემდეგ, მიღებული მნიშვნელობები გადაეცემა №11 ციფრულ PWM კონტაქტს.

analogWrite(ledPin, ledVal);

მაგრამ, როგორ გადაეცემა ანალოგური სიგნალი ციფრულ კონტაქტს? თუ დავაკვირდებით არდუინოს დაფას, ვნახავთ, რომ №3, 5, 6, 9, 10 და 11 კონტაქტებს აწერია PWM. ეს კონტაქტები იმით განსხვავდება სხვა, მხოლოდ ციფრული კონტაქტებისაგან, რომ მათ დამატებით შეუძლიათ გამოიყვანონ PWM ტიპის სიგნალი.

ახლა განვიხილოთ თუ რას წარმოადგენს PWM (Pulse Width Modulation). ეს მეთოდი გულისხმობს ანალოგური სიგნალის მოქმედების მსგავსი ეფექტის მიღებას ციფრული სიგნალით. ამ დროს მართკუთხა ციფრული სიგალის ხანგრძლივობის ცვლილებით (სურათი ქვემოთ) ხდება ანალოგური სიგნალის კოდირება-იმიტაცია. არდუინო თავის PWM კონტაქტებზე აგზავნის 0 და 5ვ სიდიდის იმპულსებს 500ჰც სიხშირით. ამ იმპულსების, ანუ ჩართვა-გამორთვის კომბინაციები ახდენენ ანალოგური სიგალის 0-დან 5ვ-მდე ცვლილების იმიტაციას. კომბინაციები კი ნიშნავს თუ როგორია თანაფარდობა ჩართული მდგომარების ჯამურ ხანგრძლივობასა და გამორთული მდგომარების ჯამურ ხანგრძლივობას შორის.

მაგალითად: №11 ციფრულ PWM კონტაქტზე analogWrite()-ის საშუალებით 0-გადაცემის შემთხვევაში, ჩართული მდგომარეობის ანუ ძაბვის მიწოდების ხანგრძლივობა იქნება ნული, ანუ სამუშაო ციკლის 0%. იმავე კონტაქტზე 64-ის გადაცემის შემთხვევაში (რაც შეადგენს 255-ის ≈25%(25,1)) №11 ციფრულ PWM კონტაქტზე 5ვ ძაბვა მიწოდებული იქნება დროის 25% განმავლობაში და გამორთული 75% განმავლობაში. 191-ის გადაცემის დროს კი დროის ≈75% (74,9) ჩართული და გამორთული ≈25%. ხოლო 255-ის გადაცემის დროს სრული 100% ჩართული. საბოლოოდ იქმნება ილუზია, რომ შეგვიძლია ციფრული გამომსველელი კონტაქტზე მოვახდინოთ ანალოგური სიგნალის სიმულირება

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

One Response to პროქტი№7 – შუქდიოდის ცვალებადი სიკაშკაშე, პულსირება.

  1. scienceasm says:

    წიგნის თარგმანი ქვეყნდება forum.ge – ზე Hinkalino-ს მიერ.
    დამატებითი შეკითხვები თემაში
    ==========================================
    “Arduino ს ინტერფეისი”
    ==========================================
    http://forum.ge/?f=48&showtopic=34393677

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: