Project: Remoteli – Finished

It’s been a long project. I think this is due to a combination of factors – a large number of manufactured parts, fiddly soldering and software troubles. Certainly at times I have struggled to find time to work on it, worsened by spending the year studying in America rather than the UK. Getting back into the project after waiting two weeks for a board to arrive was a challenge I faced more than once.

Nonetheless, Remoteli is now complete! (At just 39x18x4mm ignoring nuts and bolts)

Continue reading “Project: Remoteli – Finished”

Advertisements

Project: Remoteli – IR Receiver

Today I wanted to test out the infrared receiver. This is the datasheet. It’s got an internal 38kHz frequency filter so that it specifically picks up signals from a tv remote.

I decided to test it before mounting it to the board by soldering wires to it and measuring the signals. But it’s only 3.95×3.95mm large! After a lot of messing around with a soldering iron, I eventually had this.

The small shiny bit of plastic is where the light enters the chip

The small shiny bit of plastic is where the light enters the chip

I connected up a 3.3V power supply and put my oscilloscope on the output. The output looked identical to the signals from the IR receiver in my Infra-red Repeater Mini-project, so it looks like it’ll be just fine for this project.

Project: Remoteli – Design

This remote needs to be small, and the components need to be even smaller. This means I’ll be using only 0603 passive components. The microcontroller I will be using is an Attiny1634.

I thought about a few uCs before I chose this one, but I settled on this for a number of reasons:

  • It comes in a tiny 4x4mm QFN package
  • It has 18 I/O lines which is enough for ~12 buttons, an infra-red LED and an infra-red receiver
  • It has 16K flash which means I have a lot of memory in which to store learned infra-red codes

In order to learn new codes the remote needs an infra-red receiver so it can copy codes from existing (larger) tv remotes. This was a harder design choice, but in the end I settled on this a TSOP572. This is one of the few infra-red receivers I could find that had a low enough profile (<1.6mm) to fit between the two circuitboards.

New Project: Remoteli – The Worlds Smallest TV Remote

So this isn’t really a new project. I’ve actually been working on it for a couple of months on and off. In fact, I already did a post related to it. But I wasn’t really sure if it was going anywhere or whether to post it. Now it’s gotten to the point where I have ordered circuit boards online and begun soldering so I think it’s a legitimate project.

The reason this has taken me so long is that I have recently moved to the US to do an exchange year at MIT. That takes some getting used to, so finding the time to work on hardware projects has been a bit tricky, but now I think I’m good to get back into the usual rhythm of building stuff.

I’ll post more detail on the project soon, but for now, I have a new soldering iron! A Hakko FX-888D.

hakkofx888d

Because I’m currently in the US, this model actually runs off of 110V as opposed to the 240V we have in the UK. Therefore I’ll have to modify it in order to use it when I return home. However, even with the cost of a new transformer, it will still come out significantly cheaper than buying it in the UK!

Mini Project: Infra-red Repeater

As part of a larger project I’m thinking about, I wanted to see how easy it would be to make a TV remote control repeater. What it needs to do is listen for a TV remote control command, learn the command and then repeatedly send out that command.

Only 3 external components required. (I used four).

Only 3 external components required. (I used four).

For the processor I am using an Arduino Mega 2560 rip-off with the Arduino bootloader removed so that it is effectively just a development board for an Atmega2560. This has far more pins than I need, but it is very suitable for development. I am programming it using Atmel Studio 6.2 in C via an AVRISP MKII.

On the input I am using a TSOP31238 Infra-red receiver module. There are thousands of variations of this type of component, but this one has three pins:

GND Connect to ground
VCC 2.5V-5.5V
OUT Outputs low when there is a 38kHz IR signal incident on the receiver, otherwise outputs high

Therefore, it is easy to detect when an IR pulse is sent from a TV remote by listening to the output pin and waiting for it’s voltage to drop.

On the output, I am using an IR LED connected directly to the output of the Atmega, in series with a 156Ω resistor (actually a 100Ω + a 56Ω). This limits the current to about 20mA.

The code is relatively simple in concept. When the processor detects the first falling edge on the input pin, it starts a timer. Each time the input pin changes state, it stores the value of the timer in an array and resets the timer. If the timer overflows, this is taken to mean the command is over. This leaves us with an array of integers indicating how long the signal must be low or high.

The input from the IR Receiver module. The signal drops low when there is a 38kHz signal incident.

The input from the IR Receiver module. The signal drops low when there is a 38kHz signal incident. (Timebase in milliseconds).

The processor then uses the same timer to activate the output pin with the same timing as the input signal by reading back the array of integers.

There is a slight complication in that the output signal has to modulate a 38kHz square wave. This is achieved by using another timer to generate a 38kHz signal, which is then outputted to the LED only if the other timer indicates that the output should be high.

The output from the processor. The red blocks are actually 38kHz pulses.

The output from the processor. The red blocks are actually 38kHz pulses.

It then sends the signal once a second.

This works very well and it can easily copy the signals from my TV remote and repeat them to the TV. The only issue at the moment is that this method of storing the pulses takes up a relatively large amount of space – approximately 300 bytes for one command.