|
|
本帖最後由 technic化學 於 2014-10-22 16:42 編輯
化學我好久沒有新作品了(影片編輯中~請約等30分鐘~謝謝)
這次為大家帶來~永遠不會讓你贏的機器
外觀就像個普通的盒子
(請繼續往下看~會有影片)
![]()
淺灰&深灰~一點也不複雜
![]()
![]()
當你把紅色桿子推向藍色區時
![]()
看似平靜的箱子突然跳出一根桿子!!!
並推紅色桿子回紅色區
![]()
接著一切就恢復平靜~
不斷重複~
你永遠不會贏!!!
當然不會那麼無趣~
還有花招!
請看影片
![]()
好玩嗎?
讓我們繼續看看機構
下面是底盤
兩顆輪胎讓他左右移動
![]()
這裡設計很久~
為了讓大家看不出來有蓋子~
所以要開合的快速、緊密
但因為旋轉點的問題會卡到
最後用這個動解決問題
![]()
不懂我再說甚麼嗎?
看這張應該就會瞭解了
![]()
拆開囉
![]()
盒子長這樣
![]()
中間的洞是給紅色桿子穿過的~
後面(看不到)還有一個洞~
是給超音波感應器的~
![]()
這就是讓推桿出來的蓋子
![]()
打開像這樣
![]()
空殼子~
![]()
打開~
![]()
接下來講這台複雜的東西了
![]()
中間那顆是顏色感應器~
感應推桿位置
旁邊的超音波感應器~
運用在側邊移動&縮下
還有一堆纏繞的線
![]()
底盤
馬達驅動方式就直接傳動
但因為兩顆馬達旋轉出來的移動方向會相同
造成機器原地旋轉而不是左右移動
所以還要加裝別的(請看下一張圖)
![]()
就是這個~8869反轉開關
讓同樣旋轉方向的電流相反
![]()
推桿的方面~就是很簡單的連桿
![]()
這是下縮的機構~與推桿一樣的方式
![]()
這是左右移動的系統~怕大家不了解~在拉出來
![]()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
但這次除了機器設計麻煩以外
還有程式~這裡不另外解釋~自己看吧(可以跳過
共159行:
sub readcolor(int aaa)
{
int colorval;
colorval = Sensor(S2);
if(colorval == 5)
{
Wait(Random(1301));
RotateMotor(OUT_B,100,-91);
RotateMotor(OUT_B,100,91);
}
}
task shutnow()
{
int slt;
while(true)
{
if(ButtonPressed(BTNLEFT,true) == 1)
{
slt = 10;
repeat(10)
{
ClearScreen();
NumOut(45,29,slt);
Wait(1000);
slt -= 1;
}
SleepNow();
}
}
}
task main()
{
start shutnow;
SetSensorColorFull(S2);
SetSensorLowspeed(S1);
int colorval2;
int onet;
int num1;
int rd;
int dw;
int time1;
while(true)
{
OnFwdReg(OUT_A,35,OUT_REGMODE_SPEED);
until(MotorOverload(OUT_A) == 1);
Off(OUT_A);
onet = 0;
while(onet <= 1)
{
Wait(50);
colorval2 = Sensor(S2);
if(colorval2 == 5)
{
onet += 1;
RotateMotor(OUT_B,100,-91);
RotateMotor(OUT_B,100,91);
}
}
onet = 0;
time1 = Random(3);
time1 += 2;
while(onet <= time1)
{
Wait(50);
colorval2 = Sensor(S2);
if(colorval2 == 5)
{
onet += 1;
Wait(Random(1301));
RotateMotor(OUT_B,100,-91);
RotateMotor(OUT_B,100,91);
}
}
while(SensorUS(S1) < 15);
{
}
onet = 0;
time1 = Random(3);
time1 += 1;
while(onet <= time1)
{
if(SensorUS(S1) <= 10)
{
onet += 1;
num1 = Random(2);
num1 += 1;
switch(num1)
{
case 1:
OnFwd(OUT_C,100);
Wait(500);
Off(OUT_C);
readcolor(0);
Wait(1000);
OnRev(OUT_C,100);
Wait(540);
Off(OUT_C);
readcolor(0);
break;
case 2:
OnRev(OUT_C,100);
Wait(500);
Off(OUT_C);
Wait(1000);
readcolor(0);
OnFwd(OUT_C,100);
Wait(540);
Off(OUT_C);
readcolor(0);
break;
default:
readcolor(0);
break;
}
}
else
{
readcolor(0);
}
}
time1 = Random(2);
time1 += 1;
onet = 0;
while(onet <= 2)
{
if(SensorUS(S1) <= 10)
{
onet += 1;
RotateMotor(OUT_A,100,-55);
rd = Random(2001);
rd += 2500;
Wait(rd);
OnFwdReg(OUT_A,55,OUT_REGMODE_SPEED);
until(MotorOverload(OUT_A) == 1);
Off(OUT_A);
}
else
{
readcolor(0);
}
}
dw = 0;
while(dw == 0)
{
colorval2 = Sensor(S2);
if(colorval2 == 5)
{
Wait(2500);
RotateMotor(OUT_B,100,-35);
Wait(1500);
RotateMotor(OUT_B,100,35);
Wait(3500);
RotateMotor(OUT_B,100,-91);
RotateMotor(OUT_B,100,91);
dw = 1;
}
}
}//while(t)
}//task
就這樣囉~
謝謝觀看
要多回文喔(當然也要給P幣XD(遭毆 |
評分
-
查看全部評分
|