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 hours429
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
13 projects • 6 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.
Contact

Comments

Please log in or sign up to comment.