Google Ad

Video Blog 010 - Pioneer Amplifier Repair & Motorized Volume Control Conversion

DISCLAIMER: This design is experimental, so if you decide to build one yourself then you are on your own, I can't be held responsible for any problems/issues/damage/injury that may occur if you decide to follow this build and make one yourself.


I purchased a faulty Pioneer A-443 Amplifier via Ebay with a view to repairing it and then converting the Volume knob to a motorized type and then using the Pioneer to replace my existing Denon amp.

Check out the video blog below to follow the full story from opening her up and right through to the living room installation of the final product.



+5vdc is required for both the motor & Arduino and is derived from one of the main amplifier rails and is +45vdc unregulated, therefore a circuit with a higher operating voltage than normal in terms of voltage regulators is required. The LM2575HV-5 can operate up to 60vdc.

A TTL IR signal is received from the IR detector and input to the Arduino, and when a button is pressed on the remote control the unique HEX ID of that button press is detected. If either of the two buttons for volume up/down is detected then the Arduino outputs to drive the DC motor in the relevant direction.
The Arduino interfaces with the motor via a small, relatively low current H-bridge circuit. Four digital outputs from the Arduino drive the H-bridge directly and is either full on or full off in either direction. No analogue or PWM control is necessary since the motorized pot has a gearbox and even at full speed is still fine for use.
When no button is pressed the H-bridge is driven in the full off position, thus the motor is stopped.

I have configured IR codes 7A0/FA0 & 7A1/FA1 which are the CH. Up/Dn button on the Hauppauge remote as this is a rocker style button right opposite the Tv volume control (which I didn't want to disturb). To do this it was necessary to disable the CH. Up/Dn buttons, which I never used, in MediaPortal setup in order to avoid conflict.

As this amp will be in use at least 12hrs per day I wanted a safe design so decided to install 7.5ohm (2x15ohm 2W) resistor in series with the supply to the H-bridge. The DC motor is rated at 100mA (@5vdc) nominal, 150mA max.

The buzzer volume can be a little too much for some people, but a little bit of masking tape over it will reduce it significantly.

Schematic diagram is here (jpg).
Pioneer A-443 Schematic diagram is here (pdf).

My own setup has a reduced LINE level (from the Tv) in terms of voltage so i've actually modified my amplifier in order to increase the gain of the pre-amp. R641 & R642 I have put a 1k resistor in parallel with the existing 2.7k resistors. Modified schematic here (jpg) for info.



1 * ALPS Potentiometer RK16812MG motorized 100K pot (log type for volume control applications).
1 * IR LED  (Hauppauge remote IR [tip=Vcc, ring=sig, sleeve=0vdc]).

1 * Arduino Nano
1 * LM2575HV-5 5vdc Switch Mode Regulator
5 * 1N5819 Schottky diode
1 * 330uH Inductor
1 * 470uF 63v Electrolytic capacitor
1 * 1000uF 16v Electrolytic capacitor
2 * ZVN3306A N-type FET
2 * ZVP2106A P-type FET
4 * 4k7 1/4w resistors
2 * 15ohm 2W resistor
1 * Pcb mounted buzzer (optional)
1 * 7-way Pcb Terminal Block
1 * 1-amp fuse
1 * Pcb mounted fuse holder






Version 2 of the code is here & below.

- Impossible to drive both N & P-type FETs on same sides of the H-bridge at the same time.
- Impossible to drive both Left & Right at same time.
- The mS delay is a means to smooth out the motor control.
- Beeper output (optional).
- An additional code library is required, see  the code below for info.
{codecitation }

/*IR Receiver - Motorized Volume Control for Pioneer Amplifier
By Ian Johnston
Version 2, 13/06/13
IR code library (IRremote.h) Ken Shirriff's -*/
#include <IRremote.h>
int RECV_PIN = 7;        // IR LED pin
IRrecv irrecv(RECV_PIN);
decode_results results;
int Q1 = 2;              // Dig Out
int Q2 = 3;              // Dig Out
int Q3 = 4;              // Dig Out
int Q4 = 5;              // Dig Out
int BEEP_PIN = 8;        // Buzzer pin
int Code = 0;
// *********************** Void Setup *************************
void setup()
  irrecv.enableIRIn();   // Start the receiver
  pinMode(Q1, OUTPUT);   // Setup the H-bridge outputs
  pinMode(Q2, OUTPUT);
  pinMode(Q3, OUTPUT);
  pinMode(Q4, OUTPUT);
  pinMode(BEEP_PIN, OUTPUT);
  digitalWrite(Q1, HIGH);  // Set Motor to stop as initial state
  digitalWrite(Q2, LOW);
  digitalWrite(Q3, HIGH);
  digitalWrite(Q4, LOW);
  digitalWrite(BEEP_PIN, HIGH);  // Beeper on
  delay (500);
  digitalWrite(BEEP_PIN, LOW);  // Beeper off
// *********************** Main Loop *************************
void loop() {
  if (irrecv.decode(&results)) {
    //Serial.println(results.value, HEX);
    Code = results.value;
    irrecv.resume(); // Receive the next value
  if (Code == 0x7A0 || Code == 0xFA0) {  // Motor drive clockwise
    digitalWrite(Q1, HIGH);
    digitalWrite(Q2, LOW);
    digitalWrite(Q3, LOW);
    digitalWrite(Q4, HIGH);
    digitalWrite(BEEP_PIN, HIGH);  // Beeper on
    digitalWrite(BEEP_PIN, LOW);  // Beeper off
    Code = 0;
  if (Code == 0x7A1 || Code == 0xFA1) {  // Motor drive anti-clockwise
    digitalWrite(Q1, LOW);
    digitalWrite(Q2, HIGH);
    digitalWrite(Q3, HIGH);
    digitalWrite(Q4, LOW);
    digitalWrite(BEEP_PIN, HIGH);  // Beeper on
    digitalWrite(BEEP_PIN, LOW);  // Beeper off
    Code = 0;
// *********************** Motor Stop *************************
void MotorStop() {
  digitalWrite(Q1, HIGH);
  digitalWrite(Q2, LOW);
  digitalWrite(Q3, HIGH);
  digitalWrite(Q4, LOW);