SJK が 2021年11月16日09時46分13秒 に編集
初版
タイトルの変更
M5stickCで小学生の計算カード
タグの変更
M5StickC
Arduino_IDE
メイン画像の変更
記事種類の変更
製作品
本文の変更
# 概要 小学生の計算カード(足し算引き算や九九など)を「ハードウェア作品投稿キャンペーン」でマルツさんから頂いたM5StickCで作ってみました。問題を自動生成・表示しボタンを押すと答えを表示、を延々と繰り返します。 # 使用したモジュール - M5StickC https://www.marutsu.co.jp/pc/i/1634660/ ![M5StickC](https://www.marutsu.co.jp/contents/shop/marutsu/img/goods/020/1634660/1634660_2.jpg) (※M5StickCはEOLになっておりますので、手に入らないときはM5StickC Plusで代用) https://www.marutsu.co.jp/pc/i/2190748/ # 開発環境 開発環境は、Arduino IDEで行いました。 # 実装したこと - 起動時にBボタン(横にあるボタン)とAボタン(正面のM5ボタン)で計算カードの選択 - 乱数で問題の自動生成・表示 - Aボタンで答えの表示、1秒待って次の問題表示 - 問題表示中にBボタンで計算カード選択画面に戻る - 1年生用(足し算・引き算)と3~4年生用(二桁足し算・割り切れる割り算)を作成 # スケッチ ```arduino:足し算・引き算のスケッチ #include <M5StickC.h> int s ; void setup() { M5.begin(); M5.Axp.ScreenBreath(10); // 画面の輝度を少し下げる M5.Lcd.setRotation(1); // 0縦正方向, 1左に画面, 2縦逆, 3右に画面 M5.Lcd.setTextSize(2); // 文字サイズを3にする M5.Lcd.fillScreen(BLACK); // 背景を黒にする M5.update(); M5.Lcd.setCursor(3, 3, 2); M5.Lcd.print(" (+)^^, (-)>"); //足し算・引き算の選択表示 //ボタン入力待ち(while文中にM5.update()を入れないと状態が更新されない) while (M5.BtnA.wasPressed() != true && M5.BtnB.wasPressed() != true) { M5.update(); } if (M5.BtnA.isPressed()) { s = 0; } if (M5.BtnB.isPressed()) { s = 1; } } void loop() { M5.Axp.ScreenBreath(10); M5.Lcd.setRotation(1); M5.Lcd.setTextSize(3); M5.Lcd.fillScreen(BLACK); M5.update(); //引き算(20までの数引く一桁) if (s == 0) { int i = random (19) + 1; int j = random (9) + 1; int k = i - j; if (k <= 0) { return; } M5.Lcd.setCursor(3, 3, 2); M5.Lcd.print(i); M5.Lcd.print("-"); M5.Lcd.print(j); M5.Lcd.print("="); while (M5.BtnA.wasPressed() != true && M5.BtnB.wasPressed() != true) { M5.update(); } if (M5.BtnA.wasPressed()) { //M5.Lcd.setCursor(110, 5, 2); M5.Lcd.print(k); delay (1 * 1000); } if (M5.BtnB.wasPressed()) { esp_restart() ; } } //足し算(一桁足す一桁) if (s == 1) { int i = random (9) + 1; int j = random (9) + 1; int k = i + j; M5.Lcd.setCursor(5, 5, 2); M5.Lcd.print(i); M5.Lcd.print("+"); M5.Lcd.print(j); M5.Lcd.print("="); while (M5.BtnA.wasPressed() != true && M5.BtnB.wasPressed() != true) { M5.update(); } if (M5.BtnA.wasPressed()) { //M5.Lcd.setCursor(100, 5, 2); M5.Lcd.print(k); delay (1 * 1000); } if (M5.BtnB.wasPressed()) { esp_restart() ; } } } ``` ```arduino:二桁足し算・割り算のスケッチ #include <M5StickC.h> int s ; void setup() { M5.begin(); M5.Axp.ScreenBreath(10); // 画面の輝度を少し下げる M5.Lcd.setRotation(1); // 0縦正方向, 1左に画面, 2縦逆, 3右に画面 M5.Lcd.setTextSize(2); // 文字サイズを3にする M5.Lcd.fillScreen(BLACK); // 背景を黒にする M5.update(); M5.Lcd.setCursor(3, 3, 2); M5.Lcd.print(" (+)^^, (/)>"); //足し算・割り算の選択表示 while (M5.BtnA.wasPressed() != true && M5.BtnB.wasPressed() != true) { M5.update(); } if (M5.BtnA.isPressed()) { s = 0; } if (M5.BtnB.isPressed()) { s = 1; } } void loop() { M5.Axp.ScreenBreath(10); M5.Lcd.setRotation(1); M5.Lcd.setTextSize(3); M5.Lcd.fillScreen(BLACK); M5.update(); //割り算(割り切れる二桁割る一桁) if (s == 0) { int i = random (89) + 11; int j = random (8) + 2; int k = i % j; if (k != 0) { return; } int l = i / j; M5.Lcd.setCursor(3, 3, 2); M5.Lcd.print(i); M5.Lcd.print("/"); M5.Lcd.print(j); M5.Lcd.print("="); while (M5.BtnA.wasPressed() != true && M5.BtnB.wasPressed() != true) { M5.update(); } if (M5.BtnA.wasPressed()) { M5.Lcd.setTextSize(2); // 文字サイズを2にする M5.Lcd.setCursor(100, 42, 2); M5.Lcd.print(l); delay (1 * 1000); } if (M5.BtnB.wasPressed()) { esp_restart() ; } } //足し算(二桁足す二桁) if (s == 1) { int i = random (88) + 11; int j = random (88) + 11; int k = i + j; M5.Lcd.setCursor(3, 3, 2); M5.Lcd.print(i); M5.Lcd.print("+"); M5.Lcd.print(j); M5.Lcd.print("="); while (M5.BtnA.wasPressed() != true && M5.BtnB.wasPressed() != true) { M5.update(); } if (M5.BtnA.wasPressed()) { M5.Lcd.setTextSize(2); // 文字サイズを2にする M5.Lcd.setCursor(100, 42, 2); M5.Lcd.print(k); delay (1 * 1000); } if (M5.BtnB.wasPressed()) { esp_restart() ; } } } ``` # 実際に使ってみて 子供たちは最初はゲーム感覚で楽しんでやってましたが、すぐ飽きました(笑)。音声認識で答えの正誤判定が実装できたらいいなぁと思ってます。 ![キャプションを入力できます](https://camo.elchika.com/0bef68b599b552f153a88482151b9f4c8acd3327/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35386366623661372d613337392d343635322d383130622d6464656637363663303337632f64393066646534372d383061342d343966622d393736342d363335613966633165313064/)