洗濯機タイマー
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
| |||
| ||||
| ||||
|
アプリとオンラインサービス
> |
|
このプロジェクトについて
はじめに
これは私が持っている洗濯機の交換部品で、洗濯タイマーが壊れています。元のタイマーは機械式タイマー/方向スイッチで、次の方法で洗濯槽のモーターを制御できます。
- ユーザーからの洗浄時間の入力をx分行います
- 洗濯槽のモーターを時計回りに数秒間回転させます
- モーターを数秒間停止します
- 洗濯槽のモーターを反時計回りに数秒間回転させます
- モーターを数秒間停止します
- 洗浄タイマーが切れるまで最後の4つのステップを続けます
同じ操作ができる電子タイマーを作ります。
デモ
次のビデオは、この電子タイマーの動作を示しています:
ハードウェア
- Arduino Pro Mini: コードを実行し、すべてを制御します
- 1306 OLED: ユーザーの指示とタイマーのカウントダウンを表示する
- 赤/黒のプッシュボタン: タイマーを設定してタイマーを開始する
- 5Vリレーモジュール: モーターにAC電源を供給し、方向を制御します
- 5Vアダプター: 電子タイマーに電力を供給します
1306 OLEDは、次のようにプロミニに直接はんだ付けされています:
<図>2つのリレーモジュール、2つのプッシュボタン、Arduino Pro Mini + 1306OLEDはこのようにプロトボードに接続されています-
<図> <図>
プログラミング
ステップ1: HC-05 Bluetooth-Serialモジュールを入手し、このチュートリアルまたはこの手順に従って、ボーレートを57600に変更します。この手順を実行するには、別のArduinoUnoまたはUSBtoSerialモジュールが必要になります。
次のATコマンドを使用します
AT
AT + UART =57600,0,0
AT + RESET
ステップ2: ボーレートを57600に変更したら、次の配線図に従ってHC-05をArduino prominiに接続します
<図>ステップ3: Arduino IDEからボードを選択し、コードを貼り付けて[アップロード]をクリックします。
<図>Bluetoothシリアルを使用しているのは、システムフィールドでワイヤレスでプログラム可能な機能を有効にし、必要に応じてprominiのコードを更新するのに役立ったためです。
配線とデバイスの操作の説明
洗濯機の機種によって配線が異なる場合がありますので、説明します。右下隅の「シャープ」図に注意してください。1本の白線がメインから出て洗浄タイマーに接続され、1本の赤線と1本の青線が洗浄タイマーから出ています。これらの3本のワイヤーを元の(故障した)洗濯タイマーから外し、洗濯機の上部にある穴から引き出しました。
<図> <図>WHITEWIREに切り替えるとREDWIREモーターは時計回りに回転し、WHITEWIREに切り替えるとBLUEWIREモーターは反時計回りに回転します。
Arduino pro miniで作られたこの電子タイマーは、洗浄時間を追跡し、1つのリレー接点を介して白と赤のワイヤーを接続することにより、洗浄タブのモーターを一方向に5秒間回転させます。その後、モーターを停止し、5秒間待機します。その後、もう一方のリレー接点を介して白と青のワイヤーを接続することにより、タブのモーターを反対方向に5秒間回転させます。その後、停止し、さらに5秒間待機します。これらのタイミングシーケンスはすべて、必要に応じてコードから変更できます。
次の図は、AC入力主電源をモーターのコンデンサーの一方の脚またはもう一方の脚に切り替えるだけで、ACモーターの方向を変更できることを示しています。
<図>単相誘導電動機理論
参考資料
これらのチュートリアルで、各コンポーネントの詳細を学ぶことができます:
- リレーチュートリアル
- ボタンチュートリアル
免責事項!
このプロジェクトはAC主電源の供給を扱っており、自己責任で行ってください !
コード
- 無題のファイル
無題のファイル C / C ++
#include "U8glib.h" // SSD1306 oled waveshare(clk、din、cs、d / c、res); U8GLIB_SSD1306_128X64 u8g(A4、A5,12,11,10); volatile int rbc =0; volatile int bbc =0; int sec =0; int mi =0; int motor_rotation =0; void setup(){u8g.setRot180(); analogReference(INTERNAL); pinMode(2、INPUT_PULLUP); pinMode(3、INPUT_PULLUP); attachInterrupt(0、ISR_SW_RED、FALLING); attachInterrupt(1、ISR_SW_BLACK、FALLING); pinMode(5、OUTPUT); digitalWrite(5、LOW); pinMode(4、OUTPUT); digitalWrite(4、LOW);} void loop(void){while(!rbc){//タイマーセットメニューを表示u8g.firstPage(); do {draw_menu(); } while(u8g.nextPage()); //ユーザーに適切な操作メッセージを表示するif(rbc> 0 &&bbc ==0){u8g.firstPage(); do {draw_message(); } while(u8g.nextPage()); delay(2000); rbc =0; //u8g.clear(); }} //タイマーを開始if(rbc> 0){sec =59; mi =bbc-1; while(mi> =0){//カウントダウンタイマーメッセージを表示unsigned long temp =millis()+ 1000; while(temp> =millis()){u8g.firstPage(); do {draw_timer(); } while(u8g.nextPage()); } sec =sec-1; if(sec%5 ==0){control_motor(); // 5秒ごとに呼び出す} if(sec <=0){sec =59; mi =mi-1; }} rbc =0; bbc =0; mi =0;秒=0; digitalWrite(5、LOW); digitalWrite(6、LOW); }} //ループの終わりvoiddraw_menu(void){u8g.setFont(u8g_font_timB24); if(bbc <10){u8g.drawStr(22,30、 "0"); u8g.setPrintPos(38,30); u8g.print(bbc); } else {u8g.setPrintPos(22,30); u8g.print(bbc); } u8g.drawStr(54,30、 ":00"); u8g.setFont(u8g_font_8x13); u8g.drawStr(0,62、 "'洗濯タイマー'"); u8g.setFont(u8g_font_5x8); u8g.drawStr(0,47、 "赤:開始黒:設定時間"); } void draw_message(void){u8g.setFont(u8g_font_8x13); u8g.drawStr(0,10、 "SET WASH TIMER"); u8g.drawStr(0,23、 "FIRST BY PUSHING"); u8g.drawStr(0,36、 "THE BLACK BUTTON"); // u8g.setFont(u8g_font_8x13); u8g.drawStr(0,62、 "'洗濯タイマー'"); u8g.setFont(u8g_font_5x8); u8g.drawStr(0,47、 "赤:開始黒:設定時間"); } void draw_timer(void){u8g.setFont(u8g_font_timB24); if(mi <10){u8g.drawStr(22,30、 "0"); u8g.setPrintPos(38,30); u8g.print(mi); } else {u8g.setPrintPos(22,30); u8g.print(mi); } u8g.drawStr(54,30、 ":"); if(sec <10){u8g.drawStr(70,30、 "0"); u8g.setPrintPos(86,30); u8g.print(sec); } else {u8g.setPrintPos(70,30); u8g.print(sec); } if(motor_rotation ==0){u8g.setFont(u8g_font_5x8); u8g.drawStr(0,47、 "WASHING MOTOR CW Spin"); digitalWrite(5、HIGH); } if(motor_rotation ==1){u8g.setFont(u8g_font_5x8); u8g.drawStr(0,47、 "WASHING MOTOR STOPPED"); digitalWrite(5、LOW); digitalWrite(4、LOW); } if(motor_rotation ==2){u8g.setFont(u8g_font_5x8); u8g.drawStr(0,47、 "WASHING MOTOR CCW Spin"); digitalWrite(4、HIGH); } if(motor_rotation ==3){u8g.setFont(u8g_font_5x8); u8g.drawStr(0,47、 "WASHING MOTOR STOPPED"); digitalWrite(5、LOW); digitalWrite(4、LOW); } u8g.setFont(u8g_font_8x13); u8g.drawStr(0,62、 "'洗濯タイマー'"); } void ISR_SW_RED(){sei(); rbc ++; cli();} void ISR_SW_BLACK(){sei(); bbc ++; cli();} void control_motor(){motor_rotation ++; if(motor_rotation> 3){motor_rotation =0; }}
回路図
製造プロセス