11 May 2012
10 May 2012
First Production Batch Prototype 2 of Fireworks (V4)
Yay the joy. I have just etched the PCBs for the final production Boards.
Update: it turns out that this is still a prototype (the hardware is not yet production ready).
What is it? This board (once finished) will be able to launch fireworks trough electric fuses controlled by a Bluetooth device (I plan to write an Android app).
See the development history of this project.
Layout
23 Dec 2011
Fireworks, Revision 3
The 3rd one is always a good one ;)
Firmware (arduino C++ code), Layout as PDF.
Revision 3 of the fireworks board:
Bottom layer.
Top layer.
- Use small pads only where needed (in tight spots)
- Pull out all available ɥC pins
- plan mount holes
- put as much as possible onto the lower layer (easier to solder)
- 8705 is a very useful power regulator when used with 3-5 cell LIPOs
21 Dec 2011
Fireworks, the first prototype PCB
Yay, today I made the first prototype PCB. Already soldered the absolute minimum onto it for tesing.
Bottom layer.
The final layout will certainly differ from this a bit. I did not know how painful it is to solder headers which have connections on the front layer. Thanks to swiss machine pins it is possible without funny chemicals.
Also, the copper around the via and pin holes are much too small. They make drilling and sometimes proper soldering very hard. It's just looks ugly too.
Further more, a new design decision was to use RJ45 as connector for the expansion to the electric fuses (connectors at the bottom).
Back to the drawing board!
18 Dec 2011
Fireworks!
Not much time left until it is Silvester. The remote controlled fireworks launcher is in prototyping stage. I got the first PCB layout together.
The pcb files are created with an open source program called pcb (free as in free code and free of charge) which should compile on nearly all UNIX like operating systems (incuding, osx, cygwin or mingw for windows).
The pcb application is also able to generate gerber files which are included in the pcb files download.
Some alpha code (written in C) is available to be run on an Arduino Pro Min 5V.
This project builds on the knowledge gathered from 8 bit shift registers and Arduino in general.
Special thanks goes to Sämi for all his valuable input.
Circuit

Front side

Back side

13 Oct 2011
Finally, a three some (74HC595)!
As a follow up to the first tests with the 74HC594 and 74HC595 with Arduino I got some more 595 delivered, finally chaining them together. This example uses the 74HC595 chip.
Code:
First, you need to install (extract) the MM74HC595 library I wrote into your "
/** * Board: Pro Mini 5V * * Chained 74HC595 8 bit shift register demo. Knight Rider! * * $Id: test_74HC595.pde 319 2011-10-13 20:48:10Z wunderlins $ */ // how many shift registers are we using in serie? (must be >=1) #define NUM_SHIFT_REGISTERS 3 // include library (must be installed unter <sketches>/libraries/MM74HC595/) // http://spliffy.freeshell.net/hardware/MM74HC595.zip #include< MM74HC595.h>/** * Arduino pins: * * PIN_SER: is the arduino serial pin * PIN_SCK: is the arduino pin for the shift register * PIN_RCK: is the arduino pin for the output register */ int PIN_SER = 8; // pin 14 on the 75HC595 int PIN_SCK = 9; // pin 12 on the 75HC595 int PIN_RCK = 10; // pin 11 on the 75HC595 int i = 0; int direction = 1; // 1 = L2R, -1 R2L // shift register instance MM74HC595 registers(PIN_SER, PIN_SCK, PIN_RCK, NUM_SHIFT_REGISTERS); // module pins already initialzed void setup() {;} void loop(){ // reset all pins (set to LOW) registers.reset(); // set pin(s) to high registers.set(i, true); // activate outputs registers.update(); // check if we have to change direction if (i+1 == NUM_SHIFT_REGISTERS * 8) { direction = -1; } else if (i == 0) { direction = 1; } i += direction; delay(100); }
6 Oct 2011
Knight Rider with 74HC595 8 bit shift register
Please note, the next article «Finally a threesome» includes an arduino library for the 74HC595 (not for the 74HC594) and probably obsoletes this post.
/** * Board: Pro Mini 5V * * $Id: test_74HC595.pde 293 2011-10-06 17:30:05Z wunderlins $ */ int SER_Pin = 8; //pin 15 on the 75HC595 int RCLK_Pin = 9; //pin 12 on the 75HC595 int SRCLK_Pin = 10; //pin 10 on the 75HC595 //How many of the shift registers - change this #define number_of_74hc595s 1 #define numOfRegisterPins number_of_74hc595s * 8 boolean registers[numOfRegisterPins]; void setup(){ pinMode(SER_Pin, OUTPUT); pinMode(RCLK_Pin, OUTPUT); pinMode(SRCLK_Pin, OUTPUT); //reset all register pins clearRegisters(); writeRegisters(); } //set all register pins to LOW void clearRegisters() { for(int i = numOfRegisterPins - 1; i >= 0; i--){ registers[i] = LOW; } } //Set and display registers //Only call AFTER all values are set how you would like (slow otherwise) int direction = 1; // 1 = L2R, -1 R2L void writeRegisters(){ digitalWrite(RCLK_Pin, LOW); for(int i = numOfRegisterPins - 1; i >= 0; i--){ digitalWrite(SRCLK_Pin, LOW); int val = registers[i]; digitalWrite(SER_Pin, val); digitalWrite(SRCLK_Pin, HIGH); } digitalWrite(RCLK_Pin, HIGH); } //set an individual pin HIGH or LOW void setRegisterPin(int index, int value){ registers[index] = value; } int i = 0; void loop(){ clearRegisters(); setRegisterPin(i, HIGH); writeRegisters(); //MUST BE CALLED TO DISPLAY CHANGES //Only call once after the values are set how you need. if (i+1 == numOfRegisterPins) { direction = -1; } else if (i == 0) { direction = 1; } i += direction; delay(100); }
Code example is borrowed from here: http://bildr.org/2011/02/74hc595/











