検索:
ペットにタイマーで餌をあげるフィーダーを自作してみた

日帰り旅行で帰りが遅くなる時など「ペットの餌やりをどうしよう?」ってなりますよね。

そんな時に役に立つ、タイマーでペットに自動で餌をあげる「餌自動フィーダー」を自作してみました。夏休みの自由研究などにもおススメです。

完成イメージ図

用意するもの

制御基板Arduino UNO
モータドライバSU-1201(株式会社イーケイジャパン)
モータMG-12V-1:380(Olimex LTD)

シャッタ制御部をつくる

まずは一番重要なシャッタをタイマーで開閉する制御部分を作ります

モータドライバ(SU-1201)
制御基板(Arduino UNO)

まずはじめに制御基板とモータドライバをドッキングします。

・ArduinoのDIGITAL 0番ピンとモータドライバ基板のJ2-0 番ピンの位置
・ArduinoのANALOG A5番ピンとモータドライバ基板のJ4-A5 番ピンの位置
が合うようにして、しっかりと奥まで差し込みます。

プログラミングをするための、Arduinoの開発環境「Arduino SDK」をインストールします。
参考サイト:https://www.kkaneko.jp/tools/win/arduinoide.html

COMポートの指定

Arduino SDKを立ち上げて、COMポートを指定します。
ArduinoとPCをUSBケーブルで接続すると、該当するCOMポート番号に(Arduino UNO)が表示されるので、それを選択します。

Arduinoタイプの指定

ArduinoのタイプをTools -> Boad: > ●Arduino AVR Boards > から、「Arduino UNO」を選択してください

サンプルプログラムの実行

以下のサンプルコードを実行し、開発環境が構築できていることを確認します

void setup() {
  // put your setup code here, to run once:
  pinMode(8, OUTPUT);
  pinMode(12, OUTPUT);
}

void loop() 
{
  // put your main code here, to run repeatedly:
  digitalWrite(8, HIGH);
  digitalWrite(12, LOW);
  delay(1000);
  digitalWrite(8, LOW);
  digitalWrite(12, HIGH);
  delay(1000);
}

Upload(右矢印マーク)ボタンを押して、プログラムを転送・実行します。

モータドライバ基板の2つのLEDが赤く1秒ずつ交互に点灯したらOKです。

実際にモータを動かしてみる

下記のコードを入力すると、モータが正転(1秒)⇒停止(1秒)⇒逆転(1秒)⇒停止(1秒)と動作します。

void setup() {
  // put your setup code here, to run once:
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop() 
{
  // put your main code here, to run repeatedly:
  analogWrite(9, 160); //回転スピードの設定
  digitalWrite(4, LOW); //回転方向の設定
  digitalWrite(5, HIGH);
  delay(1000);

  analogWrite(9, 0); //回転スピードの設定
  delay(1000);

  analogWrite(9, 160); //回転スピードの設定
  digitalWrite(4, HIGH); //回転方向の設定
  digitalWrite(5, LOW);
  delay(1000);

  analogWrite(9, 0); //回転スピードの設定
  delay(1000);
}

次にタイマーを入れます

  analogWrite(9, 0); //回転スピードの設定
  delay(3600000); //設定したいタイマー値 [ms]

このコードを14行目の前に入れれば、タイマーが作動します。delayの()に入る数字がミリ秒単位のタイマー値なので、目的に合わせて数値を入れてください。

1時間なら、60×60×1,000で3,600,000となります。

装置を作る

百均で以下の材料を購入

段ボールなどで各パーツを作り、組み立て

・土台(フレーム)は、百均で購入した木を木工用ボンドで接着

・餌を入れるホッパは、トイレットペーパーの芯がぴったりだったので、それを段ボールにはめて使用

・滑り台の部分はプラダンを折り曲げて固定して使用

完成した装置の外観

お宝ホリダー

今回はお宝ホリダーの作成方法をご紹介します。

参考書籍「Scratchでゲームをつくって楽しく学ぼう」(技術評論社)

①ステージにコードを書きます

「ゲーム準備」「ゲームスタート」「ゲームクリア」等のメッセージや、「スコア」「ハイスコア」「パネル番号」などの変数を作成しながらコーディングしてください。

②パネルにコードを書きます

リスト「てもちのパネル」を作成してください

変数「i」も作成してください

続けて下記をコーディングします

ここまでできたら「ゲーム準備を受け取ったとき」の部分をクリックしてみてください。

このとき、画面に1~25のブロックがランダムに配置されれば、正しくコーディングできています。

効果音

続けて効果音の部分をコーディングします

正解ブロックを押したら「pop」音が鳴り、ブロックが消えるようになります。

不正解のブロックを押したら、「boing」音が鳴り、ブロックは消えません。

テロップ

文字のスプライトに以下のコードを書きます

ゲームクリア時の処理

背景に下記のコードを追加

お宝ゲージを追加

お宝ゲージに下記のコードを追加します。

「お宝ゲージ」変数も追加してください

素早くパネルを消せたらゲージが増えるようにする

変数に「まえの時間」を追加して、ステージにあるコードに画像にあるコードを追加します。

「まえの時間」1つ前のパネルをクリックした時刻を記憶するための変数です。

次に「パネル」のコードに以下を追加します。

前のパネルを消してから次のパネルを消すまで、1秒未満でできればパネルゲージを1つずつ増やします。

またクリックされるたびにまえの時間をタイマー値にリセットします。

ゲージに合わせてお宝を表示する

現在はランダムで表示を切り替えているので、これをお宝ゲージに合わせて変えるように変更します

以下のように条件に合わせて変更するようにします

ホリダくんを動かす

ホリダ君を動かしてみましょう

速く消せたときの音を変える

ネプリーグみたいなクイズをScrachで作る①

ネプリーグみたいな漢字の読み方を当てるクイズをScrachで作る方法を紹介します。

正解のリストを作る

「変数」タブの「リストを作る」をクリックして、リストを作ります

左下の「+」ボタンを押して、問題の答え(この場合は漢字の読み方)のリストを作ります。

ネコのスプライトのコードに下記を入力します。

出題する漢字を作る

漢字用のスプライトを作成し、コスチュームを問題分だけ追加して作成します。

漢字用のスプライトに下記のコードを入力します

音楽も入れてみます。

好きなBGMをフリー素材でダウンロードして、それがランダムで流れるようにします。

ネコのスプライトのコードに得点の加算を追加します

Scrachでブロック崩しゲームを作る②

前回に引き続き、Scrachでブロック崩しゲームを作る方法を紹介します。

今回は、新しい種類のブロック(跳ね返らないブロック・2回当てないと壊れないブロック)の作り方を紹介します。

1.通過するブロック

Button3を選択して右クリックして「複製」を選択します。

新しく複製されたButtonのスプライトコードから「ブロック接触を送る」を削除します。

これで透過するブロックは完成です。

ただ、このままでは複製する前のブロックと同じ場所に表示されてしまい、どちらかが見えなくなってしまうので、表示する場所をずらします。

ずらしたいButtonスプライトの位置を定義している箇所を直せば、場所を変更できます。

↑こちらは高さ方向(y座標)の位置を変更する時に変える場所です。

2.二回当てないと消えないブロック

先ほどと同じように、Button3を複製して新たなブロックを作ります。

コスチュームを追加して

コスチューム1:最初の状態

コスチューム2:一回当たった状態

の見た目を作ります。

そして、ブロックを消している条件のところに「もし・でなければ」を追加し、

・コスチューム番号が1なら:次のコスチュームにする

・でなければ(つまりコスチューム番号が2なら):このクローンを削除する

を追加します。

これで2回当てないと消せないブロックを追加できます。

透過ブロックと同じように、このブロックを配置する座標も普通のブロックとずらせば完成です。

Scrachでブロック崩しゲームを作る①

今回は、Scrachで↑このようなブロック崩しゲームの作り方を紹介します。

スプライトには「Paddle」「Ball」「Button3」の3つを使います。

1.受け皿(Paddle)の操作部分の作成

最初に受け皿をキー操作で動かす部分を作ります。
「Paddle」のスプライトを選択し、以下のコードを作ります。

こうすると、左右キーで受け皿を動かせるようになります。

また、ボールと接触した時に「メッセージ1」を送るようにしています。

2. ボールの制御

次にボールを動かすところを作ります。

まずは音を選びます。

「音」タブの画面の左下の「+」マークを押して、好きな音を追加します。

以下の時に鳴らす音を、自由に選んでみてください。

 ① ボールが受け皿に当たって跳ね返るとき

 ② ボールがブロックに当たってブロックが壊れるとき

 ③ ボールが落ちてゲームオーバーになったとき

ここでは、①「Wobble」、②「Suction Cup」③「Alien Creak2」としてみました。

「Ball」のスプライトに以下のコードを作ります。

・ボールの落下とゲームオーバーの処理

・ボールが受け皿に当たったときの処理

・ボールとブロックが接触した時の処理

※ イベントの「新しいメッセージ」から「ブロック接触」というメッセージを追加しました

3. ブロックの処理

「Button3」のスプライトに以下のコードを追加します

・ブロックの配置処理

・ブロックの接触(消去)処理

以上で以下のような、ブロック崩しゲームの完成です。

ぜひ改良して、自分だけのオリジナルステージなど作ってみてください!

Scrachでマリオ系のアクションゲームを作る③

前回は主人公をジャンプさせる方法を紹介しました。

次にステージを作る方法を紹介します。

Tiledのインストール

ステージの作成には第1回でも紹介したSuperpowers Asset Packを活用してみたいと思います。

ステージの編集ソフトは Tiled というフリーソフトを使うと簡単に行えます。

Tiled をダウンロードしたら立ち上げて、新しいプロジェクトを作成します。
次に新しいマップを作成します。

Scrachの画面サイズは「480 × 360」なので、分かりやすくそれに合わせたステージを作成します。

今回素材として使用する Superpowers Asset Pack の最小単位に合わせて

・タイルの大きさ:幅 8 px、高さ 8 px
・マップの大きさ:「固定」⇒「幅 60:タイル(480ピクセル)」×「高さ 45:タイル(360ピクセル)」

Superpowers Asset Packのタイルセットを開きます。

↓タイルセットの場所↓

(任意のパス)/superpowers-asset-packs-master/prehistoric-platformer/background-elements/tileset-1.png

※タイルファイルを選択する際、「マップに埋め込み」にチェックを入れます。

タイルファイルを開くと下図のように、右下の「タイルセット」の領域に素材が表示されます。

タイルセットをマウスでドラッグして、使用したい領域分を選択します。

左クリックで、ハンコを押すようにペタペタと好きなタイルを貼り、ステージを作っていきます。

ステージが完成したら、画像ファイルとして保存します。

C#でList型の2次元配列を使う

行ごとに大きさが変動するような2次元配列を使いたいときは、List型の2次元配列を使うと便利です。

下記のように使用します。

       public void DataGet(string[] data_lines) {

            //int j = 0;
            Boolean is_first = true;

           // 最初のドラッグ&ドロップで取得するデータ
            if (IsData == false)
            {
                this.titles = data_lines[0].Split(',');   // 先頭行を1次元配列で取得
            }

            list_num = data_lines.Length;


            foreach (string line in data_lines)
            {
                List<int> Items = new List<int>();

                // データを一次元配列に入れる
                string[] cells = line.Split(',');   // cells[]に各行の値1次元配列で取り込む

                if (is_first == true)
                {
                    is_first = false;
                }
                else {
                    /* データ */
                    for (int j = 0; j < cells.Length; j++)
                        if (cells[j] == "") {
                            break;
                        }else
                        {
                        Items.Add(Convert.ToInt16(cells[j]));
                    }
                    pList.Add(Items);
                }
            }
      }    

リストのサイズの最大値を取得する場合は下記のように記述します。

                PS_F.DataGet(data_lines);
                int ColNumMax= PS_F.pList.Count;//50
                int ColNumMin = PS_F.pList.Max(innerList => innerList.Count);

データの指定方法は下記のように記述します。

int value = PS_F.pList[3][7];  // 3行目の7列目を取得する
Githubを使ったチーム開発①

Githubを使ったチーム開発の方法を簡単に説明します。

1. Github でリモートリポジトリを作成

  • リモートリポジトリとは・・・
    他のコンピュータまたはネットワーク上にあるフォルダ・ファイルの保管場所のこと
  • 作成方法
    • github の画面右上にある「+」をクリックする  ⇒ New repository を選択
    • 任意の Repository name を入力
      アップロードするフォルダまたはファイル名など
    • Create repository をクリック

2. コマンドラインを使ってローカルリポジトリを作成

  • ローカルリポジトリとは・・・
    自分のPC内にあるフォルダ・ファイルの保管場所
  • 作成方法
    • コマンドライン(ターミナル)を開く
    • cd フォルダのパスコマンドを実行し、アップロードするフォルダへ移動する
    • git initコマンドを実行して、ローカルリポジトリを作成する
      • 実行後、Initialized empty Git repository 〜 と表示されれば、作成完了。
    • git add . コマンドを入力して、対象フォルダ内のファイル・フォルダをステージングさせる(コマンド実行後は、特に何も表示されません)
      • 「.」 : カレントディレクトリ直下にある全てのフォルダ・ファイルを指定
      • ステージング : アップロード対象として指定(コミット)すること
    • git commit -m "コミット名" コマンドを実行し、ステージング対象を保存する
       コミット名: 何のコミットなのかを識別するための名前 ⇒ 書き方は自由
      • コマンド実行後は、コミットの内容が表示されます。
C:\baictCorn>git init
Initialized empty Git repository in C:/baictCorn/.git/

3. ローカル リポジトリと github(リモートリポジトリ) の関連付け・アップロード

  • git remote add origin URL名 コマンドを実行し、ローカル リポジトリと github(リモートリポジトリ)を関連付ける(リモートリポジトリを追加する)※ コマンド実行後は、特に何も表示されません。
    • origin: 追加するリモートリポジトリ名
    • URL名 : 追加するリポジトリ(ローカルリポジトリを作成したときの画面に表示される HTTPS の URL をコピペする)
  • git push -u origin main を実行し、ローカルリポジトリの main ブランチを リモートリポジトリの main へプッシュ(アップロード)します。
    • ※エラーが出るときは「main」を「master」に変更してみてください。
  • 以上でアップロード完了です。
  • 以下でブランチ名を確認することができます。
    • git branch
C:\baictCorn>git branch
* master

C:\baictCorn>git push -u origin master
Enumerating objects: 399, done.
Counting objects: 100% (399/399), done.
Delta compression using up to 8 threads
Compressing objects: 100% (360/360), done.
Writing objects: 100% (399/399), 13.32 MiB | 5.72 MiB/s, done.
Total 399 (delta 124), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (124/124), done.
To https://github.com/abstech2022/BaictCorn.git
 * [new branch]      master -> master
branch 'master' set up to track 'origin/master'.
Scrachでマリオ系のアクションゲームを作る②

前回は主人公を左右に移動させる方法を紹介しました。

ここでは主人公をジャンプさせる方法について記載します。

ジャンプ動作の実装

ではジャンプのコードを実装してみましょう。ジャンプのコードは下記になります。

ここでは「Y座標=-124」を地面とした場合のソースコードを記載しています。
これを前回の左右へ移動するコードと並列に記載することで、ジャンプしながら左右への移動も可能になります。

コスチュームの設定

次にジャンプ動作時のコスチュームを設定します。コスチュームを確認すると、12 ⇒ 13 ⇒ 14 ⇒ 12・・・と変化させると、髪をなびかせながら上昇していくモーションを実現できそうです。

同様に、下降時は15 ⇒ 16 ⇒ 17 ⇒ 15・・・と変化させることで、膝を曲げながら髪をなびかせて下降する動きになりそうです。

ここでは「状態」という変数を作成し、「状態=0」は着地状態、「状態=1」なら上昇中、「状態=2」なら下降中、という具合にしてみたいと思います。

状態の設定は、先ほど作成したジャンプ動作の部分に追記します。

これで動作に合わせて状態が変わるようになりました。

最後に状態の値に合わせてコスチュームを変化させる部分を実装します。

これでジャンプができるようになったと思います。

こちらがScrachのサンプルです。

これでプレーヤーの基本動作はできるようになったので、次回はステージのスクロール方法を紹介したいと思います。