ステアリングスイッチで減衰調整できる物を作る の最後になります。
無事完成して、街乗りサーキット共問題なく動いているようなので、まとめとして追加の写真と配線図とスケッチ(プログラム)を載せておきます。
モーター。
何故か上手い事取り付け出来ました。
運転席側に新たに穴を開け、配線を車内に引き込んでいます。
リア右側。
液晶ディスプレイはここです。
カバーを作った方が良かった。
フォントが粗いから何とかしたいような。
ステアリングスイッチ、ツヤツヤでいまいちです。
Arduino本体、電源用のシガープラグを紫外線接着剤でくっつけています。
USB差込口が見えるように、マジックテープで、ステアリングコラム横に貼りつけました。
配線図です。
スケッチです。
自分で中身を忘れないようにある程度説明をつけてあります。
#include <EEPROM.h> //EEPROM用インクルード
#include <Stepper.h> //ステッピングモーター用インクルード
int val = 0; //valはテアリングスイッチの電圧値 0~1023
int tmp = 0; //tmpはvalの判定に幅をもたせてまとめた値 0~4
int R = 0; //Rはリアの減衰値 0~26
int F = 0; //Fはフロントの減衰値 0~26
int ER = 0; //Rの数値を記憶させるEEPROMのアドレス
int EF = 1; //Fの数値を記憶させるEEPROMのアドレス
//ステッピングモーターの出力ピンを指定
#define R_IN1 (4)
#define R_IN2 (5)
#define R_IN3 (6)
#define R_IN4 (7)
#define F_IN1 (8)
#define F_IN2 (9)
#define F_IN3 (10)
#define F_IN4 (11)
#define STEPS (2048) //ステッピングモーターのステップ数
//ステッピングモーターを回す為のピンの信号出力順
Stepper myStepperR(STEPS,R_IN1,R_IN3,R_IN2,R_IN4);
Stepper myStepperF(STEPS,F_IN1,F_IN3,F_IN2,F_IN4);
//液晶ディスプレイ用インクルード
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//液晶ディスプレーの出力ピンを指定
#define OLED_D1 A1
#define OLED_D0 A0
#define OLED_DC A3
#define OLED_CS A4
#define OLED_RES A2
Adafruit_SSD1306 display(OLED_D1, OLED_D0, OLED_DC, OLED_RES, OLED_CS);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
void setup() {
// EEPROMに保存されているRとFの値を読み込む
R = EEPROM.read( ER );
F = EEPROM.read( EF );
//液晶ディスプレイ用にアナログ入力ピンをデジタル出力に変更する
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);
//シリアル通信を開始する
Serial.begin(9600);
//液晶ディスプレイに表示開始
display.begin(SSD1306_SWITCHCAPVCC);
// 画面表示をクリア
display.clearDisplay();
// テキストサイズを設定
display.setTextSize(1);
// テキスト色を設定
display.setTextColor(WHITE);
// テキストの開始位置を設定
display.setCursor(0,10);
//"Electronic damping force controller"を表示
display.println("Electronic damping force controller");
// テキストサイズを設定
display.setTextSize(1);
// テキスト色を設定
display.setTextColor(WHITE);
// テキストの開始位置を設定
display.setCursor(0,50);
//"-SUPER OHLINS-"を表示
display.println("-SUPER OHLINS-");
// 描画バッファの内容を画面に表示
display.display();
// 5秒待つ
delay(5000);
// 画面表示をクリア
display.clearDisplay();
//ステッピングモーターのスピード指定
myStepperR.setSpeed(10);
myStepperF.setSpeed(10);
}
void loop() {
// 画面表示をクリア
display.clearDisplay();
// テキストサイズを設定
display.setTextSize(3);
// テキスト色を設定
display.setTextColor(WHITE);
// テキストの開始位置を設定
display.setCursor(0, 10);
// "F"を表示
display.println("F");
// テキストサイズを設定
display.setTextSize(3);
// テキスト色を設定
display.setTextColor(WHITE);
// テキストの開始位置を設定
display.setCursor(30,10);
// Fを表示
display.println(F);
// テキストサイズを設定
display.setTextSize(3);
// テキスト色を設定
display.setTextColor(WHITE);
// テキストの開始位置を設定
display.setCursor(0,40);
// "R"を表示
display.println("R");
// テキストサイズを設定
display.setTextSize(3);
// テキスト色を設定
display.setTextColor(WHITE);
// テキストの開始位置を設定
display.setCursor(30, 40);
// Rを表示
display.println(R);
// 描画バッファの内容を画面に表示
display.display();
val = analogRead(5); //ステアリングスイッチの電圧をA5ピンで読み込む
if( val > 500 ){
tmp = 0; // NO PUSH
} else if( val > 200 ){
tmp = 4; // SW4 ON
} else if( val > 100 ){
tmp = 3; // SW3 ON
} else if( val > 50 ){
tmp = 2; // SW2 ON
} else {
tmp = 1; // SW1 ON
}
switch ( tmp ) {
// REAR HARD-
case 4 : //250
if ( R > 0)
{
myStepperR.step(256);
--R;
EEPROM.write(ER, R);
delay(300);
}
break;
// REAR SOFT+
case 1 : //0
if ( R < 26)
{
myStepperR.step(-256);
++R;
EEPROM.write(ER, R);
delay(300);
}
break;
// FRONT HARD-
case 3 : //162
if ( F > 0)
{
myStepperF.step(256);
--F;
EEPROM.write(EF, F);
delay(300);
}
break;
// FRONT SOFT+
case 2 : //78
if ( F < 26)
{
myStepperF.step(-256);
++F;
EEPROM.write(EF, F);
delay(300);
}
break;
//モーターへの電流を止める
default:
digitalWrite( R_IN1, LOW);
digitalWrite( R_IN2, LOW);
digitalWrite( R_IN3, LOW);
digitalWrite( R_IN4, LOW);
digitalWrite( F_IN1, LOW);
digitalWrite( F_IN2, LOW);
digitalWrite( F_IN3, LOW);
digitalWrite( F_IN4, LOW);
}
}
上記スケッチ以外に、液晶ディスプレイだけは、別途サンプルスケッチを入手しないと動きません。
『OLED SSD1306 128x64』で検索すると、サンプルスケッチ(プログラム)の入手方法がわかります。

このタイプはssd 1306_128x64_spiです。
このサンプルスケッチを動かすにはひと手間必要で、
SSD1306.hファイル内の
// #define SSD1306_128_64
#define SSD1306_128_32
の部分を
#define SSD1306_128_64
// #define SSD1306_128_32
に書き換える必要があります。
サンプルスケッチを入手後、ファィルの検索でSSD1306.hを探し出し中身を書き換えておきます。
詳しいところは親切に解説してくれているサイトが有ります。
表示方法は、このディスプレイ以外にもたくさん選択肢があるので、特にこのディスプレイにこだわる必要も無いと思います。
編集後記
Arduinoなどのマイコンを使って自分で作るのなら、やり方次第でかなり色々な物が作れます。
自分がこんな機能が欲しいなと思えば、たぶん実現可能です。
専門知識も不要で、ネット上には親切な解説サイトがたくさんあります。
とは言うものの、当初は完成の可能性は3割くらいなと思っていました。
どうしても欲しくて製作に挑戦しましたが、完成して実際に使ってみると、やっぱりすごく便利で、苦労して作った甲斐が有りました。
目的だったサーキットの他に、面倒で硬いまま走っていた街乗り、雨の日の運転がかなり楽に成りました。
製作記事は中途半端で、細かい所は書いてありませんが、実は書いてあったのですが、自分で読んでも興味がないと言うか意味が分からない物が大半だったので大幅に省略しました。
最後に、応援して頂いたニャホニャホさん、アドバイスをくれたcu:maさんに無事完成のご報告が出来ました。有難う御座いましたm(__)m
Posted at 2018/11/13 19:44:31 | |
自作EDFC | 日記