閲覧総計:18187 (本日:1 昨日:0)
【目次】
無線送信機を設計、製作しました。
2つのスイッチを用意し、左右のモータを独立に前進・後進
制御する事で、ラジコンカーを自由に操縦出来る様に考えてみました。
06/11/03
/** * 無線データ送信(車の操縦) * * PIC 16F628A * 発信器:内臓4MHz * 電源:乾電池3本(4.5V) * switch: RA0,RA1,RA2,RA3 * LED: RB6 * * Device Flags: _BODEN_OFF _BOREN_OFF _CP_OFF _PWRTE_ON _WDT_OFF * _LVP_OFF _MCLRE_OFF _INTRC_OSC_NOCLKOUT * * 言語 MikroC v2.1 */ void main() { //メインプログラム PORTA = 0b00000000; //PORTAの中身をきれいにする PORTB = 0b00000000; //PORTBの中身をきれいにする CMCON = 0b00000111; //PORTAをデジタル入出力使用に設定 TRISA = 0b00000001; //RA0を1:入力に、他を0:出力に設定 TRISB = 0b00000010; //PORTB RB1:入力、他7ヶは出力設定 Usart_Init(2400); //通信速度を2400 band rateに設定 do { //doとwhileの間を繰り返す if(PORTA.F0 == 1) { //右前進 if(PORTA.F1 == 1) { //左前進 Usart_Write('A'); //A:左右前進を送信 } else { if(PORTA.F3 == 1) { //左後進 Usart_Write('B'); //B:左後進、右前進を送信 } else { Usart_Write('C'); //C:右前進を送信 } } } else { //右前進off if(PORTA.F1 == 1) { //左前進 if(PORTA.F2 == 1) { //右後進 Usart_Write('D'); //D:左前進、右後進を送信 } else { Usart_Write('E'); //E:左前進を送信 } } else { if(PORTA.F2 == 1) { //右後進 if(PORTA.F3 == 1) { //左後進 Usart_Write('F'); //F:左後進、右後進を送信 } else { Usart_Write('G'); //G:右後進を送信 } } else { //右後進off if(PORTA.F3 == 1) { //左後進 Usart_Write('H'); //H:左後進を送信 } else { Usart_Write(0); //ストップ(off) } } } } Delay_ms(10); //10ミリ秒待つ PORTB.F6 = ~PORTA.F0; //発光ダイオード点滅 } while(1); //doとwhileの間を繰り返す } //メイン終わり
操縦の方も満足です。応答も速いし、前へ後ろへ右へ左へ自由自在。
急速回転も出来ます。(無理な運転をするとキャタピラがはずれる
のが難点)無線も5〜6mは届きます。 06/11/03
/** * 無線データ受信、車動作 * * PIC 16F628A * 発信器:内臓4MHz * 電源:乾電池4本(6.0V) * 右モータ: RB0, RB3 左モータ: RB4, RB5 * LED: RB6 * * Device Flags: _BODEN_OFF _BOREN_OFF _CP_OFF _PWRTE_ON _WDT_OFF * _LVP_OFF _MCLRE_OFF _INTRC_OSC_NOCLKOUT * * 言語 MikroC v2.1 */ void main(){ //メインプログラム unsigned short int data; PORTB = 0b00000000; //PORTBの中身をきれいにする TRISB = 0b00000010; //PORTB RB1:入力、他7ヶは出力設定 //稼働確認 1秒前進 PORTB = 0b00100001; //左前進、右前進 Delay_ms(1000); //1秒待つ PORTB = 0b00000000; //ストップ(OFF) Usart_Init(2400); //通信速度を2400 band rateに設定 do { //doとwhileの間を繰り返す if(Usart_Data_Ready()){ //受信状態の確認 data = Usart_read(); //データの受信 switch(data){ //受信データの内容でA-Hの動作 case 'A': PORTB = 0b00100001; //左前進、右前進 break; case 'B': PORTB = 0b00010001; //左後進、右前進 break; case 'C': PORTB = 0b00000001; //右前進 break; case 'D': PORTB = 0b00101000; //左前進、右後進 break; case 'E': PORTB = 0b00100000; //左前進 break; case 'F': PORTB = 0b00011000; //左後進、右後進 break; case 'G': PORTB = 0b00001000; //右後進 break; case 'H': PORTB = 0b00010000; //左後進 break; default : PORTB = 0b00000000; //ストップ(OFF) break; } } PORTB.F6 = ~PORTB.F0; } while(1); //doとwhileの間を繰り返す } //メインプログラム終わり