Ominus Project is both a place to experiment with MCUs and an attempt to create a fully integrated prototype of a wirelessly controlled multi-colour lighting unit
This project is split into two parts. A wireless transmitter which sends the desired colour sequence over the air to multiple wireless recievers. The recievers then modulate a RGB LED to the desired colour combination and brightness
The Receiver is a single PIC18F1230 driving a 3W three colour LED over 3 separate PWM channels. This will ensure smooth and accurate control. The colour values will be recieved from UART by a 434MHz Radio module or just a wire in prototyping situations. The UART frame will consist of 8 bit device select, 8 bit device mask, and 3x 8 bit colour values for Red, Green, and Blue channels.
The LED driver will be made up of 3 low power MOSFETs, however, as the PICs output pins can source ~25mA the prototype can forgo the MOSFET stage.
The implementation of a transmitter unit is undecided as of now, as its implementation would differ based on input requirenments. There are three possible configurations:
- Using Minimus 32k AVR with USB connection to output the required UART signal
- Use PIC18F2550 USB capability to expose a native interface
- Use GPIO of a Raspberry Pi to provide the UART signal, benefiting from an Ethernet connectio
I’ve discovered a bug working with PIC18F1230 in the C18 compiler. It doesn’t let me compile code using all 3 PWM modules. I’ve been stuck on this for weeks until I got a hold of an Arduino Micro which propelled this project forward.
UART is really bad at RF, so bad that when i tried sending it directly through the TX433->RX433 pair I just got garbage out of the reciever. I’ve remembered that I built a wireless LCD display couple of months back with the same pair and it worked great. So I dug up the ‘Virtual Wire’ library which doesn’t use UART, Instead it bitbangs serial communication using a digital pin. It ensures that the data reaches the transmitter by first sending a premble, which syncronises the pair, then sending the data using DC balanced Manchester Encoding, and finally sends a checksum for the entire frame. The downside of this is that the transmission speed drops massivelly, but at least the data gets through.
I’m still having problems with 3 PWM channels causing interference to the reciever, but hopefully on a real board i will be able to shield it properly.
Next step? Get an ATMega328, program it, and use it to replace the Arduino Mirco so I can put the whole thing in a box.
Then build some software to send the right colour codes.