Работа с тактовыми кнопками на Ардуино
Главная проблема использования кнопок для управления Arduino заключается в «дребезге контактов». Дело в том, что механические контакты в тактовых кнопках никогда не замыкаются и размыкаются мгновенно. В течении нескольких миллисекунд происходит многократное замыкание и размыкание контактов — в итоге на микроконтроллер поступает не единичный сигнал, а серия импульсов.
Подключение кнопки к Ардуино и дребезг
Для того, чтобы исключить на микроконтроллере Arduino дребезг кнопки используют различные электрические схемы с триггерами и конденсаторами. Но намного удобнее и проще использовать программный способ борьбы с возможным дребезгом тактовой кнопки — для этого применяют задержку на несколько миллисекунд или используют библиотеку Bounce2.h для борьбы с дребезгом контактов для Arduino.
Принцип работы реле
Реле представляет собой электромагнитный переключатель, которое управляется малым значением тока, но может переключать значительно большие токи. Например, реле удобно использовать для включения/выключения различных устройств, работающих от переменного тока, при этом используя для управления ими постоянный ток небольшой величины. Одним из наиболее часто используемых реле являются реле SPDT типа (Single Pole Double Throw — однополюсное на два направления), которое имеет пять контактов (выводов), как показано на следующем рисунке.
Когда на катушку (обмотку) реле не подано никакого управляющего напряжения, то общий провод реле (COM) подсоединен к нормально замкнутому контакту (NC — normally closed contact). А если на катушку реле подано управляющее напряжение, то с помощью электромагнита происходит переподключение общего провода реле (COM) на нормально разомкнутый контакт (NO — normally open contact), что позволяет в этой цепи коммутировать достаточно большой ток. Реле бывают различных типов, мы в нашем проекте использовали реле на 6V и 7A-250VAC.
Реле обычно подключается в электрическую схему с помощью специальной схемы драйвера, состоящей из транзистора, диода и резистора. Транзистор используется для усиления тока чтобы полный ток (в нашем случае от батарейки на 9 В) смог протекать через катушку реле и запитывать ее. Резистор используется чтобы обеспечить управляющий ток для транзистора, а диод используется для предотвращения протекания тока в обратном направлении, когда транзистор закрыт. Здесь дело в том, что при внезапном отключении тока катушка может вызывать противоположно направленное электромагнитное поле (согласно правилу Ленца), которое будет приводить к появлению тока в обратном направлении, способного повредить электронные компоненты. Поэтому для предотвращения подобного эффекта в схеме используется диод. Этот модуль драйвера реле можно легко купить в магазине электронных компонентов, либо собрать его самому на макетной или перфорированной плате.
В нашем случае мы будем управлять реле с контакта A0 платы Arduino с помощью схемы управления реле, показанной на следующем рисунке:
Объяснение программы для ведомой (Slave) платы Arduino
1. Как и в ведущей плате, первым делом в программе мы должны подключить библиотеку Wire для задействования возможностей протокола I2C и библиотеку для работы с ЖК дисплеем. Также нам необходимо сообщить плате Arduino к каким ее контактам подключен ЖК дисплей.
Arduino
#include<Wire.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(2, 7, 8, 9, 10, 11);
1 |
#include<Wire.h> LiquidCrystallcd(2,7,8,9,10,11); |
- В функции void setup():
— мы инициализируем последовательную связь со скоростью 9600 бод/с;
Arduino
Serial.begin(9600);
1 | Serial.begin(9600); |
— далее мы инициализируем связь по протоколу I2C на контактах A4 и A5
В качестве адреса ведомого мы будем использовать значение 8 – очень важно здесь указать адрес ведомого;. Arduino
Wire.begin(8);
Arduino
Wire.begin(8);
1 | Wire.begin(8); |
После этого мы должны вызвать функцию в которой ведомый принимает значение от ведущего и функцию в которой ведущий запрашивает значение от ведомого.
Arduino
Wire.onReceive(receiveEvent);
Wire.onRequest(requestEvent);
1 |
Wire.onReceive(receiveEvent); Wire.onRequest(requestEvent); |
— затем мы инициализируем ЖК дисплей для работы в режиме 16х2, отображаем на нем приветственное сообщение и очищаем его экран через 5 секунд.
Arduino
lcd.begin(16,2); //Initilize LCD display
lcd.setCursor(0,0); //Sets Cursor at first line of Display
lcd.print(«Circuit Digest»); //Prints CIRCUIT DIGEST in LCD
lcd.setCursor(0,1); //Sets Cursor at second line of Display
lcd.print(«I2C 2 ARDUINO»); //Prints I2C ARDUINO in LCD
delay(5000); //Delay for 5 seconds
lcd.clear(); //Clears LCD display
1 |
lcd.begin(16,2);//Initilize LCD display lcd.setCursor(,);//Sets Cursor at first line of Display lcd.print(«Circuit Digest»);//Prints CIRCUIT DIGEST in LCD lcd.setCursor(,1);//Sets Cursor at second line of Display lcd.print(«I2C 2 ARDUINO»);//Prints I2C ARDUINO in LCD delay(5000);//Delay for 5 seconds lcd.clear();//Clears LCD display |
3. Затем нам будут необходимы две функции: одна для события запроса (request event) и одна для события приема (receive event).
Для события запроса:
Эта функция будет выполняться когда ведущий будет запрашивать значение от ведомого. Эта функция будет считывать значение с потенциометра, подключенного к ведомой плате Arduino, преобразовывать его в диапазон 0-127 и затем передавать его ведущей плате.
Arduino
void requestEvent()
{
int potvalue = analogRead(A0);
byte SlaveSend = map(potvalue,0,1023,0,127);
Wire.write(SlaveSend);
}
1 |
voidrequestEvent() { intpotvalue=analogRead(A0); byteSlaveSend=map(potvalue,,1023,,127); Wire.write(SlaveSend); } |
Для события приема:
Эта функция будет выполняться когда ведущий будет передавать данные ведомому с адресом 8. Эта функция считывает принятые значения от ведущего и сохраняет ее в переменной типа byte.
Arduino
void receiveEvent (int howMany)
{
SlaveReceived = Wire.read();
}
1 |
voidreceiveEvent(inthowMany) { SlaveReceived=Wire.read(); } |
4. В функции Void loop():
Мы будем непрерывно отображать принятые от ведущей платы значения на экране ЖК дисплея.
Arduino
void loop(void)
{
lcd.setCursor(0,0); //Sets Currsor at line one of LCD
lcd.print(«>> Slave <<«); //Prints >> Slave << at LCD
lcd.setCursor(0,1); //Sets Cursor at line two of LCD
lcd.print(«MasterVal:»); //Prints MasterVal: in LCD
lcd.print(SlaveReceived); //Prints SlaveReceived value in LCD received from Master
Serial.println(«Slave Received From Master:»); //Prints in Serial Monitor
Serial.println(SlaveReceived);
delay(500);
lcd.clear();
}
1 |
voidloop(void) { lcd.setCursor(,);//Sets Currsor at line one of LCD lcd.print(«>> Slave <<«);//Prints >> Slave << at LCD lcd.setCursor(,1);//Sets Cursor at line two of LCD lcd.print(«MasterVal:»);//Prints MasterVal: in LCD lcd.print(SlaveReceived);//Prints SlaveReceived value in LCD received from Master Serial.println(«Slave Received From Master:»);//Prints in Serial Monitor Serial.println(SlaveReceived); delay(500); lcd.clear(); } |
После того как вы соберете всю схему проекта и загрузите обе программы в платы Arduino вы можете приступать к тестированию работы проекта. Вращая потенциометр на одной стороне вы должны увидеть изменяющиеся значения на экране ЖК дисплея на другой стороне.
Теперь, когда вы разобрались, как работать с интерфейсом I2C в плате Arduino, вы можете использовать описанные в данной статье приемы для подключения к плате Arduino любых датчиков, работающих по данному протоколу.
Плата Arduino Uno R3
Устройство построено на микроконтроллере АTmega16U2 и имеет повышенный уровень помехоустойчивости по цепи сброса.
Устройство отличается от предыдущей версии лишь тем, что в этом случае не используется интерфейс USB-UART FTDI при подключении к компьютеру. Эту задачу выполняет выполняет сам микроконтроллер ATmega 16U2.
Изменения распиновки платы выглядят следующим образом:
- Возле вывода AREF добавлены два пина: SDA, SCL.
- Возле пина RESET также добавлены два вывода: IOREF, позволяющий подключать платы расширения с подстройкой под необходимое напряжение; второй вывод не используется и находится в резерве.
Модуль реле HL-52S для Ардуино
В качестве примера для этого урока по реле Arduino мы будем использовать 2-канальный релейный модуль HL-52S, который имеет 2 реле с номиналами 10 А при 250 и 125 В переменного тока и 10 А при 30 и 28 В постоянного тока. Выходной разъем высокого напряжения имеет 3 контакта, средний является общим контактом, и, как видно из маркировки, один из двух других контактов предназначен для нормально разомкнутого соединения, а другой — для нормально замкнутого соединения.
На одной из сторон модуля у нас есть 2 набора контактов. Первый имеет 4 контакта, заземление и контакт VCC для питания модуля и 2 входных контакта In1 и In2. Второй набор контактов имеет 3 контакта с перемычкой между JDVcc и контактом Vcc.
Внимание! При такой конфигурации электромагнит реле получает питание напрямую от платы Arduino, и если что-то пойдет не так с реле, микроконтроллер может быть поврежден.
Подключение вашей платы Arduino к компьютеру
После того как вы установили Arduino IDE на свой компьютер следующим логичным шагом будет подключение платы Arduino UNO к компьютеру. Чтобы сделать это просто используйте кабель для программирования (синего цвета) и соедините его с платой Arduino и USB портом вашего компьютера.
Синий кабель для программирования может выполнять следующие три функции:
- Он запитывает плату Arduino UNO, то есть чтобы обеспечить выполнение программ на ней необходимо просто запитать ее с помощью USB кабеля.
- Через него программируется микроконтроллер ATmega328, находящийся на плате Arduino UNO. То есть код программы пересылается из компьютера в микроконтроллер именно по этому кабелю.
- Он может функционировать в качестве кабеля для последовательной связи, то есть с его помощью можно передавать данные с Arduino UNO в компьютер – это полезно для целей отладки программы.
После того как вы подадите питание на плату Arduino UNO на ней загорится маленький светодиод – это свидетельствует о том, что на плату подано питание. Также вы можете заметить как мигает другой светодиод – это результат работы программы по управлению миганием светодиода, которая по умолчанию загружена в вашу плату ее производителем.
Поскольку вы подключаете плату Arduino в первый раз к компьютеру необходимо некоторое время чтобы драйвера для нее успешно установились. Чтобы проверить правильно ли все установилось и определилось откройте «Диспетчер устройств (Device manager)» на вашем компьютере.
В диспетчере устройств откройте опцию «Порты» “Ports (COM & LPT)”, кликните на ней и посмотрите правильно ли отображается там ваша плата.
При этом стоит отметить, что не стоит обращать внимание на то, какой номер порта отобразился у вашей платы Arduino – он может, к примеру, выглядеть как CCH450 или что то подобное. Этот номер порта просто определяется производителем платы и больше ни на что не влияет
Если вы не можете в диспетчере устройств найти опцию “Ports (COM & LPT)”, то это означает, что ваша плата не корректно определилась компьютером. В большинстве случает это означает проблему с драйверами – по какой то причине они автоматически не установились для вашей платы. В этом случае вы должны будете вручную установить необходимые драйверы.
В некоторых случаях в указанной опции диспетчера устройств может отобразиться два COM порта для вашей платы и вы не будете знать какой из них правильный. В этой ситуации отключите и снова подключите плату Arduino к компьютеру – какой из COM портов при этом будет появляться и исчезать, значит тот и правильный порт.
Следует помнить о том, что номер COM порта будет изменяться при каждом новом подключении вашей платы к компьютеру – не пугайтесь, в этом нет ничего страшного.
Устройство сервомотора (servo) Arduino
Сервопривод (сервомотор) является важным элементом при конструировании различных роботов и механизмов. Это точный исполнитель, который имеет обратную связь, позволяющую точно управлять движениями механизмов. Другими словами, получая на входе значение управляющего сигнала, сервомотор стремится поддерживать это значение на выходе своего исполнительного элемента.
Что такое сервопривод. Схема устройства сервопривода
Сервоприводы широко используются для моделирования механических движений роботов. Сервопривод состоит из датчика (скорости, положения и т.п.), блока управления приводом из механической системы и электронной схемы. Редукторы (шестерни) устройства выполняют из металла, карбона или пластика. Пластиковые шестерни сервомотора не выдерживают сильные нагрузки и удары.
Управление сервоприводом с помощью широтно импульсной модуляции
Сервомотор имеет встроенный потенциометр, который соединен с выходным валом. Поворотом вала, сервопривод меняет значение напряжения на потенциометре. Плата анализирует напряжение входного сигнала и сравнивает его с напряжением на потенциометре, исходя из полученной разницы, мотор будет плавно вращаться до тех пор пока не выравняет напряжение на выходе и на потенциометре.
Самые особенные проекты
Существуют разработки, которые решают важные социальные или образовательные задачи.
3D-сканер
Одним из последних технологических достижений стал 3D-сканер для создания точной копии модели объекта. Лучшим вариантом реализации устройства для любителей Arduino является проект Open Source, который называется FabScan. Пользуясь открытой информацией, любой новичок способен изготовить сканер дома, потратив не более 100 долларов. Проект несложный, но необходимы знание основ микроэлектроники и навыки работы с платой.
Игрушка Easy Robot Toy PipeBot
Easy Robot Toy PipeBot — это интеллектуальная игрушка, изготовить которую можно с детьми. Робот имеет форму трубки с 2 колесами и управляется с помощью пульта или смартфона.
К нему можно добавлять различные устройства: камеру, акселерометр и др.
Создавая поделку, ребенок освоит логику электронных схем и программирования.
Приспособление для людей с ограниченными возможностями
Платформа «Ардуино» позволяет проектировать устройства, полезные людям с ограниченными возможностями здоровья. Например, сегодня востребована роботизированная рука, которая выполняет функцию захвата.
Для управления манипулятором собирается высокочувствительный пульт, который позволяет посредством минимальных движений руководить механизмом.
Сегодня предлагается много различных приборов, сделанных для компенсации физических недостатков: ассистент общения, робот-поводырь, инерционный трекер и др.
Размеры Уно
Arduino Uno R3 – самая популярная плата, построенная на базе процессора ATmega328. В зависимости от конкретной модели платы этой линейки используются различные микроконтроллеры, на момент написания статьи самой распространённой является версия именно R3.
Плату используют для обучения, разработки, создания рабочих макетов устройств. Ардуино, по своей сути, – это AVR микроконтроллер с возможностью упрощенного программирования и разработки. Это достигнуто с помощью специально подготовленного загрузчика, прошитого в память МК, и фирменной среды разработки.
Плата Ардуино Уно
Размеры платы представлены на схеме ниже. Общие размеры Уно составляют 53,4 мм на 68,6 мм.
Способы соединения проводов
Соединение проводов в распределительной коробке делается, учитывая множество факторов:
1. Тип материала из которого изготовлены провода:
- алюминий;
- медь;
- сталь и сплавы.
2. От окружающей среды в которой будет находиться проводка:
- улица;
- помещение;
- проводка под землей;
- проведение кабеля под водой.
3. Количество используемых проводов
.
4. Совпадает сечение жил или нет
Принимая во внимание все эти аспекты, монтер выбирает способ, которым будет монтировать контактный узел в распредкоробке. Существует восемь способов соединения проводов
Скрутка
Один из самых легких и доступных способов это скрутка проводов. Его применяли еще наши деды. Несмотря на то, что этим способом пользовались с давних времен, она не самая лучшая и в правилах установки электроприборов полностью запрещена. Причина подобного запрета том, что сделанная скрутка проводов правильно, в те времена применялась только для просмотра телевизора и прослушивания радио, а так же для освещения помещения. Таким образом, нагрузки она не несла в отличие от современного оборудования квартир.
Скрутка это самый простой способ стыковки проводов.Источник zdorovaya-eda.com
И все же скрутка необходима. Она является основой для других способов монтажа электропроводки, таких как спайка и сварка.
Плюсы скрутки:
- Не требует дополнительных затрат для покупки дополнительных аксессуаров.
- Не нужно прилагать усилий для выполнения данной работы.
- Есть возможность соединить между собой несколько кабелей.
Минусы:
- Этот способ самый ненадежный для использования при современной прокладке электропроводки.
- Ею нельзя стыковать кабеля, жилки которых, изготовленные из разных металлов.
- Скрутку нельзя применять для современного использования, поскольку при замене проводки концы невозможно разъединять несколько раз по ряд. С другой стороны скрутку невозможно назвать неразъемным способом, поскольку он с легкостью раскручивается
При монтаже скрутка должна быть сделана качественно, чтобы в последствии не пришлось ее переделывать. Для этого используют пассатижи, которыми зажимаются провода в одном конце и с помощью вторых делают вращательные движения. Таким образом провода скручиваются равномерно.
Скрутку необходимо обязательно заизолировать, чтобы защитить от воздействия внешней среды, из-за чего она может окислиться и прийти в негодность. Для этого используют термотрубки, насадив её сначала на один из кабелей, а потом на место соединения. Если все сделать правильно, то проводка послужит на протяжении нескольких лет.
Скрутка в качестве основы для соединения кабеля с помощью пайки.Источник viva-el.by
Пайка
Способ пайки заключает в себе соединение всех жилок проводки с помощью расплавленного припоя. Чаще всего этим способом спаивают провода изготовленные из меди. Но на сегодняшний день изобрели разные флюсы, которые могут спаивать и алюминиевые жилки. Однако электрики не одобряют и воздерживаются от подобных соединений. Но иногда бывают ситуации, когда не остается ничего другого как соединить медный и алюминиевый провод, применив при этом специальные флюсы.
Достоинства:
- соединение проводов между собой с помощью пайки намного надежнее, чем скрутка;
- спаивать между собой можно многожильные кабеля;
- более надёжный в эксплуатации и не требует дополнительных проверок;
- относится к одному из дешевых способов монтажа электрических узлов.
Недостатки:
- требует большой затраты времени и труда, поскольку материал к работе нужно правильно подготовить;
- этот способ требует квалифицированного работника, умеющего работать с паяльником.
- даже учитывая трудоемкость пайки, нельзя не признать того, что этот способ намного эффективнее, чем скрутка.
Скетчи на ATtiny84
Итак, у нас Arduino Uno. Как же нам запрограммировать нашу «тиньку»? Для этого используется такое устройство, как программатор. Он необходим для того, чтобы залить в контроллер прошивку.
Мы можем превратить в него нашу Arduino. И делается это элементарно, путем заливки скетча ArduinoISP.
Делаем программатор и собираем схему
Открываем соответствующий скетч «Файл → Примеры → ArduinoISP» и заливаем его. Все, превращение завершено. Теперь необходимо правильно собрать схему, чтобы прошить «тиньку». Обратимся к коду скетча, который был только что залит. Даже не к коду, а к комментарию перед ним.
Сначала подключим светодиоды таким образом, как описано в комментарии, не забывая резисторы. После сборки схемы и подачи питания, светодиод, подключенный к пину 9 «Heartbeat» будет моргать, обозначая нормальное функционирование. Если этого не произошло, то ищите ошибки в подключении.
Теперь надо подключить пины 10-13 к ATtiny. Чтобы узнать распиновку последней, обратимся к даташиту, который можно скачать с сайта Atmel , производителя этих контроллеров. На второй странице расположена картинка, описывающая распиновку.
Основываясь на даташите и комментарии из скетча, можем составить следующую таблицу подключения:
Arduino UNO | ATtiny84 | |
---|---|---|
Reset | 10 | 4 |
MOSI | 11 | 7 |
MISO | 12 | 8 |
SCK | 13 | 9 |
Теперь подключим светодиод и переменный резистор.
Резистор необходимо подключить в пину №6 (PA7), поскольку этот пин может быть входом для аналого-цифрового преобразователя, а светодиод — к любому другому, например, к 10 (PA3).
О нумерации пинов
Стоит немного рассказать о различии нумерации пинов в Arduino и при использовании «чистого» С. В Arduino пины нумеруются последовательно и исключаются системные (питание, земля и т.д.), а в реальности все немного иначе. Все выводы контроллера можно охарактеризовать двумя парметрами: номер порта (порт А, порт В и т.д.) и номер вывода (1..8).
На сайте Arduino можно найти карту пинов. Она выглядит следующим образом:
Для используемой нами ATtiny84 нумерация будет аналогична. В библиотеке Arduino-tiny, о которой речь пойдёт далее, можно найти следующую таблицу соответствия:
// ATMEL ATTINY84 / ARDUINO
//
// +-\/-+
// VCC 1| |14 GND
// (D 0) PB0 2| |13 AREF (D 10)
// (D 1) PB1 3| |12 PA1 (D 9)
// PB3 4| |11 PA2 (D 8)
// PWM INT0 (D 2) PB2 5| |10 PA3 (D 7)
// PWM (D 3) PA7 6| |9 PA4 (D 6)
// PWM (D 4) PA6 7| |8 PA5 (D 5) PWM
// +—-+
В соответсвии с назначением каждой ножки контроллера, аналоговые пины (те, у которых есть вход АЦП) нумеруются в скетче по каналу АЦП.
Напримем, пин сфизическим номером 11 может быть входом для второго канала АЦП (ADC2), поэтому в скетче он будет называться A2.
Теперь необходимо научить среду программирования Arduino понимать тот факт, что мы используем другой контроллер.
Учим среду разработки
Первым делом необходимо скачать библиотеку arduino-tiny , содержащую в себе все необходимое.
Далее заходим в настройки Arduino и смотрим расположение папки со скетчами.
Переходим в эту папку и создаем там новую с названием «hardware». А в ней еще одну, «tiny». Копируем содержимое скачанного ранее архива в эту папку.
И последнее действие — переименовываем файл «Prospective Boards.txt» в «boards.txt». Теперь перезагружем среду разработки и идем в меню «Сервис → Плата».
Можно видеть, то добавилось много новых пунктов.
Программируем ATtiny84
Выбираем в качестве нужного устройства «Сервис → Плата → ATtiny84 @ 8 MHz (internal oscillator; BOD disabled)» поскольку у нас нету внешнего кварца, который задает частоту работы контроллера. В качестве программатора выберем — «Сервис → Программатор → Arduino as ISP».
В качестве кода берем уже написанный нами код для светодиода и подстроечного резистора и изменяем там номера пинов.
// Номер пина для светодиода
// Номер аналогового пина
// В эту переменную считываем значение с аналогового входа
// Настраиваем пин светодиода на выход
// Считываем значение
// val содержит значение из диапазона 0..1023, а диапазон значений для analogWrite
// 0..255. Для этого делим val на 4
Управление двигателем на Ардуино
Коллекторный моторчик может быть рассчитан на разное напряжения питания. Если двигатель работает от 3-5 Вольт, то можно моторчик подключать напрямую к плате Ардуино. Моторы для машинки с блютуз управлением, которые идут в комплекте с редукторами и колесами рассчитаны уже на 6 Вольт и более, поэтому ими следует управлять через полевой (биполярный) транзистор или через драйвер L298N.
Принцип работы и устройство мотора постоянного тока
На схеме показано устройство моторчика постоянного тока и принцип его работы. Как видите, для того, чтобы ротор двигателя начал крутиться к нему необходимо подключить питание. При смене полярности питания, ротор начнет крутиться в обратную сторону. Драйвер двигателей L298N позволяет инвертировать направление вращения мотора fa 130, поэтому его удобнее использовать в своих проектах.
Цифровые и аналоговые выводы
Не все выводы у Arduino одинаковые. Есть выводы цифровые, а есть аналоговые. Принципиальная разница между ними в том, что на цифровых выводах может быть только два значения: либо логическая «1» (TRUE, от 3 до 5 вольт), либо логический «0» (FALSE, от 0 до 1,5 вольт), а на аналоговых выводах — диапазон от логической 1 до 0 разбит на множество мелких участков.
Зачем это нужно? Давайте рассмотрим такой наглядный пример. Если подключить к цифровому выводу Arduino светодиод и подать на вывод логическую «1», то светодиод загорится с максимальной яркостью; если подать «0» — светодиод погаснет. Никаких промежуточных вариантов нет. Если светодиод подключить к аналоговому выводу, то яркостью светодиода можно управлять плавно. На практике к аналоговым выводам чаще всего подключаются какие-либо аналоговые датчики.