Робототехника
"Роботизированная" тележка. Часть 2
Поздравьте, у нас все получилось! Тележки поехали, послушны к пульту и самостоятельно объезжают препятствия. Все можно увидеть на небольшом видеоролике. Внешне еще не украсили наших роботов, но это дело техники. Все будет в новом учебном году. Если Вам интересен материал, то пишите в гостевую книгу. Поделимся исходниками. До встречи!
"Роботизированная" тележка. Часть 1
Так решили "окрестить" наше новое творение ребята. Началось лето, но не все разъехались по лагерям, бабушкам и дачам. Некоторые остались дома. И вот, чтобы не терять время даром, решили сделать свое, спроектированное нами, изделие. Внешне это будет телега, толкаемая роботом и автоматически объезжающая крупные препятствия. Мы пока на начальном этапе, только смастерили и научили тележку двигаться. Управляется обыкновенным ИК пультом. Декоративная отделка и наделение «интеллектом» впереди. Если проект будет удачным, поделимся чертежами и скетчем.
Ультразвуковой датчик расстояния.
Принцип действия ультразвукового дальномера HC-SR04
Действие ультразвукового дальномера HC-SR04 основано на принципе эхолокации. Он излучает звуковые импульсы в пространство и принимает отражённый от препятствия сигнал. По времени распространения звуковой волны к препятствию и обратно определяется расстояние до объекта.
Запуск звуковой волны начинается с подачи положительного импульса длительностью не менее 10 микросекунд на ножку TRIG дальномера. Как только импульс заканчивается, дальномер излучает в пространство перед собой пачку звуковых импульсов частотой 40 кГц. В это же время на ножке ECHO дальномера появляется логическая единица. Как только датчик улавливает отражённый сигнал, на выводе ECHO появляется логический ноль. По длительности логической единицы на ножке ECHO («Задержка эхо» на рисунке) определяется расстояние до препятствия.
Диапазон измерения расстояния дальномера HC-SR04 – до 4 метров с разрешением 0,3 см. Угол наблюдения – 30°, эффективный угол – 15°. Ток потребления в режиме ожидания 2 мА, при работе – 15 мА.
Схема подключения датчика расстояния
Питание ультразвукового дальномера осуществляется напряжением +5 В. Два других вывода подключаются к любым цифровым портам Arduino, подключим к 11 и 12.
Схема подключения датчика расстояния HC-SR04 к Arduino
Ультразвуковой дальномер HC-SR04 подключён к Arduino
Библиотека для работы с эхолокатором HC-SR04
Для работы с ультразвуковым дальномером написано множество библиотек. Установка библиотеки происходит стандартно.
Скетч
#include<Ultrasonic.h>// подключаем библиотеку
Ultrasonicultrasonic(12,11);// Trig - 12, Echo - 11
voidsetup(){
Serial.begin(9600);// инициализация послед. порта
}
voidloop(){
floatdist_cm =ultrasonic.Ranging(CM);// дистанциявсм
Serial.println(dist_cm);// выводим дистанцию в порт
delay(100);
}
Изготавливаем парктроник
#define trigPin 12 // объявление
#define echoPin 13 // переменных
#define led 2
#define led2 3
#define led3 4
#define led4 5
#define led5 6
#define led6 7
#define buzzer 11
int sound = 250;
void setup() {
Serial.begin (9600); // настройка
pinMode(trigPin, OUTPUT); // портов
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(buzzer, OUTPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // чтобы начать измерения,
delayMicroseconds(10); // необходимо на вход trigPin подать высокий сигнал 5В на 10мкс
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // с выхода echoPin считывается как долго был открыт порт
distance = (duration/2) / 29.1; // преобразование полученного параметра в дистанцию
if (distance <= 30) { // первое условие, если расстояние меньше либо равно 30,
digitalWrite(led, HIGH); // тогда включить первый светодиод
sound = 250;
}
else {
digitalWrite(led,LOW); // если условие не выполняется, выключить светодиод
}
if (distance < 25) {
digitalWrite(led2, HIGH);
sound = 260;
}
else {
digitalWrite(led2, LOW);
}
if (distance < 20) {
digitalWrite(led3, HIGH);
sound = 270;
}
else {
digitalWrite(led3, LOW);
}
if (distance < 15) {
digitalWrite(led4, HIGH);
sound = 280;
}
else {
digitalWrite(led4,LOW);
}
if (distance < 10) {
digitalWrite(led5, HIGH);
sound = 290;
}
else {
digitalWrite(led5,LOW);
}
if (distance < 5) {
digitalWrite(led6, HIGH);
sound = 300;
}
else {
digitalWrite(led6,LOW);
}
if (distance > 30 || distance <= 0){
Serial.println("***");
noTone(buzzer);
}
else {
Serial.print(distance); // выводит расстояние в сантиметрах
Serial.println(" cm"); // в мониторе последовательного порта
tone(buzzer, sound); // задает соответствующий тон пьезодинамика
}
delay(500); // задержка пол секунды
}
Робот-паук. Окончание работы.
Завершили работу над нашими пауками. У всех они получились разными, как внешне, так и по характеру. Главную задачу мы выполнили - научиться создавать из "ничего" полезные и интересные вещи. Затраты копеечные, а результат всех порадовал. Каждый паук отправился к детям домой, как их рукотворное создание. Это будет напоминанием о посещении занятий по робототехнике.
80-летие центрального региона
15 января во Дворце Республики состоялось празднование 80-летия центрального региона. На торжественный вечер собрались гости со всех уголков нашей Республики. В мероприятии приняла участие и делегация нашего учреждения в лице руководителя лаборатории робототехники учителя информатики Ларченко А.П. и учащегося VIIIкласса члена объединения по интересам «Робототехника» Шкурата Алексея. Наше учреждение представило опыт работы по развитию робототехники на основе «Arduino».
Сердечко маме на "8 Марта"
На 8 Марта наши ребята решили сделать своим мамам подарки. Внешне простые, но с элементами автоматики. За основу, просмотрев множество схем, была взята, практически стандартная, которая очень корректно работала с деталями, имеющимися в нашем распоряжении.
Сердечко было распечатано на 3d принтере. Мы думаем, можно сделать любою фигурку и вмонтировать в нее это устройство. Оно срабатывает в полной темноте и отключается при появлении света. В качестве батарейки использовалась CR2032. Но можно любую на 3 вольта. Светодиод у нас меняет цвета сам (есть и такие). Транзистор 8050S либо подобный, возможно придется поиграть с параметрами резистора R2 если транзистор будет другой. Монтаж навесной. Чтобы во время эксплуатации не происходило замыкания использовали термоклей. Устройство стабильно и на одной батарейке CR2032 работает около двух недель.
Результат работы:
Создаем робота-паука
Работаем над созданием робота-паука.
Начали с того что определились кто какими пультами будет управлять своими роботами. Записали коды в готовый скетч для команд управления. Затем наклеили сервоприводы на основу, распечатанную на 3dпринтере (да, мы имеем доступ и к такому современному оборудованию).
Схема подключения ИК приемника:
Затем подключаем сервоприводы:
Так должно выглядеть после сборки для проверки. Мы поступили немного иначе. Покажем в следующем уроке.
Необходимый теоретический материал
Измените расширение на *.zip
Подключение ИК приемника к Ардуино
ИК-приемник на Ардуино способен принимать и обрабатывать инфракрасный сигнал, в виде импульсов заданной длительности и частоты. Обычно ИК-приемник имеет три ножки и состоит из следующих элементов: PIN-фотодиод, усилитель, полосовой фильтр, амплитудный детектор, интегрирующий фильтр и выходной транзистор.
Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде.
Схема подключения
Чтобы можно было управлять с помощью команд пульта их необходимо распознать. Для этого существуют специальные скетчи.
Например:
// Подключаем специальную библиотеку, предоставляющую функции
// приёма и передачи ИК-команд:
#include "IRremote.h"
// Аналоговый вход контроллера, к которому подключен ИК-приёмник.
const int IR_PIN = A0;
// Создаём объект ИК-приёмник.
IRrecv irrecv(IR_PIN);
void setup(){
Serial.begin(9600);
Serial.println("ready");
// Начинаем прослушивание ИК-сигналов.
irrecv.enableIRIn();
}
voidloop(){
// RU: Описываем структуру results, в которую будут помещаться принятые и декодированные ИК-команды.
decode_results results;
// RU: Если ИК-команда принята и успешно декодирована, то выводим
// полученный код в последовательный порт контроллера.
if (irrecv.decode(&results)) {
Serial.println(results.value);
// RU: Должно вызываться чтобы продолжить декодирование.
irrecv.resume();
}
}
На мониторе порта можем просмотреть команды, которые выдает наш пульт. Те клавиши, которые мы будем использовать, можно прописать в блокноте вместе с кодами.
Управление пультом двумя светодиодами
#include<IRremote.h> // подключаем библиотеку для IRприемника
IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник
decode_results results;
void setup() // процедураsetup
{
irrecv.enableIRIn(); // запускаем прием инфракрасного сигнала
pinMode(13, OUTPUT); // пин 13 будет выходом (англ. «output»)
pinMode(12, OUTPUT); // пин 12 будет выходом (англ. «output»)
pinMode(A0, INPUT); // пинA0 будетвходом(англ. «intput»)
Serial.begin(9600); // подключаем монитор порта
}
void loop() // процедура loop
{
if (irrecv.decode(&results)) // если данные пришли выполняем команды
{
Serial.println(results.value); // отправляем полученные данные на порт
// включаем и выключаем светодиоды, в зависимости от полученного сигнала
if (results.value == 16754775) {
digitalWrite(13, HIGH);
}
if (results.value == 16769055) {
digitalWrite(13, LOW);
}
if (results.value == 16718055) {
digitalWrite(12, HIGH);
}
if (results.value == 16724175) {
digitalWrite(12, LOW);
}
irrecv.resume(); // принимаем следующий сигнал на ИК приемнике
}
}
Вторая часть урока отводится на практическую работу по созданию «робота-паука». Делаем основу на сервоприводах.
Знакомимся с сервоприводом
Понятие библиотеки.
Мы достаточно освоились с программным обеспечением Arduino и стандартными функциями, нам понадобиться расширить возможности Arduino с помощью дополнительных библиотек.
Что такое библиотека?
Библиотека - это набор функций, предназначенных для того, чтобы максимально упростить работу с различными датчиками, ЖК-экранами, модулями и пр.
Стандартные библиотеки находятся в папке «C:\Program Files\Arduino\libraries».
Что такое сервопривод
Сервопривод (сервомотор) является важным элементом
при конструировании различных роботов и механизмов. Это точный исполнитель, который имеет обратную связь, позволяющую точно управлять движениями механизмов.
Сервоприводы широко используются для моделирования механических движений роботов. Сервопривод состоит из датчика (скорости, положения и т.п.), блока управления приводом из механической системы и электронной схемы.
Сервомотор имеет встроенный потенциометр, который соединен с выходным валом. Поворотом вала, сервопривод меняет значение напряжения на потенциометре. Плата анализирует напряжение входного сигнала и сравнивает его с напряжением на потенциометре, исходя из полученной разницы, мотор будет вращаться до тех пор, пока не выровняет напряжение на выходе и на потенциометре.
Скетч использует библиотеку.
#include <Servo.h> // подключаем библиотеку для работы с сервоприводом
Servo servo1; // объявляем переменную servo типа "servo1"
void setup() // процедура setup
{
servo1.attach(11); // привязываем сервопривод к аналоговому выходу 11
}
void loop() // процедура loop
{
servo1.write(0); // ставим угол поворота под 0
delay(2000); // ждем 2 секунды
servo1.write(90); // ставим угол поворота под 90
delay(2000); // ждем 2 секунды
servo1.write(180); // ставим угол поворота под 180
delay(2000); // ждем 2 секунды
}
myservo.write(0) – указывается угол поворота
- Стандартная библиотека Servo.h содержит набор дополнительных команд, которая позволяет значительно упростить скетч;
- Переменная Servo необходима, чтобы не запутаться при подключении нескольких сервоприводов к Ардуино. Мы назначаем каждому приводу свое имя;
- Команда servo1.attach(10) привязывает привод к аналоговому выходу 10.
В процедуре void loop() мы вращаем привод на 0-90-180 градусов и возвращаем в начальное положение, поскольку процедура loop повторяется циклично;
(По материалам сети интернет)
Новогодняя Елочка
К Новому годы мы решили сделать красивые новогодние елочки. До этого изучив возможности ардуино по созданию «Бегущих огней» решили их воплотить в нашем проекте.
За основу брали проволоку, из обычных трансформаторов, медную, алюминиевую – в общем такую, какую кто нашел. Скручивали двух-трех рядную, по желанию. Максимально у нас получилась елочка с 13 светодиодами.
Спаивали последовательно с резисторами светодиоды: паяли резистор к аноду, затем его изолировали отрезком изоленты.
Подключали к плате ардуино по приведенной схеме. Мы использовали с 1 по 13 пины.
Затем, кусочком проволоки, наши светодиоды прикручивались к основе елочки и обматывались специальной ниткой, которая называется «Травка». Елочку крепили горячим клеем к коробке, в которую, в последствии, пряталась плата ардуино. В итоге получилось очень красиво и аккуратно.
Во вложении вы найдете один из вариантов скетча для бегущих огней. Думаю каждый здесь сам может модифицировать этот скетч на свое усмотрение.
Фоторезистор
- Повторяем пины платы ардуино: цифровые и аналоговые
- Повторяем изученные ранее радиоэлементы диод, резистор и конденсатор.
Вводим понятие «фоторезистор»
Датчик света — это прибор, который позволяет нашему устройству оценивать уровень освещенности.
Фоторезистор — это резистор, который меняет свое сопротивление в зависимости от падающего на него света. Выглядит этот радиоэлемент так:
Различаются фоторезисторы по диапазону сопротивления. Например:
VT83N1 — 12-100кОм;
VT93N2 — 48-500кОм.
Проверим в каких числовых значениях колеблются данные с фоторезистора
int a = 0;
void setup() {
Serial.begin(9600);
pinMode( A0, INPUT );
}
void loop() {
a = analogRead( A0 );
Serial.println( a );
delay(200);
}
Будем использовать 13 вывод для подключения светодиода:
int a = 0;
void setup() {
pinMode( A0, INPUT );
pinMode( 13, OUTPUT );
}
void loop() {
a = analogRead( A0 );
if( a < 800)
digitalWrite( 13, 1 );
else
digitalWrite( 13, 0 );
delay(200);
}
Закрепляем изученное
Теперь нужно закрепить наши знания. Повторяем предыдущий урок и дополняем его новыми задачами. Записываем напоминалочку:
int button = 2;
int led = 8;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT);}
void loop(){
if (digitalRead(button) == HIGH) {
digitalWrite(led, HIGH);}
else {digitalWrite(led, LOW);}
}
Изучили новую возможность - описывать часто повторяющиеся блоки команд в виде функций:
Описание функции:
void имя функции (){ }
Вызов функции:
имя функции ();
Задания которые выполняли:
1. Инвертируйте включение диода: кнопка нажата – не горит, отжата – горит
2. Добавьте вторую кнопку на пин 3 и светодиод на пин 10. Допишите программу для включения второго светодиода.
3. Сделайте бегущий огонь, который запускается кнопкой.
4. Нажатая кнопка запускает бегущий огонь в одну сторону. Отжатая кнопка в другую сторону
Кнопка
Оказывается, такой простой элемент как "Кнопка" может заставить задуматься над программой, которая будет ее слушаться и выполнять соответствующие действия. Мы изучили подтягивающий резистор, для чего он нужен и как его применять. Без этого в дальнейшем никак.
дальнейшем никак.
Шаг третий
Наконец пришло время знакомиться с Arluino. Украдкой мы уже рассматривали фотографии :), но пока о возможностях не говорили. А вот на этом занятии пришло время — это обсудить. Пока все то же по рисунку.
Мы рассмотрели расположение элементов на плате Ардуино, назначение выводов. Материала по этой теме много в интернете. Наверное, не буду его выкладывать сюда. Хотя, дайте знать в гостевую книгу, может стоит помещать сюда информацию которую мы используем на наших уроках.
После знакомства с контроллером, мы перешли к ознакомлению с arduino ide – ПО необходимое для программирования Arduino. Скачать его можно отсюда - https://www.arduino.cc/en/main/Software
Поздравляем победителей районной выставки "ТехноГрад 2017"
Поздравляем наших ребят, занимающихся в кружке по робототенике, с первыми победами. Шкурат Алексей, Кушнеров Кирилл и Шитиков Артем завоевали сразу три диплома и стали победителями в номинации "За техническое исполнение". Молодцы!
Об итогах зонального этапа конкурса “100 идей для Беларуси”
30.11.2017 в г.п. Колодищи состоялся зональный этап республиканского конкурса «100 идей для Беларуси». Участниками этапа стали учащиеся нашей школы Ларченко Виктория и Шкурат Алексей(8 класс). Ребята представили свою разработку «Лазерный тир». Руководителем и идейным вдохновителем юных изобретателей является Ларченко А.П., учитель информатики. Свою разработку Виктория и Алексей представят на областном этапе конкурса. Желаем им успехов и победы!
Шаг второй
А сегодня мы знакомились с конденсатором. Очень полезная деталь :). Дети ее прозвали "Мини батарейкой", за возможность накопления энергии. При параллельном подключении к светодиоду, после отключения питания, светодиод долго светится. Это свойство конденсатора мы будем использовать в дальнейшем.
Летом, при подготовке к занятиям по робототехнике, школа закупила некоторые компоненты, такие как резисторы, конденсаторы, кнопки, провода, светодиоды, макетные платы. Пользовались почтой и магазинами КНР, поэтому все обошлось практически за пару копеек. В качестве источников питания использовали адаптеры от телефонов, различных устройств. Для создания первых схем этого достаточно.
Учились понятиям «Параллельное», «Последовательное подключение.
Первые шаги
Мы собирали простейшие цепи содержащие источник тока, провода, резистор и светодиод.