実際の動き
日本語バージョン | 英語バージョン |
---|---|
経緯
コロナ禍でお店に遊びに行きにくいですが、これならお家でクレーンゲームが楽しめます。
夏休みの宿題で作りました。
配線図はFlitzingで初めて描いてみました!!!
ほかの作品の配線図も描きたいのですが、パーツがなくてかけないので残念です。
動画の英語バージョンはCoolest Projectに応募するために、英語を教えてもらいながら作りました。
外観
機構(構造)
1.前後左右の機構
]
前後左右の機構です。
ラダーチェーンを使うことで前後左右に動かしていますが、夏休みの宿題で学校に持っていきたかったので、コンパクトにしようとしたため、可動域はあまり広くありません。
2.アームを下ろす機構
タミヤのミニモーターでアームを上下させています。
ミニモーターを左右に動かすためのスライダーはカーテンレールを切って使いました。
3. アームの機構
3つのサーボモーターを同時に動かすためにPCA9685搭載16チャネル PWM/サーボ ドライバー (I2C接続)を使いました。
ボタンを押してアームの開閉をします。
配線
プログラム
前後左右のプログラム
int val_ud;
int val_lr;
void u() {
digitalWrite(2, HIGH);
digitalWrite(4, LOW);
}
void d() {
digitalWrite(2, LOW);
digitalWrite(4, HIGH);
}
void r() {
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
}
void l() {
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
}
void s() {
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
void setup()
{
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop()
{
val_ud = analogRead(A4);
val_lr = analogRead(A5);
Serial.println(val_ud);
delay(1);
Serial.println(val_lr);
delay(10);
if (val_lr < 300) {
l();
delay(1);
} else if (val_lr > 800) {
r();
delay(1);
} else if (val_ud < 300) {
u();
delay(1);
} else if (val_ud > 800) {
d();
delay(1);
} else {
s();
delay(1);
}
}
上下の動き・アームの開閉
int val_ud;
#include <Wire.h>
#include <PCA9685.h>
PCA9685 pwm = PCA9685(0x40);
#define SERVOMIN 120
#define SERVOMAX 350
void setup() {
pwm.begin();
pwm.setPWMFreq(50);
Serial.begin(9600);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
}
int n = 90;
int ch0 = 0;
int ch1 = 1;
int ch2 = 2;
void loop() {
val_ud = analogRead(A4);
Serial.println(val_ud);
delay(200);
if (val_ud < 300) {
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
delay(1);
} else if (val_ud > 800) {
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
delay(1);
} else {
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(1);
}
// servo_write(ch0,n);
// n=n-10;
// if(n<=40)n=100;
// delay(0);
if (!digitalRead(7)) {
catch1();
}
if (!digitalRead(8)) {
serv(90);
}
}
void servo_write(int ch, int ang) {
ang = map(ang, 40, 100, SERVOMIN, SERVOMAX);
pwm.setPWM(ch, 0, ang);
delay(100);
}
void serv(int ang) {
ang = map(ang, 40, 100, SERVOMIN, SERVOMAX);
pwm.setPWM(0, 0, ang);
pwm.setPWM(1, 0, ang);
pwm.setPWM(2, 0, ang);
delay(100);
}
void catch1() {
serv(n);
delay(50);
serv(85);
delay(50);
serv(80);
delay(50);
serv(75);
delay(50);
serv(70);
delay(50);
serv(65);
delay(50);
serv(60);
delay(50);
serv(55);
delay(50);
serv(50);
delay(50);
delay(1500);
}
}
今後やっていきたいこと
クレーンゲームにBGMを付けたり、ライトで装飾したりしたいです。
今回は自動で初期位置に戻せなかったので
リミットスイッチを使い、自動で初期位置に戻すことができるようにしたいです。
材料
板
制御ボックス(下部)
1、30×15cm・・・2枚
2、30.5×15cm・・・2枚
3、30×30cm・・・3枚
4、30×30㎝(内側をくり抜く)・・・1枚
高さ(柱)
5、2.5×2.5×45cm・・・4本
制御ボックス(上部)
6、7×30cm・・・4枚
Arduino Uno・・・2台
DCモーター・・・大2台(タミヤ)、ミニ1台(タミヤ)、モータードライバー
サーボモーター 3台
モータードライバー(TA77191p)
ラダーチェーン&スプロケットセット(タミヤ)
ユニバーサルプレート
ブレッドボード
ジョイスティック
タクトスイッチ
ジャンパーコード
遊び方
電源を入れる。(上:1カ所、横:3カ所、9ボルト電池をスナップに付ける。)
前後左右のジョイスティック(向かって左)でアームの位置を決める。
赤いボタンでアームを開く。
上下のジョイスティック(向かって右)でカプセルの上にアームを移動させる。
青いボタンでカプセルをつかむ。
上下のジョイスティックで少し上に移動させる。
前後左右でカプセル取り出し口へ移動し、赤いボタンでカプセルを落とす。
投稿者の人気記事
-
LEGOTARO
さんが
2021/02/07
に
編集
をしました。
(メッセージ: 初版)
-
LEGOTARO
さんが
2021/02/07
に
編集
をしました。
-
LEGOTARO
さんが
2021/02/07
に
編集
をしました。
-
LEGOTARO
さんが
2021/02/08
に
編集
をしました。
ログインしてコメントを投稿する