So I got my new LEDs in, and lo and behold, it works!
To make sure that they were blinking, I wrote a quick Python script that toggled multiple pins (right now its hardcoded to just 1 pin, but I could have changed variables to toggle others). This was very nice, as I could have it turn on every 15 seconds or so and watch it on my phone camera.
import RPi.GPIO as GPIO
import time
gpio_start = 18
gpio_end = 19
GPIO.setmode(GPIO.BCM)
for x in range (gpio_start, gpio_end):
GPIO.setup(x, GPIO.OUT)
while True:
for y in range (gpio_start, gpio_end):
GPIO.output(y, True)
print 'on ', y
time.sleep(15)
for z in range (gpio_start, gpio_end):
GPIO.output(z, False)
print 'off ',z
time.sleep(15)
Toggling pins through Python was nice and easy.
I can see the LEDs blink, but now I’m running into another problem. My remote only has a range of 2 feet. Not very useful, considering the two things I want to control are about 12 feet apart.
I figured it had something to do with my resistors, and that they were too high, but I was scared of burning things out at the same time, so I didn’t just want to play around with any old value.
So, I pulled up a circuit simulator at falstad.com, and drew up a schematic. I was able to see that I was only pulling 8 mA of current through the resistor the way I had it set up. What could I do differently?
First, I needed to look at the datasheet and see just how much amperage my LED could take. I bought my LEDs from Adafruit (https://www.adafruit.com/product/387) and right there on the page, I saw.
100 mA continuous, 1A when pulsing. So if I’m only going down to 8mA, I have room to grow. I was okay going with the pulse, but I had to make sure I didn’t run my Python script if I was pulling more than 100mA.
Here is what I ended up settling on:
This drew 120 mA through the LED. And, lo and behold, I now have a range of about 10 feet on the remote (maybe further, but my USB power cable was only so long to the pi).
So, now I could actually send commands to the projector to turn it on and off. I was doing this through irsend (part of the lirc program). I used a file generated from irrecord (also from lirc), and I ended up with the following.
begin remote
name projector.conf
bits 16
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 9023 4400
one 627 1597
zero 627 485
ptrail 630
repeat 9027 2160
pre_data_bits 16
pre_data 0x4CB3
gap 107281
toggle_bit_mask 0x0
begin codes
KEY_POWER 0x40BF
KEY_POWER2 0x748B
end codes
end remote
I tried renaming the piece to projector, but apparently lirc requires you to put a .conf in there, so i tended up as projector.conf. When I executed irsend, you have to specify projector.conf (and this file has to be at /etc/lirc/lircd.conf. I haven’t found out where error messages for lirc just yet, so there is a lot of guesswork associated with this.
Next, I started working on my sound system. Unfortunately, I could not get this to work whatsoever. I had to put a -f on the irrecord to grab my remote input, but I could not replay it for the life of me. I had not found any other templates in lirc’s remote database that worked either. So I’m stumped on why that’s not working.
I think I’ll start playing with Python and LIRC next though, to feel like I’m making some good progress before I try and figure out why the sound system won’t respond to my LED.