Беспроводная машина на ардуино управляемая жестами

Машинка на базе Arduino

Опубликовано 26.02.2015 10:14:00

Данная статья будет поистине самым простым руководством по сборке управляемой по блютуз машинки, ведь благодаря встроенным разъемам для подключения блютуз модулей на наших Z- Мотор шилдах, вся сборка производится в 5 действий:

• Состыковка платы Arduino с Шилдом • Заливка программы • Подключение моторов • Соединение Блютуз модуля с платой

• Подача внешнего питания

Управлять нашей машинкой мы будем c Android телефона через приложения Z- Car Сontroller. Написано оно в приложении App Inventor, программа и исходник прикреплены в конце статьи.

Контроллер имеет клавиши управления направлением и дополнительные четыре клавиши  для произвольных целей. При нажатии на клавиши посылается уникальный символ, отрабатывает вибрация и происходит затемнение. При отпускании клавиши посылается еще один символ и клавиша приобретает изначальный вид. (Посылаемые символы)

Для соединения с блютузом предназначена кнопка “Подключить Bluetooth”, при нажатии выпадет список из сопряженных с телефоном. Для отключения предназначена, как легко догадаться, кнопка “Отключить Bluetooth”.

Минусы

Главной проблемой приложений написанных в App Inventor является невозможность отслеживания сразу нескольких нажатий. Для управления танковой платформой это не столь критично, и при старте программы по дефолту открывается режим для танкового управления.

Управление танковой платформой

(Для активации TANK режима предназначена кнопка “T”)

Пример программного кода для управления машинкой с танковым управлением
int val;
int IN1 = 4;
int EN1 = 6;
int IN2 = 7;
int EN2 = 5; void setup()
{
  Serial.begin(9600);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(EN1, OUTPUT);
  pinMode(EN2, OUTPUT);
} void loop()
{
  if (Serial.

available())
  {
    val = Serial.

read();
    if (val == 'W') // При получении символа “W” движемся вперед
    {
      digitalWrite(IN1, HIGH);
      analogWrite(EN1, 255);
      digitalWrite(IN2, HIGH);
      analogWrite(EN2, 255);
    }
    if (val == 'S') // При получении символа “S” движемся назад
    {
      digitalWrite(IN1, LOW);
      analogWrite(EN1, 255);
      digitalWrite(IN2, LOW);
      analogWrite(EN2, 255);
    }
    if (val == 'A'){ // При получении символа “A” движемся влево
      digitalWrite(IN1, HIGH);
      analogWrite(EN1, 255);
      digitalWrite(IN2, LOW);
      analogWrite(EN2, 255);
    }
    if (val == 'D'){ // При получении символа “D” движемся вправо
      digitalWrite(IN1, LOW);
      analogWrite(EN1, 255);
      digitalWrite(IN2, HIGH);
      analogWrite(EN2, 255);
    }
    //———- Стоп режим —————-
    // При отпускании клавиш в программе в порт шлется “T”
    if ( val == 'T') // При нажатии клавиши “T”
    {
      // Выводы ENABLE притянуты к минусу, моторы не работают
      digitalWrite(EN1, LOW);
      digitalWrite(EN2, LOW);
    }     
  }
}

Управление машинкой с рулевым устройством

A вот для управления машинкой с рулевым поворотным устройством это проблема. Выходом из данной ситуации  является добавление дополнительных клавишь и их обработка в программном коде.

(Для активации CAR режима предназначена кнопка “C”)

Пример программного кода для управления машинкой с рулевым устройством
int val;
int IN1 = 4;
int EN1 = 6;
int IN2 = 7;
int EN2 = 5; void setup()
{
  Serial.

begin(9600);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(EN1, OUTPUT);
  pinMode(EN2, OUTPUT);
} void loop()
{
  if (Serial.available())
  {
    val = Serial.

read();
    if (val == 'W') // При получении символа “W” движемся вперед
    {
      digitalWrite(IN1, HIGH);
      analogWrite(EN1, 255);
    }
    if (val == 'Q') // При получении символа “Q” движемся вперед и влево
    {
      digitalWrite(IN1, HIGH);
      analogWrite(EN1, 255);
      digitalWrite(IN2, HIGH);
      analogWrite(EN2, 255);
    }
    if (val == 'E') // При получении символа “E” движемся вперед и вправо
    {
      digitalWrite(IN1, HIGH);
      analogWrite(EN1, 255);
      digitalWrite(IN2, LOW);
      analogWrite(EN2, 255);
    }
    if (val == 'S') // При получении символа “S” движемся назад
    {
      digitalWrite(IN1, LOW);
      analogWrite(EN1, 255);
    }
    if (val == 'Z') // При получении символа “Z” движемся назад и влево
    {
      digitalWrite(IN1, LOW);
      analogWrite(EN1, 255);
      digitalWrite(IN2, HIGH);
      analogWrite(EN2, 255);
    }
    if (val == 'C') // При получении символа “C” движемся назад и вправо
    {
      digitalWrite(IN1, LOW);
      analogWrite(EN1, 255);
      digitalWrite(IN2, LOW);
      analogWrite(EN2, 255);
    }
    if (val == 'A'){ // При получении символа “A” движемся влево
      digitalWrite(IN2, HIGH);
      analogWrite(EN2, 255);
    }
    if (val == 'D'){ // При получении символа “D” движемся вправо
      digitalWrite(IN2, LOW);
      analogWrite(EN2, 255);
    }
    //———- Стоп режим —————-
    // При отпускании клавиш движения в программе в порт шлется “T”
    if ( val == 'T') // При нажатии клавиши “T”
    {
      // Выводы ENABLE притянуты к минусу, моторы не работают
      digitalWrite(EN1, LOW);
      digitalWrite(EN2, LOW);
    }     
  }
}

Использованное в статье железо:

• Arduino UNO, Arduino Nano CH340

• Z- Mini Motor + Sensor Shield (L293D, LD1117), Z- Motor Servo + Shield (L298P, LM338T)

• Блютуз модуль HC-06

Документация:

• Приложение и исходник для App Inventor ZelectroCarController.zip

• Руководство пользователя Z- Mini Motor + Sensor Shield (L293D, LD1117)

• Руководство пользователя Z- Motor + Servo Shield (L298P, LM338T)

Купить в России  Платы управления моторами для Arduino

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.

Источник: http://zelectro.cc/Arduino_bluetooth_car

Контролируем беспроводную машинку жестами

22 сентября в 21:38

Уроки / Arduino, Робототехника

В этом уроке мы узнаем, как сделать так, чтобы автомобилем или роботом можно было бы управлять на расстоянии жестами. Этот проект имеет две части, одна часть – передающее устройство, а другая часть – блок приемника. Блок передатчика на самом деле установлен на перчатках, а блок приемника помещен внутри автомобиля или любого робота. Теперь пришло время сделать классный автомобиль. Поехали!

Шаг 1: Комплектующие

Как сказали выше – мы можем разделить наши комплектующие на части. Сначала нам пригодятся:

  1. Ардуино Нано
  2. Модуль датчика MPU6050
  3. Передатчик RF 433 МГц
  4. Любой тип 3-элементной, 11,1-вольтовой батареи
  5. Плата
  6. Перчатки для рук

Приемник

  1. Ардуино Нано или Ардуино Уно
  2. Модуль драйвера двигателя L298N
  3. 4-колесная роботизированная рама, включая двигатели
  4. RF 433 RF приемник
  5. 3-элементная, 11,1-вольтовая батарея Li-po
  6. плата

Дополнительно нам понадобятся:

  1. Клей
  2. Провода-перемычки
  3. Отвертка
  4. Комплект для пайки
  5. и т.п.

Схема соединения выше. Вы можете скачать файл для программы Fritzing ниже:

Скачать Gesture+and+RF+base+4+wheel+car.zip

Шаг 4: Код передатчика

Вы можете скачать или скопировать код передатчика ниже:

Скачать kod-peredatchika.ino#include #include #include MPU6050 mpu6050(Wire); long timer = 0; char *controller; void setup() { Serial.begin(9600); Wire.begin(); mpu6050.begin(); mpu6050.calcGyroOffsets(true); vw_set_ptt_inverted(true); // vw_set_tx_pin(10); vw_setup(4000);// speed of data transfer Kbps } void loop() { //////////////////////////////////////////////////////////////////////////////////////////////// mpu6050.update(); if(millis() – timer > 1000) { Serial.println(“=======================================================”); Serial.print(“temp : “);Serial.println(mpu6050.getTemp()); Serial.print(“accX : “);Serial.print(mpu6050.getAccX()); Serial.print(” accY : “);Serial.print(mpu6050.getAccY()); Serial.print(” accZ : “);Serial.println(mpu6050.getAccZ()); Serial.print(“gyroX : “);Serial.print(mpu6050.getGyroX()); Serial.print(” gyroY : “);Serial.print(mpu6050.getGyroY()); Serial.print(” gyroZ : “);Serial.println(mpu6050.getGyroZ()); Serial.print(“accAngleX : “);Serial.print(mpu6050.getAccAngleX()); Serial.print(” accAngleY : “);Serial.println(mpu6050.getAccAngleY()); Serial.print(“gyroAngleX : “);Serial.print(mpu6050.getGyroAngleX()); Serial.print(” gyroAngleY : “);Serial.print(mpu6050.getGyroAngleY()); Serial.print(” gyroAngleZ : “);Serial.println(mpu6050.getGyroAngleZ()); Serial.print(“angleX : “);Serial.print(mpu6050.getAngleX()); Serial.print(” angleY : “);Serial.print(mpu6050.getAngleY()); Serial.print(” angleZ : “);Serial.println(mpu6050.getAngleZ()); Serial.println(“=======================================================
“); timer = millis(); } ///////////////////////////////////////////////////////////////////////////////////// if (mpu6050.getAccAngleX()30) { controller=”X2” ; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Wait until the whole message is gone Serial.println(“FORWARD”); } else if (mpu6050.getAccAngleY()>40 ) { controller=”Y1″ ; vw_send((uint8_t *)controller, strlen(controller)); vw_wait_tx(); // Wait until the whole message is gone Serial.println(“LEFT”); } else if (mpu6050.getAccAngleY()

Источник: https://ArduinoPlus.ru/kontroliruem-besprovodnuju-mashinku-zhestami/

Робот на Arduino, управляемый с помощью жестов

Название проекта: Робот на Arduino, управляемый с помощью жестов
Платформа: Arduino

Любительская робототехника развивается весьма быстрыми темпами. Все больше и больше людей хотят сделать своего робота, пусть даже небольшого, простого и обладающего минимальным набором функций.

При разработке робота встает вопрос о его управлении. Робот, управляемый джойстиком или клавиатурой, вполне обычное явление среди радиолюбителей. Куда интереснее сделать робота с необычным управлением, например, с жестовым управлением с помощью акселерометра.

Потребуется:

  • Плата Arduino
  • Два двигателя постоянного тока
  • Акселерометр ADXL335
  • Кодер HT12D
  • Декодер HT12E
  • Радиопередатчик и радиоприёмник
  • Драйвер двигателей L293D
  • Батарейка 9 В
  • Разъем для батарейки
  • USB-кабель
  • Шасси робота

Пульт управления, состоящий из акселерометра и радиопередатчика, крепится на руке и позволяет перемещать робота вперёд, назад, влево, вправо и останавливать.

Акселерометр ADXL335 имеет по аналоговому выходу на каждую ось (X-OUT, Y-OUT, Z-OUT) и питается напряжением 5 В.

Робот совершает перемещения на основе положения руки. Если наклонить руку вперёд, робот начнёт движение прямо и будет продолжать, пока не будет дана другая команда. Отклонение руки назад позволит роботу двигаться назад. Наклоны руки вправо или влево заставит робота поворачивать направо или налево соответственно. Для остановки робота нужно держать руку в горизонтальном положении.

На представленном ниже видео показано функционирование простого робота с жестовым управлением с помощью акселерометра:

Проект робота состоит из двух частей: передающей части и принимающей части. В передающей части основными элементами являются акселерометр и радиопередатчик. Поскольку акселерометр передаёт аналоговые сигналы, их необходимо преобразовать в цифровые.

Для этой цели вместо АЦП используется 4-канальный компаратор.

С помощью опорного напряжения мы получаем необходимые цифровые сигналы, которые впоследствии подводим к шифратору HT12E для получения последовательных данных для последующей их отправки по радиоканалу.

В принимающей части данные, принятые от радиоприёмника, поступают на дешифратор HT12D. Он преобразует информацию в параллельные сигналы, которые заводятся на Arduino. На основе этих данных робот осуществляет движение. Следует учитывать, что для питания двигателей используется дополнительный источник в виде батарейки 9 В.

Таблица состояний для управления роботом:

Код для Arduino:

//определяем выходные пины для двигателей #define FD 16 #define BD 17 #define LD 18 #define RD 19 #define m11 3 #define m12 4 #define m21 5 #define m22 6 void forward() { digitalWrite(m11, HIGH); digitalWrite(m12, LOW); digitalWrite(m21, HIGH); digitalWrite(m22, LOW); } void backward() { digitalWrite(m11, LOW); digitalWrite(m12, HIGH); digitalWrite(m21, LOW); digitalWrite(m22, HIGH); } void left() { digitalWrite(m11, HIGH); digitalWrite(m12, LOW); digitalWrite(m21, LOW); digitalWrite(m22, LOW); } void right() { digitalWrite(m11, LOW); digitalWrite(m12, LOW); digitalWrite(m21, HIGH); digitalWrite(m22, LOW); } void Stop() { digitalWrite(m11, LOW); digitalWrite(m12, LOW); digitalWrite(m21, LOW); digitalWrite(m22, LOW); } //определяем направления для пинов void setup() { pinMode(FD, INPUT); pinMode(BD, INPUT); pinMode(LD, INPUT); pinMode(RD, INPUT); pinMode(m11, OUTPUT); pinMode(m12, OUTPUT); pinMode(m21, OUTPUT); pinMode(m22, OUTPUT); } void loop() { //считываем входы int temp1=digitalRead(FD); int temp2=digitalRead(BD); int temp3=digitalRead(LD); int temp4=digitalRead(RD); if(temp1==1 && temp2==0 && temp3==0 && temp4==0) backward(); else if(temp1==0 && temp2==1 && temp3==0 && temp4==0) forward(); else if(temp1==0 && temp2==0 && temp3==1 && temp4==0) left(); else if(temp1==0 && temp2==0 && temp3==0 && temp4==1) right(); else Stop(); }

Читайте также:  Бумажное пианино ардуино: пошаговая инструкция

Использованные компоненты: Плата Arduino, Два двигателя постоянного тока, Акселерометр ADXL335, Кодер HT12D, Декодер HT12E ,Радиопередатчик и радиоприёмник, Драйвер двигателей L293D, Батарейка 9 В, Разъем для батарейки, USB-кабель, Шасси робота

Сайт проекта: http://circuitdigest.com/microcontroller-projects/accelerometer-based-hand-gesture-controlled-robot-using-arduino, http://digitrode.ru/computing-devices/mcu_cpu/296-robot-na-arduino-upravlyaemyy-s-pomoschyu-zhestov.html

Другие проекты на этой платформе:

  • Как сделать аниматронный хвост
  • Вездеход из Lego с видео и bluetooth на Raspberry Pi
  • Робот Juno: изучай Arduino и программирование
  • Робот-манипулятор из настольной лампы IKEA
  • Arduino-робот, объезжающий препятствия
  • Роботизированная интеллектуальная система — РИС
  • Серво-выключатель света для умного дома
  • Робот-рыба на Arduino
  • Сделай сам большого человекоподобного робота

Источник: http://edurobots.ru/project/accelerometer-based-hand-gesture-controlled-robot-using-arduino/

Самодельная Wifi машинка на NodeMCU. Машина делает дрифт

В данной статье я расскажу вам про модификацию самодельной Wi-Fi машинки на NodeMCU. Как я сделал из нерабочей машинки на радио управлении, Wi fi машинку. Читайте и смотрите вот тут: Своимируками беспроводная Wifi машинка на NodeMCU и RemoteXY.

Как рассказываю в предыдущей статье, электроника машинки была подключена по вот такой схеме.

И потаилась от 4 батареек формата АА. Так как постоянно покупать батарейки надоело, я решил переделать питание от аккумулятора 18650 . А так как у меня аккумуляторы из старой батареи ноутбука , они плохо держат заряд. По этой причине я решил сделать питание от двух аккумуляторов.

Но как показала практика, данные аккумуляторы оказались еще хуже чем я думал. Даже 2 не держат нагрузку и Wi-Fi постоянно отваливался. Как я разбирал батарею от ноутбука смотрите тут. Позднее я разобрал второй батарею от ноутбука. Аккумуляторы были розового цвета. И держат они нагрузку неплохо.

Даже один аккумулятор 18650 справлялся с нагрузкой без проблем.

Собрал я машинку на NodeMCU без изменения управляющей программы и был удивлен машинка постоянно дрифтовала, ее разворачивала постоянно. Для дрифта это отлично, но нормально поездить можно только на улице по асфальту. Поэтому я решил переделать управление рулем и управляющую программу.

На схеме выше приведен принцип подключения аккумулятора через повышающий DC-DC преобразователя и контролера заряда. Благодаря данной схеме подключения можно заряжать аккумулятор не вынимая его из машинки, что достаточно удобно и практично.

Также по схеме видно что остался один двигатель и появился сервопривод. Сейчас управление поворотами происходит благодаря сервоприводу.

Скетч для NodeMCU в среде программирования Arduino IDE для приложения RemoteXY выглядит вот так:

////////////////////////////////////////////// // RemoteXY include library // ////////////////////////////////////////////// // определение режима соединения и подключение библиотеки RemoteXY #define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT #include #include // настройки соединения #define REMOTEXY_WIFI_SSID “PortalPk” #define REMOTEXY_WIFI_PASSWORD “” #define REMOTEXY_SERVER_PORT 6377 // конфигурация интерфейса #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = { 255,3,0,0,0,25,0,6,5,2, 5,8,43,13,39,39,10,52,43,43, 2,3,131,13,12,14,37,10,18,45, 17,4 }; // структура определяет все переменные вашего интерфейса управления struct { // input variable int8_t joystick_1_x; // =-100..100 координата x положения джойстика int8_t joystick_1_y; // =-100..100 координата y положения джойстика uint8_t select_1; // =0 если переключатель в положении A, =1 если в положении B, =2 если в положении C, … // other variable uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop) ///////////////////////////////////////////// // END RemoteXY include // ///////////////////////////////////////////// /* определяем пины управления правым мотором */ #define MOTOR_RIGHT_UP D1 #define MOTOR_RIGHT_DN D2 /* определяем пины управления левым мотором #define MOTOR_LEFT_UP D3 #define MOTOR_LEFT_DN D4*/ #include #define PIN_SERVO D4 Servo servo; //светодиоды #define PIN_LED_STOP D0 #define PIN_LED_5 D5 #define PIN_LED_6 D6 #define PIN_LED_7 D7 #define PIN_LED_8 D8 // переменные boolean status = true; // флаг, что активна левая boolean open = true; // флаг, включения int interval[6]={50, 120, 90, 240, 150, 50}; // интервал включения/выключения LED long prestro1Millis = 0; // до мигания ( в целом переменная времени) int x=0; void setup() { RemoteXY_Init (); pinMode (PIN_LED_STOP, OUTPUT); pinMode (PIN_LED_5, OUTPUT); pinMode (PIN_LED_6, OUTPUT); pinMode (PIN_LED_7, OUTPUT); pinMode (PIN_LED_8, OUTPUT); servo.attach(PIN_SERVO); } void loop() { RemoteXY_Handler (); // Положение селектора 0 и 2 /// if (RemoteXY.select_1 == 2) { Migalka ();// Мигалка } if (RemoteXY.select_1 == 1) { digitalWrite(PIN_LED_STOP, HIGH); // digitalWrite(PIN_LED_5, HIGH); // digitalWrite(PIN_LED_6, HIGH); // } if (RemoteXY.select_1 == 0) { digitalWrite(PIN_LED_STOP, LOW); // digitalWrite(PIN_LED_5, LOW); // digitalWrite(PIN_LED_6, LOW); // digitalWrite(PIN_LED_7, LOW); // digitalWrite(PIN_LED_8, LOW); // } //END Положение селектора 0 и 2 //// /* управляем мотором */ int y = RemoteXY.joystick_1_y; if (y>100) y=100; if (y20) { analogWrite(MOTOR_RIGHT_UP, y*10.23); digitalWrite(MOTOR_RIGHT_DN, LOW); } else if (y100) x=100; if (x10) { servo.writeMicroseconds(x*2.5+1600); } else if (x interval[x]) // проверяем интервал { if (open) // если true digitalWrite(status ? PIN_LED_7 : PIN_LED_8, HIGH); // else // иначе digitalWrite(status ? PIN_LED_7 : PIN_LED_8, LOW); // x++; if (x == 6) // если последний проход по циклу { status = !status; // передаем слово (меняем текущий пин) меняем false на true и наоборот; x=0; } open = !open; //меняем false на true и наоборот prestro1Millis = curstro1Millis; } }

Повторить данную машинку может каждый желающий. Вам не нужно писать код или писать приложения для Android. Достаточно загрузить прошивку в NodeMCU. И на свое устройства установить приложение RemoteXY. Подключиться к Wi-fi сети с имением PortalPK. И ваше устройство станет пультом для машинки.

Источник: https://portal-pk.ru/news/120-samodelnaya-wifi-mashinka-na-nodemcu-mashina-delaet-drift.html

WiFi управление автомобилем — Сообщество «Arduino для автомобиля» на DRIVE2

Доброго времени суток всем участникам Сообщества!

WiFi управление автомобилем.

Вроде громкое название у темы, из названия кажется что я собираюсь управлять авто дистанционно по WiFi, но, всё гораздо проще =)
Хотя как посмотреть. Фактически это замена базовой проводки.
А если ещё точнее, то добавление новых функций без троссировки проводов по всему авто. :-/

В общем опять-таки публикация на правах идеи, опять идея “украдена”, и совмещена с другими похожими :-/

В чём суть? Суть проста:
Во все двери (у меня их 5), ставим по исполнительной Ардуинке с целью экономии на большом проекте будут использоваться самые дешёвые комплектующие, т.е. в данном случае это будет Ардуино Мини про за 100 р.

Под торпедой, как я неоднократно заявлял, у меня будет стоять Мега, которая будет управлять почти всем :-/Кроме того под торпеду планируется воткнуть исполнительную Ардуинку, дабы не синхронизировать исполнительную логику с управляющей.

Также ещё одна управляющая Ардуинка планируется в водительскую дверь.

/ Возможно, но не факт ещё одна исполнительная Ардуинка будет где то в районе аккумулятора + там же блок предов и реле, которые будут управлять самыми главными нагрузками — фарами, ПТФ и т.п. /

В чём всё-таки суть? )))Итак. Суть проста (повторяюсь 😉 )В авто будут установлены куча Ардуин, во все двери исполнительные Ардуинки (Slave), под торпеду и в водительскую дверь — управляющие (Master).

Все Ардуинки между собой будут общаться по радиоканалу!

Вопрос: Зачем всё это? Обычно все тянут провода!
Ответ: Тянуть провода по всему автомобилю сложнее, это занимает кучу времени и места. При этом большинство проводов “сигнально-силовые”.

Сигнально силовые кабеля можно разделить. На собственно сигнальные (слаботочные, тоненькие) и толстые силовые, на которых будет постоянно +12. :-/

И тут я задался вопросом: Сигнальные провода … зачем они?Всё ведь можно сделать по-современному — сигналы сделать беспроводными!Ну вот собственно и подошли мы к самой сути идеи — передаче всех сигналов в авто по WiFi! Штатная проводка в дверях будет переключена на силвую часть, т.е. будет подавать в двери постоянные +12. :-/

Как вариант часть проводов может подавать “дополнительные” +12 при включении зажигания.

Что планируется (какие функции) делать в дверях? Да что угодно, примерно так:1. управление ЭСП, в т.ч. доводчики стёкол, автоматическое закрывание стёкол при постановке на охрану. / для этого надо всего 2 реле /2.

защита стёкол, “память” (автоматическое опускание стёкол при снятии с охраны) …3.

Всякого рода габариты (я считаю что двери при открытии должны светиться как космолёт, дабы всякие “дамы”, объезжали их стороной) и подсветки (к сожалению грязи у нас хватает, а фонарных столбов — нет, Раша)

4. Всякого рода поворотники в зеркала, подогрев зеркал (тут ж-но реле), те же габы туда же и т.п.

В водительской двери скорее всего будет вторая “управляющая” Ардуинка, которая будет считывать команды с блока упарвления ЭСП, дверями, зеркалами, обычно находящегося у всех в водительской двери. Все команды будут передаваться “в эфир” (внутри авто), и исполняться исполнительными Ардуинками.

Вопрос: Что нам нужно для реализации? Проект вроде “серьёзный” и дорогой.
Ответ: кучка Ардуинок по 100р, модули WiFi по 50р. и релейные модули (пока вроде должно хватать по 4 канала). Это где то по 100-200р.

Вопрос: Не проще ли всё это проводами (пучками проводов)?
Ответ: Точно не проще, провода надо троссировать по всему авто, авто “постоянно” разбирать/собирать, проводить провода через гофры, втыкать их в различные разъёмы. Мне это уже порядком надоело.

Ну и главное, бюджет проекта
1. Ардуинки Миньки по 104р имха надо будет их с десяток — всего 1040 р.
Нанки 3.0 кучкой 10 штук — 1400 р

2. Модули WiFi вафельки по 60 р :-/ тоже думаю надо их с десяток — на каждую ардуинку = всего около 600 р.
Как поправил меня наш модератор denisn73 надо не такие модули, а модули ESP8266
1300 р кучка 166 р штучка

3. Релюхи / релейные модули — тут зависит от сильных нагрузок, таких как двигатели ЭСП, активаторы и т.д. Я пока планирую только по 2 реле на ЭСП во все двери (у меня вообще пока 2 только, но будет все 4).

4. Всякого рода транзисторы, резюки и т.д. :-/
Все цепи, не нуждающиеся в мощных токах (например, светодиодные поворотники) будут цепляться без реле, через транзисторы.

Как видим столь “грандиозный” по замыслу проект, укладывается в смешной бюджет в 2000 рублей! От силы 3000р. Что с текущим курсом доллара вообще смешные 50 баков!Что мы сэкономим (экономическая выгода от проекта):1. Экономим силы и время на троссировку проводов.

Читайте также:  Никола тесла: великий серб, который открыл электричество - arduino+

2. Экономия на проводах (рублей 20 метр, а их нужен километр) и разъёмах (от 100р колодка).

Ну вот вроде и всё что хотел сказать / чем хотел поделиться.

Резюмируя повествование: 2 вида Ардуинок, одни собирают сигналы, упаковывают (“шифруют”) их, и расслылают по WiFi.

Другие — исполнительные, получают сигналы, распаковывают (“дешифруют”) их, ну и управляют конечными потребителями (ЭСП, зеркалами, фарами, ПТФ и т.д.).

:-/
Любой “апгрейд” авто — это перепрограммирование одной-двух Ардуин + добавление каких то ключей/релюх, без изнуряещей трассировки проводов по всему авто (с его почти полной разборкой и сборкой)

Очень хочется услышать какую то конструктивную критику особенно от тех, кто уже развлекался с вайфай на Ардуинках :-/

P.S. Конечно же вряд ли есть смысл менять уже существующую проводку в авто, да ещё тратить на это деньги. Проект всё-же для того чтобы не вести новую проводку к потребителям, все новые функции реализовать “по новому”.
У меня в этом плане раздолье — т.к. у меня нелюксовый ВАЗ =)

Бонусом к данному проекту может быть дополнительная дистанционная управляемость авто — можно к примеру с мобилы открыть дверь, опустить или закрыть любое стекло. :-/
Поморгать фарами ))))

Источник: https://www.drive2.ru/c/1788807/

Управлением роботом с помощью простых жестов

Сегодня управление жестами нельзя назвать новинкой. Данная функция присутствует во многих современных смартфонах, планшетах и других мобильных устройствах.

Никого не удивишь, если смартфон переключает видеозаписи или сменяет фотографии на экране по движению руки.

Но как сделать нечто подобное самому? Как заставить игрушку понимать жесты? С этим вопросом мы и постараемся разобраться сегодня.

В основе данной технологии лежит обычный акселерометр. С его помощью мы сделаем робота, который будет реагировать на движение рук и двигаться в соответствии с ними. Этот проект поможет нам разобраться с работой данного датчика в более интересной и ненавязчивой форме.

Компоненты

Для трансмиттера: 

Для ресивера:

  1. RF Ресивер;
  2. Микросхема HT12D IC;
  3. Шилд управления двигателями L293D;
  4. 2 мотора (12 Вольт);
  5. Шасси;
  6. Батарея (12 Вольт).

Принцип работы

Работа нашего робота начинается с акселерометра. Он дает аналоговый сигнал в пределах от 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. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.

Источник: https://amperkot.ru/blog/robot-simple-gestures/

Управляем Arduino-машинкой при помощи G-сенсора со смартфона

В данной статье вы узнаете, как при помощи данного сервиса RemoteXY очень легко настроить дистанционное управление робо-платформой или машинкой. Робомашинкой мы будем управлять при помощи элемента управления “Джойстик”, который умеет работать от G-сенсора вашего смартфона. В конце статьи вы найдете видео и можете посмотреть, что же у нас получилось.

Мы собрали очень простую двухколесную тележку, что бы продемонстрировать вам, как построить систему дистанционного управления. В тележке использованы следующие компоненты (мы не претендуем на качество изготовления, тележка собрана для демонстрации возможностей ресурса RemoteXY):

  • Платформа – ее мы вырезали из листового материала. Для простоты использовали ДВП;
  • Переднее колесо – поворотное колесико от кресла;
  • Мотор-редукторы 2 шт.;
  • Колеса, с осью подходящей к мотор-редукторам 2 шт. Колеса мы приобретали совместно с мотор редукторами;
  • Батарейный отсек с выключателем, на 4-е пальчиковые батарейки (тип АА);
  • Arduino, мы использовали все тот же клон Seeeduino;
  • Модуль Bluetooth HC-06;
  • Драйвер моторов на чипе L298N;

Электрическая часть и схема подключения всех модулей машинки представлена на следующем рисунке.

Программа управления

Войдите в редактор на этом ресурсе и сконструируйте следующий интерфейс управления:

Установите по центру экрана “Джойстик”. В свойствах джойстика выберите установку дополнительного элемента управления “Включить G сенсор”. Выберите положение переключателя G-сенсора “Низ-лево”. Так же в настройках можете изменить цвет на красный. В дальнейшем джойстиком мы будем управлять движением машинки.

Установите “Переключатель”. Разместите его левее джойстика. Можете так же изменить его цвет. Переключателем мы будем управлять светодиодом на плате Arduino на пине 13.

Если вы все правильно сделали, у вас должен получиться примерно такой интерфейс управления:

В настройках проекта выберите целевую платформу, для которой мы получаем исходный код “Arduino (SoftwareSerial), library version”. Нажимаем кнопку “Получить код” и загружаем исходный код на свой компьютер. Так же по ссылке загружаем библиотеку RemoteXY и устанавливаем ее в Arduino IDE.

Откроем загруженный скетч в IDE Arduino. Скетч прекрасно компилируется без ошибок. Однако, в нем конечно же нет кода для управления нашей машинкой. Наша задача написать этот код. Для образца мы будем использовать загруженный пример.

Обратите внимание на определение структуры RemoteXY в скетче проекта. Структура содержит поля, полностью соответствующие установленным на интерфейсе управления элементам управления. Мы видим переменные joystick_1_x и joystick_1_y, отражающие координаты x и y нашего джойстика, а так же переменную switch_1, отражающую переключатель.

/* структура определяет все переменные вашего интерфейса управления */  struct {         /* input variable */   signed char joystick_1_x; /* =-100..100 координата x положения джойстика */   signed char joystick_1_y; /* =-100..

100 координата y положения джойстика */   unsigned char switch_1; /* =1 если переключатель включен и =0 если отключен */     /* other variable */   unsigned char connect_flag;  /* =1 if wire connected, else =0 */ } RemoteXY; 

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

/////////////////////////////////////////////  //        RemoteXY include library         //  /////////////////////////////////////////////  /* определение режима соединения и подключение библиотеки RemoteXY */  #define REMOTEXY_MODE__SOFTWARESERIAL  #include   #include   /* настройки соединения */  #define REMOTEXY_SERIAL_RX 2  #define REMOTEXY_SERIAL_TX 3  #define REMOTEXY_SERIAL_SPEED 9600  /* конфигурация интерфейса  */  unsigned char RemoteXY_CONF[] =    { 3,0,23,0,1,5,5,15,41,11   ,43,43,1,2,0,6,5,27,11,5   ,79,78,0,79,70,70,0 };      /* структура определяет все переменные вашего интерфейса управления */  struct {      /* input variable */   signed char joystick_1_x; /* =-100..100 координата x положения джойстика */   signed char joystick_1_y; /* =-100..100 координата y положения джойстика */   unsigned char switch_1; /* =1 если переключатель включен и =0 если отключен */     /* other variable */   unsigned char connect_flag;  /* =1 if wire connected, else =0 */ } RemoteXY;  /////////////////////////////////////////////  //           END RemoteXY include          //  /////////////////////////////////////////////  /* определяем пины управления правым мотором */ #define PIN_MOTOR_RIGHT_UP 7 #define PIN_MOTOR_RIGHT_DN 6 #define PIN_MOTOR_RIGHT_SPEED 10 /* определяем пины управления левым мотором */ #define PIN_MOTOR_LEFT_UP 5 #define PIN_MOTOR_LEFT_DN 4 #define PIN_MOTOR_LEFT_SPEED 9 /* определяем пин управления светодиодом */ #define PIN_LED 13 /* определяем два массива с перечислением пинов для каждого мотора */ unsigned char RightMotor[3] =    {PIN_MOTOR_RIGHT_UP, PIN_MOTOR_RIGHT_DN, PIN_MOTOR_RIGHT_SPEED}; unsigned char LeftMotor[3] =    {PIN_MOTOR_LEFT_UP, PIN_MOTOR_LEFT_DN, PIN_MOTOR_LEFT_SPEED}; /*    управление скоростью мотора    motor – ссылка на массив пинов    v – скорость мотора, может принимать значения от -100 до 100 */ void Wheel (unsigned char * motor, int v) {   if (v>100) v=100;   if (v0) {     digitalWrite(motor[0], HIGH);     digitalWrite(motor[1], LOW);     analogWrite(motor[2], v*2.55);   }   else if (v

Источник: http://remotexy.com/ru/examples/car

Ночник с управлением жестами, на базе адресных светодиодов

В этом уроке мы создадим ночник с управлением адресными светодиодами через датчик жестов.

Выполнив один из жестов, которые распознаёт датчик, вы сможете управлять режимом работы ночника, его яркостью, цветом и скоростью анимации.

Видео:

Нам понадобится:

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

  • SparkFun_APDS9960 — для работы с датчиком движений;
  • iarduino_NeoPixel — для работы с адресными светодиодами NeoPixel;
  • Wire — библиотека входит в базовый набор Arduino IDE и не требует установки;

О том, как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki – Установка библиотек в Arduino IDE.

Описание работы ночника:

После подачи питания ночник готов к работе.

Для включения ночника проведите рукой над датчиком вправо или влево, после чего ночник включит один из режимов работы:

  • Перелив всеми цветами радуги;
  • Случайное включение случайным цветом;
  • Смена одного цвета на другой;
  • Имитация пламени свечи;
  • Один цвет на выбор по порядку(красный, зелёный, синий, жёлтый, фиолетовый, голубой, белый);

Для того, чтобы увеличить или уменьшить скорость анимации, достаточно провести рукой вверх (ускорить) или вниз (замедлить) над датчиком.

Для того, чтобы изменить уровень яркости ночника достаточно приблизить руку к датчику и плавно её отдалить – ночник перейдёт в режим настройки:

  • При входе в режим настройки яркости ночник однократно моргнёт светодиодами белого цвета, после чего в течении времени, заданном в переменной waiting_time, будет принимать команды настройки яркости;
  • Приближая или отдаляя руку к/от датчика яркость будет плавно меняться от меньшего (приближая) к большему (отдаляя);
  • По истечении времени ночник вновь однократно моргнёт светодиодами белого цвета и выйдет из режима настройки яркости;
Читайте также:  Обзор parrot bebop drone 2 - arduino+

Для того, чтобы выключить ночник, достаточно поднести руку над датчиком на расстоянии 10-15 см и плавно её приблизить. После этого ночник выключится.

Схема сборки:

Arduino / Piranha UNO:

Batery Shield:

Установите Battery Shield на Arduino / Piranha UNO:
Во время установки Battery Shield должен быть в выключенном состоянии.

Trema Shield:

На Battery Shield установите Trema Shield:

Датчик жестов:

Подключите Trema-модуль Датчик жестов к Trema Shield:

Адресные светодиоды:

Подключите адресные светодиоды NeoPixel к Trema Shield:

Все используемые в уроке Trema-модули NeoPixel соединены друг c другом, а первый модуль можно подключить к любому выводу Arduino. Номер вывода указывается в скетче (в примере используется вывод D10). Чем больше модулей в цепи, тем больше тока она потребляет, по этому в схеме используется стабилизированный источник питания Battery Shield на 5В постоянного тока.

Код программы (скетч):

// Подключаем библиотеки:
#include // Для работы с шиной I2C
#include // Для работы с датчиком APDS-9960
#include // Подключаем библиотеку iarduino_NeoPixel для работы со светодиодами NeoPixel
uint8_t neo_pin = 10; // Вывод, к которому подключены модули NeoPixel
uint16_t modul_number = 8; // Количество модулей
iarduino_NeoPixel led(neo_pin, modul_number*4 ); // Объявляем объект LED указывая (№ вывода Arduino к которому подключён модуль NeoPixel, количество используемых светодиодов)
SparkFun_APDS9960 apds = SparkFun_APDS9960(); // Определяем объект apds, экземпляр класса SparkFun_APDS9960
// Объявляем переменные:
uint8_t j; // Объявляем переменную для хранения значения сдвига спектра цветов для всех светодиодов (от 0 до 255)
uint8_t k; // Объявляем переменную для хранения положения сдвига спектра цвета для каждого светодиода на спектре j (зависит от количества светодиодов)
uint8_t r, g, b; // Объявляем переменную для хранения цветов RGB для каждого светодиода
uint8_t z = 1; // Определяем константу указывающую задержку в мс (чем выше значение, тем медленнее перелив цветов)
uint8_t flg, setting = 0; // Флаг включения/выключения света
uint8_t mode = 0; // Флаг режима работы светодиодов
uint8_t proximityData = 0; // Переменная, хранящая значение расстояния до модуля APDS9960
uint8_t brightness = 255; // Переменная значения яркости
uint32_t waiting_time = 7000; // Время ожидания при настройке яркости
uint32_t work_time; // Счётчик времени при настройке яркости
byte on_off = 0; // Триггер включения/выключения света void setup() { // Инициализируем адресные светодиоды: led.begin(); // Инициализируем модуль жестов: apds.init(); // Если инициализация модуля жестов прошла успешно, то … // Устанавливаем коэффициент усиления приёмника: // Доступные значения: 1х, 2х, 4х, 8х (GGAIN_1X, GGAIN_2X, GGAIN_4X, GGAIN_8X). Чем выше коэффициент тем выше чувствительность apds.setGestureGain(GGAIN_4X); // Если установлен коэффициент усиления приёмника в режиме обнаружения жестов, то … // Устанавливаем силу тока драйвера ИК-светодиода: // Доступные значения: 100мА, 50мА, 25мА, 12.5мА (LED_DRIVE_100MA, LED_DRIVE_50MA, LED_DRIVE_25MA, LED_DRIVE_12_5MA). Чем выше сила тока, тем выше чувствительность. apds.setGestureLEDDrive(LED_DRIVE_100MA); // Если устанавлена сила тока драйвера (яркость) ИК-светодиода для обнаружения жестов, то … // Разрешаем режим обнаружение жестов: apds.enableGestureSensor(false); // Если инициализация режима обнаружения жестов прошла успешно, то led.setColor(NeoPixelAll,0, 0, 0); // Выключаем светодиоды led.write(); // // Ждём завершение инициализации и калибровки: delay(500); // Задержка 0,5с
} void loop() { // Проверяем наличие движения if (apds.isGestureAvailable()) { // Если зафиксировано движение, то … switch (apds.readGesture()) { // Сверяем значение соответствующее жесту … // Проверяем жест:
//==========================================================// // “СЕВЕР” – УВЕЛИЧЕНИЕ СКОРОСТИ АНИМАЦИИ case DIR_UP: if(z>=1 && z 11 && z 101 && z 500) {z = 1;} // При превышении значения шаг сбрасывается break;
//==========================================================// // “ЮГ” – УМЕНЬШЕНИЕ СКОРОСТИ АНИМАЦИИ case DIR_DOWN: if(z=1 && z 11 && z 101 && z 11){mode = 1;} // Если значение больше допустимого, то переходим к минимальному значению break;
//==========================================================// // “ОТДАЛЕНИЕ” – ПЕРЕХОД В РЕЖИМ ЯРКОСТИ case DIR_FAR: setting = 1; // Ставим флаг перехода в режим настройки яркости flg = 1; // Ставим флаг смены работы режима датчика жестов – с чтения жестов на чтение приближения work_time = millis(); // Обновляем счётчик break;
//==========================================================// // “ПРИБЛИЖЕНИЕ” – ПЕРЕХОД В РЕЖИМ ВЫКЛЮЧЕНИЯ СВЕТА case DIR_NEAR: mode = 12; // Устанавливаем режим выключения света break; } } // РЕЖИМЫ РАБОТЫ СВЕТОДИОДОВ: switch (mode) { // Сверяем значение соответствующее режиму работы
//==========================================================// // ПЕРЕЛИВ ВСЕХ ЦВЕТОВ РАДУГИ case 1: j++; // Смещаем спектр цветов для всех светодиодов for(uint16_t i=0; i

Источник: https://lesson.iarduino.ru/page/night-light/

Автономная “смарт” машина на Arduino

Основная идея проекта – создать недорогую автономную четырехколесную подвижную платформу. В проекте используется логика на базе Arduino, недорогая радиоуправляемая машина, источник питания 9 вольт. В качестве датчиков обратной связи используется инфракрасный передатчик.

Так как оборудование недорогое, можно расценивать эту статью исключительно как общую инструкцию и первый шаг для дальнейших модификаций вашей автономной четырехколесной платформы.

Необходимое оборудование и материалы которые можно купить дешево на Алиэкспресс (ссылки кликабельны)

*Обратите внимание: если в вашей машине установлена большая плата контроллера, то это, скорее всего, чип TX2 или RX2. Если это так, то вы можете сэкономить немного денег и использовать для двигателей встроенные контроллеры. Хороший пример (на английском языке!) есть здесь.

Разбираем машинку

Ваш первый шаг – разобрать машинку. Снимите корпус и извлеките все платы из машинки. Моторы не трогаем. В проекте нам понадобятся родные шасси, колеса и моторы.

Подготавливаем сенсоры

Подготавливаем электронику. Для начала припаяйте резистор на 100 Ом к одному из контактов на вашем ИК передатчике. Припаиваем провода к другой ноге резистора и ноге датчика. После этого припаиваем два провода к ногам вашего ИК приемника.

Устанавливаем Arduino и датчик

В корпусной части машинки надо сделать отверстия под крепеж вашего контроллера Arduino. Отверстия под крепеж зависят от габаритов подвижной платформы машинки. В данном конкретном случае плата была расположена “перпендикулярно” несущей системе. Подобное расположение удобно еще и тем, что расстояния от двигателей передней и задней подвески до пинов платы примерно одинаковое.

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

Переходим к следующему шагу.

Питание

В проекте используется одна батарейка на 9 В (крона). В данном случае ее получилось установить под несущей системой платформы на колесах. Крепим пластиковыми стяжками. В принципе, для увеличения времени автономной работы нашего автомобиля, можно установить две кроны параллельно.

Подключение к Arduino

С подключением можно разобраться и на основании фото. Но на всякий случай, ниже приведена схема подключения в текстовой форме.

Не забывайте, что позитивная нога светодиода – более длинная. 

ИК светодиод

Позитивный контакт – 5v

Отрицательный контакт – Ground

Сенсор

Позитивный контакт – Analog pin 5

Негативный контакт – Ground

Двигатель

Позитивный контакт – Channel A +

Негативный контакт – Мотор шилд Channel A –

Двигатель для поворота

Позитивный контакт – Мотор шилд Channel B +

Негативный контакт – Мотор шилд Channel B –

9v

Позитивный контакт – Мотор шилд Vin

Негативный контакт – Мотор шилд Gnd

Программа Arduino

Учитывая специфику проекта, вам надо внести в приведенный ниже базовый скетч достаточно много изменений, которые зависят от размера машинки и колес, скорости вращения колес, веса авто, освещения окружающей среды.

int irsensor = A5;

int motorspeed;

int run = 0;

int measure = 1;

int ambientir = 0;

int distance;

void setup() {

//настройка канала A (Channel A)

pinMode(12, OUTPUT); //инициализация контакта Motor Channel A

pinMode(9, OUTPUT); //Инициализация контакта тормоза – Brake Channel A

pinMode(irsensor, INPUT);

digitalWrite(irsensor, HIGH);

Serial.begin(9600);

}

void loop(){

if(run == 0)

{

delay(1000);

do{

ambientir = ambientir + analogRead(irsensor);

delay(1000);

measure = measure + 1;

}

while(measure < 10);

ambientir = ambientir / 10;

run = run +1;

}

distance = analogRead(irsensor);

if(distance < ambientir - 50){

digitalWrite(12, HIGH); //Обеспечиваем обратное направление вращения ротора на Channel A

digitalWrite(9, LOW); //Отключаем тормоз на Channel A

analogWrite(3, 100); //Вращаем ротор мотора на Channel A на половине максимальных оборотов

}

if(distance > ambientir – 50){

digitalWrite(12, LOW);

digitalWrite(9, LOW);

analogWrite(3, 100);

}

Serial.println(distance);

}

Приведенный выше костяк программы для Arduino можно (и даже нужно!) дорабатывать под вашу конкретную конструкцию, но общий концепт вы должны были уловить.

Результат, тестирование и дальнейшие варианты модификаций

Как видите на фото, оригинальный корпус машинки был окрашен в бежевый цвет и установлен на стойках на подвижную четырехколесную платформу.

После тестирования разработанной конструкции можно выделить следующие проблемы:

  • Ограниченный диапазон чувствительности сенсора;
  • Проблемы, связанные со скоростью машины, а именно – невозможность быстрой остановки;
  • Необходимость подстраивать датчик под разные условия освещения;
  • Ну и конечно же, дешевый китайский пластик никоим образом не придает автономной машинке на Arduino хорошей жесткости и надежности конструкции.

В принципе, внести компенсацию в зависимости от уровня освещения можно, но это отдельная история и модификация, которые не входили в задачи базового проекта.

Машинка не врезается в стены, но с 90% вероятностью соберет бампером все ножки стульев и столов в комнате. То есть, с обнаружением более мелких препятствий есть явные проблемы. Соответственно, надо либо увеличивать количество эмиттеров, либо использовать более дорогостоящие модели с большей чувствительностью.

Так же не забываем о экономии при покупке товаров на Алиєкспресс с помощью кэшбэка 

Для веб администраторов и владельцев пабликов  главная страница ePN

Для пользователей покупающих на Алиэкспресс с быстрым выводом % главная страница ePN Cashback

Удобный плагин кэшбеэка браузерный плагин ePN Cashback

Источник: http://www.electronica52.in.ua/proekty-arduino/avtonomnaya-smart-mashina-na-arduino

Ссылка на основную публикацию
Adblock
detector