Главная страница
Навигация по странице:

  • Эти программные блоки можно скачать со следующего ресурса

  • Инструменты --> Мастер импорта блоков В открывшемся окне выбираем кнопку Просмотреть

  • Импорт Далее перезагружаем среду программирования EV3-G.После перезагрузки в меню Сенсоры

  • 47кОм 47кОм У вас должна получиться вот такая схема

  • Чёрный: земля Красный: VCC Зелёный: SCL Жёлтый: SDA

  • Адрес слейва мы указываем и коде ардуино и в программе в Лего, и он должен быть одинаковым

  • Теперь напишем скетч для Ардуино Это универсальны скетч для получения данных от Лего и отправки данных на Лего Отправка данных

  • Получение данных от Лего Теперь напишем программу для отправки данных на Ардуино Установите порт к которому подключен кабель I2C

  • Данные в Ардуино будут отображаться в мониторе порта Важно!!! Максимальное отправляемое число это 127 (большее число не вмещается в 1 байт)

  • Также мы можем отправлять на Лего аналоговые данные от аналоговых датчиков подключенных к Ардуино Для этого в настройках блока I2C

  • И самое важное, выбираем пин к которому подключен аналоговый датчик на Ардуино (да именно в программе Лего указываем пин на Ардуино)

  • Материалы взяты со следующих ресурсов

  • ардуино слайд. соединение EV3 и Arduino через интерфейс I2C. Обьединяем Lego и Arduino Взаимодействия ev3 и Arduino происходит с использованием протокола i2c


    Скачать 1.93 Mb.
    НазваниеОбьединяем Lego и Arduino Взаимодействия ev3 и Arduino происходит с использованием протокола i2c
    Анкорардуино слайд
    Дата06.03.2023
    Размер1.93 Mb.
    Формат файлаpptx
    Имя файласоединение EV3 и Arduino через интерфейс I2C.pptx
    ТипПротокол
    #970886

    Обьединяем Lego и Arduino

    Взаимодействия EV3 и Arduino происходит с использованием протокола i2c.

    Это взаимодействие происходит через один из портов датчиков EV3.

    Этот способ позволяет передавать с Arduino любые данные, например показания подключенных к ней датчиков и использовать их в программе на EV3.

    Также передача данных происходит и в противоположном направлении, например из программы на EV3 можно управлять моторами и реле, подключенными к Arduino.

    Данный способ работает только на EV3-G (стандартная среда программирования с иконками), так как основан на применении специального программного блока для этой среды программирования.

    https://github.com/DexterInd/EV3_Dexter_Industries_Sensors.git

    Эти программные блоки можно скачать со следующего ресурса

    Перейдя по ссылки, спускаемся ниже и находим данную ссылку для скачивания

    Дальше нужно интегрировать блок в среду EV3-G.

    Для этого выбираем пункты меню Инструменты -->

    Мастер импорта блоков

    В открывшемся окне выбираем кнопку Просмотреть

    Далее выбираем находим скаченный файл и выбираем его и открываем

    Выбранный файл появляется в списке загруженных файлов, выбираем его и нажимаем кнопку Импорт

    Далее перезагружаем среду программирования EV3-G.

    После перезагрузки в меню Сенсоры появятся загруженные блоки

    Шину I2C называют «интерфейсом двух проводов», потому что она использует для связи два провода.

    Один провод передаёт такты: это гарантирует, что оба устройства посылают информацию с одинаковой скоростью. Линию тактов обычно называют «SCL» (сокращённо от Serial CLock). Второй провод служит для передачи данных (данные отправляются и принимаются обоими устройствами одновременно), и обычно называется «SDA» (сокращённо от Serial DAta).

    Мастер (всегда EV3) всегда контролирует соединение, и всегда устанавливает такты для обоих устройств. Контролируемое устройство обычно называется слейв (Slave – раб или подчинённый по англ.). Когда мастер посылает команды, слейв бросает всё и слушает. Когда мастер требует информацию, слейв отдаёт эту информацию.

    Для создания этого кабеля вы можете использовать адаптер для подключения кабеля EV3 к макетной плате, а уже от макетной плате подключить провода к Ардуино, адаптер нужен чтобы не портить EV3 кабель из вашего набора.

    Адаптер можно заказать на сайте производителя или на Амазоне.

    https://www.amazon.com/Breadboard-Adapter-for-LEGO-MINDSTORMS/dp/B00A0P5FY6/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=dexteindus-20&linkId=a520dd335dc128dc45affded10098935

    Теперь нам нужно соеденить лего и ардуино одни м кабелем (в этом случае порт USB использовать нельзя), очевидно совместимого кабеля у нас в наборах нет, но не беда мы его сделаем сами!

    адаптер

    Далее кабель от EV3 вставляем в один порт для сенсоров а провода к ардуино соединяем как показано на рисунках ниже

    Если нет адаптера, мы можем

    сделать кабель самостоятельно.

    Для этого нужно разрезать

    пополам один кабель EV3,

    и соединить одну половинку

    с обычным проводами

    от ардуино по следующей

    схеме

    Примечание: при подключении ардуиновских проводов к

    кабелю Лего используйте провода того же цвета, какого

    цвета провод в кабеле Лего. Приме если Лего проводок красный, то и к нему прикрепляйте красный Ардуиновский проводок, чтобы не путаться проводки.

    47кОм 

    47кОм 

    У вас должна получиться вот такая схема

    Аппаратная часть закончена, переходим к программной

    Чёрный: земля

    Красный: VCC

    Зелёный: SCL

    Жёлтый: SDA

    Настройка Arduino для работы с I2C: Присвоение адреса

    В примере нам нужно настроить несколько вещей, чтобы идти дальше. Нам нужно выбрать адрес слейва. В примере мы установили адрес слейва 0x04 (в шестнадцатеричной системе счисления). Можно установить и другой адрес слейва.

    #include

    #define SLAVE_ADDRESS 0x04

    void setup()

    Адрес слейва мы указываем и коде ардуино и в программе в Лего, и он должен быть одинаковым

    Arduino как слейв получатель/отправитель

    В нашем примере, Arduino будет получать данные от мастера. EV3 просто говорит «вот некоторые данные», а Arduino говорит «спасибо за данные». Настройка очень простая и большинство датчиков работают как слейв получатели и отправители. Этот пример может быть очень полезен, если вы настраиваете свой Arduino для управления мотором или LED.

    EV3 отправляет некоторые данные на Arduino, который получает их и выводит их в Serial Monitor. Если EV3 запрашивает некоторые данные, Arduino отправляет в ответ один байт.

    Создадим программу на Лего:

    Первая программа будет для получения данных от Ардуино и вывод их на экран.

    Для этого в блок цикла добавьте блок I2C

    Установите порт к которому подключен кабель I2C

    Установите номер слейва

    Если вы хотите получить данные от Ардуино,

    в настройках блока I2C выберите пункт Read 1 byte

    Добавьте блок Экран и настройте вывод данных на экран от блока I2C, как показано на рисунке

    Программа готова, теперь загрузите её

    #include

    #define SLAVE_ADDRESS 0x04 //установка адреса слейва

    int v=0;

    void setup() {

    Serial.begin(9600);

    Wire.begin(SLAVE_ADDRESS); //установка соединения

    Wire.onReceive(receiveData); //объявление функции получения

    Wire.onRequest(sendData); //объявление функции отправки

    Serial.println("Ready!");

    }

    int val, flag = 0;

    void loop() {

    if(flag == 1) {

    Serial.println(val); //вывод полученных данных от EV3

    flag = 0; }}

    void receiveData(int byteCount) // Функция для получения данных от EV3

    {

    while(Wire.available() > 0) {

    val = Wire.read(); //прием данных

    flag = 1; }}

    void sendData() // Функция для отправки данных на EV3

    {

    v=7; //отправляемое число на Лего

    Wire.write(v);} //отправка числа на Лего

    Теперь напишем скетч для Ардуино

    Это универсальны скетч для получения данных от Лего и отправки данных на Лего

    Отправка

    данных

    Получение данных от Лего

    Теперь напишем программу для отправки данных на Ардуино

    Установите порт к которому подключен кабель I2C

    Установите номер слейва

    Если вы хотите отправить данные на Ардуино,

    в настройках блока I2C выберите пункт Write 1 byte

    Отправляемое число на Аруино

    Программа готова, теперь загрузите её

    Скетч для Ардуино остается тот же!

    Данные в Ардуино будут отображаться в мониторе порта

    Важно!!! Максимальное отправляемое число это 127 (большее число не вмещается в 1 байт)

    Пример программы отправки на Ардуино счетчик цикла

    Данные получаем в Мониторе порта

    Также мы можем отправлять на Лего аналоговые данные от аналоговых датчиков подключенных к Ардуино

    Для этого в настройках блока I2C выберите пункт Analog Read

    И самое важное, выбираем пин к которому подключен аналоговый датчик на Ардуино (да именно в программе Лего указываем пин на Ардуино)

    В данном случае аналоговый датчик подключен к второму аналоговому входу на плате Ардуино

    #include

    #define SLAVE_ADDRESS 0x04

    void setup()

    {

    Serial.begin(9600); // start serial for output

    Wire.begin(SLAVE_ADDRESS);

    Wire.onReceive(receiveData);

    Wire.onRequest(sendData);

    Serial.println("Ready!");

    }

    int pin,st,val=0,flag=0,index=0;

    char buf[8];

    byte b[2];

    void loop()

    {

    if(flag==1)

    {

    flag=0;

    Serial.println(pin);

    val=analogRead(pin);

    b[0]=val/256;

    b[1]=val%256;

    } }

    void receiveData(int byteCount)

    {

    while(Wire.available()>0)

    {

    pin=Wire.read();

    flag=1;

    } }

    void sendData()

    { Wire.write(b,2); }

    Скетч для отправки на Лего аналоговых данных

    https://www.dexterindustries.com/howto/connecting-ev3-arduino/

    http://www.proghouse.ru/article-box/90-connecting-ev3-arduino

    Материалы взяты со следующих ресурсов


    написать администратору сайта