siroitori0413 が 2021年02月27日23時06分39秒 に編集
初版
タイトルの変更
小4理科学校教材の車を前進・停止をリモート操作可能にする
タグの変更
M5Stack
M5StickC
秋葉原2021
メイン画像の変更
本文の変更
# 小学校の理科教材のモーターで走る車をラジコンにする 息子が貰ってきた小学校の理科教材のモーターで前進走行する車です。 スイッチを付けたら走り続ける仕様となっていますが、これを改造して前進・停止がリモート操作できるようにしようと思いました。 ![キャプションを入力できます](https://camo.elchika.com/fd73000bc9abcf1006c3443103a8645ae9a47286/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30613439623061322d303637642d343831662d616535342d6662376130303834316537342f38623361343730372d633533642d343962382d626535662d306230393837623438623138/) # 材料 - 小4理科教材 ダイワ 電気と光F型(電源を入れたらモーターで前進する簡単な車であれば何でも良いと思います) × 1個 - M5StickC× 1個 - リレーモジュール× 1個 # 作り方 リレーモジュールとM5StickCの接続は以下のように接続します。 ![](https://camo.elchika.com/2a020363b781b733dd3eff80972591ffaab487e4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30613439623061322d303637642d343831662d616535342d6662376130303834316537342f61306132613639632d333437332d343436352d386662642d303432623333613065653131/) そしてリレーモジュールを理科教材のスイッチ(写真の黄色いパーツ)に繋がってた部分に差し替えます。スイッチに差し替える向きはどちらの向きでも大丈夫です。 ![車とリレーモジュールの接続](https://camo.elchika.com/ed562e166ec6a4a0a1989b8abecc1076918a1a36/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30613439623061322d303637642d343831662d616535342d6662376130303834316537342f64323034396333382d636565392d343261312d613966622d653063393738653661656262/) 連結車両をLEGOで作りました。 ![キャプションを入力できます](https://camo.elchika.com/24dccc80cf509a90b2597f9f86c127196fb9953b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30613439623061322d303637642d343831662d616535342d6662376130303834316537342f33373066323634312d303862352d343334642d626466382d636437326162363537353537/) ![キャプションを入力できます](https://camo.elchika.com/44d5d7ca54e8fd544e7f94c2c4681bbc466ea182/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30613439623061322d303637642d343831662d616535342d6662376130303834316537342f31333761663038302d346563382d346362612d393033632d613638373531613762333730/) # プログラム Arduino IDEでM5StickCに以下のコードを書きこみます。 ```arduino: #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回線とかに接続しているスマホなどであればそれもいったんオフ(機内モードなど)にしておいた方が良いみたいです。 ![キャプションを入力できます](https://camo.elchika.com/8736e66004829112c7dd86f43719b982eb083228/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30613439623061322d303637642d343831662d616535342d6662376130303834316537342f30356232636130312d623663622d346562362d383838312d333736346234313033383933/) その後、M5StickCの画面上のQRコードを読み取るか、リモコン操作したい端末のブラウザにIPアドレスをURLとして入力します。 ![キャプションを入力できます](https://camo.elchika.com/da61073bc5dc0520ace4aab097f2c0e9e0f3f11a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30613439623061322d303637642d343831662d616535342d6662376130303834316537342f39343062363064362d316233622d343236302d393238612d633461636361323630623863/) 上記の画面が出たらOKです。 「Turn On」を押すと、ラジコンカーが前進します。 ボタンの表記が「Turn Off」に変わり、そのボタンを押すと停止します。 @[youtube](https://www.youtube.com/watch?v=5BzAqZx6ZkE)