昨日製作した「ポタ電とバッテリーの自動切換器」(以降「切換器」と呼ぶ)の詳細について記します。
ブロック図と回路図を以下に示します。
マイコンとして手持ちしていたArduinoNanoを使用しました。アナログ入力1点、デジタル出力1点を使っています。回路図中ではMY2と書いていますが、実際にはLY2-DC12を使用しました。図中DC/DCコンバータとArduinoNanoがGNDに接続されていませんが、記入ミスです。
ArduinoNanoのソースコードを以下に示します。
#define DC12V 859
#define DC11V 790
int ADC0 = A0; // anaglog input for battery voltage
int ledPin = 13; // pin for the on board LED
int Switch = 2; // GPIO2 for the Swith, Barrery when HIGH, Mobile dengen when LOW
int BatteryVoltage = 0; // variable to store the value coming from the sensor
bool BatterySelect = true;
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
pinMode(Switch, OUTPUT);
digitalWrite(Switch, HIGH);
Serial.begin(115200);
Serial.println("Program started!");
}
void loop() {
// read the value from the sensor:
BatteryVoltage = analogRead(ADC0);
Serial.println(BatteryVoltage);
if (BatterySelect){
if (BatteryVoltage < DC11V){
digitalWrite(Switch, LOW); // switch to the mobile power supply as power source
BatterySelect = false;
}
}else{
if (BatteryVoltage > DC12V){
digitalWrite(Switch, HIGH); // switch to the Battery as power source
BatterySelect = true;
}
}
// Blink led 1 sec period
// turn the ledPin on
digitalWrite(ledPin, HIGH);
delay(500);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
delay(500);
}
#define DC11V 790
int ADC0 = A0; // anaglog input for battery voltage
int ledPin = 13; // pin for the on board LED
int Switch = 2; // GPIO2 for the Swith, Barrery when HIGH, Mobile dengen when LOW
int BatteryVoltage = 0; // variable to store the value coming from the sensor
bool BatterySelect = true;
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
pinMode(Switch, OUTPUT);
digitalWrite(Switch, HIGH);
Serial.begin(115200);
Serial.println("Program started!");
}
void loop() {
// read the value from the sensor:
BatteryVoltage = analogRead(ADC0);
Serial.println(BatteryVoltage);
if (BatterySelect){
if (BatteryVoltage < DC11V){
digitalWrite(Switch, LOW); // switch to the mobile power supply as power source
BatterySelect = false;
}
}else{
if (BatteryVoltage > DC12V){
digitalWrite(Switch, HIGH); // switch to the Battery as power source
BatterySelect = true;
}
}
// Blink led 1 sec period
// turn the ledPin on
digitalWrite(ledPin, HIGH);
delay(500);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
delay(500);
}