Showing posts with label MDPs. Show all posts
Showing posts with label MDPs. Show all posts

Sunday, March 30, 2014

Serial Reader (პროექტი CL / C#)



მოგესალმებით ჩემი მორიგი პოსტით, რომელიც შეიცავს ინფორმაციას სერიული წამკითხველის შესახებ (რესურს ფაილებსა და საინსტალაციო ვერსიას). ზემოთ მოცემული პროგრამა "Serial Reader" დავწერე C# ში .NET 4 CP პლათფორმაზე დაფუძნებით, რადგან მეოთხე ვერსია უფრო გავრცელებულია ვიდრე 4.5, სიახლის გამო. მოცემული პროგრამა პიდაპირ უმიზნებს და გამოიყენება სპექტრის ანალიზატორისთვის, რომელიც შეგიძლიათ ნახოთ ჩემს ბლოგზე.
პროგრამა დაწერილია WF ის გამოყენებით. WPF ში უფრო დახვეწილი დიზაინი იქნებოდა, მაგრამ ჯერ ჯერობით ჩემს ინტერესებში არ შედის ვიზუალური მიმზიდველობა ამ პროგრამაში. რაც შეეხება ინტერფეისს საკმაოდ მარტივია, ფუნქციიდან გამომდინარე.

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

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

მაგალითად:
data [0] = 21;
data [1] = 23;
data [2] = 34;
...
data [127] = 54;

შესაბამისად აიღება კოორდინატები, სადაც პირველი კოორდინატი x ია ხოლო, მეორე y და i იცვლება 0-დან 127 მდე (<128). წერტილები კი ასე აიღება point ( i , data[i] ).

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

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

Sunday, March 9, 2014

აუდიო სპექტრის ანალიზატორი (CL)


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


პირველ რიგში ჩამოვთვლი საჭირო მასალას, რასაც საჭიროებს ამ პროექტის განხოციელება :

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

გამაძლიერებლისათვის კი შემდეგი ნაწილებია საჭირო
1)  C2 | C3 | C4 = 2.2 მიკროფარადი
2)  C1 = 1 მიკროფარადი, რომელიც 10 მიკროფარადით შევცვალე, პროექტის ინტერესებიდან გამომდინარე
3)  R7 | R8 = 4.7K
4)  R1 | R2 | = 50K - 50K ამ წინაღობების მთავარი აზრი ის არის, რომ მოხდეს ძაბვის გაყოფა შუა წერტილში
5)  R3 | R4 | R5 | R6 - კი გაძლიერების კოეფიციენტებს არეგულირებენ, რომელიც შესაძლებელია ასე გამოითვალოს, პირველი გამაძლიერებლისათვის, R4 / R3 ხოლო მეორესათვის R6 / R5
6)  C5 = 100 მიკროფარადი, რომელიც + სა და 0 ს შორის ირთვება
7) ელექტრონული მიკროფონი

8) და მიკროსქემა LM358 ან უბრალოდ დაბალ ხმაურიანი ერთჯერადი კვების საშუალების მქონე ოპ. გამაძლიერებელი. 

სქემა მოკლედ, რომ აღვწერო, გვაქვს ელექტრონული მიკროფონი, რომელიც მარაგდება R7 + R8 წინაღობების გავლით, ეს ორი წინაღობა ჩემს შემთხვევაში შეიძლება ერთით შეცვალოთ, რადგან C2 ის გამოა ეს ყველაფერი. ამის შემდეგ სიგნალი შედის C1 ის გავლით ინვერტული გამაძლიერებლის ერთ კომპონენტში, რომელიც DC კომპონენტს ფილტრავს და ატარებს AC კომპონენტს. ამის შემდეგ ეს სიგნალი ძლიერდება და გადადის მეორე საფეხურზე. რეკომენდირებულია, რომ თითოეული გამაძლიერებლის კოეფიციენტი არ აღემატებოდეს 30ს. ხოლო აღნიშვნები FS და SS, გამოყვანილია x30, რომელსაც ვიყენებ და x900, რომელზეც საკმაოდ ძლიერი სიგნალი მოდის. 

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

2. Arduino ს ნებისმიერი დაფა (Uno / Leonardo ჩემს შემთხვევაში), რომელსაც 1K ზე მეტი RAM ექნება, რადგან ინფორმაციის სწრაფი დამუშავებისათვის არის საჭირო. 

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

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

5. პროგრამა, რომელიც ჯერ ბოლომდე არ არის დასრულებული და მხოლოდ საცდელი ვარიანტია. პროგრამის ხორცშესასხმელად დაგჭირდებათ System.IO.SerialPort კლასი, რომელიც Arduino ს დაუკავშირდება და სინქრონიზებულად იმუშავებს მასთან. 




დამატებითი ინფორმაციისთვის / პროექტთან დაკავშირებული იდეებისთვის მომწერეთ


Sunday, February 9, 2014

პროექტი <-DVC->

 გამარჯობათ, ეს არის ჩემს მიერ ბოლო დროს გაკეთებული პროექტი, რომელიც საკმაოდ სახალისო და ამავე დროს საინტერესოა ჩემთვის, რომელიც იყენებს ახალ AtMega32 ჩიპს, რომელსაც აქვს USB კომუნიკაციის მხარდაჭერა პირდაპირ კომპიუტერთან რაიმე FTDI ჩიპის გამოყენების გარეშე, რაც აქამდე ასე თუ ისე მოყვარულთათვის დიდი თავის სატკივარი იყო.

პროექტის განვითარების ფარგლებში იდეების მოწოდება შეგიძლიათ ქვემოთ - კომენტარებში, ან მეილის გამოყენებით - Giorgi.jambazishvilI@gmail.com

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

დავიწყებ აღწერით, რომელიც მთლიანად მოიცავს იმ ასორტიმენტს, რომელიც ძირითად როლს თამაშობს ამ მოწყობილობაში.


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

 

2) იზოლაციის ლენტა, რომელიც ამ პროექტზე "ოხრად" არის გამოყენებული, ვიზუალური მხარის გაუთვალისწინებლად


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


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


5) კარგი უნარი და ბაზა C/C++, მაგრამ მაინც უფრო C ში, რადგან C++ იდან კლასებს არ ვიყენებ და შეუძლებელიცაა ესეთ პატარა პროცესორში ამ ყველაფრის ჩადება


მუშაობის მთავარი პრინციპი ის არის, რომ თუ დავიწყებთ ხელიდან და გავუყვებით USB შესაერთებლამდე ვნახავთ, რომ ყველაფერი საკმაოდ ჭკვიანურად არის მოწყობილი. ხელიდან გამოდის 5 ხაზი, რომელიდანაც 2 ემსახურება VCC სა და GND (+3.3V და 0V). კიდევ ორი - SDA და SCL (TWI ინტერფეისი) და ერთიც მაუსის ღილაკებისათვის. თავიდან შეიძლება უცნაურად მოგეჩვენოთ როგორ ხდება ორი ღილაკის ინფორმაციის გადაცემა ერთი ხაზით, მაგრამ უფრო უცნაურად ის მოგეჩვენებათ, რომ გითხრათ, რომ ამ ერთი ხაზის გამოყენებით შესაძლებელია ხელზე 50 დან 200 მდე ღილაკი მოვითავსო ხელზე და ისე გამოვიყენო ისინი, როგორც მომინდება. ეს ყველაფერი კი უბრალო ანალოგური პინის (მიკრო პროცესორზე), პროგრამისა და წინაღობების დამსახურებაა.

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

ბოლოს კი ვიდეო


დროის გამოჩენის პარალელურად გავაგრძელებ განახლებებზე და დახვეწაზე მუშაობას, რასაც ამ ბლოგზე დავდებ...

გიორგი ჯამბაზიშვილი (G.J)