私はReUsというサークルに入っていて、その活動をたまにしていることはこのブログでも度々触れていますが、今回はその大会があったので行ってきました。
まずサークルとしての大会の結果を書くと、予選敗退でした。この大会は1ラップのタイムの予選の後、一時間の耐久レースがあるのですが今回私のサークルでは予選突破タイムの15分を切ることが出来ませんでした。
最大の原因は電池ボックスの接点不良です。先週末(11/23)は茂木では一日中雨が降っており、そのせいで機体および電気系統は常に濡れてしまうような状態でした。また事前から予兆はあったのですが、使用開始から三年目に入る電池BOXのバネや配線が弱くなっており、それが当日になって弾けました。
当日会場に行ったところ、それまで入っていたコントローラの電源が入らず、入ったとしても電圧が低くモーターを回すことが出来ない状態でした。これはバネの間にマステを挟んだり、配線を強引にはんだ付けしたりしてどうにか動くようにして車検を通過しました。
しかし、実際のレースになるとコースに出て行く際の段差で電池が外れてしまい、2系統あるうちの1系統の電源が使えない状態になってしまいました。そのため出力電流が低くなり、思うように走れませんでした。
まあそんなこんなでサークルとしての結果はあまり良くありませんでしたが、私個人の担当箇所の一つである表示計器と賑やかしはある程度の結果でした。レース本番ではコードが脱落して起動しなかったり、そもそも取り付けていたケースが脱落したり、散々な結果でしたがそんなものはすべて雨が悪いということにします。
今回は表示計器をなるべく単純に作りたかったので、LCDに経過時間と自機速度だけ表示するようにしました。去年は電池電圧と電池温度を表示していたのですが、使うことがなかったので今回は削りました。そのため今回はarduino一台で測定表示装飾を行うことに成功しました。
今回の基板はこちら。

なんか説明することもないんですが、LCDはこれをつかっています。また、ブレボ上右にあるDIP基板は前回のmp3プレイヤーです。イルミネーションLEDと書いているものは千石で売っていたジャンクテープLEDです。またホール素子はタイヤについた磁石で作動させて速度計にしました。左の四つのスイッチでmp4プレイヤーで流す音を変えています。
次にプログラムを紹介しますが、つまらないので最後の方に置いときます。
実際に動作させた場合はこちら
今回はここまでです。ReUsは非公式なので全額自己負担なのがつらいです。使っている自転車のインバーターはあまり性能が良くないらしいので、ちゃんとブラシレス用のインバータを作ろうと思います。それではまた今度。
↓[プログラムです]↓
まずサークルとしての大会の結果を書くと、予選敗退でした。この大会は1ラップのタイムの予選の後、一時間の耐久レースがあるのですが今回私のサークルでは予選突破タイムの15分を切ることが出来ませんでした。
最大の原因は電池ボックスの接点不良です。先週末(11/23)は茂木では一日中雨が降っており、そのせいで機体および電気系統は常に濡れてしまうような状態でした。また事前から予兆はあったのですが、使用開始から三年目に入る電池BOXのバネや配線が弱くなっており、それが当日になって弾けました。
当日会場に行ったところ、それまで入っていたコントローラの電源が入らず、入ったとしても電圧が低くモーターを回すことが出来ない状態でした。これはバネの間にマステを挟んだり、配線を強引にはんだ付けしたりしてどうにか動くようにして車検を通過しました。
しかし、実際のレースになるとコースに出て行く際の段差で電池が外れてしまい、2系統あるうちの1系統の電源が使えない状態になってしまいました。そのため出力電流が低くなり、思うように走れませんでした。
まあそんなこんなでサークルとしての結果はあまり良くありませんでしたが、私個人の担当箇所の一つである表示計器と賑やかしはある程度の結果でした。レース本番ではコードが脱落して起動しなかったり、そもそも取り付けていたケースが脱落したり、散々な結果でしたがそんなものはすべて雨が悪いということにします。
今回は表示計器をなるべく単純に作りたかったので、LCDに経過時間と自機速度だけ表示するようにしました。去年は電池電圧と電池温度を表示していたのですが、使うことがなかったので今回は削りました。そのため今回はarduino一台で測定表示装飾を行うことに成功しました。
今回の基板はこちら。

なんか説明することもないんですが、LCDはこれをつかっています。また、ブレボ上右にあるDIP基板は前回のmp3プレイヤーです。イルミネーションLEDと書いているものは千石で売っていたジャンクテープLEDです。またホール素子はタイヤについた磁石で作動させて速度計にしました。左の四つのスイッチでmp4プレイヤーで流す音を変えています。
次にプログラムを紹介しますが、つまらないので最後の方に置いときます。
実際に動作させた場合はこちら
まあいい感じにゲテモノで良いんじゃないでしょうか。ReUs@変な乗り物を作る人達@ReUs_Shibaura
今回の機体のフルスペックです https://t.co/XD1oL7oGvQ
2019/11/23 08:02:28
今回はここまでです。ReUsは非公式なので全額自己負担なのがつらいです。使っている自転車のインバーターはあまり性能が良くないらしいので、ちゃんとブラシレス用のインバータを作ろうと思います。それではまた今度。
↓[プログラムです]↓
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "SoftwareSerial.h"
#include "DFPlayer_Mini_Mp3.h"
LiquidCrystal_I2C lcd(0x3F, 16, 2); // I2C: 0x3F, 16x2 LCD
SoftwareSerial mySerial(12, 13); // RX, TX
int v, c;
int pi[360];
int mode;
unsigned long timeset;
unsigned long beforetime;
int V;
float velo;
void setup() {
lcd.backlight();
lcd.init();
delay(2000);
mySerial.begin (9600);
Serial.begin(9600);
mp3_set_serial (mySerial);
mp3_set_volume (100);
for (int i = 0; i < 180; i++) {
pi[i] = 255 * sin(PI * i / 180.0);
}
}
void loop() {
if (analogRead(0) >= 1000 && v == 0) {
mp3_play (2);
mode = 2;
} else {
if (analogRead(0) >= 500 && v == 0) {
mp3_play (3);
mode = 3;
} else {
if (analogRead(0) >= 300 && v == 0) {
mp3_play (4);
mode = 4;
} else {
if (analogRead(0) >= 200 && v == 0) {
mp3_play (5);
mode = 5;
}
}
}
}
if (analogRead(2) > 500) {
timeset = millis();
lcd.setCursor(0, 1);
lcd.print(" ");
}
if(V==0 && analogRead(1)>100){
velo=((22*2.54)*PI)/((millis()-beforetime)/1000.0)*0.036;
V=1;
beforetime=millis();
//Serial.println("A");
}
if(analogRead(1)<100){
V=0;
}
int mini = (millis() - timeset) / 1000 / 60;
int seco = (millis() - timeset) / 1000 % 60;
lcd.setCursor(0, 0);
lcd.print(velo);
lcd.print("km/h ");
lcd.setCursor(0, 1);
if (mini > 9) {
lcd.print(mini);
} else {
if (mini > 0) {
lcd.print(" ");
lcd.print(mini);
} else {
lcd.print(" 0");
}
}
lcd.print("m");
lcd.setCursor(5, 1);
if (seco > 9) {
lcd.print(seco);
} else {
if (seco > 0) {
lcd.print(" ");
lcd.print(seco);
} else {
lcd.print(" 0");
}
}
lcd.print("s");
if (mode != 0) {
v++;
if (mode == 2 && v > 30) {
mode = 0;
v = 0;
}
if (mode == 3 && v > 30) {
mode = 0;
v = 0;
}
if (mode == 4 && v > 30) {
mode = 0;
v = 0;
}
if (mode == 5 && v > 30) {
mode = 0;
v = 0;
}
}
c++;
analogWrite(11, pi[c % 360]);
analogWrite(10, pi[(c + 120) % 360]);
analogWrite( 9, pi[(c + 240) % 360]);
analogWrite( 6, pi[c % 360]);
analogWrite( 5, pi[(c + 120) % 360]);
analogWrite( 3, pi[(c + 240) % 360]);
delay (10);
}