masayasan が 2021年10月15日08時54分12秒 に編集
初版
タイトルの変更
タミヤカムロボットの改造
タグの変更
タミヤカムロボット
PIC
赤外線センサ
超音波距離センサ
照度センサー
フォトリフレクタ
DFPlayerMini
モーター
DRV8830
本文の変更
#概要 タミヤカムロボットはそれ単体でもよく出来た玩具ですが、後からマイコンボードやサーボモータを追加出来る様な構造になっています。 大分昔にArduino Nanoで改造したのですが、最近覚え始めたPICで改めて改造し直しました。 Arduino Nanoですと時折モーターの影響による電圧降下で暴走したので、Arudinoよりも低電圧で動作可能なPICの方が向いていると思います。 あと、PICの方が省スペースで設置出来るメリットがありますしね。 *備忘録も兼ねてるので、記事の内容は随時更新していきます。 取敢えずMCCの設定とプログラムを書いて、一通り書き終わったら回路図も作成していきたいです。 #DRV8830モータードライバ 1. 部品選定 パワーMOSFETでHブリッジ回路組んで、モーター制御も検討しましたが、スペースの問題とI2Cで制御できるドライブがあったので秋月電子で購入したAE-DRV8830を選定。 動作電圧2.75V~なのも魅力。 1. MCC設定 ![I2Cモジュールを選択するとRC3,RC4ピンが自動的にSCL1,SDA1に設定される。](https://camo.elchika.com/64b397aafd347a18ec4c3a59734ea3ac88528765/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f34396139616662322d666261622d346631652d613034632d333863303439656138316332/) 1. プログラム I2Cモジュールを選択して設定すると新たに”i2c1_master_example.c"ファイルが作成されるので、その中の”I2C1_Write1ByteRegister(i2c1_address_t address, uint8_t reg, uint8_t data)”関数を使用する。 ![](https://camo.elchika.com/b8215f42459a5f50b572c1955fd16bf5a8bdb707/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f30383632353862372d383731642d343462322d613439312d663365373964623637373831/) #include "mcc_generated_files/examples/i2c1_master_example.h"を宣言しないと、I2Cの関数が使用できないので宣言する。 スピード(電圧)は0x06-0x3F(0.48V-5.06V)まで設定出来るけど、0x06では動かない。 ``` #include "mcc_generated_files/mcc.h" #include "mcc_generated_files/examples/i2c1_master_example.h" void Forward(uint8_t Speed) { Speed=Speed<<2; Speed=Speed+0b10; I2C1_Write1ByteRegister(0x63, 0x00, Speed); I2C1_Write1ByteRegister(0x64, 0x00, Speed); __delay_ms(500); } void Back(uint8_t Speed) { Speed=Speed<<2; Speed=Speed+0b01; I2C1_Write1ByteRegister(0x63, 0x00, Speed); I2C1_Write1ByteRegister(0x64, 0x00, Speed); __delay_ms(500); } void main(void) { SYSTEM_Initialize(); while (1) { //Speed 0x06-0x3F Forward(0x16); __delay_ms(2000); Back(0x2F); __delay_ms(2000); } } ``` 4. 動画 左右のモーターは可変出来るので、曲がるスピードを変えたり振り返ることも出来る。 @[youtube](https://youtu.be/CgO6-lgJeao) #フォトリフレクタ #超音波センサ #照度センサ 1. 照度センサーと100kΩの抵抗で分圧させた電圧をPICで読み取る。 1. MCC設定 ![キャプションを入力できます](https://camo.elchika.com/ef4f51931b7c8d04bfe5f645464d0da7e10d221d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f39373833383063362d356134622d343133652d623330642d333030643337346534383031/) 1.プログラム 暗くなると目が光り、明るくなると消灯する。 ``` #include "mcc_generated_files/mcc.h" void Lighton(void) { RA4 = 1; RA3 = 1; } void Lightoff(void) { RA4 = 0; RA3 = 0; } void main(void) { SYSTEM_Initialize(); while (1) { int Vale=ADCC_GetSingleConversion(channel_ANB3); if(Vale<100){ Lighton(); }else if(Vale>=200){ Lightoff(); } } } ``` 1. 動画 @[youtube](https://youtu.be/zx7yeSvwI3A) #赤外線受信センサ