SJKのアイコン画像

M5stickCで小学生の計算カード

SJK 2021年11月16日に作成  (2021年11月16日に更新)

M5stickCで小学生の計算カード

概要

小学生の計算カード(足し算引き算や九九など)を「ハードウェア作品投稿キャンペーン」でマルツさんから頂いたM5StickCで作ってみました。問題を自動生成・表示しボタンを押すと答えを表示、を延々と繰り返します。

使用したモジュール

(※M5StickCはEOLになっておりますので、手に入らないときはM5StickC Plusで代用)
https://www.marutsu.co.jp/pc/i/2190748/

開発環境

開発環境は、Arduino IDEで行いました。

実装したこと

  • 起動時にBボタン(横にあるボタン)とAボタン(正面のM5ボタン)で計算カードの選択
  • 乱数で問題の自動生成・表示
  • Aボタンで答えの表示、1秒待って次の問題表示
  • 問題表示中にBボタンで計算カード選択画面に戻る
  • 1年生用(足し算・引き算)と3~4年生用(二桁足し算・割り切れる割り算)を作成

スケッチ

足し算・引き算のスケッチ

#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() ; } } }

二桁足し算・割り算のスケッチ

#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() ; } } }

実際に使ってみて

子供たちは最初はゲーム感覚で楽しんでやってましたが、すぐ飽きました(笑)。音声認識で答えの正誤判定が実装できたらいいなぁと思ってます。

キャプションを入力できます

  • SJK さんが 2021/11/16 に 編集 をしました。 (メッセージ: 初版)
ログインしてコメントを投稿する