Arun
Published © GPL3+

Use Your Phone as a VOICE remote

Make a simple device that actually lets you speak to your TV.

IntermediateFull instructions provided3,154
Use Your Phone as a VOICE remote

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
Bluetooth Low Energy (BLE) Module (Generic)
×1
IR transmitter (generic)
×1
IR receiver (generic)
×1

Story

Read more

Schematics

Bluetooth module

ir transmitter

ir decoder

Code

code 1

Arduino
use in the first for decoding ir .
#define IRpin_PIN      PIND
#define IRpin          2
 
// the maximum pulse we'll listen for - 65 milliseconds is a long time
#define MAXPULSE 65000
 
// what our timing resolution should be, larger is better
// as its more 'precise' - but too large and you wont get
// accurate timing
#define RESOLUTION 20 
 
// we will store up to 100 pulse pairs (this is -a lot-)
uint16_t pulses[100][2];  // pair is high and low pulse 
uint8_t currentpulse = 0; // index for pulses we're storing
 
void setup(void) {
  Serial.begin(9600);
  Serial.println("Ready to decode IR!");
}
 
void loop(void) {
  uint16_t highpulse, lowpulse;  // temporary storage timing
  highpulse = lowpulse = 0; // start out with no pulse length
 
 
//  while (digitalRead(IRpin)) { // this is too slow!
    while (IRpin_PIN & (1 << IRpin)) {
     // pin is still HIGH
 
     // count off another few microseconds
     highpulse++;
     delayMicroseconds(RESOLUTION);
 
     // If the pulse is too long, we 'timed out' - either nothing
     // was received or the code is finished, so print what
     // we've grabbed so far, and then reset
     if ((highpulse >= MAXPULSE) && (currentpulse != 0)) {
       printpulses();
       currentpulse=0;
       return;
     }
  }
  // we didn't time out so lets stash the reading
  pulses[currentpulse][0] = highpulse;
 
  // same as above
  while (! (IRpin_PIN & _BV(IRpin))) {
     // pin is still LOW
     lowpulse++;
     delayMicroseconds(RESOLUTION);
     if ((lowpulse >= MAXPULSE)  && (currentpulse != 0)) {
       printpulses();
       currentpulse=0;
       return;
     }
  }
  pulses[currentpulse][1] = lowpulse;
 
  // we read one high-low pulse successfully, continue!
  currentpulse++;
}
 
void printpulses(void) {
  Serial.println("\n\r\n\rReceived: \n\rOFF \tON");
  for (uint8_t i = 0; i < currentpulse; i++) {
    Serial.print("delayMicroseconds(");
    Serial.print(pulses[i][0] * RESOLUTION, DEC);
    Serial.print("); pulseIR(");
    Serial.print(pulses[i][1] * RESOLUTION, DEC);
    Serial.println(");");
  }
}

code 2

Arduino
use secondly for transmitting ir.
int IRledPin =  3;
void setup()
{
  pinMode(IRledPin, OUTPUT);
  Serial.begin(9600);
}
void loop()
{
int  a;
  if(Serial.available()>0)
  {
    a=Serial.read();
  switch(a)
  {
    case 1: power();    //if it receives the number "1" from the app then the case one will be executed
             
            break;
    case 2:tvpower();
             
            break;
    case 3:chplus();
            
           break;
    case 4:chminus();
           break;
    case 5:volplus();
           break;
    case 6:volminus();
           break;
                             //all the data provided corresponds to my tv remote thus you have to modify to your needs
    case 10:  zero();        //if it receives the number "10" from the app then the case 10 will be executed thus the respective channel is switched
              delay(700);
              nine();
              delay(700);
              one();
              delay(700);
              zero();
              delay(700);
              break;          //channel number 910 will be switched
     
  }  
}
void pulseIR(long microsecs)
{
  cli();
  while (microsecs > 0)
  {
    digitalWrite(IRledPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(IRledPin, LOW);
    delayMicroseconds(10);
    microsecs -= 26;
  }
  sei();
}

void power()   /*the function stores the data for the power button taken from the step-1*/
{
  //the data is for my remote so update the data with yours
  delayMicroseconds(57608 );
  pulseIR( 2680 );
  delayMicroseconds(980 );
  pulseIR( 400 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(960 );
  pulseIR( 400 );
  delayMicroseconds(980 );
  pulseIR( 860 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(520 );
  pulseIR( 860 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(960 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(61644 );
  pulseIR( 2700 );
  delayMicroseconds(980 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(980 );
  pulseIR( 400 );
  delayMicroseconds(960 );
  pulseIR( 880 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 420 );
  delayMicroseconds(480 );
  pulseIR( 420 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 400 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(500 );
  pulseIR( 860 );
  delayMicroseconds(520 );
  pulseIR( 400 );
  delayMicroseconds(960 );
  pulseIR( 420 );
  delayMicroseconds(500 );
  pulseIR( 400 );



}
void chplus()
{
//put the data of your channel plus button in this section
}

void ch minus()
{

}
void one()
{
  
}
void two()
{
  
}
void three()
{
}
//add for all the 10 numbers.

//similarly you can add any no of functions for each buttons

Credits

Arun

Arun

1 project • 12 followers

Comments