工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

スマートディスプレイを備えたスマートバッテリー充電器マルチプレクサ

コンポーネントと消耗品

>
Arduino UNO
× 1
Arduinoプロトシールド
× 1
超音波センサー-HC-SR04(汎用)
× 1
>
Adafruit MCP-30088チャンネル10ビットAdc
× 1
5Vリレー-2チャンネルオプトカプラー
× 3
>
LM2596電源モジュールDC / DC BUCK3A調整可能
× 1
抵抗1kオーム
× 12
6位置端子台
画像を確認してください-ほとんどすべてのタイプの接続システムを使用できます。
× 1

必要なツールとマシン

>
はんだごて(汎用)

このプロジェクトについて

古い車やボート、芝刈り機など、悪天候(冬と呼ばれることもあります)で運転したり使用したりしないバッテリーで始まる車両を所有している場合は、北東部に住んでいます。毎シーズン電池で。 1つまたは2つあれば、非常に簡単です。トリクル充電器を入手できます。安価でシンプルなものは15ドル未満ですが、シンプルです。バッテリーのフィードバックや監視はなく、バッテリーに13ボルト強を投入するだけです。より良い選択は、スマート充電器の1つです。通常、通常のより高い/より速い充電と、バッテリーの電圧と状態に基づいて出力を調整する雪またはトリクル充電があります。それらは非常にうまく機能します– Harbour Freightは39ドルで1つあります–もちろん、ほとんどの場合29ドルで販売されています。

私が電話を切ったのは、1975年のMGB(3.5リッターのOldsmobile V8を搭載)、1981年のトヨタのピックアップ、ボート、発電機をすべて12ボルトのバッテリーで持っていたからです。そして、冬に去ったら、車の1台をここに置いておくので、別のバッテリーがあります。さて、私は5つのバッテリーマインドを取得する必要があります-私が販売中のHFのものを購入する場合は150ドルです。

これについて考えている間、私はバッテリーごとに1つを入手し、それを装着すると、バッテリーが一定のレベルになり、残りの時間は監視してトリクル充電するだけだと思いました。それで、アイデアが浮かびました– 1日に数時間各バッテリーに接続できなかったのはなぜですか–それはうまくいきませんか?それなら、自動的にそれらを切り替えることができたら?

できます。私はArduinoの1つを取り、それを実行するプログラムを作成しました。その後、夢中になり、いくつかの機能を追加しました。そこで、ここで私が最終的に得たものの詳細を提示します。このバージョンは、自動検知機能を備えた最大6個のバッテリー用に設定されています。

1〜6個のバッテリーで動作します。最初のバッテリーは1番のスポットに接続する必要があります。その接続は、Arduinoやその他の電子機器に電力を供給する電圧レギュレーターに接続されています。 2番目以降は任意の順序で接続できます。バッテリーを接続すると、Read_Show_Volts関数で電圧が検出され、そのバッテリーが充電サイクルに追加されます。

仕組み–6個のバッテリーを収容したかった。 Arduino UNOでは、2線式LCD制御にA4およびA5アナログ入力が必要であり、4つのアナログ入力が少なすぎます。そこで、MCP-30088チャンネルのアナログ入力を接続しました。 MCP-3008への各入力の分圧器として2つの1k抵抗を使用します。

プログラムには基本的に4つの関数が呼び出されます。

  • 関数 read_show_volts 各接続をチェックして、8ボルトを超える使用可能なバッテリーをテストしてバッテリーが接続されているかどうかを確認します。 8v以上ある場合は、その接続を充電ループに追加します。
  • 関数 check_relays タイマーカウンターをチェックし、最大値に達すると、充電器を次のリレーに移動します。
  • 関数 update_display まさにそれを行います–表示を更新します。最初に、ライン1の接続1、2の電圧と、ライン2の接続3と4の電圧が表示されます。次に、タイマーがそれを通知すると、ライン1の接続5と6の電圧が変化し、表示されます。追加のアナログ入力システム電圧(できれば5ボルト)とiref電圧–3.3ボルトを示します。これらの読み取り値は必要ありませんが、空白行があり、他に何を表示するかわかりませんでした。私はアイデアを受け入れています。
  • 最後の関数は read_distance_update です 。これは面白くて、遊ぶのが一番楽しいです。 HC-SR04超音波ソナー距離測定ユニットを接続しました。私は液晶に電圧を監視させたかったのですが、液晶を見てそこに立っていることはほとんどありません。ほとんどの場合、液晶をオフにすることができました。スイッチを入れることもできましたが、簡単に外すことができましたが、HC-SR04を入れて、何秒も経ってから液晶をオフにしました。次に、HC-SR04に手をかざすと、液晶ディスプレイをx秒間オンに戻します。

ほとんどすべてに変数があるので、ニーズに合わせて調整することができます。充電タイマーをバッテリーあたり1時間に設定しました。したがって、2つのバッテリーが接続されている場合、1日12回、毎回1時間充電されます。バッテリーが4つある場合、1時間6回、というようになります。

HC-SR04を持っている限り、タイマーループをより短い時間(各バッテリーで数秒)に変更するルーチンを追加しました。これを行った理由は、バッテリーが正常に切り替わっていることを確認でき、切り替えを確認するために1時間待つ必要がなかったためです。 HC-SR04に手を数秒間かざすと、液晶バックライトが点滅するので、スイッチが入っていることがわかります。その後、リレーが数秒ごとに切り替わるのが聞こえます。もう一度HC-SR04に手をかざすと、元に戻ります。

コードのzipは次のとおりです:BatteryMultiplexer

コード

  • バッテリーマルチプレクサArduinoコード
バッテリーマルチプレクサArduinoコード Arduino
ArduinoUnoを使用しました。
 #include  #include  //バージョン1.2.1を使用#include  #include  auto timer =timer_create_default(); //デフォルト設定でタイマーを作成します// LCDコンストラクター-表示されているアドレスは0x27です-正しい場合と正しくない場合があります// YWRobotLCM1602 IIC V1LiquidCrystal_I2C lcd(0x27、2、1、0、4、5、 6、7、3、POSITIVE); int zcnt =0; int acnt =0; //現在の一般的な目的intchargeTime =(10 * 1000); //各バッテリーに費やす時間intcharge_time_counter =59; //何回の充電時間が渡されましたか?intcharge_time_max =60; //何回の充電時間が渡されましたか?intrelay1 =3; //それ自体の各リレーpinintrelay2 =4; int relay3 =5; int relay4 =6; int current_relay =0; //現在のリレーはどれですか?intmax_relays =3; //どのようにリレーすることができます-0ベース。 3つすべてのフロートボルト1を期待し始めます。 //各バッテリーの電圧は何ですかfloatvolts2; floatvolts3; int min_volts =1; //バッター電圧を充電する必要がある最小電圧はいくつですか。intvolts_update_count=5; //電圧の読み取り値を秒単位で更新する頻度intvolts_update_counter =0; //経過した秒数を追跡しますintvolts_update =(500); int read_distance_update =(500); //ミリシントごとに距離リーダーを更新しますtime_on_counter =0; //表示のカウンターon / offint time_on_count =100; // onint heart_beat =0になる秒数; //これを0から1から0に反転して、ハートビートを表示しますUltraSonicDistanceSensor distanceSensor(11、12); //デジタルピン13と12を使用するセンサーを初期化します。intdistance; int relays [] ={relay1、relay2、relay3}; int is_live [] ={0、0、0}; //ライブの場合は1、そうでない場合は0。私は3intdebug =5しか持っていません。 //これをデバッグメッセージのレベルに設定してシリアルプリンターに移動しますvoidall_change_to(int which){//すべてのリレーをHIGHまたはLOWに変更します。どちらかを教えてください:) digitalWrite(relay1、which); digitalWrite(relay2、which); digitalWrite(relay3、which);} void token_relays(int whichOne){lcd.setCursor(0、0); // lcd.print( "Relay on:");で現在のリレーを表示しますlcd.print(current_relay + 1); // current_relayはゼロベースのall_change_to(HIGH); //最初にすべてをオフにしますdigitalWrite(relays [current_relay]、LOW); //そしてacnt ++でオンにする必要があるものを設定します; //動作していることを示すための単なるカウンターlcd.print( ""); lcd.print(acnt);} void checkRelays(){// current_relayを次のリレーに移動します//最大に達した場合は、0から開始します//ここにいる間にtoggle_relaysを呼び出して、そうでないことを確認します空白またはデッドワンを請求しますcharge_time_counter ++; if(charge_time_counter> =Charge_time_max){current_relay ++; if(current_relay> =max_relays){current_relay =0; } toggle_relays(current_relay); Charge_time_counter =0; }} void read_distance(){// HC-S204からの距離を取得します// 80cm以内の場合は、ディスプレイをオンにして、カウンターの表示をリセットします//カウンターに到達した場合、80cm以内には何もありません。表示をオフにしますdistance =distanceSensor.measureDistanceCm(); //これらのコメントを解除して、測定された実際の距離を確認します// Serial.print( "Distance in CM:"); // Serial.println(distance); if(distance <80){//上記のシステムのコメントを解除し、lcd.backlight();を確認するために200未満の値にすることができます。 //表示をオンにしますtime_on_counter =0; } else {//多分オフになりますか? time_on_counter ++; if(time_on_counter> time_on_count){time_on_counter =0; lcd.noBacklight(); }}} void read_show_volts(){//各バッテリー入力でボルトを読み取ります// min_volts未満の場合、充電する価値のあるものはありません。その接続をスキップします//これは何度も呼び出されるため、ワイヤーがノックオフされた場合または//充電ループに入らないものは何でもvolts1 =analogRead(0);ボルト1 =(ボルト1 * 0.016); lcd.setCursor(0、1); lcd.print( ""); //行をクリアしますlcd.setCursor(11、0); lcd.print(volts1);ボルト2 =analogRead(1);ボルト2 =(ボルト2 * 0.0164); lcd.setCursor(4、1); lcd.print(volts2);ボルト3 =アナログ読み取り(2);ボルト3 =(ボルト3 * 0.0166); lcd.setCursor(11、1); lcd.print(volts3); //電圧をテストします。 10未満の場合は、バッテリーが切れている/不良である、またはバッテリーがないと仮定します。//ローテーションから外します。//すべてのリレーをクリアすることから始めます。inttemp_cnt=0; //すべての配列を0に設定します-これはオフですrelays [0] =0;リレー[1] =0;リレー[2] =0; if(volts1> min_volts){リレー[temp_cnt] =リレー1; //リレー1は適切ですtemp_cnt ++; } if(volts2> min_volts){relays [temp_cnt] =relay2; //リレー2は適切ですtemp_cnt ++; } if(volts3> min_volts){relays [temp_cnt] =relay3; //リレー3は適切ですtemp_cnt ++; } max_relays =temp_cnt; //これはlcdへのハートベットです-lcd.setCursor(0、1);を実行していることを示しています。 if(heart_beat ==1){lcd.print( "<>"); heart_beat =0; } else {lcd.print( "> <"); heart_beat =1; } lcd.print(charge_time_counter); read_distance();} void setup(){Serial.begin(19200); Serial.println( "開始"); lcd.begin(16、2); //横に16文字-2行lcd.backlight(); pinMode(relay1、OUTPUT); pinMode(relay2、OUTPUT); pinMode(relay3、OUTPUT); all_change_to(HIGH); //タイマーを設定します。 3つのタイマー-各バッテリーの充電器をオンにする時間、//電圧の更新を表示する頻度//距離の読み取りをチェックして、ディスプレイをオンにする頻度read_show_volts(); //初めて行うので、タイマーを待つ必要はありません。 checkRelays(); timer.every(chargeTime、checkRelays); timer.every(volts_update、read_show_volts);} void loop(){timer.tick(); //タイマーをチェックします} 

回路図

マルチプレクサの回路図

製造プロセス

  1. スマートブラインド
  2. Arduinoでコインアクセプターを制御する
  3. ArduinoTemp。 3.2ディスプレイを備えたモニターとリアルタイムクロック
  4. LEDを制御するBluetoothを搭載したArduino!
  5. Arduino Power
  6. Nextionディスプレイで遊ぶ
  7. ArduinoとNokia5110ディスプレイを備えたDIY電圧計
  8. Arduinoトレーニングプラットフォーム
  9. Nextionディスプレイを使用してFridgeyeアプリを構築する
  10. Arduinoで日射量を測定する
  11. スマートハンドグローブ