マトリョーシカ的日常

ワクワクばらまく明日のブログ。

M5Stackでモーター制御


くっそ回る。#m5stack

 新宝島を聴きながらブログを書くとちょっと懐かしい気持ちになる。文章のつながりなどといったものは無視してただ言葉を垂れ流していたい。梅雨はもうすぐあけるといいのだけれど。

 M5Stackでモーター制御を行った。Aボタン(左のボタン)を押したらモーターが回転する。Bボタン(中央のボタン)を押すと回転が止まる。

繋ぎ方

 繋ぎ方はこんなかんじ。モータードライバは向きがあるので注意。欠けているほうが左。
https://www.instagram.com/p/B0Rld2LH6m4/

コード

 コードはこんなかんじ。

#include <M5Stack.h>
  int motor1 = 16;
  int motor2 = 17;
void setup() {
  // put your setup code here, to run once:

  M5.begin(true, false, true);
  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setCursor(65, 10);
  M5.Lcd.println("Motor TEST");
  M5.Lcd.setCursor(3, 35);
  M5.Lcd.println("Press button A = Motor ON");
  M5.Lcd.println("Press button B = Motor OFF");
  M5.Lcd.setTextColor(RED);
  pinMode(motor1,OUTPUT);
  pinMode(motor2,OUTPUT);

}
void loop() {
  // put your main code here, to run repeatedly:
    M5.update();

  if (M5.BtnA.wasPressed()) {
   digitalWrite(motor1, HIGH);
   digitalWrite(motor2, LOW);
  } else if (M5.BtnB.wasPressed()) {
   digitalWrite(motor1, LOW);
   digitalWrite(motor2, LOW);
  } 
  
}

 16番ピンと17番ピンをアウトプットというやつにして、digitalWriteで状態を変更している。どちらもLOWなら回転しない。どっちかがHIGHなら回転する。楽しい。

参考にしたサイト

tsukutta.hatenablog.com

 6年前の自分の記事に助けられた。ありがとう。いろいろあったけど私は元気です。

よっしゃ!

 次はこの回転を利用してなんか楽しげなことをする機構をつくる。

ひとまずの終焉とつぎのたのしげなステップ

f:id:kyokucho1989:20190717051007j:plain
https://unsplash.com/photos/Nvdo48sQNrk


 文章でもって息をするのが苦手になっていた。それほど文章から離れいてた気がする。しかし、試験は記述式であって、この数ヶ月はひたすら原稿用紙に向き合っていた。どういうあれかわからないが、積乱雲か生じる雨はなかった。

 技術士の二次試験を受けた。一日で600字詰原稿用紙を9枚つかった。頭もそうだが腕がしびれた。試験がおわって当日のうちに論文の再現をおこなったので、もう技術士に関してはすることがない。ひたすら創作をしよう。そういうことにした。

 やりたいことは3つある。技術書展7に向けた原稿の執筆、IoTブログの更新、そしてこのブログの更新だ。

技術書典7への出展

 技術書典とはテックてっきなコミケのことだ。各自が技術に関する本を書いて、それを販売するお祭り。4月に行われた技術書典6は参加サークル数は463、来場者数は1万人を超えたらしい。
技術書典6サークル参加アンケート結果と分析 - 技術書典ブログ

 私はそこへFarmToryLabのメンバーとしてなんか書いて出すことにした。前回もなんか書いた。
FARMTORY-JOURNAL創刊号を技術書典6で頒布しました|むらさき|note


 M5Stackというかっこいい小型のマイコンについて書いた。おかげさまで完売したらしい。わーい。書籍が気になる人はBoothで電子版が販売されているらしいので確認してね。
farmtory.booth.pm

 そういうあれで今回もM5Stackのことを書いてみようと思う。前回はM5stackの環境設定とか初歩的なことを取り扱った。今回はもうちょっと踏み込んでいろいろ楽しげなプロダクトをつくってみたい。モーター制御とか?

IoTブログの更新

 少し前からIoTブログをはじめた。
マトリョーシカ的IoT – IoTでいろいろたのしいことをやっていくブログ

 こちらはマトリョーシカ的日常とはスタンスを変えて、収益を上げられるブログにしたい。おかねがほしい!まずはGoogle Adsenseの審査に通って、広告を貼り付けられるようにする。こちらの記事がすごく参考になりそうだ。
【3記事で一発合格】最低限やるべき6つを徹底解説!Googleアドセンス合格方法【中学生】 | yusukeBLOG
 この記事の中の人は中学生で、いろいろがんばってるひと。最近は組み立て式の3Dプリンターを購入して、草刈り機をつくっている。楽しそうだ。

 IoTブログの目標は自分で工作キットを作って、それを販売すること。ハードウェアスタートアップをやってみたい。10個とか20個とか回路を作ってそいつを売りさばきたい。楽し気な未来が見えてきた。ひとまずはブログの記事を増やすことに専念する。30記事程IoTについて書きたい。

このブログの更新

 めっちゃ本を読んでいろいろ記事を書きたい。Wiredを読んでいないのでいっぱい読みたい。

おわり。

WIRED (ワイアード) VOL.33 「MIRROR WORLD - #デジタルツインへようこそ」(6月13日発売)

WIRED (ワイアード) VOL.33 「MIRROR WORLD - #デジタルツインへようこそ」(6月13日発売)

  • 作者: Condé Nast Japan (コンデナスト・ジャパン),WIRED編集部
  • 出版社/メーカー: プレジデント社
  • 発売日: 2019/06/13
  • メディア: 雑誌
  • この商品を含むブログを見る

M5StackとAmbientでIoTをはじめる!

https://www.instagram.com/p/BvKZnefnGJu/

M5Stack + Ambient = らくらくIoT

 M5StackをつかってIoTをやってみることにした。調べたらAmbientというサービスを使えばよさそうなことがわかった。AmbientはIoTデータの可視化サービスである。アカウントを登録しチャンネルをもらえば、センサデータをグラフで確認できる。

Ambientの登録方法

Ambient – IoTデーター可視化サービス

 上記のサイトでユーザー登録を行う。終了したらチャンネルを作成する。チャンネルにつけられたリードキーとライトキーをつかってセンサデータのやり取りをおこなう。詳しいマニュアルはこちらにある。
 
Ambientを使ってみる – Ambient

Ambientライブラリのインポート

 次にライブラリをインポートする。下記リンクの「Clone or download」をクリックし、ZIPファイルをダウンロードする。
GitHub - AmbientDataInc/Ambient_ESP8266_lib: IoTデーター可視化サービス「Ambient」のESP8266/ESP32用ライブラリーと、温度・湿度センサー、心拍モニター、消費電流モニターなどのサンプルプログラムです。

 次にArduino IDEを立ち上げ、「スケッチ」>「ライブラリをインクルード」>「.ZIP形式のライブラリをインストール」 を選択。ダウンロードしたZIPファイルを選択する。これで完了。
 
 ↓ここに詳しいやり方が書いてある。
Arduino ESP8266で温度・湿度を測定し、Ambientに送ってグラフ化する – Ambient

コード

 とりあえずセンサーなどは使わずに、Wi-Fiの通信がうまくいくかだけを確かめることにした。こんなかんじ。

#include <M5Stack.h>
#include <Wire.h>
#include "Ambient.h"

#define PERIOD 60

WiFiClient client;
Ambient ambient;

const char* ssid     = "******"; /*ここを書き換える*/
const char* password = "******"; /*ここを書き換える*/

unsigned int channelId = *****; // AmbientのチャネルID
const char* writeKey = "*****"; // ライトキー
int number = 1;
unsigned long t;
void setup(){
    M5.begin();
    Wire.begin(); // I2Cの初期化
    Serial.begin(74880);
    delay(100);
    M5.Lcd.println("\r\nM5Stack+BME280->Ambient test");

    WiFi.begin(ssid, password);  //  Wi-Fi APに接続
    while (WiFi.status() != WL_CONNECTED) {  //  Wi-Fi AP接続待ち
        delay(100);
    }

    M5.Lcd.print("WiFi connected\r\nIP address: ");
    Serial.println(WiFi.localIP());

    ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化
}

void loop() {
    number = (number+1) % 10;
        ambient.set(1, number);
        ambient.send();
        M5.Lcd.println(number);
    delay(6000);
}
  • ssid と password はWi-Fiのルータなどに書いてある。いつも使用しているやつを使う。

 コードを書き込みしてディスプレイに数字が表示されるようになったら自分のチャンネルページを確認して欲しい。リアルタイムでグラフが更新されるはずだ。

おわりに

 どんどんIoT環境が整ってきた!次はモータを使ってなにかを動かしたい!動くものがあるとメカっぽくなるよね。


M5Stack用プロトキット(温湿度センサ付き)

M5Stack用プロトキット(温湿度センサ付き)

M5stackでプッチ神父回路をつくった。ひたすら素数を数えるよ。


#M5stack プッチ神父回路をつくった。素数を数えるよ。

 以前、Arduinoでつくっていたプッチ神父回路をM5stackに移植した。ボタンを押すとひたすら素数を数え続けるすぐれものである。Arduinoでは7segLEDやボタンをつけないといけなかったが、M5stackはそんなことは必要ない。非常に簡単につくれる。

コード
#include <M5Stack.h>
// The setup() function runs once each time the micro-controller starts
  int sosu = 1;
  int j = 2;
void setup() {
  // init lcd, serial, not init sd card
  M5.begin(true, false, true);
  M5.Lcd.clear(BLACK);
  M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setCursor(65, 10);

  M5.Lcd.println("CALM DOWN...");
  delay(3000);
  M5.Lcd.println("COUNT PRIME NUMBERS TO KEEP YOUR COMPOSURE");
  delay(3000);
  M5.Lcd.println("PRIME NUMBERS ARE SOLITARY NUMBERS");
  delay(3000);
  M5.Lcd.println("THAT CAN ONLY BE DIVIDED BY I AND ITSELF...");
  delay(3000);
  M5.Lcd.println("THEY GIME ME STRENGTH...");
  delay(1000);
  
  
  M5.Lcd.setCursor(3, 185);
  M5.Lcd.println("-ENRICO PUCCI-");
  M5.Lcd.println("Press button B 700ms clear");
}
//-RGBcolor-from https://qiita.com/nnn_anoken/items/ea6b5e81623ba690343c-
uint16_t getColor(uint8_t red, uint8_t green, uint8_t blue){
  return ((red>>3)<<11) | ((green>>2)<<5) | (blue>>3);
}
void getSosu(){
  sosu=sosu+1;
  while(sosu!=j){
    while(sosu % j !=0){
      j=j+1;
    }
    if(sosu==j){
      j=2;
      break;
    }
    sosu=sosu+1;
    j=2;
  }
}
// Add the main program code into the continuous loop() function
void loop() {
  M5.Lcd.setTextSize(20);
  M5.Lcd.setTextColor(getColor(200,255,100));
  M5.update();

  // if want use Releasefor; suggest use Release in press event
  if (M5.BtnA.wasReleased()) {
  M5.Lcd.clear(0x0000);
  M5.Lcd.setCursor(0, 0);
  getSosu();
  M5.Lcd.print(sosu);
  } else if (M5.BtnB.wasReleased()) {
  } else if (M5.BtnC.wasReleased()) {
  } else if (M5.BtnB.wasReleasefor(700)) {
    M5.Lcd.clear(0x0000);
    j=2;
    sosu=1;
    M5.Lcd.setCursor(0, 0);
  }
}
色のRGB指定

 twitterでRGB指定できるよと教えてもらった。参考サイトは↓
https://qiita.com/nnn_anoken/items/ea6b5e81623ba690343c

uint16_t getColor(uint8_t red, uint8_t green, uint8_t blue){
  return ((red>>3)<<11) | ((green>>2)<<5) | (blue>>3);
}

こんな関数をつくり、あとで色の指定の時にgetColor(R,G,B);とすればOK。R,G,Bはそれぞれ0~255まで。

エンリコプッチとは

 ジョジョの第六部に出てくる悪役。素数を数えて落ちつく。