一年生が終わり

1年生が先日終わりました。
自分の大学は1~2年になるときに留年が無いので一応みんな2年生になれます
まあだいたいやばい人はなにかしらで3年生になれないのですが…w

組み込み機器関連でロボットというのが大学の学科のテーマらしく
後期でライントレースロボットを班でつくりました。

ライントレース
(上からみるとT字みたいです。)

本当は二人一組で作る予定がなんやかんやで作業してたのは一人になってました。
……うん。勉強になった。

というのも7セグメントLEDを4つ使い、接近センサーも使ったのは面白かったかなと。

7セグメントLEDは左から前についてる接近センサーの距離を2桁のセンチメートル表示、左右のモータにかかっている電圧(おおよその回転数になる)の10段階表示になってます。
例えば
1009
だった場合

(前方との距離が)10(cmで) 
(左のモータにかかる電圧のレベルが)0 
(右のモータにかかる電圧のレベルが)9


といった感じです。この数字は取り込んだアナログデータをデジタル変換して個人的に段階分けして出した数値なのである程度の誤差を含みます。
ちなみにこの電圧のレベルというのはPICからモータドライバに送られる電圧をAD変換して10段階に分けています。分け方は大体なのでまあ、速いか遅いか止まってるかぐらいしかわかりませんがw

また機体の裏側にフォトセンサーがありこれでラインを読み取っているんですが、このフォトセンサーと電圧のAD変換、接近センサーのAD変換に必要なPICのポートがひとつのPICでは足らず2個使っています。
なので大まかに7セグメントなどの表示とライントレースで分担のようなことをさせています。

とまぁこんな感じになってますかね。おまけとして、接近センサーで読み取った距離のうちある程度近くなった場合車体を停止するようにもなっています。いわゆるスマートなんとかですね。

追記にはソースを貼っておきます。いやきたないw



前方の7セグメントのほう
int data[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
main(){
int SS,SR,SL,VF=0x70;
int PWM;
int j,c,d,e,f,g,p,q;

TRISA=0x0f;
TRISB=0x00;
TRISC=0x00;
PORTA=0;
PORTB=0;
PORTC=0;



while(1){
ADCON0=0x40;
ADCON1=0x02;
ADON=1;
__delay_us(20);
GO_DONE=0x01;
while(GO_DONE);

//距離についての条件文
if(ADRESH>=150)c=5;
else if(ADRESH>=110)c=10;
else if(ADRESH>=75)c=15;
else if(ADRESH>=65)c=20;
else if(ADRESH>=55)c=25;
else if(ADRESH>=45)c=30;
else if(ADRESH>=40)c=35;
else if(ADRESH>=35)c=40;
else if(ADRESH>=30)c=50;
else if(ADRESH>=26)c=60;
else if(ADRESH>=23)c=70;


ADCON0=0x48;
ADCON1=0x02;
ADON=1;
__delay_us(10);
GO_DONE=1;
while(GO_DONE);
if(ADRESH>=150)p=90;//右タイヤ
else if(ADRESH>=140)p=80;
else if(ADRESH>=130)p=70;
else if(ADRESH>=120)p=60;
else if(ADRESH>=110)p=50;
else if(ADRESH>=100)p=40;
else if(ADRESH>=90)p=30;
else if(ADRESH>=85)p=20;
else if(ADRESH>=80)p=10;
else if(ADRESH>=0)p=0;

ADCON0=0x50;
ADCON1=0x02;
ADON=1;
__delay_us(10);
GO_DONE=1;
while(GO_DONE);
if(ADRESH>=150)q=90;//左タイヤ
else if(ADRESH>=140)q=80;
else if(ADRESH>=130)q=70;
else if(ADRESH>=120)q=60;
else if(ADRESH>=110)q=50;
else if(ADRESH>=100)q=40;
else if(ADRESH>=90)q=30;
else if(ADRESH>=85)q=20;
else if(ADRESH>=80)q=10;
else if(ADRESH>=0)q=0;





g=c/10;
f=c%10;

d=q/10;
e=p/10;

for(j=0;j<20;j++)
{
PORTB=data[g];//4桁目g
PORTC=0x01;
__delay_ms(5);
PORTB=data[f];//3桁目f
PORTC=0x02;
__delay_ms(5);
PORTB=data[d];//2桁目
PORTC=0x04;
__delay_ms(5);
PORTB=data[e];//1桁目
PORTC=0x08;
__delay_ms(5);

}
}

}


後ろのライントレースのほう
main()
{
int SS,SR,SL,VF=0x70;
int select=0;
int c=0;
TRISA=0x0f;
TRISB=0x00;

PORTC=0x00;
TRISC=0x00;

CCP1CON=0x0c;
CCP2CON=0x0c;

T2CKPS0=0;
T2CKPS1=1;

PR2=130;

CCPR1L=0;
CCPR2L=0;

TMR2ON=1;

PORTC=0x11;

while(1)
{

ADCON0=0x58;
ADCON1=0x02;
ADON=1;
__delay_us(10);
GO_DONE=1;
while(GO_DONE);
if(ADRESH>=150)c=5;
else if(ADRESH>=110)c=10;
else if(ADRESH>=75)c=15;
else if(ADRESH>=65)c=20;
else if(ADRESH>=55)c=25;
else if(ADRESH>=45)c=30;
else if(ADRESH>=40)c=35;
else if(ADRESH>=35)c=40;
else if(ADRESH>=30)c=50;
else if(ADRESH>=26)c=60;
else if(ADRESH>=23)c=70;

ADCON0=0x50;
ADCON1=0x02;
ADON=1;
__delay_us(10);
GO_DONE=1;
while(GO_DONE);
SL=ADRESH;

__delay_us(10);

ADCON0=0x48;
ADCON1=0x02;
ADON=1;
__delay_us(10);
GO_DONE=1;
while(GO_DONE);
SS=ADRESH;

__delay_us(10);

ADCON0=0x40;
ADCON1=0x02;
ADON=1;
__delay_us(10);
GO_DONE=1;
while(GO_DONE);
SR=ADRESH;

__delay_us(10);

if(c<=10)
{

CCPR1L=10;
CCPR2L=10;
__delay_ms(100);
}
else
{


if(SL>=VF&&SS>=VF&&SR>=VF)//111
{
// PORTC=0x28;
CCPR1L=130;
CCPR2L=130;
// __delay_ms(10);
select=5;

}

else if(SL=VF)//001
{
// PORTC=0x28;
CCPR1L=20;
CCPR2L=130;
select=1;

}

else if(SL=VF&&SR>=VF)//011
{
// PORTC=0x28;
CCPR1L=70;
CCPR2L=130;
select=2;

}

else if(SL>=VF&&SS {
// PORTC=0x28;
CCPR1L=130;
CCPR2L=20;
select=3;

}

else if(SL>=VF&&SS>=VF&&SR {
// PORTC=0x28;
CCPR1L=130;
CCPR2L=70;
select=4;
}

else if(SL {
if(select==1)
{
CCPR1L=20;
CCPR2L=130;

}
else if(select==2)
{
CCPR1L=0;
CCPR2L=130;
}
else if(select==3)
{
CCPR1L=130;
CCPR2L=20;
}
else if(select==4)
{
CCPR1L=130;
CCPR2L=0;
}
// else
// {

// }
}
else
{
PORTC=0x11;
CCPR1L=130;
CCPR2L=130;
}
}

}
}

コメント

非公開コメント

拍手

web拍手

FC2カウンター

現在の閲覧者数:

検索フォーム

Twitter...

プロフィール

Head

Author:Head
どもこんにちわHeadです
ゲームのこととか書こうとブログやり始めたら、
もっぱらギターばかりになってました。
最近はVR関連に興味がむいてます。それとunity

{ギター歴:2010.6/27~現在}
{unity:2014.8月~現在}


連絡用のメアド貼っておきます。何かあったら送ってください
head399★gmail.com(★は@に変えてください)

最新トラックバック

ブロとも申請フォーム

QRコード

QRコード