Автор Тема: Автономный дрон для путешествия под диван  (Прочитано 6246 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Золото Акапулько

  • Важная персона
  • ****
  • Сообщений: 718
  • Репутация: 53
  • Наградки За поддержание порядка на форуме Ждем в гости За длительное и активное участие в жизни форума Папа на форуме За самый интересный вопрос в интервью
    • Наградки
Мы тут в Валеркой открыли для себя Алиэкспресс )), и теперь заказываем всякие прикольные штуки, из которых собрали вот такого гусеничного робота. Управляется по bluetooth с планшета или смартфона. Также можно управлять пультом от телевизора или голосом. Можно установить смартфон и наблюдать и управлять удаленно через компьютер или планшет. Камера (смартфон) может поворачиваться и смотреть по сторонам.





Для тех, кто захочет повторить.

Бюджет проекта:

- Гусеничное шасси + редуктор Tamiya https://market.yandex.ru/product--tamiya-educational-construction-70108-gusenichnoe-shassi/11034842 (~700р.)
- кусок фанеры для базы (0р.)
- детский металлический конструктор https://www.votonia.ru/products/konstruktor-desyatoe-korolevstvo-metallicheskiy-samokat-12-det/ (~300р.)
- плата Arduino UNO (235р.) Мозг дрона.
- плата расширения Motor Shield (100р.) Для подключения двигателей.
- аккумулятрный блок на 4 аккумулятора АА (40р.)
- шаговый двигатель (100р.) Для поворота камеры.
- провода и пара светодиодов для фар можно добыть из какой-нибудь старой техники (0р.)

Итого 1475р.

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

#include <AFMotor.h>
#include <IRremote.h>
#include <SoftwareSerial.h>

AF_DCMotor motor1(1); 
AF_DCMotor motor2(2);
AF_Stepper motor3(2048, 2);

IRrecv irrecv(2);
decode_results results;

SoftwareSerial BTSerial(A0, A1);
char vcmd;
String voice;

void setup() {
  BTSerial.begin(9600);
  pinMode(19, OUTPUT);
  motor1.setSpeed(200);
  motor2.setSpeed(200);
  motor3.setSpeed(200);
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop() {



while (BTSerial.available()){

delay(10);
char c = BTSerial.read();

// Вперед
if (c == 'F') {
    motor1.run(FORWARD);
    motor2.run(FORWARD);
    Serial.println(c);break;       
}
// Назад
if (c == 'B')
{
      motor1.run(BACKWARD);
      motor2.run(BACKWARD);
      Serial.println(c);break;     
}
// Влево
if (c == 'L')
{
    motor1.run(BACKWARD);
    motor2.run(FORWARD);
    Serial.println(c);break; 
}
// Вправо
if (c == 'R')
{
      motor1.run(FORWARD);
      motor2.run(BACKWARD);
      Serial.println(c);break; 
}
// Прямо и влево
if (c == 'G')
{
  /*
  motor3.step(1024, BACKWARD, INTERLEAVE);
  motor3.release();
  delay(1000);
  Serial.println(c);break;
  */ 
}
// Прямо и вправо
if (c == 'I')
{ /*
 motor3.step(1024, FORWARD, INTERLEAVE); 
 motor3.release();
 delay(1000);
 Serial.println(c);break;
 */ 
}
// Назад и влево
if (c == 'H')
{
  motor3.step(1, BACKWARD, SINGLE);
  Serial.println(c);break;
}
// Назад и вправо
if (c == 'J')
{
 motor3.step(1, FORWARD, SINGLE); 
 Serial.println(c);break;
}
// Стоп
if (c == 'S')
{
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.release();
      Serial.println(c);break; 
}

if (c == 'X')
{
digitalWrite(19, HIGH);
Serial.println(c);break; 
}

if (c == 'x')
{
digitalWrite(19, LOW);
Serial.println(c);break; 
}

if (c == '#') {break;}
voice += c;
}
if (voice.length() > 0) {
Serial.println(voice);

if(voice == "*вперед")
{
    motor1.run(FORWARD);
    motor2.run(FORWARD);
    delay(5000);
  }
else if(voice== "*остановись")
{
      motor1.run(RELEASE);
      motor2.run(RELEASE);
}
else if(voice == "*налево")
{
    motor1.run(BACKWARD);
    motor2.run(FORWARD);
    delay(1000);
  }
else if(voice == "*направо") {
    motor2.run(BACKWARD);
    motor1.run(FORWARD);
    delay(1000);

  }
else if(voice == "*Включи свет") {digitalWrite(19, HIGH); }
else if(voice == "*Выключи свет") {digitalWrite(19, LOW); }
else if(voice == "*назад")
{
      motor1.run(BACKWARD);
      motor2.run(BACKWARD);   
  }

else if(voice == "*посмотри направо")
{
  motor3.step(1024, FORWARD, INTERLEAVE);
  }
else if(voice == "*посмотри налево")
{
  motor3.step(1024, BACKWARD, INTERLEAVE);
  }
//-----------------------------------------------------------------------//
voice="";}
 //Reset the variable after initiating





/*
// Если есть данные
if (BTSerial.available())
{
// Читаем команды и заносим их в переменную. char преобразует код символа команды в символ
vcmd = (char)BTSerial.read();

// Отправляем команду в порт, чтобы можно было их проверить в «Мониторе порта»
Serial.println(vcmd);

// Вперед
if (vcmd == 'F') {
    motor1.run(FORWARD);
    motor2.run(FORWARD);         
}
// Назад
if (vcmd == 'B')
{
      motor1.run(BACKWARD);
      motor2.run(BACKWARD);   
}
// Влево
if (vcmd == 'L')
{
    motor1.run(BACKWARD);
    motor2.run(FORWARD);
}
// Вправо
if (vcmd == 'R')
{
      motor1.run(FORWARD);
      motor2.run(BACKWARD);
}
// Прямо и влево
if (vcmd == 'G')
{

}
// Прямо и вправо
if (vcmd == 'I')
{
 
}
// Назад и влево
if (vcmd == 'H')
{
 
}
// Назад и вправо
if (vcmd == 'J')
{
 
}
// Стоп
if (vcmd == 'S')
{
      motor1.run(RELEASE);
      motor2.run(RELEASE);
}

if (vcmd == 'X')
{
digitalWrite(19, HIGH);
}

if (vcmd == 'x')
{
digitalWrite(19, LOW);
}



}

*/
 
/*
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);

//включить свет
if (results.value == 0xFFA857) {
  digitalWrite(19, HIGH);   
}

//выключить свет
if (results.value == 0xFFE01F) {
  digitalWrite(19, LOW);
}

//повернуть голову направо
if (results.value == 0xFF30CF) {
  motor3.step(1024, BACKWARD, INTERLEAVE); 
}

//повернуть голову налево
if (results.value == 0xFF7A85) {
  motor3.step(1024, FORWARD, INTERLEAVE);
}

//вперед
if (results.value == 0xFF18E7) {
    motor1.run(FORWARD);
    motor2.run(FORWARD);       
}

//назад
if (results.value == 0xFF4AB5) {
      motor1.run(BACKWARD);
      motor2.run(BACKWARD);   
}

//стоп
if (results.value == 0xFF38C7) {
      motor1.run(RELEASE);
      motor2.run(RELEASE);     
}

//налево
if (results.value == 0xFF10EF) {
    motor1.run(BACKWARD);
    motor2.run(FORWARD);
    delay(500);
    motor1.run(RELEASE);
    motor2.run(RELEASE); 
}

//направо
if (results.value == 0xFF5AA5) {
      motor1.run(FORWARD);
      motor2.run(BACKWARD);
      delay(500);
      motor1.run(RELEASE);
      motor2.run(RELEASE); 
}

irrecv.resume(); // Receive the next value
}
delay(100);


*/



}
« Последнее редактирование: Июня 10, 2017, 09:07:39 от pecosa »

Оффлайн РОЗОВАЯ

  • Участник
  • **
  • Сообщений: 10
  • Репутация: 0
    • Наградки
Автономный дрон для путешествия под диван
« Ответ #1 : Июня 22, 2018, 23:57:13 »
Какие вы молодцы и полезное дело и развитие ребёнка.

 

Совместные Покупки для SMF 2.0 beta 7 © 2016