Tuesday, September 16, 2014

ტაშით გააქტიურებადი განათება V2




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

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

5V-------<LDR>-------|A1|--------<R1>----------0V

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

#include "LightControllerV2.h"

#define mic A0
#define ls A1
#define mp1 2
#define mp2 3

LightControllerV2 LCV2(mic, ls, mp1, mp2);

void setup()
{
   LCV2.AutoConfig();
}

void loop()
{
   LCV2.Run();
}

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

  1. მიკროფონის პინი
  2. სინათლის სენსორის პინი
  3. ძრავის პინი 1
  4. ძრავის პინი 2

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

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

ყველაფერი დატესტილია და მუშაობს 100%-ით (+ - 1%)!

ლინკიდან შეგიძლიათ გადმოწეროთ საჭირო ფაილები.


No comments:

Post a Comment