Muhammad_Munir
Published © GPL3+

Talking car

How to make Talking car

IntermediateFull instructions provided1,819
Talking car

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
Gear motor
×2
9V battery (generic)
9V battery (generic)
×1
Toggle Switch, Toggle
Toggle Switch, Toggle
×1
SD card module
×1
Speaker with built-in amplifier
×1
Motor Driver L298
×1
Jumper wires (generic)
×1
IR Receiver
×1

Hand tools and fabrication machines

Hot glue gun (generic)
Hot glue gun (generic)

Story

Read more

Schematics

sd_card_connection_QRZbranXIU.jpg

Code

Code

Arduino
#include <IRremote.h>
#define irPin 3

#include "SD.h"
#define SD_ChipSelectPin 4
#include "TMRpcm.h"
#include "SPI.h"
TMRpcm tmrpcm;

IRrecv irrecv(irPin);
decode_results results;

/* define L298N or L293D motor control pins */
int leftMotorForward = A3;    /* -> IN3   */
int rightMotorForward = A1;   /* -> IN1  */
int leftMotorBackward = A4;   /* -> IN4   */
int rightMotorBackward = A2;  /* -> IN2  */

/* define L298N or L293D enable pins */
int rightMotorENB = A0; /* -> Motor-A Enable */
int leftMotorENB = A5;  /* -> Motor-B Enable */

void setup()
{
  tmrpcm.speakerPin = 9;
Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) {
Serial.println("SD fail");
return;
}

tmrpcm.setVolume(5);
//tmrpcm.play("Voyage .wav");


    irrecv.enableIRIn();
  /* initialize motor control pins as output */
  pinMode(leftMotorForward, OUTPUT);
  pinMode(rightMotorForward, OUTPUT); 
  pinMode(leftMotorBackward, OUTPUT);  
  pinMode(rightMotorBackward, OUTPUT);

  /* initialize motor enable pins as output */
  pinMode(leftMotorENB, OUTPUT); 
  pinMode(rightMotorENB, OUTPUT);

 
}

void loop()
{
  if (irrecv.decode(&results)) 
   {
    Serial.print(results.value, HEX);
    Serial.print(" - ");
    Serial.println(results.value);
      switch (results.value) 
      {
            case 1077989423:
            MotorForward();
            break;
            case 1077964943:
            MotorBackward();
            break;
            case 1077938423:
            TurnLeft();
            break;
            case 1077971063:
           TurnRight();
            break;
            default:
            MotorStop();
           }
 
   irrecv.resume();
   }
    
} 

/********************************************* FORWARD *****************************************************/
void MotorForward(void)   
{
  tmrpcm.play("forward.wav");
  digitalWrite(leftMotorENB,HIGH);
  digitalWrite(rightMotorENB,HIGH);
  digitalWrite(leftMotorForward,HIGH);
  digitalWrite(rightMotorForward,HIGH);
  digitalWrite(leftMotorBackward,LOW);
  digitalWrite(rightMotorBackward,LOW);
}

/********************************************* BACKWARD *****************************************************/
void MotorBackward(void)   
{
tmrpcm.play("backward.wav");
  digitalWrite(leftMotorENB,HIGH);
  digitalWrite(rightMotorENB,HIGH);
  digitalWrite(leftMotorBackward,HIGH);
  digitalWrite(rightMotorBackward,HIGH);
  digitalWrite(leftMotorForward,LOW);
  digitalWrite(rightMotorForward,LOW);
}

/********************************************* TURN LEFT *****************************************************/
void TurnLeft(void)   
{
  tmrpcm.play("left.wav");
  digitalWrite(leftMotorENB,HIGH);
  digitalWrite(rightMotorENB,HIGH); 
  digitalWrite(leftMotorForward,LOW);
  digitalWrite(rightMotorForward,HIGH);
  digitalWrite(rightMotorBackward,LOW);
  digitalWrite(leftMotorBackward,HIGH);  
}

/********************************************* TURN RIGHT *****************************************************/
void TurnRight(void)   
{
  tmrpcm.play("right.wav");
  digitalWrite(leftMotorENB,HIGH);
  digitalWrite(rightMotorENB,HIGH);
  digitalWrite(leftMotorForward,HIGH);
  digitalWrite(rightMotorForward,LOW);
  digitalWrite(rightMotorBackward,HIGH);
  digitalWrite(leftMotorBackward,LOW);
}

/********************************************* STOP *****************************************************/
void MotorStop(void)   
{
  digitalWrite(leftMotorENB,LOW);
  digitalWrite(rightMotorENB,LOW);
  digitalWrite(leftMotorForward,LOW);
  digitalWrite(leftMotorBackward,LOW);
  digitalWrite(rightMotorForward,LOW);
  digitalWrite(rightMotorBackward,LOW);
}

Credits

Muhammad_Munir
79 projects • 56 followers
I am Arduino programmer, also expertise in ESP32 and 8266 wifi modules.

Comments