I2C ინტერფეისი და მანძილის სენსორი
I2C იგივე Inter Integrated Circuit წარმოადგენს სერიალურ, სინქრონულ ინტერფეისს. რომელიც ფართოდ გამოიყენება თანამედროვე ელექტრონიკაში. თავისი ბუნებით, აღნიშნული ინტერფეისი გახლავთ half duplex ინტერფეისი. რაც იმას ნიშნავს, რომ მისი მეშვეობით შესაძლებელია ინფორმაციის ორმხრივი მიმოცვლა. თუმცაღა ინფორმაციის გაგზავნა და მიღება ერთდროულად შეუძლებელია. გარდა ამისა მოცემულ ინტერფეისში მოწყობილობები იყოფა ორ ჯგუფად. ესენია მასტერი (master) და სლეივი (slave). მასტერი წარმოადგენს მმართველ, ბრძანებების გამცემ მოწყობილობას. ხოლო სლეივი მასზე დამოკიდებულია, იგი იღებს ბრძანებას მასტერისგან და უბრუნებს პასუხს.
I2C ინტერფეისის უპირატესობად ითვლება დამისამართების პრინციპი. რაც გულისხმობს, რომ ერთ მასტერ მოწყობილობასთან შეგვიძლია მივაერთოთ რამდენიმე სლეივი. თითოეულ სლეივს აქვს უნიკალური მისამართი. რისი მეშვეობითაც, მასტერი გაარჩევს მათ ერთმანეთისგან და კონტაქტს დაამყარებს მხოლოდ იმ სლეივთან რომლისთვისაც სურს ინფორმაციის გაგზავნა ან მიღება. დამისამართება შესაძლოა იყოს 7 ან 10 ბიტიანი. რაც საშუალებას გვაძლევს ერთ მასტერს დავუკავშიროთ მაქსიმუმ 128 ან 1024 სლეივ მოწყობილობა. აღსანიშნავია, რომ I2C ინტერფეისში დასაშვებია მრავალი მასტერისა და სლეივის არსებობა.
მოცემული ინტერფეისი საკომუნიკაციოდ იყენებს ორ პინს (მაგისტრალს). ესენია Serial Clock (SCL) და Serial Data (SDA). SCL პინი წარმოადგენს სინქრონიზაციის პინს. ინფორმაციის წაკითხვა ხორციელდება მხოლოდ და მხოლოდ მაშინ როდესაც SCL პინი ლოგიკური ერთის მდგომარეობაშია. ხოლო წასაკითხი ინფორმაცია გადაიცემა SDA პინის საშუალებით. გარდა ამისა I2C-ს უპირატესობა მდგომარეობს იმაში, რომ პროტოკოლის მეშვეობით შესაძლებელია დავადგინოთ სლეივმა მიიღო თუ არა ინფორმაცია, ან არსებობს თუ არა ის სლეივი რომელსაც ინფორმაციას ვუგზავნით. როდესაც გვინდა კონტროლერს დავუკავშიროთ I2C მოწყობილობა, მაგალითად რაიმე სენსორი, კონტროლერის SDA უკავშირდება სენსორის SDA პინს. ხოლო SCL – SCL-ს.
I2C ინტერფეისის ერთ-ერთი უმარტივესი სენსორია მანძილის სენსორი vl53l0x. იგი ობიექტამდე მანძილს სინათლის მეშვეობით ითვლის. აღნიშნული სენსორი ასხივებს ინფრა სხივებს. როდესაც სხივი მოხვდება რაიმე ობიექტს იგი აირეკლება და დაბრუნდება სენსორთან. მოცემული სენსორი სინათლის გამოსხივებიდან დაბრუნებამდე გასულ დროს აფიქსირებს. რისი მეშვეობითაც ითვლის მანძილს. მოდით დავაკავშიროთ აღნიშნული სენსორი არდუინოსთან და გამოვთვალოთ მანძილი რაიმე ობიექტამდე. ამისთვის დაგვჭირდება რამდენიმე ბიბლიოთეკა wire.h I2C ინტერფეისისთვის, ხოლო vl53l0x.h მანძილის სენსორისათვის.
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor; //ვქმნით მანძილის სენსორის ობიექტს
int distance; // აღნიშნულ ცვლადში ვინახავთ მანძილის მნიშვნელობას
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor.setTimeout(500); //ვსაზღვრავთ ინფორმაციის დაბეჭდვის სისწრაფეს
//კოდის ეს ნაწილი სრულდება მაშინ თუ არდუინო ვერ დაუკავშირდა სენსორს
if (!sensor.init())
{
Serial.println("სენსორთან დაკავშირება ვერ მოხერხდა!");
while (1) {}
}
sensor.startContinuous();
}
void loop()
{
distance = sensor.readRangeContinuousMillimeters();//ვითვლით მანძილს ობიექტამდე მილიმეტრებში
Serial.print(distance);//ვბეჭდავთ მანძილს ობიექტამდე
//კოდის ეს ნაწილი სრულდება მაშინ თუკი სესნორთან კომუნიკაცია დაირღვა
if (sensor.timeoutOccurred())
{
Serial.println("TIMEOUT");
}
}