ардуино слайд. соединение EV3 и Arduino через интерфейс I2C. Обьединяем Lego и Arduino Взаимодействия ev3 и Arduino происходит с использованием протокола i2c
Скачать 1.93 Mb.
|
Обьединяем 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 Материалы взяты со следующих ресурсов |