siroitori0413
2021年02月27日作成 (2021年12月20日更新)
製作品 1545
小4理科学校教材の車を前進・停止をリモート操作可能にする
小学校の理科教材のモーターで走る車をラジコンにする
息子が貰ってきた小学校の理科教材のモーターで前進走行する車です。
スイッチを付けたら走り続ける仕様となっていますが、これを改造して前進・停止がリモート操作できるようにしようと思いました。
材料
- 小4理科教材 ダイワ 電気と光F型(電源を入れたらモーターで前進する簡単な車であれば何でも良いと思います) × 1個
- M5StickC× 1個
- リレーモジュール× 1個
作り方
リレーモジュールとM5StickCの接続は以下のように接続します。
そしてリレーモジュールを理科教材のスイッチ(写真の黄色いパーツ)に繋がってた部分に差し替えます。スイッチに差し替える向きはどちらの向きでも大丈夫です。
連結車両をLEGOで作りました。
プログラム
Arduino IDEでM5StickCに以下のコードを書きこみます。
#include <M5StickC.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
#include "time.h"
const char *ssid = "M5StickCtrl";
const char *password = "";
bool CurrentValue = false;
WiFiServer server(80);
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
int lastDrawTime = 0;
void setup() {
M5.begin();
M5.Lcd.setRotation(3);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextSize(1);
M5.Lcd.setCursor(0, 10);
pinMode(26,OUTPUT);
Serial.println("Configuring access point...");
WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
server.begin();
M5.Lcd.println("Connect:");
M5.Lcd.println(ssid);
M5.Lcd.println("Enter:");
M5.Lcd.println(myIP);
delay(1000);
M5.Lcd.qrcode(myIP.toString(),
80, 0, 80, 15);
}
void loop() {
WiFiClient client = server.available();
if (client) {
Serial.println("Client Connected.");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html; charset=utf-8;");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />");
client.println("</head>");
client.println("<body>");
client.println("<form method=\"get\">");
client.println(String("<input name=\"control\" type=\"text\" value=\"") + (String(!CurrentValue ? "On" : "Off")) + (String("\" style=\"display:none;\" \\>")));
client.println(String("<button type=\"submit\">Turn ") + String(!CurrentValue ? "On" : "Off") + String("</button>"));
client.println("</form>");
client.println("</body>");
client.println("</html>");
Serial.println("html Rendering");
break;
} else if (currentLine.indexOf("GET /?") == 0) {
int pos1 = 0;
int pos2 = 0;
String val = "";
pos1 = currentLine.indexOf('control=', pos2);
pos2 = currentLine.indexOf(' ', pos1);
val = currentLine.substring(pos1 + 1, pos2);
if (val == "On") {
CurrentValue = true;
} else {
CurrentValue = false;
}
if (CurrentValue) {
digitalWrite(26,HIGH);
} else {
digitalWrite(26,LOW);
}
client.println("HTTP/1.1 302 Request Succsessful");
client.println("Location: /");
client.println();
client.println("Request was succsessful. redirect to <a href=\"/\"> here. </a>");
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
}
}
client.stop();
Serial.println("Client Disconnected.");
}
}
実行する
上記プログラム書き込み後、M5StickCの画面にQRコードが表示されると思います。
まず、リモコン操作したい端末(スマホ/PC)から、WiFiの設定で「M5StickCtrl」というSSIDが登場しているはずなのでここにつなぎます。そのとき、4G回線とかに接続しているスマホなどであればそれもいったんオフ(機内モードなど)にしておいた方が良いみたいです。
その後、M5StickCの画面上のQRコードを読み取るか、リモコン操作したい端末のブラウザにIPアドレスをURLとして入力します。
上記の画面が出たらOKです。
「Turn On」を押すと、ラジコンカーが前進します。
ボタンの表記が「Turn Off」に変わり、そのボタンを押すと停止します。
投稿者の人気記事
-
siroitori0413
さんが
2021/02/27
に
編集
をしました。
(メッセージ: 初版)
-
siroitori0413
さんが
2021/12/20
に
編集
をしました。
ログインしてコメントを投稿する