Сегодня управление жестами нельзя назвать новинкой. Данная функция присутствует во многих современных смартфонах, планшетах и других мобильных устройствах. Никого не удивишь, если смартфон переключает видеозаписи или сменяет фотографии на экране по движению руки. Но как сделать нечто подобное самому? Как заставить игрушку понимать жесты? С этим вопросом мы и постараемся разобраться сегодня.
В основе данной технологии лежит обычный акселерометр. С его помощью мы сделаем робота, который будет реагировать на движение рук и двигаться в соответствии с ними. Этот проект поможет нам разобраться с работой данного датчика в более интересной и ненавязчивой форме.
Для трансмиттера:
Для ресивера:
Работа нашего робота начинается с акселерометра. Он дает аналоговый сигнал в пределах от 0 до 5 вольт или нуля до 1023 на микроконтроллер ATmega328/8.Данный микроконтроллер можно назвать сердцем всего проекта. Он и заставляет перемещаться робота в зависимости от движения руки. После считывания движения руки, через RF трансмиттер, контроллер передает данные роботу, по средствам беспроводной связи. Для ее создания и необходима микросхема HT12E IC.
Собранные данные принимаются RF ресивером и декодируются микросхемой HT12D IC. Микросхема имеет 4 контакта, которые подключаются к шилду управления L293D. Он в свою очередь и запускает двигатели.
Акселерометр: – прибор,измеряющий проекцию кажущегося ускорения (разности между истинным ускорением объекта и гравитационным ускорением) в трех направлениях – X, Y, Z
Arduino – плата микроконтроллера, к которой подключается акселерометр. Датчик передает на контроллер аналоговый сигнал, который позже преобразуется в цифровой, при помощи встроенного 10-битного АЦП
Микросхема HT12E IC – кодер, который может преобразовать параллельный сигнал в последовательный. Основная причина его применения в том,что RF трансмиттер не может передать параллельный сигнал. Последовательный сигнал может быть передан и непосредственно через микроконтроллер, но тогда встанет необходимость его наличия и на стороне приемника.
RF трансмиттер – собственно он и передает последовательный сигнал.
RF ресивер: принимает данные с передатчика и передает декодеру HT12DIC.
HT12D IC: преобразует последовательный сигнал, полученный с приемника, в параллельный, как на выходе из контроллера.
L293D: микросхема питания, которая используется для усиления сигнала, поступающего с декодера.
Двигатели используются для перемещения робота. Количество оборотов можно менять, но стоит учесть, что на высоких оборотах, робота довольно сложно контролировать.
Источник питания: аккумуляторная батарея для работы двигателей.
Осталось только вставить код в Arduino IDE и загрузить его на плату.
int inx = A0; //x pin of accelerometer int iny = A1; //y pin of accelerometer int out1 = 8; //output1 for HT12E IC int out2 = 9; //output1 for HT12E IC int out3 = 10; //output1 for HT12E IC int out4 = 11; //output1 for HT12E IC void setup() { pinMode(inx,INPUT); pinMode(iny,INPUT); pinMode(out1,OUTPUT); pinMode(out2,OUTPUT); pinMode(out3,OUTPUT); pinMode(out4,OUTPUT); } void loop() { if (analogRead(inx) < 305) { digitalWrite(out1, HIGH); digitalWrite(out2, LOW); digitalWrite(out3, HIGH); digitalWrite(out4, LOW); } else if (analogRead(inx) > 365) { digitalWrite(out1, LOW); digitalWrite(out2, HIGH); digitalWrite(out3, LOW); digitalWrite(out4, HIGH); } else if (analogRead(iny) < 305) { digitalWrite(out1, HIGH); digitalWrite(out2, LOW); digitalWrite(out3, LOW); digitalWrite(out4, LOW); } else if (analogRead(iny) > 365) { digitalWrite(out1, LOW); digitalWrite(out2, LOW); digitalWrite(out3, HIGH); digitalWrite(out4, LOW); } else { digitalWrite(out1, LOW); digitalWrite(out2, LOW); digitalWrite(out3, LOW); digitalWrite(out4, LOW); } }
Данная статья является авторским переводом с сайта http://clgproject.com
Данная статья является собственностью Amperkot.ru. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.
Комментарии