Делаем радиоуправляемую модель лодки на Ардуино Нано

Делаем на основе Arduino Nano модель катера или лодки из пенополистирола на радиоуправлении через Bluetooth.

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

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

 

Деталь Кол-во
1 H-мост SparkFun Dual H-Bridge L298 1
2 Модуль Bluetooth Low Energy (BLE) HC-06 1
3 Сервопривод 1
4 Arduino Nano R3 1

Также нам понадобятся следующие приложения:

  • Arduino IDE
  • Приложение Android Arduino Bluetooth RC Car

Шаг 2. Создаем корпус катера или лодки

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

Думаем, что проблем с этим не возникнет, да и все любят разные внешние виды катеров и лодок - кто-то любит парусно-моторные, кто-то просто моторные.

Шаг 3. Двигатель, штурвал, пропеллер

Следующим шагом мы сделали крепление для двигателя. Также мы сделали рулевое колесо и пропеллер. В конечном итоге их заменили купленные.

Как и написали выше - пропеллер и штурвал заменили купленные элементы.

В итоге мы получили такой результат:

Вал гребного винта с валом двигателя соединен с помощью муфты.

Шаг 4. Принципиальная схема

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

Шаг 5. Закрепляем электронику

После создания корпуса и крепления - переходим к закреплению всей электроники на корпусе внутри лодки.

Шаг 6. Скетч для проекта

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

#include <Servo.h> 
Servo myservo;

int val;
int LED = 13;
int IN4 = 4; // Input3    5 
int IN3 = 5;
int IN2 = 7;
int IN1 = 6;
int k = 0;
void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
 pinMode (IN4, OUTPUT);
  pinMode (IN3, OUTPUT);
  pinMode (IN2, OUTPUT);
  pinMode (IN1, OUTPUT);
   myservo.attach(10);
}

void loop()
{
if (Serial.available())
  {
     val = Serial.read();
     
        if (k == 0)
        {
           myservo.write(90);  // (1    )
           k++;
        }
           //   "F"   ( w)
   if (val == 'X')
     {
        myservo.write(90);
       }
       if (val == 'x')
     {
        myservo.write(90);
       }
    if (val == 'F')
     {
        digitalWrite (IN4, HIGH);
         digitalWrite (IN3, LOW); 
         digitalWrite (IN2, HIGH);
         digitalWrite (IN1, LOW); 
       }
         //   "S"  
     if ( val == 'S')
       {
       digitalWrite (IN3, LOW);
         digitalWrite (IN4, LOW); 
          digitalWrite (IN2, LOW);
         digitalWrite (IN1, LOW); 
        }
         //   "B"  
         if ( val == 'B')
       {
         digitalWrite (IN4, LOW); 
         digitalWrite (IN3, HIGH);
          digitalWrite (IN2, LOW); 
         digitalWrite (IN1, HIGH);
        }
        //  
        if ( val == 'L')
       {
         myservo.write(50);
       //  myservo.write(90);
        }
        //  
        if ( val == 'R')
       {
         myservo.write(130);
       //  myservo.write(90); 
        }

        //  45 +  
        
           //   "G"    
    if (val == 'G')
          {
        digitalWrite (IN4, HIGH);
         digitalWrite (IN3, LOW);
         digitalWrite (IN2, HIGH);
         digitalWrite (IN1, LOW);
         myservo.write(50); 
           delay(1000);  
         myservo.write(90);
       }
    
         //   "I"   
         if ( val == 'I')
       {
         digitalWrite (IN4, HIGH); 
         digitalWrite (IN3,LOW);
           digitalWrite (IN2, HIGH);
         digitalWrite (IN1, LOW);
         myservo.write(130);
           delay(1000);  
         myservo.write(90);
        }
       //   ""   
         if ( val == 'H')
       {
         digitalWrite (IN4, LOW); 
         digitalWrite (IN3, HIGH);
         digitalWrite (IN1, HIGH);
         digitalWrite (IN2, LOW);
         myservo.write(130);
           delay(1000);  
         myservo.write(90);
        }
         //   "J"   
         if ( val == 'J')
       {
         digitalWrite (IN4, LOW); 
         digitalWrite (IN3, HIGH);
          digitalWrite (IN1, HIGH);
         digitalWrite (IN2, LOW);
          myservo.write(50); 
            delay(1000);  
          myservo.write(90);
        }
    }
}

Итоговый результат вы можете увидеть на первой фотографии к данному уроку.

Надеемся, что у вас не возникло проблем при реализации проекта.

Ардуино+