- December 28th, 2022, 5:24 pm#4975850
This post may contain an affiliate link that helps support GBFans.com when you make a purchase at no additional cost to you.
************** MICROCONTROLLER REPLACEMENTS **************
The Haslab microcontrollers have been completely replaced with Arduino boards (Mega 2560 Rev 3 in the pack and Nano in the Wand).
Project page:
https://github.com/gpstar81/haslab-proton-pack
Upcoming Features:
-(Optional features) 2 extra LEDs for 2 more hat lights, wide angle led support in the wand barrel tip.
Current Features :
-Pack/Wand communication (pack and wand can play each others sounds).
-Ribbon cable alarm.
-Video game firing modes.
-Crossing the streams.
-900+ music track support.
-Music can be played while using other pack/wand functions (firing etc).
-Wand settings menu with music playback control, volume control for pack/wand, independent music volume control for pack/wand, independent sound effects volume control for pack/wand, loop music track, change track.
-Wand sub menu allowing you to toggle various settings: 1984/1989/2021 mode, cyclotron rotation direction, vibration, smoke, crossing the streams / video game modes.
-Vibration support in pack and wand with toggle switch to enable or disable.
-1984 / 1989 / 2021 mode with toggle switch to change between them.
-1984/1989 mode uses the middle led only for a accurate look.
-Cyclotron lights ramp up and ramp down when powering up the pack or shutting it down.
-Can run the pack without the cyclotron lid.
-Overheat mode (user customisable for any wand power mode )
-Continuous firing (user customisable for any wand power mode)
-Volume control from crank generator knob.
-Can used any speaker setup (amps, aux ports, etc)
-Wand only fires when the barrel is extended.
-Wand bargraph animation updates.
-Wand tail firing sound when you stop firing. (3 variations based on how long you have been firing)
-Wand activate switch turns on the pack.
-Wand has 1984/1989 and 2021 modes.
-(optional) Cyclotron light rotation control with toggle switch (clockwise / anti-clockwise).
-(optional) Eight LEDs support for the inner cyclotron switch plate. They animate and ramp up or down depending on the pack status.
-(optional) NeoPixel Ring support for inner cyclotron. They change colour for the different video game firing modes. (35 pixel ring recommended)
-(optional) Three - 5V pin relays (they trigger during overheat and occasionally while continuous firing). Can be used for smoke, fans etc.
-(optional) N-Filter NeoPixel jewel LED support.
-(optional) Toggle switch to enable or disable the smoke relays.
-(optional) Support for a 40 pixel NeoPixel ring in the cyclotron lid to offer more LEDs and colour options for video game firing modes.
-(optional) 28 LED bargraph segment to replace the 5 LED Hasbro bargraph.
Demonstration video:
5 hour time lapse idling test
————————- BELOW HERE IS EVERYTHING RELATED TO EXPERIMENTING WITH THE EXISTING HASLAB ELECTRONICS ————————-
************** KEEP ALIVE MOD (PACK & WAND) **************
Now some information first about what Haslab did and how the pack functions in the standard configuration. There are 2 auto shut down timers to deal with. The pack which is 200 seconds and the wand at 30 seconds. The U7 pin on the pack microcontroller is feeding 4.33V and ground through the hose on the pack to the wand. When you turn the wand on the voltage levels from U7 pin drop and the pack microcontroller detects this. The pack will turn on. When the wand is turned off, the levels go back up over 4.3V and the pack knows the wand was turned off and now the pack does the shut down sequence and turns the lights and sound off and stays in a silent low power idle mode for several minutes. During this window, you can turn the wand back on and the pack fires back up. Now any time the wand does the 30 second timeout and turns itself off, the pack will do the same and sit in its low power idle mode. You can reset the wand's auto shutdown timer anytime a button is pressed on the wand. For the pack, the only way I found so far to reset the auto shutdown timer is when the wand's activate mode switch is turned on, and or off. Basically what is happening is the wand is drawing more power to power more lights and the vibration motor and the pack detects this and resets the pack timer. When the extra draw stops, the pack does the same thing and resets the 200 second timer. However a constant draw at any of those levels does not reset the timers. So the trick is to fluctuate the power draw up and down every X amount of seconds to trick the pack to reset the shut down timer. Then for the wand, you need to make it think a switch as been activated on/off every X amount of seconds. However the downside with the wand is every switch will make the wand play a sound effect. However, the fire mode selector switch will not play a sound effect while the activate mode on the wand is off, so this is the best one to target. However you do loose the ability to keep the wand alive while Activate mode is on.
Now the estimated voltage levels from the U7 pin feeding the wand that I found are:
4.33 (wand off)
4.30 (Above this seems to be around when the wand will shut off, and below this and the pack will turn itself on)
4.28 (wand on, no lights except slo-blo only.)
4.23-4.20 (wand on with lights, depending on how many bargraph leds are on)
4.17 (Going to this level or above after being below it will reset the pack shutoff timer)
4.16 (Going down to this level or lower after being above it will reset the pack shutoff timer)
4.13 (activate mode on and no lights)
4.09 (wand on, activate mode on with some lights)
So if you are designing or building your own keep alive mod, the sweet spot you want to fluctuate from is dropping down to 4.16 or lower and back up to 4.17 and higher every X amount of seconds. When the pack detects these thresholds being passed, it will reset the 200 second timer. There is another problem to contend with, the wand microcontroller will always have power fed to it from the pack. So if you are pigging backing off the VDD on the wand board for power, you will trigger the pack to stay on if whatever you wire in drops the voltage levels down to 4.3 and lower, even if you have the wand turned off. So this required me to redo the switches on the wand, where the switch to turn on the lights on the wand is removed and tucked away in the on position inside the wand, and the old power switch for the wand is moved up to the light switch position. Then I cut the power wire going to V4.5 pin into the wand board about halfway on the wire and then soldered some extra wire onto both cut ends and solder them onto a on/off switch which then mounts where the old wand power on switch used to go, all this is really doing is powering up the metro mini board I am using which draws it's power off the wand VDD pin, which in turn will trigger the pack to turn on or off.
Then I ended up changing some of the functions of how the wand works and the slo-blo led. The slo-blo led pulses when the wand is in certain modes and stay on full brightness during the activate mode on the wand, and is entirely controlled by the metro mini. I am using a second metro mini only for power draw consumption only. So in short, for the keep alive to work, the wand needs to be turned on, and not be idling in the ACTIVATE mode. Here is a video demonstrating how my wand/pack functions after the mods:
Now here are the parts I used:
(I will provide some links to examples usually in bulk, but you can find them individually for cheaper if you search around).
2 Adafruit Metro Mini
https://www.adafruit.com/product/2590
1 On/Off switch.
https://www.amazon.fr/gp/product/B07RQ4 ... =UTF8&th=1
2 PN2222 NPN transistors
https://www.adafruit.com/product/756
1 150ohm resistor
https://www.amazon.fr/gp/product/B08FD1 ... =UTF8&th=1
Misc things to help you:
soldering iron
solder
electrical tape
Solder sucker: Good for removing solder out of pin holes and tiny places:
https://www.adafruit.com/product/1597
wire stripper & cutter
https://www.adafruit.com/product/147
heat shrink tubing in various sizes, good for sealing off exposed wire to wire soldered connections.
https://www.amazon.fr/gp/product/B071D7 ... UTF8&psc=1
22AWG wiring
https://www.adafruit.com/product/288
JST SM 2-pin male/female connectors to make things easy to remove if required.
https://www.amazon.fr/gp/product/B08JV9 ... =UTF8&th=1
Sorry for the crude wiring schematic: The direction of the NPN transistors, are flat side up with writing on it for schematic purposes.
Now on the wand board, some reference photos to match up on my schematic:
V4.5 is here: (I cut this wire and extended it to feed into the new switch I installed that I talked about above. The other end of the wire comes from the wand handle for reference.
Here is the VDD, GND, P008 and Fire Mode Pin that you need to solder onto. For the P008, I went in and fed my wire from the top side of the board. VDD, GND and the Fire Mode Selector Pin I come in underneath.
This is the Slo-Blo LED pins. Black = negative and Red = positive. I desoldered these from the wand board and they join up to metro mini #1 as per my schematic.
To access the Slow-Blo LED, you need to remove the back cover. It's the same as the bottom of the wand, remove the 2 caps and you have access to the 2 screws, and wiggle and feed the cable around as you wish to avoid the barrel spring mechanism.
This here is the new switch (ref #1) as per the schematic. Switch (ref #2) used to be where the #1 switch was. The switch that used to be where #2 is now is turned into the on position and hidden inside the wand body. For the switch that's hidden inside the body of the wand, put some electrical tape on the connectors so it doesn't make contact with anything.
Here is my setup that I drop into the wand. I recommend putting some electrical tape on the bottom of the metro mini's to cover the pins from contacting anything. Then just tuck everything into the board how you wish. Make sure to avoid the barrel release mechanism area.
For removing the caps from the wand to access the screws, I prefer using the reamer on a swiss army knife. A few twists into the cap and pull it out like a cork from a wine bottle.
Here is the code for the Metro Mini #1 board. When programming with the Arduino editor, select the Arduino UNO as the board type. The Metro Mini #2 does not need anything uploaded to it.
************** CYCLOTRON LIGHT MOD **************
With this you have full control of the cyclotron LEDs. 1984 mode has just the single LED lighting up which looks more accurate. 2021 has a ramp-up feature when the pack is turned on. Anti-clockwise/clockwise toggle switch to change the rotation direction of the LEDs.
84 mode light mod.
Second switch mod.
Parts that I used
1 Adafruit Metro Mini
https://www.adafruit.com/product/2590
1 Adafruit Perma-Proto Quarter-sized Breadboard PCB
https://www.adafruit.com/product/1608
1 On/Off switch
https://www.amazon.fr/gp/product/B07RQ4 ... =UTF8&th=1
1 470ohm resistor
https://www.amazon.fr/gp/product/B08FD1 ... =UTF8&th=1
22awg wiring
https://www.adafruit.com/product/288
*** Some extra things to help if you require ****
JST SM 2-pin male/female connectors to make things easy to remove if required. Up to you where you want to use them.
https://www.amazon.fr/gp/product/B08JV9 ... =UTF8&th=1
**refer to my keep alive mod below for additional soldering tools list that may help you if required**
Sorry for the poor hand drawn schematic again:
Some notes:
Metro mini: pin 6 to same pin that has the red wire on the (84/2021) selector switch.
Perma-Board: wire from the same pin with the green wire on the (84/2021) selector switch to the ground rail on the perma-board.
Metro mini: pin 8 to the same pin that has the red wire on the cyclotron alarm switch.
Perma-Board: wire from the same pin with the black wire on the cyclotron alarm switch to the ground rail on the perma-board. (Scroll down a bit to see a photo of the Perma-Board)
The cyclotron alarm switch can be found here, remove the 2 screws to access it:
Metro mini: pin 8 to any pin on a toggle switch. Then another wire from the toggle switch to one of the GND pins on the Metro Mini.
Perma-board: Looks like this for ground connections.
Cyclotron led board: (sorry I didn't take a photo of this board with my connections soldered onto it, here is what it looks like from Haslab)
-Run a wire from VCC(red) to 5V in the Metro Mini. (old wire still stays connected)
-Run a wire from the Brown GND to the ground rail on the Perma-board. (old wire still stays connected)
-De-solder the yellow RI wire from the cyclotron led board. Run this desoldered wire to analog pin A0 on the Metro mini. I ended up soldering a wire to this removed wire to extend it to reach my Metro mini. (See below photo)
-With the old RI wire removed from the cyclotron LED board. Run a new wire from the RI pin on the cyclotron LED board to a 470ohm resistor. Then run another wire from the other end of the 470ohm resistor to pin #3 on the Metro mini.
It's a bit messy, but you can clean it up after. Just use velcro and stick the metro mini wherever you want to put it.
I ended up making my wires extra long so I could put things anywhere in the pack. I used velcro to put my Perma-board ground rail here:
I ended up putting the cyclotron led direction toggle switch into the unused switch in the crank generator. It just slides in. Or you can just run it into the powercell box, and save the crank generator switch for something else. All up to you.
Then arrange the wires how you wish.
I ended up leaving a USB cable connected to the Metro Mini and running the cable to the Powercell box. That way I can upload code to it in the future without having to take the pack apart to reach it. Or you can just stick the Metro Mini into the powercell box altogether. Lots of options you can do.
Here is the code to upload onto the Metro Mini. When programming with the Arduino editor, select the Arduino UNO as the board type. FastLED, Ramp and ezButton libraries will need to be installed in your Arduino editor. Just go to TOOLS/MANAGE LIBRARIES and you can find them in the search feature to install them.
************** SPEAKER AND POWER SUPPLY MOD AND TEAR DOWN ***************
NOTE: Some people are reporting ground loop problems, lots of static, alarm sounds, etc. Read throughout the thread for more info.
So my plan is to add in 2 more speakers and switch the power supply to the pack to run off a Talentcell battery without hacking or cutting anything so I can revert back to stock if I wanted. I did an extra tear down of the pack here which is not required, as I wanted to see what was really in this pack.
Here is the microcontroller board:
SW1: The switch under the ion arm.
SW2: Unused.
SW4-SW3: The 2 switches inside the cyclotron, for changing between 84/Afterlife modes and turning the rumble motor off/on.
SW5: PURPLE/WHITE/YELLOW wires: Rotary switch for the volume control.
SW6: Is the push sensor on the cyclotron lid, when not pressed down, it causes the beeps.
SPK0: Unused.
SPK1: 2 YELLOW Wires: Speaker connections.
U7: Purple connector, provides power to the hose which feeds into the Neutrona wand.
M1: Green connector, for the rumble motor.
BAT1: Goes to the power supply.
4 PIN RED connector: Cyclotron LEDs.
4 PIN WHITE connector: Powercell LEDs.
Here is the Haslab speaker and specs written on it:
The rotary switch for the volume control:
The pack is assembled for the most part by 1 type of screw (I did find a few smaller versions).
Motherboard:
Backside of the battery tray:
Rumble motor:
Ion Arm. It is 2 pieces.
This is the back piece of the switches inside the cyclotron.
Where the booster plug mounts.
Filler line and beam line mount here.
Where the unused black switch under the crank generator assembly is.
SPK0 and SPK1 on the microcontroller both output at the same time. I connected SPK0 to a 12V amp powered by a talentcell battery.
Standard Haslab speaker by itself.
2x 4" (10cm) Pioneer TS-G1020F car speakers running off a XY-502 amplifier board with 12V power + Haslab speaker at same time.
And also, the rotary volume control knob on the pack controls the overall system output volume on both SPK0 and SPK1. (see video below)
I soldered on a connector for the speakers onto the microcontroller at SPK0.
I am leaving the original battery tray on the motherboard (it is molded into it). I am not going to cut or hack anything as I want the ability to revert back to stock if need be.
On the powercell, the door that opens, there is a piece inside you can remove with 2 screws which opens it up into the inside of the pack. I removed the talentcell battery out of it's casing and stuffed the battery into it. Then I can charge it by just opening the side door and plug in the charger when it needs it.
I managed to get the speakers stuffed in and pointed up towards the Haslab speaker and speaker outlet grill. Then I solder a jst-2 connector onto the 5v usb output of the talentcell which is powering the pack.
Here is where I tapped into on my talentcell battery.
I use sticky velcro to hold the amp onto the rumble motor mount.
How I access the battery pack from the side door.
Then voilà, finished and mounted back onto a LC1 frame.
For now here is a video.
************** MICROCONTROLLER REPLACEMENTS **************
The Haslab microcontrollers have been completely replaced with Arduino boards (Mega 2560 Rev 3 in the pack and Nano in the Wand).
Project page:
https://github.com/gpstar81/haslab-proton-pack
Upcoming Features:
-(Optional features) 2 extra LEDs for 2 more hat lights, wide angle led support in the wand barrel tip.
Current Features :
-Pack/Wand communication (pack and wand can play each others sounds).
-Ribbon cable alarm.
-Video game firing modes.
-Crossing the streams.
-900+ music track support.
-Music can be played while using other pack/wand functions (firing etc).
-Wand settings menu with music playback control, volume control for pack/wand, independent music volume control for pack/wand, independent sound effects volume control for pack/wand, loop music track, change track.
-Wand sub menu allowing you to toggle various settings: 1984/1989/2021 mode, cyclotron rotation direction, vibration, smoke, crossing the streams / video game modes.
-Vibration support in pack and wand with toggle switch to enable or disable.
-1984 / 1989 / 2021 mode with toggle switch to change between them.
-1984/1989 mode uses the middle led only for a accurate look.
-Cyclotron lights ramp up and ramp down when powering up the pack or shutting it down.
-Can run the pack without the cyclotron lid.
-Overheat mode (user customisable for any wand power mode )
-Continuous firing (user customisable for any wand power mode)
-Volume control from crank generator knob.
-Can used any speaker setup (amps, aux ports, etc)
-Wand only fires when the barrel is extended.
-Wand bargraph animation updates.
-Wand tail firing sound when you stop firing. (3 variations based on how long you have been firing)
-Wand activate switch turns on the pack.
-Wand has 1984/1989 and 2021 modes.
-(optional) Cyclotron light rotation control with toggle switch (clockwise / anti-clockwise).
-(optional) Eight LEDs support for the inner cyclotron switch plate. They animate and ramp up or down depending on the pack status.
-(optional) NeoPixel Ring support for inner cyclotron. They change colour for the different video game firing modes. (35 pixel ring recommended)
-(optional) Three - 5V pin relays (they trigger during overheat and occasionally while continuous firing). Can be used for smoke, fans etc.
-(optional) N-Filter NeoPixel jewel LED support.
-(optional) Toggle switch to enable or disable the smoke relays.
-(optional) Support for a 40 pixel NeoPixel ring in the cyclotron lid to offer more LEDs and colour options for video game firing modes.
-(optional) 28 LED bargraph segment to replace the 5 LED Hasbro bargraph.
Demonstration video:
5 hour time lapse idling test
————————- BELOW HERE IS EVERYTHING RELATED TO EXPERIMENTING WITH THE EXISTING HASLAB ELECTRONICS ————————-
************** KEEP ALIVE MOD (PACK & WAND) **************
Now some information first about what Haslab did and how the pack functions in the standard configuration. There are 2 auto shut down timers to deal with. The pack which is 200 seconds and the wand at 30 seconds. The U7 pin on the pack microcontroller is feeding 4.33V and ground through the hose on the pack to the wand. When you turn the wand on the voltage levels from U7 pin drop and the pack microcontroller detects this. The pack will turn on. When the wand is turned off, the levels go back up over 4.3V and the pack knows the wand was turned off and now the pack does the shut down sequence and turns the lights and sound off and stays in a silent low power idle mode for several minutes. During this window, you can turn the wand back on and the pack fires back up. Now any time the wand does the 30 second timeout and turns itself off, the pack will do the same and sit in its low power idle mode. You can reset the wand's auto shutdown timer anytime a button is pressed on the wand. For the pack, the only way I found so far to reset the auto shutdown timer is when the wand's activate mode switch is turned on, and or off. Basically what is happening is the wand is drawing more power to power more lights and the vibration motor and the pack detects this and resets the pack timer. When the extra draw stops, the pack does the same thing and resets the 200 second timer. However a constant draw at any of those levels does not reset the timers. So the trick is to fluctuate the power draw up and down every X amount of seconds to trick the pack to reset the shut down timer. Then for the wand, you need to make it think a switch as been activated on/off every X amount of seconds. However the downside with the wand is every switch will make the wand play a sound effect. However, the fire mode selector switch will not play a sound effect while the activate mode on the wand is off, so this is the best one to target. However you do loose the ability to keep the wand alive while Activate mode is on.
Now the estimated voltage levels from the U7 pin feeding the wand that I found are:
4.33 (wand off)
4.30 (Above this seems to be around when the wand will shut off, and below this and the pack will turn itself on)
4.28 (wand on, no lights except slo-blo only.)
4.23-4.20 (wand on with lights, depending on how many bargraph leds are on)
4.17 (Going to this level or above after being below it will reset the pack shutoff timer)
4.16 (Going down to this level or lower after being above it will reset the pack shutoff timer)
4.13 (activate mode on and no lights)
4.09 (wand on, activate mode on with some lights)
So if you are designing or building your own keep alive mod, the sweet spot you want to fluctuate from is dropping down to 4.16 or lower and back up to 4.17 and higher every X amount of seconds. When the pack detects these thresholds being passed, it will reset the 200 second timer. There is another problem to contend with, the wand microcontroller will always have power fed to it from the pack. So if you are pigging backing off the VDD on the wand board for power, you will trigger the pack to stay on if whatever you wire in drops the voltage levels down to 4.3 and lower, even if you have the wand turned off. So this required me to redo the switches on the wand, where the switch to turn on the lights on the wand is removed and tucked away in the on position inside the wand, and the old power switch for the wand is moved up to the light switch position. Then I cut the power wire going to V4.5 pin into the wand board about halfway on the wire and then soldered some extra wire onto both cut ends and solder them onto a on/off switch which then mounts where the old wand power on switch used to go, all this is really doing is powering up the metro mini board I am using which draws it's power off the wand VDD pin, which in turn will trigger the pack to turn on or off.
Then I ended up changing some of the functions of how the wand works and the slo-blo led. The slo-blo led pulses when the wand is in certain modes and stay on full brightness during the activate mode on the wand, and is entirely controlled by the metro mini. I am using a second metro mini only for power draw consumption only. So in short, for the keep alive to work, the wand needs to be turned on, and not be idling in the ACTIVATE mode. Here is a video demonstrating how my wand/pack functions after the mods:
Now here are the parts I used:
(I will provide some links to examples usually in bulk, but you can find them individually for cheaper if you search around).
2 Adafruit Metro Mini
https://www.adafruit.com/product/2590
1 On/Off switch.
https://www.amazon.fr/gp/product/B07RQ4 ... =UTF8&th=1
2 PN2222 NPN transistors
https://www.adafruit.com/product/756
1 150ohm resistor
https://www.amazon.fr/gp/product/B08FD1 ... =UTF8&th=1
Misc things to help you:
soldering iron
solder
electrical tape
Solder sucker: Good for removing solder out of pin holes and tiny places:
https://www.adafruit.com/product/1597
wire stripper & cutter
https://www.adafruit.com/product/147
heat shrink tubing in various sizes, good for sealing off exposed wire to wire soldered connections.
https://www.amazon.fr/gp/product/B071D7 ... UTF8&psc=1
22AWG wiring
https://www.adafruit.com/product/288
JST SM 2-pin male/female connectors to make things easy to remove if required.
https://www.amazon.fr/gp/product/B08JV9 ... =UTF8&th=1
Sorry for the crude wiring schematic: The direction of the NPN transistors, are flat side up with writing on it for schematic purposes.
Now on the wand board, some reference photos to match up on my schematic:
V4.5 is here: (I cut this wire and extended it to feed into the new switch I installed that I talked about above. The other end of the wire comes from the wand handle for reference.
Here is the VDD, GND, P008 and Fire Mode Pin that you need to solder onto. For the P008, I went in and fed my wire from the top side of the board. VDD, GND and the Fire Mode Selector Pin I come in underneath.
This is the Slo-Blo LED pins. Black = negative and Red = positive. I desoldered these from the wand board and they join up to metro mini #1 as per my schematic.
To access the Slow-Blo LED, you need to remove the back cover. It's the same as the bottom of the wand, remove the 2 caps and you have access to the 2 screws, and wiggle and feed the cable around as you wish to avoid the barrel spring mechanism.
This here is the new switch (ref #1) as per the schematic. Switch (ref #2) used to be where the #1 switch was. The switch that used to be where #2 is now is turned into the on position and hidden inside the wand body. For the switch that's hidden inside the body of the wand, put some electrical tape on the connectors so it doesn't make contact with anything.
Here is my setup that I drop into the wand. I recommend putting some electrical tape on the bottom of the metro mini's to cover the pins from contacting anything. Then just tuck everything into the board how you wish. Make sure to avoid the barrel release mechanism area.
For removing the caps from the wand to access the screws, I prefer using the reamer on a swiss army knife. A few twists into the cap and pull it out like a cork from a wine bottle.
Here is the code for the Metro Mini #1 board. When programming with the Arduino editor, select the Arduino UNO as the board type. The Metro Mini #2 does not need anything uploaded to it.
Code: Select all
/********************************************************
Haslab Proton Pack and Neutrona Wand keep alive.
December 2022.
Michael Rajotte
********************************************************/
#include <Metro.h>
#include <millisDelay.h>
int sloBlo = 6; // Slo-Blo LED.
int wPin = 11; // Vibration motor.
int lPin = 10; // For controlling the second metro mini to turn on or off.
int aPin = 9; // For controlling the 3V to the fire mode selection pin.
int val = 0;
// Slo-Blo LED pulse control.
int rLED = 0; // red led starts at 0 (off).
int rLEDHigh = 255; // high light setting during the fade up.
int rLEDLow = 20; // low light setting during the fade down.
int redLEDTimer = 6; // millisecond speed control for the fade.
int redLEDPause = 125; //125; // milliseconds for pausing the red led. Used when reaching full value of low or high.
int rLEDMultiplier = 5;
boolean bLEDUp = true;
boolean bLEDPause = false;
boolean bLEDStart = true;
millisDelay redLED;
millisDelay redLEDPauseTimer;
millisDelay wpTimer;
millisDelay wpTimerDelay;
int wpTimerCount = 20000; // 20 seconds.
void setup() {
Serial.begin(9600);
pinMode(sloBlo, OUTPUT);
pinMode(wPin, INPUT);
pinMode(lPin, OUTPUT);
pinMode(aPin, OUTPUT);
analogWrite(sloBlo, 0);
wpTimer.start(wpTimerCount);
}
void loop() {
val = digitalRead(wPin);
// Vibration motor is active, activate mode is turned on.
if(val > 0) {
// Slo-Blo led on full brightness.
rLED = 255;
analogWrite(sloBlo, rLED);
wpTimer.start(wpTimerCount);
redLED.start(1100);
}
else {
if(wpTimer.justFinished()) {
digitalWrite(lPin, HIGH);
digitalWrite(aPin, HIGH);
wpTimerDelay.start(1000);
}
if(wpTimerDelay.justFinished()) {
digitalWrite(lPin, LOW);
digitalWrite(aPin, LOW);
wpTimer.start(wpTimerCount);
}
// Slo-Blo led.
analogWrite(sloBlo, rLED);
// Slo-Blo pulse control.
if(redLED.remaining() < 1) {
redLED.start(redLEDTimer);
if(bLEDPause == false) {
if(rLED == rLEDHigh) {
bLEDUp = false;
redLEDPauseTimer.start(redLEDPause);
bLEDPause = true;
}
else if(rLED == rLEDLow && bLEDStart == false) {
bLEDUp = true;
redLEDPauseTimer.start(redLEDPause);
bLEDPause = true;
}
}
if(redLEDPauseTimer.remaining() < 1) {
bLEDPause = false;
if(bLEDStart == true && rLED == rLEDLow) {
bLEDStart = false;
}
if(bLEDUp == true) {
rLED = rLED + rLEDMultiplier;
if(rLED > rLEDHigh) {
rLED = rLEDHigh;
}
}
else {
rLED = rLED - rLEDMultiplier;
if(rLED < rLEDLow) {
rLED = rLEDLow;
}
}
}
}
}
}
************** CYCLOTRON LIGHT MOD **************
With this you have full control of the cyclotron LEDs. 1984 mode has just the single LED lighting up which looks more accurate. 2021 has a ramp-up feature when the pack is turned on. Anti-clockwise/clockwise toggle switch to change the rotation direction of the LEDs.
84 mode light mod.
Second switch mod.
Parts that I used
1 Adafruit Metro Mini
https://www.adafruit.com/product/2590
1 Adafruit Perma-Proto Quarter-sized Breadboard PCB
https://www.adafruit.com/product/1608
1 On/Off switch
https://www.amazon.fr/gp/product/B07RQ4 ... =UTF8&th=1
1 470ohm resistor
https://www.amazon.fr/gp/product/B08FD1 ... =UTF8&th=1
22awg wiring
https://www.adafruit.com/product/288
*** Some extra things to help if you require ****
JST SM 2-pin male/female connectors to make things easy to remove if required. Up to you where you want to use them.
https://www.amazon.fr/gp/product/B08JV9 ... =UTF8&th=1
**refer to my keep alive mod below for additional soldering tools list that may help you if required**
Sorry for the poor hand drawn schematic again:
Some notes:
Metro mini: pin 6 to same pin that has the red wire on the (84/2021) selector switch.
Perma-Board: wire from the same pin with the green wire on the (84/2021) selector switch to the ground rail on the perma-board.
Metro mini: pin 8 to the same pin that has the red wire on the cyclotron alarm switch.
Perma-Board: wire from the same pin with the black wire on the cyclotron alarm switch to the ground rail on the perma-board. (Scroll down a bit to see a photo of the Perma-Board)
The cyclotron alarm switch can be found here, remove the 2 screws to access it:
Metro mini: pin 8 to any pin on a toggle switch. Then another wire from the toggle switch to one of the GND pins on the Metro Mini.
Perma-board: Looks like this for ground connections.
Cyclotron led board: (sorry I didn't take a photo of this board with my connections soldered onto it, here is what it looks like from Haslab)
-Run a wire from VCC(red) to 5V in the Metro Mini. (old wire still stays connected)
-Run a wire from the Brown GND to the ground rail on the Perma-board. (old wire still stays connected)
-De-solder the yellow RI wire from the cyclotron led board. Run this desoldered wire to analog pin A0 on the Metro mini. I ended up soldering a wire to this removed wire to extend it to reach my Metro mini. (See below photo)
-With the old RI wire removed from the cyclotron LED board. Run a new wire from the RI pin on the cyclotron LED board to a 470ohm resistor. Then run another wire from the other end of the 470ohm resistor to pin #3 on the Metro mini.
It's a bit messy, but you can clean it up after. Just use velcro and stick the metro mini wherever you want to put it.
I ended up making my wires extra long so I could put things anywhere in the pack. I used velcro to put my Perma-board ground rail here:
I ended up putting the cyclotron led direction toggle switch into the unused switch in the crank generator. It just slides in. Or you can just run it into the powercell box, and save the crank generator switch for something else. All up to you.
Then arrange the wires how you wish.
I ended up leaving a USB cable connected to the Metro Mini and running the cable to the Powercell box. That way I can upload code to it in the future without having to take the pack apart to reach it. Or you can just stick the Metro Mini into the powercell box altogether. Lots of options you can do.
Here is the code to upload onto the Metro Mini. When programming with the Arduino editor, select the Arduino UNO as the board type. FastLED, Ramp and ezButton libraries will need to be installed in your Arduino editor. Just go to TOOLS/MANAGE LIBRARIES and you can find them in the search feature to install them.
Code: Select all
/********************************************************
Haslab Proton Pack Cyclotron Controller.
January 2022.
Michael Rajotte / gpstar
********************************************************/
#include <Metro.h>
#include <millisDelay.h>
#include <FastLED.h>
#include <ezButton.h>
#include <Ramp.h>
#define LED_PIN 3
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
bool c_clockwise = true;
bool cyclotronState = false;
int led = 0;
int c1984Delay = 1050;
int c2021Delay = 15;
int c2021RampDelay = 300;
int c2021RampLength = 6000;
bool c2021Rampup = true;
bool c2021RampUpStart = true;
rampInt c2021Ramp;
millisDelay cTimerDelay;
int alarmDelay = 3000;
bool bcAlarm = false;
millisDelay cAlarm;
ezButton directionSwitch(10);
ezButton modeSwitch(6);
ezButton alarmSwitch(8);
int riPin = A0;
int val = 0;
float riVol;
int riTimerDelay = 1000;
millisDelay riTimerOn;
void setup() {
Serial.begin(9600);
pinMode(riPin, INPUT);
directionSwitch.setDebounceTime(50);
modeSwitch.setDebounceTime(50);
alarmSwitch.setDebounceTime(50);
FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, NUM_LEDS);
resetCyclotronLeds();
riTimerOn.start(riTimerDelay);
cTimerDelay.start(c2021Delay);
}
void loop() {
alarmSwitch.loop();
directionSwitch.loop();
modeSwitch.loop();
if(alarmSwitch.getState() == LOW) {
if(bcAlarm == true) {
resetCyclotronLeds();
reset2021RampUp();
riTimerOn.start(riTimerDelay);
cTimerDelay.start(c2021Delay);
bcAlarm = false;
}
}
val = analogRead(riPin);
riVol = val * (4./1024);
if(riVol > 0.01) {
cyclotronState = true;
riTimerOn.start(riTimerDelay);
}
if(riTimerOn.justFinished()) {
cyclotronState = false;
reset2021RampUp();
resetCyclotronLeds();
}
if(cyclotronState == true) {
if(directionSwitch.getState() == LOW) {
c_clockwise = true;
}
else {
c_clockwise = false;
}
if(alarmSwitch.getState() == HIGH) {
if(bcAlarm == false) {
c2021Rampup = false;
bcAlarm = true;
cAlarm.start(alarmDelay);
}
// Ribbon cable has been removed.
cyclotron_noCable();
}
else {
if(c2021RampUpStart == true) {
// To time it with the sound effects.
delay(500);
c2021RampUpStart = false;
c2021Ramp.go(0); // Reset the ramp.
c2021Ramp.go(c2021RampDelay - c2021Delay, c2021RampLength, CIRCULAR_OUT);
if(c_clockwise == false && modeSwitch.getState() == LOW) {
led = 2; // Start on LED #2 in anti-clockwise mode in 2021 mode.
}
else {
led = 0;
}
}
if(modeSwitch.getState() == HIGH) {
cyclotron_1984(c1984Delay);
}
else {
cyclotron_2021(c2021Delay);
}
}
}
}
void cyclotron_noCable() {
if(cAlarm.justFinished()) {
resetCyclotronLeds();
cAlarm.finish();
}
if(cAlarm.isRunning()) {
if(modeSwitch.getState() == HIGH) {
// 1984.
cyclotron_1984(c1984Delay * 2);
}
else {
// 2021.
cyclotron_2021(c2021Delay * 10);
}
}
}
int cyclotron_2021(int cDelay) {
if(cTimerDelay.justFinished()) {
if(c_clockwise == true) {
if(led - 1 > -1) {
leds[led-1] = CRGB(0,0,0);
FastLED.show();
}
else {
leds[11] = CRGB(0,0,0);
FastLED.show();
}
if(led > 11) {
led = 0;
}
if(led == 3 || led == 6 || led == 0) {
delay(cDelay);
}
leds[led] = CRGB(255,0,0);
FastLED.show();
led++;
}
else {
if(led + 1 < 12) {
leds[led+1] = CRGB(0,0,0);
FastLED.show();
}
else {
leds[0] = CRGB(0,0,0);
FastLED.show();
}
if(led < 0) {
led = 11;
}
if(led == 8 || led == 5 || led == 2) {
delay(cDelay);
}
leds[led] = CRGB(255,0,0);
FastLED.show();
if(led == 0) {
led = 11;
}
else {
led--;
}
}
if(c2021Rampup == true) {
if(c2021Ramp.isFinished()) {
c2021Rampup = false;
cTimerDelay.start(cDelay);
}
else {
cTimerDelay.start(c2021RampDelay - c2021Ramp.update());
}
}
else {
cTimerDelay.start(cDelay);
}
}
}
int cyclotron_1984(int cDelay) {
if(cTimerDelay.justFinished()) {
cyclotron84LightOff(led);
if(c_clockwise == true) {
led = led + 3;
}
else {
led = led - 3;
}
if(led < 0) {
led = 9;
}
else if(led > 9) {
led = 0;
}
cyclotron84LightOn(led);
cTimerDelay.start(cDelay);
}
}
void reset2021RampUp() {
c2021Rampup = true;
c2021RampUpStart = true;
}
void cyclotron84LightOn(int cLed) {
leds[cLed+1] = CRGB(255,0,0);
FastLED.show();
}
void cyclotron84LightOff(int cLed) {
leds[cLed+1] = CRGB(0,0,0);
FastLED.show();
}
void resetCyclotronLeds() {
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB(0,0,0);
FastLED.show();
}
led = 0;
}
************** SPEAKER AND POWER SUPPLY MOD AND TEAR DOWN ***************
NOTE: Some people are reporting ground loop problems, lots of static, alarm sounds, etc. Read throughout the thread for more info.
So my plan is to add in 2 more speakers and switch the power supply to the pack to run off a Talentcell battery without hacking or cutting anything so I can revert back to stock if I wanted. I did an extra tear down of the pack here which is not required, as I wanted to see what was really in this pack.
Here is the microcontroller board:
SW1: The switch under the ion arm.
SW2: Unused.
SW4-SW3: The 2 switches inside the cyclotron, for changing between 84/Afterlife modes and turning the rumble motor off/on.
SW5: PURPLE/WHITE/YELLOW wires: Rotary switch for the volume control.
SW6: Is the push sensor on the cyclotron lid, when not pressed down, it causes the beeps.
SPK0: Unused.
SPK1: 2 YELLOW Wires: Speaker connections.
U7: Purple connector, provides power to the hose which feeds into the Neutrona wand.
M1: Green connector, for the rumble motor.
BAT1: Goes to the power supply.
4 PIN RED connector: Cyclotron LEDs.
4 PIN WHITE connector: Powercell LEDs.
Here is the Haslab speaker and specs written on it:
The rotary switch for the volume control:
The pack is assembled for the most part by 1 type of screw (I did find a few smaller versions).
Motherboard:
Backside of the battery tray:
Rumble motor:
Ion Arm. It is 2 pieces.
This is the back piece of the switches inside the cyclotron.
Where the booster plug mounts.
Filler line and beam line mount here.
Where the unused black switch under the crank generator assembly is.
SPK0 and SPK1 on the microcontroller both output at the same time. I connected SPK0 to a 12V amp powered by a talentcell battery.
Standard Haslab speaker by itself.
2x 4" (10cm) Pioneer TS-G1020F car speakers running off a XY-502 amplifier board with 12V power + Haslab speaker at same time.
And also, the rotary volume control knob on the pack controls the overall system output volume on both SPK0 and SPK1. (see video below)
I soldered on a connector for the speakers onto the microcontroller at SPK0.
I am leaving the original battery tray on the motherboard (it is molded into it). I am not going to cut or hack anything as I want the ability to revert back to stock if need be.
On the powercell, the door that opens, there is a piece inside you can remove with 2 screws which opens it up into the inside of the pack. I removed the talentcell battery out of it's casing and stuffed the battery into it. Then I can charge it by just opening the side door and plug in the charger when it needs it.
I managed to get the speakers stuffed in and pointed up towards the Haslab speaker and speaker outlet grill. Then I solder a jst-2 connector onto the 5v usb output of the talentcell which is powering the pack.
Here is where I tapped into on my talentcell battery.
I use sticky velcro to hold the amp onto the rumble motor mount.
How I access the battery pack from the side door.
Then voilà, finished and mounted back onto a LC1 frame.
For now here is a video.
Last edited by gpstar on April 23rd, 2023, 3:10 pm, edited 50 times in total.