まとめ
ロッカー・ボギーを搭載した6輪駆動・6輪ステアリングのユーティリティ・カート
ナサの火星ローバー「キュリオシティ」と「パーセヴァランス」からインスパイアされたサスペンション。
アルデュイノのコードも利用可能です(2022年6月28日現在、未完成)。メッセージを残してください。GitHub上にあります。
印刷設定
プリンターのブランド:
クリエーリティ
プリンター:
エンダー5
ラフト:
はい
サポート:
いや
充填:
50%
備考:
多数のファイルがありますが、サポートが必要だとは思いません。
アルデュイノのコード
/***
- _SISU_04
- バージョン: 04_01
- 開始日:03-13-22
- 最終更新:2022年5月5日(未完成 - HCSR04、ブザー、LEDが機能しない)
- DCC
- 説明:
-
- ロッカー・ボギー・サスペンションにインスパイアされたローバー・ユーティリティ・カート。
- ナサの火星ローバー「キュリオシティ」と「パーセヴァランス」によるものです。
-
- 6輪駆動で6輪ステアリング。
-
- IRリモコン、超音波距離センサー、ブザーが含まれています。
- そしてRGB LEDライト。
-
DCモーターズ
モーターLF = 左フロントDCモーター
モーターRF = 右フロントの直流モーター
モーターLM = 左ミドルDCモーター
モーターRM = 右側の中央直流モーター
モーターLR = 左後方の直流モーター
モーターRR = 右後方の直流モーター
L298Nモータードライバー
_L298Nフロントモーター用F = L298N(シャーシの左前に位置)
L298N_M = L298N for Middle Motors (シャーシの右前に位置)
___ L298N_R = リアモーター用のL298N(シャーシの中央に位置)
ステアリングサーボ
サーボLF = 左フロントステアリングサーボ
サーボRF = 右フロントステアリングサーボ
サーボLM = 左ミドルステアリングサーボ
サーボRM = 右ミドルステアリングサーボ
サーボLR = 左後方ステアリングサーボ
サーボRR = 右後方ステアリングサーボ
****/
/***
-
含める、定数/変数を宣言し、初期化する:
****/
// ライブラリを含める赤外線リモコンを含む
ステアリングサーボを含む。
含める // 将来「ping」を利用する予定です
・L298N DCモータードライバーからArduino MEGA 2560のピンアサインメントまで
const int L298N_F_ENA = 2; // モーター 'A' の速度を制御するデジタル PWM I/O ピン - motorLF
const int L298N_F_ENB = 3; // モーター 'B' の速度を制御するデジタル PWM I/O ピン - motorRF
const int L298N_F_IN1 = 23; // デジタル I/O ピン - モーター 'A' のリード線 [OUT1] (motorLF) のオン/オフ
const int L298N_F_IN2 = 25; // デジタル I/O ピン - モーター 'A' のリード線のオン/オフ [OUT2] (motorLF)
const int L298N_F_IN3 = 27; // デジタル I/O ピン - モーター 'B' のリード線のオン/オフ [OUT3] (モーターRF)
const int L298N_F_IN4 = 29; // デジタル I/O ピン - モーター 'B' のリード線のオン/オフ [OUT4] (モーターRF)
const int L298N_M_ENA = 4; // モーター 'A' の速度を制御するデジタル PWM I/O ピン (モーター LM)
const int L298N_M_ENB = 5; // モーター 'B' の速度を制御するデジタル PWM I/O ピン (motorRM)
const int L298N_M_IN1 = 33; // デジタルI/Oピン - モーター 'A' のリード線のオン/オフ [OUT1] (モーターLM)
const int L298N_M_IN2 = 35; // デジタルI/Oピン - モーター 'A' のリード線のオン/オフ [OUT2] (モーターLM)
const int L298N_M_IN3 = 37; // デジタル I/O ピン - モーター 'B' のリード線のオン/オフ [OUT3] (motorRM)
const int L298N_M_IN4 = 39; // デジタル I/O ピン - モーター 'B' のリード線のオン/オフ [OUT4] (motorRM)
const int L298N_R_ENA = 6; // モーター 'A' の速度を制御するデジタル PWM I/O ピン (motorLR)
const int L298N_R_ENB = 7; // モーター 'B' の速度を制御するデジタル PWM I/O ピン (motorRR)
const int L298N_R_IN1 = 43; // デジタル I/O ピン - モーター 'A' のリード線 [OUT1] (motorLR) のオン/オフを制御する
const int L298N_R_IN2 = 45; // デジタル I/O ピン - モーター 'A' のリード線のオン/オフ [OUT2] (motorLR)
const int L298N_R_IN3 = 47; // デジタル I/O ピン - モーター 'B' のリード線のオン/オフ [OUT3] (モーターRR)
const int L298N_R_IN4 = 49; // デジタル I/O ピン - モーター 'B' のリード線のオン/オフ [OUT4] (モーターRR)
・DCモーターの速度
インテリジェントモーションセンサー(MS)の値は190です。// 低速
・中程度のデフォルト速度(190/255、約75%)
・高速(230/255、約90%)
// ステアリングサーボ
サーボを制御するためのサーボオブジェクトを作成する。
サーボ servoLF; // 左フロント
サーボ servoRF; // 右前方
サーボ servoLM; // 左中央
サーボ servoRM; // 右中央
サーボ servoLR; // 左後方
サーボ サーボRR; // 右後方
サーボ用のピンを定義する(MEGA 2560上で)
サーボLF_Pin = 22; // 位置制御用のデジタルI/Oピン
サーボRF_Pin = 24; // 位置制御用のデジタルI/Oピン
サーボLM_Pin = 32; // 位置制御用のデジタルI/Oピン
サーボRM_Pin = 34; // 位置制御用のデジタルI/Oピン
サーボLR_Pin = 42; // 位置制御用のデジタルI/Oピン
サーボRR_Pin = 44; // 位置制御用のデジタルI/Oピン
・サーボの位置に関する変数を定義する
サーボLF_Pos = 90; // ホイールをまっすぐに前に向けて開始する
サーボRFの位置は90度です。
サーボLMの位置は90度です。
サーボRMの位置は90度です。
サーボLRの位置は90です。
サーボの右回転位置は90度です。
// IRレシーバー
const int IR_in = A0; // IRレシーバの信号入力ピンを格納する変数 #
IRrecv irrecv(IR_in); // クラスを受信するために使用されるクラスオブジェクトを作成する
decode_results results; // デコード結果クラスオブジェクトを作成する。
未署名の長いlastCode; // 最後に受け取ったIRコードを格納する変数を定義する 質問
未署名の長整数キー値=0; // 質問
その他のもの
const int buzzer = 11; // アクティブなブザーピン - PWMピンを使用 - 将来のトーンコントロール用
const int LED_R = 10; // 取り付けられたRGB-LEDの赤の強度のためのPWMピン(または220オームの抵抗器を含める)
const int LED_G = 9; // 取り付けられたRGB-LEDの緑色の強度のためのPWMピン(または220オームの抵抗器を含める)
const int LED_B = 8; // 取り付けられたRGB-LEDの青色の強度のためのPWMピン(または220オームの抵抗器を含める)
赤の値; // LEDの明るさを定義する変数を宣言する
グリーン値;
青の値;
// HC-SR04の変数を設定する。
トリガーピンA4を定義する。
エコーピンA5を定義する。
長時間、センチメーター、インチ;
距離int;
最大距離を200に定義する。
ピンと最大距離のNewPing設定
ニューピングソナー(トリガーピン、エコーピン、最大距離);
/***
-
初回実行時の「セットアップ」コード:
****/
void setup()
{
// L298Nの接続ピンを出力に設定する
ピンモード(L298N_F_ENA, OUTPUT);
ピンモード(L298N_F_ENB, OUTPUT);
ピンモード(L298N_F_IN1, OUTPUT);
ピンモード(L298N_F_IN2, OUTPUT);
ピンモード(L298N_F_IN3, OUTPUT);
ピンモード(L298N_F_IN4, 出力);
ピンモード(L298N_M_ENA, OUTPUT);
ピンモード(L298N_M_ENB, OUTPUT);
ピンモード(L298N_M_IN1, OUTPUT);
ピンモード(L298N_M_IN2, OUTPUT);
ピンモード(L298N_M_IN3, OUTPUT);
ピンモード(L298N_M_IN4, OUTPUT);
ピンモード(L298N_R_ENA, OUTPUT);
ピンモード(L298N_R_ENB, OUTPUT);
ピンモード(L298N_R_IN1, OUTPUT);
ピンモード(L298N_R_IN2, OUTPUT);
ピンモード(L298N_R_IN3, OUTPUT);
ピンモード(L298N_R_IN4, OUTPUT);サーボピンにサーボオブジェクトにサーボを取り付ける
servoLF.attach(servoLF_Pin);
servoRF.attach(servoRF_Pin);
servoLM.attach(servoLM_Pin);
servoRM.attach(servoRM_Pin);
servoLR.attach(servoLR_Pin);
servoRR.attach(servoRR_Pin);
// HC-SR04のピンを設定する
ピンモード(トリガーピン, OUTPUT);
ピンモード(echoPin, INPUT);
・IRレシーバのピンを設定して開始する
ピンモード(IR_in, INPUT);
irrecv.enableIRIn();
デコード結果 results;
irrecv.blink13(true);
// ブザーピンを設定する
ピンモード(buzzer, OUTPUT);
・RGB-LEDピンを設定する
ピンモード(LED_R, OUTPUT); // ピンを「出力」に設定する。
ピンモード(LED_G, OUTPUT);
ピンモード(LED_B, OUTPUT);
digitalWrite(LED_R, LOW); // デフォルトでLEDをオフにする
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
』
/***
-
繰り返し実行するメイン 'Loop' コード:
***/
void loop()
{
// HC-SR04のパルスをトリガーする
digitalWrite(triggerPin, LOW); // トリガーをクリアするには、低電位に設定する必要があります
delayMicroseconds(5);
digitalWrite(triggerPin, HIGH); // センサーを10マイクロ秒間トリガーする
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);エコーピンを読み取って、マイクロ秒での継続時間を取得する。
継続時間 = pulseIn(echoPin, HIGH);・時間を距離に変換する(音速=343 m/秒)
cm = (継続時間/2) / 29.1; // 29.1で割るか、0.0343で乗算する
インチ = (継続時間/2) / 74; // 74で割るか、0.0135で乗算する。赤外線レシーバー
もし(irrecv.decode(&results)) // 受け取ったコードを確認する
{
もし(結果の値が0xFFFFFFFFなら) // もし繰り返しなら、最後に受け取ったコードを使用する。
{
結果.value=lastCode;
』
結果の値に応じて切り替える。
{
ケース 0xFF10EF: // 「<」キーを受信する
turnLeft(); // 左に曲がる
ブレイク; // 「switch」ステートメントから退出するケース 0xFF5AA5: // 「>」キーを受信する
turnRight(); // 右を向く
ブレイク;ケース 0xFF6897: // 「*」キーを受信する
ドッグレッグ左(); // 全てのサーボを左に向ける
ブレイク;ケース 0xFF9867: // 「0」キーを受け取る
turnFront(); // 全てのサーボを前方に向ける
ブレイク;ケース 0xFFB04F: // "#" キーを受信する
ドッグレッグ右(); // 全てのサーボを右に回す
ブレイク;ケース 0xFF18E7: // 上矢印キーを受信する
停止();
デリレイ(100);
forwardMS(); // 直流モーターを動かして前進する
ブレイク;ケース 0xFF4AB5: // 下矢印キーを受信する
停止();
デリレイ(100);
backwardMS(); // 逆方向に移動するためにDCモーターを実行する
ブレイク;ケース 0xFF38C7: // 「OK」キーを受信する
ハルト(); // 全てのモーターを停止する
ブレイク;ケース 0xFF22DD: // 「4」キーを受信する
beep(); // ビープと赤いフラッシュ
フラッシュレッド();
ブレイク;ケース 0xFF02FD: // 「5」キーを受信する
beep(); // ビープとグリーンのフラッシュ
フラッシュグリーン();
ブレイク;ケース 0xFFC23D: // 「6」キーを受信する
beep(); // ビープと青いフラッシュ
フラッシュブルー();
ブレイク;デリレイ(30); // 偽読み取りを防ぐためのデリレイ
irrecv.resume(); // 次の値を受け取る
』
』
・HC-SR04の距離に基づいてアクションをトリガーする。(インチが1より大きく、6より小さい場合)
{
フラッシュレッド();
ビープ();
フラッシュレッド();
』
もし(インチ数が6より大きく、12より小さいなら)
{
フラッシュイエロー();
ビープ();
フラッシュイエロー();
』
もし(インチ数が12より大きく、24より小さい場合)
{
フラッシュグリーン();
ビープ();
フラッシュグリーン();
』
もし(インチが24を超えるなら)
{
フラッシュブルー();
ビープビープ();
ビープビープ();
フラッシュブルー();
』
』
/*****
-
呼び出される他の機能:
*****/
void beep() // ブザーを200/1000秒間鳴らす
{
digitalWrite(buzzer, HIGH);
遅延(200);
デジタルWrite(buzzer, LOW);
』void beepBeep() // ブザーを2回、そしてより速く鳴らす
{
digitalWrite(buzzer, HIGH);
遅延(150);
デジタルWrite(buzzer, LOW);
遅延(150);
digitalWrite(buzzer, HIGH);
遅延(150);
デジタルWrite(buzzer, LOW);
』void flashRed() // RGB LEDを200/1000秒間赤く点滅させる
{
赤の値 = 255;
グリーンバリュー = 0;
ブルーバリュー = 0;
アナログWrite(LED_R, redValue);
アナログWrite(LED_G, greenValue);
アナログWrite(LED_B, blueValue);
遅延(200);
赤の値=0;
アナログWrite(LED_R, redValue);
』void flashYellow() // RGB LEDを200/1000秒間黄色に点滅させる
{
赤の値 = 255;
グリーンバリュー = 255;
ブルーバリュー = 0;
アナログWrite(LED_R, redValue);
アナログWrite(LED_G, greenValue);
アナログWrite(LED_B, blueValue);
遅延(200);
赤の値 = 0;
グリーンバリュー = 0;
アナログWrite(LED_R, redValue);
アナログWrite(LED_G, greenValue);
』void flashGreen() // RGB LEDを200/1000秒間グリーンに点灯させる
{
赤の値 = 0;
グリーンバリュー = 255;
ブルーバリュー = 0;
アナログWrite(LED_R, redValue);
アナログWrite(LED_G, greenValue);
アナログWrite(LED_B, blueValue);
遅延(200);
グリーンバリュー=0;
アナログWrite(LED_G, greenValue);
』void flashBlue() // RGB LEDを200/1000秒間青く点滅させる
{
赤の値 = 0;
グリーンバリュー = 0;
ブルーバリュー = 255;
アナログWrite(LED_R, redValue);
アナログWrite(LED_G, greenValue);
アナログWrite(LED_B, blueValue);
遅延(200);
ブルーバリュー=0;
アナログWrite(LED_B, blueValue);
』void msSlow() // モーターの速度MSを低速に設定する
{
MS = 150;
』void msMedium() // モーターの速度を中に設定する
{
MS = 190;
』void msFast() // モーターの速度MSを高速に設定する
{
MS = 230;
』void forwardMS() // 設定された「MS」速度で直流モーターを前方に動かすように設定する。
{
digitalWrite(L298N_F_IN1, HIGH); // モーターをオンにする
digitalWrite(L298N_F_IN2, LOW);
digitalWrite(L298N_F_IN3, LOW);
digitalWrite(L298N_F_IN4, HIGH);
digitalWrite(L298N_M_IN1, HIGH);
digitalWrite(L298N_M_IN2, LOW);
digitalWrite(L298N_M_IN3, LOW);
digitalWrite(L298N_M_IN4, HIGH);
digitalWrite(L298N_R_IN1, LOW);
digitalWrite(L298N_R_IN2, HIGH);
digitalWrite(L298N_R_IN3, HIGH);
digitalWrite(L298N_R_IN4, LOW);
アナログWrite(L298N_F_ENA, MS); // 速度を設定する
アナログWrite(L298N_F_ENB, MS);
アナログWrite(L298N_M_ENA, MS);
アナログWrite(L298N_M_ENB, MS);
アナログWrite(L298N_R_ENA, MS);
アナログWrite(L298N_R_ENB, MS);
』
void backwardMS() // DCモーターを設定された「MS」速度で後方に移動させる
{
digitalWrite(L298N_F_IN1, LOW);
digitalWrite(L298N_F_IN2, HIGH);
digitalWrite(L298N_F_IN3, HIGH);
digitalWrite(L298N_F_IN4, LOW);
digitalWrite(L298N_M_IN1, LOW);
digitalWrite(L298N_M_IN2, HIGH);
digitalWrite(L298N_M_IN3, HIGH);
digitalWrite(L298N_M_IN4, LOW);
digitalWrite(L298N_R_IN1, HIGH);
digitalWrite(L298N_R_IN2, LOW);
digitalWrite(L298N_R_IN3, LOW);
digitalWrite(L298N_R_IN4, HIGH);
アナログWrite(L298N_F_ENA, MS);
アナログWrite(L298N_F_ENB, MS);
アナログWrite(L298N_M_ENA, MS);
アナログWrite(L298N_M_ENB, MS);
アナログWrite(L298N_R_ENA, MS);
アナログWrite(L298N_R_ENB, MS);
』
void halt() // DCモーターを停止/停止する
{
アナログWrite(L298N_F_ENA, 0);
アナログWrite(L298N_F_ENB, 0);
アナログWrite(L298N_M_ENA, 0);
アナログWrite(L298N_M_ENB, 0);
アナログWrite(L298N_R_ENA, 0);
アナログWrite(L298N_R_ENB, 0);
』
void turnFront() // 全てのサーボをまっすぐ前に向ける
{
servoLF.write(90);
servoRF.write(90);
servoLM.write(90);
servoRM.write(90);
servoLR.write(90);
servoRR.write(90);
デリレイ(20); // サーボがそこに到達するのを許可する
』
void turnLeft() // 左折するためにサーボを回す
{
servoLF.write(60);
servoRF.write(60);
servoLM.write(90);
servoRM.write(90);
servoLR.write(120);
servoRR.write(120);
遅延(20);
』
void turnRight() // 全てのサーボを右に回す
{
servoLF.write(120);
servoRF.write(120);
servoLM.write(90);
servoRM.write(90);
servoLR.write(60);
servoRR.write(60);
遅延(20);
』
void doglegLeft() // 全てのサーボをドッグレッグ左に回す
{
servoLF.write(60);
servoRF.write(60);
servoLM.write(60);
servoRM.write(60);
servoLR.write(60);
servoRR.write(60);
遅延(20);
』
void doglegRight() // 全てのサーボをドッグレッグ右に設定する
{
servoLF.write(120);
servoRF.write(120);
servoLM.write(120);
servoRM.write(120);
servoLR.write(120);
servoRR.write(120);
遅延(20);
』
标签
模型来源
