Luigi Morelli
Published © GPL3+

A remote-controlled steamboat with Arduino

Let's design a scale model of a steamboat, one of those that plied the Mississippi in 1800, entirely functional and managed through Arduino.

IntermediateFull instructions provided12 hours300
A remote-controlled steamboat with Arduino

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
IR receiver (generic)
×1
IR transmitter (generic)
×1
Mega-B Development Kit
Breadware Inc Mega-B Development Kit
×1
Motor DC 3-6V
×2
USB-A to B Cable
USB-A to B Cable
×1
rgb led
×1
active buzze
×1
SparkFun Breadboard Power Supply 5V/3.3V
SparkFun Breadboard Power Supply 5V/3.3V
×1
Resistor 220 ohm
Resistor 220 ohm
×2
H-Bridge L293D
×1
Dupont connector
×1
9V battery (generic)
9V battery (generic)
×2
9V Battery Clip
9V Battery Clip
×2
polystyrene, wire, fabric, ice cream tub, cardboard, metal rod
×1

Software apps and online services

Arduino IDE
Arduino IDE
Tinkercad
Autodesk Tinkercad

Story

Read more

Schematics

Electrical scheme of the project

Code

Arduino radio-controlled steambot

C/C++
Let's design a wheeled boat, one of those that plied the Mississippi in 1800, entirely functional and managed through Arduino.
/*
All’ uso di questo codice bisogna dare i crediti a ITS NUOVE TECNOLOGIE DELLA VITA agli studenti del Informatica Biomedicale 4.0 in particolare Silvia Magrì, Pietro Manenti e Sara Defilippis.
*/

#include "IRremote.h"

//PIN MOTORE 1
#define ENABLE 5 //ENABLE 1
#define DIRA 3 // IN1
#define DIRB 4 //IN2

//PIN MOTORE 2
#define U 2 // ENABLE 2
#define A 6 // IN3
#define H 7 //IN4

// PIN RGB LED
#define BLUE 9
#define RED 10
int blueValue;
int redValue;
int luci = LOW;

// PIN RICEVITORE - TELECOMANDO
int receiver = 8;
IRrecv irrecv(receiver);
decode_results results;

// PIN BUZZER ATTIVO
int buzzer = 12; 
int suono = LOW;

void translateIR()
{
  switch(results.value)
  {
  case 0xFFA25D: 
  {
    Serial.print("POWER = "); 
    Serial.println(results.value, HEX);
    break;
  }
  /* case 0xFFE21D: Serial.println("FUNC/STOP"); break;
  case 0xFF629D: Serial.println("VOL+"); break;
  case 0xFF22DD: Serial.println("FAST BACK");    break;
  case 0xFF02FD: Serial.println("PAUSE");    break;
  case 0xFFC23D: Serial.println("FAST FORWARD");   break;
  case 0xFFE01F: Serial.println("DOWN");    break;
  case 0xFFA857: Serial.println("VOL-");    break;
  case 0xFF906F: Serial.println("UP");    break;
  case 0xFF9867: Serial.println("EQ");    break;
  case 0xFFB04F: Serial.println("ST/REPT");    break; */
case 0xFF6897:                      //ACCENDI E SPEGNI RGB LED
{
      Serial.println("0");
      luci = !luci;
      break;      
}
 
case 0xFF30CF:                     //ACCENDI E SPEGNI BUZZER
{
    Serial.println("1");
    suono = !suono;
    break;
}

case 0xFF18E7:                   //ACCENDI MOTORE PER ANDARE AVANTI 
{
  Serial.println("2");  
  digitalWrite(DIRA, LOW);
  digitalWrite(DIRB, HIGH);
  digitalWrite(ENABLE, 255);

  digitalWrite(U, 255);
  digitalWrite(A, HIGH);
  digitalWrite(H, LOW); 
  break; 
}
 
 //case 0xFF7A85: Serial.println("3");    break;
  
  case 0xFF10EF:                 //MOTORI CHE GIRANO A DESTRA
  {
    Serial.println("4");       //motore sinistro 
    digitalWrite(DIRA, LOW); 
    digitalWrite(DIRB, HIGH);
    digitalWrite(ENABLE, 255);

    digitalWrite(U, 255);     //motore destro
    digitalWrite(A, LOW);
    digitalWrite(H, HIGH); 
    break;
  }

  case 0xFF38C7:                //SPEGNI MOTORI 
  {
    Serial.println("5");    
    digitalWrite(DIRA, LOW);
    digitalWrite(DIRB, LOW);

    digitalWrite(U, LOW);
    digitalWrite(A, LOW);
    break; 
  }
  case 0xFF5AA5:         //MOTORI CHE GIRANO A SINISTRA
  {
    Serial.println("6"); 
    digitalWrite(DIRA, HIGH);    //motore sinistro 
    digitalWrite(DIRB, LOW);
    digitalWrite(ENABLE, 255);

    digitalWrite(U, 255);        //motore destro 
    digitalWrite(A, HIGH);
    digitalWrite(H, LOW); 
    break;
  }
 
 //case 0xFF42BD: Serial.println("7");    break;

  case 0xFF4AB5:                    //MOTORI VANNO INDIETRO
  {
    Serial.println("8"); 
    digitalWrite(DIRA, HIGH);
    digitalWrite(DIRB, LOW);
    digitalWrite(ENABLE, 255);

    digitalWrite(U, 255);
    digitalWrite(A, LOW);
    digitalWrite(H, HIGH);
    break;
  }

  //case 0xFF52AD: Serial.println("9");    break;
 // case 0xFFFFFFFF: Serial.println(" REPEAT"); break;   

  default: 
    Serial.println(results.value, HEX);
  }
  delay(100); 
}
 
void setup(){
  pinMode(ENABLE, OUTPUT);  //MOTORE 1
  pinMode(DIRA, OUTPUT);
  pinMode(DIRB, OUTPUT);

  pinMode(H, OUTPUT);     //MOTORE 2
  pinMode(U, OUTPUT);
  pinMode(A, OUTPUT);

  Serial.println("IR Receiver Button Decode"); //RICEVITORE 
  irrecv.enableIRIn();

  pinMode(RED, OUTPUT);   //RGB LED
  pinMode(BLUE, OUTPUT);

  pinMode(buzzer, OUTPUT); //BUZZER
  Serial.begin(9600);
}

void loop() 
{
  if (irrecv.decode(&results)) //se clicchi il tasto del telecomando il ricevitore fa l'azione richiesta
  {
    translateIR(); 
    irrecv.resume(); 
  }  

  if(luci == HIGH)  //quando luci=1 si accendono e lampeggiano
  {
     digitalWrite(RED, HIGH);
     digitalWrite(BLUE, LOW);
     delay(500);
     digitalWrite(RED, LOW);
     digitalWrite(BLUE, HIGH);
     delay(500); 
  }
  else if(luci == LOW)   //quando luci = 0 si spengono 
  {
     digitalWrite(RED, LOW);
     digitalWrite(BLUE, LOW);
     delay(500);
  }

  if(suono == HIGH)       // quando bazzer = 1 acceso parte la frequanza della sirena e il suo suono
  {
    for (int i = 0; i < 350; i++) {
       digitalWrite(buzzer, HIGH);
       delay(1);
       digitalWrite(buzzer, LOW);
       delay(1);
    }

    delay(50);

    for(int i = 0; i < 150; i++){
       digitalWrite(buzzer, HIGH);
       delay(1);
       digitalWrite(buzzer, LOW);
       delay(1);
    }
  }  
  else if(suono == LOW)    //quando bazzer = 0 si spegne
  {
    digitalWrite(buzzer, LOW);
  }
}

Credits

Luigi Morelli

Luigi Morelli

12 projects • 5 followers
I work to contribute to the change of the key sectors of computer science and to offer reasoned syntheses and consultancy to ICT companies.

Comments