Devices & Components
Arduino Nano
Female/Female Jumper Wires
Diode, 1N5408G
Transformer, PCB-Type Enclosed, 2x 9VAC 3.2VA Sec.Coil
Capacitor (Electrolythic), 470uF 25V
Capacitor (Electrolythic), 330uF 25V
Relay, HUI KE HK19F-DC3V-SHG
Capacitor (Ceramic), 100nF 25V
Plastic Enclosure, Project Box
Transistor, BC237C
Capacitor (Ceramic), 220nF 25V
Resistors (varies, refer to circuit schematics and layouts)
Male Header 40 Position 1 Row (0.1")
Transformer, PCB-Type Enclosed, 1x 12VAC 5VA Sec.Coil
Hardware & Tools
Oscilloscope
Soldering iron (generic)
Project description
Code
Code
arduino
1/* Keypad Hardware & Reading Setup */ 2// Keypad shall be powered by Arduino's 3.3V supply. 3// When requested <__KeypadSamples> ea. reading executed and their 4// arithmetical average value is calculated to determine pressed key. 5#define _KeypadChannel A0 // Analog Input for Keypad 6#define _KeypadSamples 5 // Sampling Qty for Averaging 7#define _KeypadDelayMS 200 // Time Delay (ms) after reading 8 9/* Keypad Reading Values */ 10#define _KeyNONE 0 // No any key is pressed 11#define _KeyCINC 1 // Current Sensitivity Increase 12#define _KeyCDEC 2 // Current Sensitivity Decrease 13#define _KeyCCS 3 // Current Sensitivity Continuous Switching 14#define _Key3V3 4 // Voltage Set, 3V3 15#define _Key5V 5 // Voltage Set, 5V 16#define _Key12V 6 // Voltage Set, 12V 17 18/* Command Channels (DO) to Circuit */ 19#define _12V 2 // 12V Enable/Disable 20#define _3V5V 3 // 3.3V/5V (0: 3V, 1: 5V) 21#define _CS47R 4 // Current Sensitivity.1 (47R) 22#define _CS1K 5 // Current Sensitivity.2 (1K) 23#define _CS10K 6 // Current Sensitivity.3 (10K) 24#define _CS1M 7 // Current Sensitivity.4 (1M) 25#define _CS10M 8 // Current Sensitivity.5 (10M) 26 27/* LED Interfaces */ 28#define _PWRLED 9 // Power LED 29// Other LEDs are controlled directly by circuit. 30 31 32/* Startup Tests Section */ 33boolean StartUpTests(){ 34 // Important: Relay power supply circuit is capable to power 35 // 3 relays simultaneously. 36 // Power LED: Shall be blinked for ~1 seconds, then kept off 37 // during initial tests. 38 for (int i=0;i<=5;i++) { 39 digitalWrite(_PWRLED, HIGH); delay(100); 40 digitalWrite(_PWRLED, LOW); delay(100); 41 } 42 // Each command shall be activated once for verification. 43 digitalWrite(_3V5V, LOW); delay(200); // Test: 3.3V 44 digitalWrite(_3V5V, HIGH); delay(200); // Test: 5V 45 digitalWrite(_12V, HIGH); delay(200); // Test: 12V 46 // For safety, circuit shall remain at 3.3V level at the beginning 47 digitalWrite(_3V5V, LOW); delay(200); 48 digitalWrite(_12V, LOW); delay(200); 49 50 digitalWrite(_CS47R,HIGH); delay(200); 51 digitalWrite(_CS47R,LOW); delay(200); 52 digitalWrite(_CS1K, HIGH); delay(200); 53 digitalWrite(_CS1K, LOW); delay(200); 54 digitalWrite(_CS10K,HIGH); delay(200); 55 digitalWrite(_CS10K,LOW); delay(200); 56 digitalWrite(_CS1M, HIGH); delay(200); 57 digitalWrite(_CS1M, LOW); delay(200); 58 digitalWrite(_CS10M,HIGH); delay(200); 59 digitalWrite(_CS10M,LOW); delay(200); 60 61 digitalWrite(_CS47R,HIGH); 62 63 digitalWrite(_PWRLED,HIGH); 64} 65 66 67/* Continuous Current Sensitivity Switching (CCS) */ 68/* CCS switch turns CCS on. It's also possible to change test voltage 69 during CCS. 70 CCS can be tuned off by pressing any current range adjustment switch 71 (+/-) or CCS. 72 It's also possible to adjust test voltage during CCS. 73*/ 74byte CSense[5] = {_CS47R,_CS1K,_CS10K,_CS1M,_CS10M}; 75byte CSenseIndex = 1; 76boolean CSenseCCS = 0; 77 78void toCircuit_CCS(){ 79int Direction = 1; // 1:Upward, -1:Downward 80 do { 81 CSenseIndex+=Direction; 82 if(CSenseIndex==5) Direction=-1; 83 if(CSenseIndex==1) Direction= 1; 84 for (int i=0; i<=4; i++) digitalWrite(CSense[i],LOW); 85 digitalWrite(CSense[CSenseIndex-1],HIGH); 86 int Key = getKeyAnalog(_KeypadChannel,_KeypadSamples,_KeypadDelayMS); 87 switch (Key) { 88 case _KeyNONE: break; 89 case _KeyCINC: CSenseCCS=0; break; 90 case _KeyCDEC: CSenseCCS=0; break; 91 case _KeyCCS : CSenseCCS=0; break; 92 case _Key3V3 : digitalWrite(_12V,LOW); digitalWrite(_3V5V,LOW); 93 break; 94 case _Key5V : digitalWrite(_12V,LOW); digitalWrite(_3V5V,HIGH); 95 break; 96 case _Key12V : digitalWrite(_3V5V,LOW); digitalWrite(_12V,HIGH); 97 break; 98 } 99 delay(1000); 100 } 101 while(CSenseCCS); 102} 103 104 105/* Keypad Reading */ 106int getKeyAnalog(int _Channel, int _Samples, int _DelayMS){ 107 // Keypad shall be powered by Arduino's 3.3V supply. 108 float _Key=0.0; 109 for (int i=1; i<=_Samples; i++) _Key+=analogRead(_Channel); 110 if (_Key<20) _Key=0.0; // No key is pressed. 111 _Key/=(_Samples*65); 112 /* 113 65 is for index mapping. 114 Keys generate approx. {75,145,210,280,350,430} values. 115 Dividing value by 65, generates index number {1,2,3,4,5,6] for each key. 116 0: No any key is pressed 117 1: Increase Current Sensitivity 118 2: Decrease Current Sensitivity 119 3: Current Sensitivity Continuous Switcing(CCS) On 120 4: Test Voltage=3.3V 121 5: Test Voltage=5V 122 6: Test Voltage=12V Enable/Disable 123 */ 124 delay(_DelayMS); 125 return((int)_Key); 126} 127 128/* Setup and Loop */ 129void setup() { 130 pinMode(_3V5V, OUTPUT); digitalWrite(_3V5V, LOW); 131 pinMode(_12V, OUTPUT); digitalWrite(_12V, LOW); 132 pinMode(_CS47R, OUTPUT); digitalWrite(_CS47R, LOW); 133 pinMode(_CS1K, OUTPUT); digitalWrite(_CS1K, LOW); 134 pinMode(_CS10K, OUTPUT); digitalWrite(_CS10K, LOW); 135 pinMode(_CS1M, OUTPUT); digitalWrite(_CS1M, LOW); 136 pinMode(_CS10M, OUTPUT); digitalWrite(_CS10M, LOW); 137 pinMode(_PWRLED,OUTPUT); digitalWrite(_PWRLED,LOW); 138 StartUpTests(); 139} 140 141void loop() { 142switch (getKeyAnalog(_KeypadChannel,_KeypadSamples,_KeypadDelayMS)) { 143 case _KeyNONE: break; 144 case _KeyCINC: CSenseIndex++; if(CSenseIndex>5) CSenseIndex=1; 145 for (int i=0; i<=4; i++) digitalWrite(CSense[i],LOW); 146 digitalWrite(CSense[CSenseIndex-1],HIGH); 147 break; 148 case _KeyCDEC: CSenseIndex--; if(CSenseIndex<1) CSenseIndex=5; 149 for (int i=0; i<=4; i++) digitalWrite(CSense[i],LOW); 150 digitalWrite(CSense[CSenseIndex-1],HIGH); 151 break; 152 case _KeyCCS : CSenseCCS=1; toCircuit_CCS(); 153 break; 154 case _Key3V3 : digitalWrite(_12V,LOW); digitalWrite(_3V5V,LOW); 155 break; 156 case _Key5V : digitalWrite(_12V,LOW); digitalWrite(_3V5V,HIGH); 157 break; 158 case _Key12V : digitalWrite(_3V5V,LOW); digitalWrite(_12V,HIGH); 159 break; 160 } 161} 162
Code
arduino
1/* Keypad Hardware & Reading Setup */ 2// Keypad shall be powered by Arduino's 3.3V supply. 3// When requested <__KeypadSamples> ea. reading executed and their 4// arithmetical average value is calculated to determine pressed key. 5#define _KeypadChannel A0 // Analog Input for Keypad 6#define _KeypadSamples 5 // Sampling Qty for Averaging 7#define _KeypadDelayMS 200 // Time Delay (ms) after reading 8 9/* Keypad Reading Values */ 10#define _KeyNONE 0 // No any key is pressed 11#define _KeyCINC 1 // Current Sensitivity Increase 12#define _KeyCDEC 2 // Current Sensitivity Decrease 13#define _KeyCCS 3 // Current Sensitivity Continuous Switching 14#define _Key3V3 4 // Voltage Set, 3V3 15#define _Key5V 5 // Voltage Set, 5V 16#define _Key12V 6 // Voltage Set, 12V 17 18/* Command Channels (DO) to Circuit */ 19#define _12V 2 // 12V Enable/Disable 20#define _3V5V 3 // 3.3V/5V (0: 3V, 1: 5V) 21#define _CS47R 4 // Current Sensitivity.1 (47R) 22#define _CS1K 5 // Current Sensitivity.2 (1K) 23#define _CS10K 6 // Current Sensitivity.3 (10K) 24#define _CS1M 7 // Current Sensitivity.4 (1M) 25#define _CS10M 8 // Current Sensitivity.5 (10M) 26 27/* LED Interfaces */ 28#define _PWRLED 9 // Power LED 29// Other LEDs are controlled directly by circuit. 30 31 32/* Startup Tests Section */ 33boolean StartUpTests(){ 34 // Important: Relay power supply circuit is capable to power 35 // 3 relays simultaneously. 36 // Power LED: Shall be blinked for ~1 seconds, then kept off 37 // during initial tests. 38 for (int i=0;i<=5;i++) { 39 digitalWrite(_PWRLED, HIGH); delay(100); 40 digitalWrite(_PWRLED, LOW); delay(100); 41 } 42 // Each command shall be activated once for verification. 43 digitalWrite(_3V5V, LOW); delay(200); // Test: 3.3V 44 digitalWrite(_3V5V, HIGH); delay(200); // Test: 5V 45 digitalWrite(_12V, HIGH); delay(200); // Test: 12V 46 // For safety, circuit shall remain at 3.3V level at the beginning 47 digitalWrite(_3V5V, LOW); delay(200); 48 digitalWrite(_12V, LOW); delay(200); 49 50 digitalWrite(_CS47R,HIGH); delay(200); 51 digitalWrite(_CS47R,LOW); delay(200); 52 digitalWrite(_CS1K, HIGH); delay(200); 53 digitalWrite(_CS1K, LOW); delay(200); 54 digitalWrite(_CS10K,HIGH); delay(200); 55 digitalWrite(_CS10K,LOW); delay(200); 56 digitalWrite(_CS1M, HIGH); delay(200); 57 digitalWrite(_CS1M, LOW); delay(200); 58 digitalWrite(_CS10M,HIGH); delay(200); 59 digitalWrite(_CS10M,LOW); delay(200); 60 61 digitalWrite(_CS47R,HIGH); 62 63 digitalWrite(_PWRLED,HIGH); 64} 65 66 67/* Continuous Current Sensitivity Switching (CCS) */ 68/* CCS switch turns CCS on. It's also possible to change test voltage 69 during CCS. 70 CCS can be tuned off by pressing any current range adjustment switch 71 (+/-) or CCS. 72 It's also possible to adjust test voltage during CCS. 73*/ 74byte CSense[5] = {_CS47R,_CS1K,_CS10K,_CS1M,_CS10M}; 75byte CSenseIndex = 1; 76boolean CSenseCCS = 0; 77 78void toCircuit_CCS(){ 79int Direction = 1; // 1:Upward, -1:Downward 80 do { 81 CSenseIndex+=Direction; 82 if(CSenseIndex==5) Direction=-1; 83 if(CSenseIndex==1) Direction= 1; 84 for (int i=0; i<=4; i++) digitalWrite(CSense[i],LOW); 85 digitalWrite(CSense[CSenseIndex-1],HIGH); 86 int Key = getKeyAnalog(_KeypadChannel,_KeypadSamples,_KeypadDelayMS); 87 switch (Key) { 88 case _KeyNONE: break; 89 case _KeyCINC: CSenseCCS=0; break; 90 case _KeyCDEC: CSenseCCS=0; break; 91 case _KeyCCS : CSenseCCS=0; break; 92 case _Key3V3 : digitalWrite(_12V,LOW); digitalWrite(_3V5V,LOW); 93 break; 94 case _Key5V : digitalWrite(_12V,LOW); digitalWrite(_3V5V,HIGH); 95 break; 96 case _Key12V : digitalWrite(_3V5V,LOW); digitalWrite(_12V,HIGH); 97 break; 98 } 99 delay(1000); 100 } 101 while(CSenseCCS); 102} 103 104 105/* Keypad Reading */ 106int getKeyAnalog(int _Channel, int _Samples, int _DelayMS){ 107 // Keypad shall be powered by Arduino's 3.3V supply. 108 float _Key=0.0; 109 for (int i=1; i<=_Samples; i++) _Key+=analogRead(_Channel); 110 if (_Key<20) _Key=0.0; // No key is pressed. 111 _Key/=(_Samples*65); 112 /* 113 65 is for index mapping. 114 Keys generate approx. {75,145,210,280,350,430} values. 115 Dividing value by 65, generates index number {1,2,3,4,5,6] for each key. 116 0: No any key is pressed 117 1: Increase Current Sensitivity 118 2: Decrease Current Sensitivity 119 3: Current Sensitivity Continuous Switcing(CCS) On 120 4: Test Voltage=3.3V 121 5: Test Voltage=5V 122 6: Test Voltage=12V Enable/Disable 123 */ 124 delay(_DelayMS); 125 return((int)_Key); 126} 127 128/* Setup and Loop */ 129void setup() { 130 pinMode(_3V5V, OUTPUT); digitalWrite(_3V5V, LOW); 131 pinMode(_12V, OUTPUT); digitalWrite(_12V, LOW); 132 pinMode(_CS47R, OUTPUT); digitalWrite(_CS47R, LOW); 133 pinMode(_CS1K, OUTPUT); digitalWrite(_CS1K, LOW); 134 pinMode(_CS10K, OUTPUT); digitalWrite(_CS10K, LOW); 135 pinMode(_CS1M, OUTPUT); digitalWrite(_CS1M, LOW); 136 pinMode(_CS10M, OUTPUT); digitalWrite(_CS10M, LOW); 137 pinMode(_PWRLED,OUTPUT); digitalWrite(_PWRLED,LOW); 138 StartUpTests(); 139} 140 141void loop() { 142switch (getKeyAnalog(_KeypadChannel,_KeypadSamples,_KeypadDelayMS)) { 143 case _KeyNONE: break; 144 case _KeyCINC: CSenseIndex++; if(CSenseIndex>5) CSenseIndex=1; 145 for (int i=0; i<=4; i++) digitalWrite(CSense[i],LOW); 146 digitalWrite(CSense[CSenseIndex-1],HIGH); 147 break; 148 case _KeyCDEC: CSenseIndex--; if(CSenseIndex<1) CSenseIndex=5; 149 for (int i=0; i<=4; i++) digitalWrite(CSense[i],LOW); 150 digitalWrite(CSense[CSenseIndex-1],HIGH); 151 break; 152 case _KeyCCS : CSenseCCS=1; toCircuit_CCS(); 153 break; 154 case _Key3V3 : digitalWrite(_12V,LOW); digitalWrite(_3V5V,LOW); 155 break; 156 case _Key5V : digitalWrite(_12V,LOW); digitalWrite(_3V5V,HIGH); 157 break; 158 case _Key12V : digitalWrite(_3V5V,LOW); digitalWrite(_12V,HIGH); 159 break; 160 } 161} 162
Downloadable files
VI Component Tester(50 Hz v2.0)-3.LED Board
LED Board
VI Component Tester(50 Hz v2.0)-3.LED Board

VI Component Tester(50 Hz v2.0)-4.Push Button through AI
Push Button Circuit
VI Component Tester(50 Hz v2.0)-4.Push Button through AI

VI Component Tester(50 Hz v2.0)-2.Relay Board(Single Relay Typical)
Relay Board - Typical for Single Relay. There will be 5 relays on board.
VI Component Tester(50 Hz v2.0)-2.Relay Board(Single Relay Typical)

VI Component Tester(50 Hz v2.0)-5.Interconnections
Interconnection Diagram
VI Component Tester(50 Hz v2.0)-5.Interconnections

VI Component Tester(50 Hz v2.0)-1.VAC Selection Board
VAC Selection Board + Arduino Nano mount base
VI Component Tester(50 Hz v2.0)-1.VAC Selection Board

VI Component Tester(50 Hz v2.0)-0.Principal Circuit
Principal Circuit-Overall
VI Component Tester(50 Hz v2.0)-0.Principal Circuit

VI Component Tester(50 Hz v2.0)-1.VAC Selection Board
VAC Selection Board + Arduino Nano mount base
VI Component Tester(50 Hz v2.0)-1.VAC Selection Board

VI Component Tester(50 Hz v2.0)-3.LED Board
LED Board
VI Component Tester(50 Hz v2.0)-3.LED Board

VI Component Tester(50 Hz v2.0)-2.Relay Board(Single Relay Typical)
Relay Board - Typical for Single Relay. There will be 5 relays on board.
VI Component Tester(50 Hz v2.0)-2.Relay Board(Single Relay Typical)

VI Component Tester(50 Hz v2.0)-4.Push Button through AI
Push Button Circuit
VI Component Tester(50 Hz v2.0)-4.Push Button through AI

VI Component Tester(50 Hz v2.0)-5.Interconnections
Interconnection Diagram
VI Component Tester(50 Hz v2.0)-5.Interconnections

Documentation
Relay Board Layout
Relay Board Layout
Relay Board Layout

Push-Button Board Layout
Push-Button Board Layout
Push-Button Board Layout

LED Board Layout
LED Board Layout
LED Board Layout

Power Supply Board Layout
Power Supply Board Layout
Power Supply Board Layout

VAC Selection Board Layout
VAC Selection Board Layout
VAC Selection Board Layout

Resistor Board Layout
Resistor Board Layout
Resistor Board Layout

Relay Board Layout
Relay Board Layout
Relay Board Layout

Push-Button Board Layout
Push-Button Board Layout
Push-Button Board Layout

VAC Selection Board Layout
VAC Selection Board Layout
VAC Selection Board Layout

Power Supply Board Layout
Power Supply Board Layout
Power Supply Board Layout

LED Board Layout
LED Board Layout
LED Board Layout

Resistor Board Layout
Resistor Board Layout
Resistor Board Layout

Comments
Only logged in users can leave comments