キャンディディスペンサー
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
|
このプロジェクトについて
プロジェクト
これは、IRセンサー、サーボ、および押しボタンのみを使用してキャンディーディスペンサーを作成する簡単な方法です。次のステップに分割できます:
- Arduino UnoR3の作成と使用
- Arduinoのコーディングとセットアップ
- ケーシングと機械部品の作成
- 電子機器の設置
- テストと使用法
これが短いデモビデオです:
私はまだコーディング言語を書くのが初めてなので、コーディングを書くことは私にとって最も難しい部分でしたが、何度もエラーが発生し、Google氏や友人の助けを借りてそれを行うことができました。コードを書くことは、プロジェクトのこの部分で最も長い時間です。
このキャンディーディスペンサーをやる気にさせてくれた男性の功績です!これは次の簡略版です: https://www.hackster.io/gatoninja236/candy-dispenser-with-google-assistant-564724
ボックスと機械部品の作成
これは、作成するプロジェクトの楽しい部分です。複数のエラーや部品が合わない場合、完全に完了するのに少なくとも1日かかりました。
ステップ1
コンポーネントのレイアウト
これは非常に厄介に見えるかもしれませんが、これは各コンポーネントを分類し、各パーツをテスト実行してエラーがあるかどうかを確認する最も簡単な方法です。見やすいように色違いのワイヤーをレイアウトしました。私はすべてのコンポーネントを段ボールに配置し、どれが最初に行くかを分類しました。
<図>
ステップ2
ボックスの作成
私は箱がどのように見えるべきかについての技術的な図面を描きました。ほとんどの部品はボール紙でできており、一部はアクリルでできています。次に、各部分を測定します。
- 前面と背面=20cm x 16cm(背面はアクリル)
- 側面-側面=12cm x 16cm
- 上下=20cm x 12cm
ステップ3
これは、それらをすべて一緒に取り付けた後の外観です(最初にマスキングテープを使用)。
<図><図>
<図>
次に、コンポーネントの場所を切り取ります:
- LCD =7.2cm x 2.5cm
- ボタン=1.2cm x 1.2cm
カップの場合:
- 長さx高さ=9cm x 12cm
- 幅x奥行き=9cm x 9cm
センサーも忘れずに切り取ってください:
<図>キャンディーがすぐに落ちないように、ディスペンサーを階段状にしました:
<図>
ステップ4
ブレッドボードとArduinoを並べて配置しました。アクリル絵の具を使って貼り合わせています。このようにそれは多くのスペースを節約します。
<図><図>
ステップ5
ボードへのコンポーネントの取り付けを開始します。 LCDとボタンから始めます。
<図><図>
次に、コンポーネントにすべてのケーブルを配線した後、ボックスの中央にケーブルを接続しました。
<図>サーボの取り付け:
<図>後ろから見るとこんな感じです。また、バッテリーを使用してディスペンサーの電源を入れるための電源ボタンを追加しました。
<図><図>
ステップ6
完成した外観。
<図>
コード
- キャンディディスペンサー
キャンディディスペンサー Arduino
// ------ LIBRARIES -----#include#include #include // ------ LIBRARIES --- -// 16文字と2行のディスプレイのLCDアドレスを0x27に設定しますLiquidCrystal_I2Clcd(0x27、16、2); Servo myservo; int pos =90; //サーボ開始位置intbuttonCLK =7; // buttonClockwise pinint buttonAntiCLK =6; // buttonAntiClockwise pin // int SensorPin =2; //デジタルピンNO.2 // intに接続されるIRセンサーsensorState =0; // sensorintセットのステータスに関する統計を保存するための変数sensorState =0; const intvoidPin =5; //赤外線障害物センサーをピン5に接続voidsetup(){lcd.begin(); // LCDを初期化しますlcd.clear(); myservo.attach(9); //サーボデジタル9pinMode(buttonCLK、INPUT); pinMode(buttonAntiCLK、INPUT); pinMode(avoidPin、INPUT); // avoidPinをINPUTSerial.begin(9600);として設定します。 lcd.backlight(); //ブラックライトをオンにしますlcd.setCursor(3,0); lcd.print( "ようこそ"); lcd.setCursor(3,1); lcd.print( "キャンディランド"); delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print( "キャンディーはいくらですか?"); lcd.setCursor(0,1); lcd.print( "A Little A Lot"); delay(5000);} void loop(){// ----------これはボタンのIF関数です----------- if(digitalRead(buttonCLK)==HIGH )// buttonClockwiseが押された{// TurnClockwise(); // SensorDetection(); lcd.clear(); lcd.print( "カップを置いてください"); delay(2000); lcd.clear(); set =set + 1; } if(digitalRead(buttonAntiCLK)==HIGH)// buttonAntiClockwiseが押された{// TurnAntiClockwise(); // SensorDetection(); lcd.clear(); lcd.print( "カップを置いてください"); delay(2000); lcd.clear(); set =set + 2; } if(set ==1){IRCLK(); } if(set ==2){IRAntiCLK(); } // ----------これはボタンのIF関数です-----------} void TurnClockwise(){Serial.println( "Candy 1 Being Dispensed"); CandyText1(); //キャンディタイプのテキストを表示for(pos =90; pos <180; pos + =1)// 0度から180度になります{myservo.write(pos); //サーボに変数 'pos' delay(15);の位置に移動するように指示します。 //サーボが位置に到達するまで15ms待機します} if(pos ==180){delay(2000); ThankYouText(); //ありがとうテキストを表示します}} void TurnAntiClockwise(){Serial.println( "Candy 2 Being Dispensed"); CandyText2(); //キャンディタイプのテキストを表示for(pos =90; pos <180; pos + =1)// 0度から180度になります{myservo.write(pos); //サーボに変数 'pos' delay(20);の位置に移動するように指示します。 //サーボが位置に到達するまで15ms待機します} if(pos ==180){delay(3000); ThankYouText(); //ありがとうテキストを表示します}} void IRCLK(){delay(1000); // 1秒の遅延を作成しますbooleanavoidVal =digitalRead(avoidPin); // pin4の値を読み取りますlcd.setCursor(0,0); lcd.print( "Detecting Cup"); lcd.setCursor(0,14); lcd.print( "..."); if(avoidVal ==LOW)//値がLOWレベルの場合{lcd.clear(); lcd.print( "カップ配置"); delay(2000); TurnClockwise(); }} void IRAntiCLK(){delay(1000); // 1秒の遅延を作成しますbooleanavoidVal =digitalRead(avoidPin); // pin4の値を読み取りますlcd.setCursor(0,0); lcd.print( "Detecting Cup"); lcd.setCursor(0,14); lcd.print( "..."); if(avoidVal ==LOW)//値がLOWレベルの場合{lcd.clear(); lcd.print( "カップ配置"); delay(2000); TurnAntiClockwise(); }} void CandyText1(){lcd.clear(); lcd.setCursor(4,0); lcd.print( "注ぐ"); lcd.setCursor(1,1); lcd.print( "Little Candy");} void CandyText2(){lcd.clear(); lcd.setCursor(4,0); lcd.print( "注ぐ"); lcd.setCursor(3,1); lcd.print( "Lot Candy");} void ThankYouText(){lcd.clear(); lcd.setCursor(5,0); lcd.print( "Thank"); lcd.setCursor(6,1); lcd.print( "あなた"); delay(15); software_Reset();} void software_Reset()//プログラムを最初から再起動しますが、周辺機器とレジスタをリセットしません{asm volatile( "jmp 0"); }
回路図
少し複雑に見えますが、カラー配線の様子に従ってください。 製造プロセス