Robot Car V2 kit - 赤外線リモコンでロボットカーを制御 -
赤外線リモコンでロボットカーを制御
各機器の設置と接続
ステップ1: レッスン2以降の内容は、全てレッスン1における車体の完成が必要になりますので、まずレッスン1を完成させましょう。
ステップ2: 赤外線受信機を2本のM2.5*10プラスチックネジ、ナット、六角柱を使用して、上部シャーシの前面に取り付けます。
ステップ3: 下記図のように、5VをVCC端子に、D10をS端子に、GNDを-/GND端子に接続します (レッスン1で接続した配線はそのまま使用するので、外さないようにしてください) 。
Arduino <-> 赤外線センサ
D10 <-> "S"
5V <-> "VCC" 電源
GND <-> "-" GND
動作確認
ステップ1、2は省略
ステップ3: レッスン2のソースをダウンロードします。https://osoyoo.com/driver/v2smartcar-lesson2.zip からソースをダウンロードするとzipファイルなので、解凍するとsmartcar-lesson2というフォルダが表示されます。
ステップ4: UNOボードとPCをUSBケーブルで接続し、Arduino IDEを開きます。開いたらファイルをクリック – >開くをクリック – > smartcar-lesson2フォルダ内のコード「v2smartcar-lesson2.ino」を選択し、ソースコードをarduinoにロードします。
v2smartcar-lesson2:11:10: fatal error: IRremote.h: No such file or directory #include <IRremote.h> ^~~~~~~~~~~~ compilation terminated. exit status 1 IRremote.h: No such file or directory
IRremoteがないということなので、Tools>Manage Libraries からIRremoteを取得
リモコンに電源も入っており便利。 ボタン操作ごとにタイヤが動くので使い勝手は悪いですね。
Robot Car V2 kit - 動作テスト -
動作試験
ステップ1: 最新版のArduino IDEをインストールします(1.1.16以降のArduino IDEバージョンをお持ちの場合は、このステップを飛ばしてください)。
1.8.12
現在の最新版は1.8.15なので、バージョンアップしておく。 ダウンロードして、appの置き換えで完了。
ステップ2: ソースをダウンロードします。 https://osoyoo.com/driver/v2smartcar-lesson1.zipからソースをダウンロードするとzipファイルなので、解凍するとv2smartcar-lesson1というフォルダーが表示されます。
・v2smartcar-lesson1.ino ファイルがある。
ステップ3: UNOボードとPCをUSBケーブルで接続し、Arduino IDEを開きます。開いたらファイルをクリック – >開くをクリック – > smartcar-lesson1フォルダー内のコード「v2smartcar-lesson1.ino」を選択し、ソースコードをarduinoにロードします。
ステップ4: プロジェクトに対応するボードとポートを選択し、スケッチ(ソース)をアップロードします。
uploadできないエラー発生。
Boardの設定を変更していなかったので、Tools>Board>Arduino unoでOK
動作テスト
・USBケーブルを抜く
・18650バッテリーを入れる
・電源をONにする動いた。
Robot Car V2 kit - 組み立て編 -
昨日、ワクチン接種も2回目が完了し、本日は「ワクチン接種休暇」。。。 ということで、しばらく保管してあったRobot Carを予定通り作りたい。
使うのは、 OSOYOO Robot Car V2 Kit / ROBOT CARE STARTER KIT
今売っているのは、2.1。
まずは、基本の通り組み立てから。
各機器の設置
ステップ1: 上部と下部のシャーシに貼っている保護フィルムをはがす。
・綺麗に剥がれる。
ステップ2: 以下のように4つのモーターユニットをモーターホルダーに取り付けます。
・ナット1個の溝が切れてなく入れられない。一旦そのまま進む。(戻ってきて、M3 Nuts 5個入りと1個交換してつける)
ステップ3: 金属製のモーター固定板に付属しているM3*8ネジを使用して、4個のモーターユニットを下部シャーシに取り付けます。
ステップ4: モータードライバボードを4本のM2.5プラスチックネジ・ナットと、六角柱を使用して下部シャーシに取り付けます (下記図を確認して正しい方向に取り付けます)。
・ナットーシャーシー六角中ーモータドラバボードーネジ の層になるように取り付けする。
ステップ5: 下部シャーシに、2本のM2.5プラスチックネジ・ナットと、六角柱を使用して電圧計を取り付けます。
・つけた
ステップ6: 上部シャーシに4本のM2.5プラスチックネジ・ナットと、六角柱を使用してArduino UNOボードを取り付けます(取り付けの際は下記図を確認して、ボードの向きを確認してください)。
・ボードの裏表さえ間違えなければ、もう手馴れたものです。
ステップ7: このキットには18650用と9V用の2種類の電池ケースがついていますが、基本的に18650用をお勧めしています。取り付けは4本のM3*10ネジとナットを使用して上部シャーシに取り付けます。
・18650用を装着
配線の接続
ステップ1: 下記図に従って、モータードライバボードK1~K4ソケットに4個のモーターユニットを接続します。
ステップ2: 下記図に従って、電圧計とモータードライバボードを、3ピン(メス~メス)ジャンパワイヤで接続します。
・図の向きが違うが気にせずつける。
ステップ3: 下記図に従って、UNOボードのD6、D7、D8、D9、D11、D12と、モータードライバボードを6ピン(メス~オス)ジャンパワイヤで接続します(ピンはサンプルコードconfiguration.hファイルで定義されています)。
・(後日)ステップ5で確認できるが、ケーブル配線は穴を通すことになる。
ステップ4: 下記図に従って、Unoボード、モータードライバボード、電池ケース(18650電池または9V用の電池ケース)を接続します
・電源のケーブルですね。
ステップ5: 上部と下部シャーシに挟むように5本の銅柱を接続します。接続には10本のM3*ネジとゴムスペーサで上下から固定した後、4本のタイヤをモータードライバに取り付けます。
・穴通しているので、配線し直し。 ・タイヤをつけたら一気に車らしくなった。
スマートスピーカーで雨の通知をして洗濯物を守れ!
最近突然の雨が多く、外の洗濯物が大雨にさらされてびしょびしょになることも多くあり、なんとかならないものかと。。。
そこでスマートスピーカーに雨が降る手前で通知してもらうのはどうだろうと思い、早速調査。
どのスマートスピーカーも基本的に、雨を通知してはくれず、
「OK, Google. 天気予報は?」
「アレクサ、天気予報は?」
これでは洗濯物は守れない・・・・。
ググったところ、すでに先人は多く、ラズパイとIFTTTを利用してスマートスピーカーに雨の通知をさせることができそうだ。
Raspberry Pi 3 B+や4B+とスターターキットを購入すれば良いようだが、1万円程度〜の金額する。
本体だけでも、5〜6千円程度。
まずはコストを優先して、Raspberry Pi Zero Wを購入。さて、頑張ろう。
Docker for Mac
AWSだとEKS課金されるので、実際にデプロイするときは検討するが、インフラにはDocker+k8sを利用予定。
まずはローカル環境で、環境構築。
Docker for Mac
Dockeerアカウント作成 hub.docker.com
Freeプランで。
サクサク進める。
アプリをアプリケーションフォルダにコピー
チュートリアル通りに実施.
Tutorial のリポジトリを clone 。
$ git clone https://github.com/docker/doodle.git
Cloning into 'doodle'...
remote: Enumerating objects: 73, done.
remote: Total 73 (delta 0), reused 0 (delta 0), pack-reused 73
Unpacking objects: 100% (73/73), done.
Docker イメージをビルド。
$ cd doodle/cheers2019 && docker build -t stockview/cheers2019 .
-bash: docker: command not found
$ which docker
$
Dockerいない。
アプリケーションフォルダのDockerを起動。
あ、コマンドもできる。便利。
$ which docker
/usr/local/bin/docker
アプリでチュートリアルを再スタート。
/github.com/docker/getting-started.git docker: Error response from daemon: Conflict. The container name "/repo" is already in use by container "f829602b6904bb432086e04350c2206671dc2d2d8f05A72d9db143a2155137c5". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'. $ docker cp repo:/git/getting-started/ . $
Error出たけれども、実行済みなので無視。
ビルド
初めてのdocker起動。
サインインしてアップロードするようなので、まずは、DockerIDとパスワードでサインイン。
DockerHubに保存。
ちゃんと上がっていて、ダウンロードできる状態。
完了。
次は、チュートリアル。。。
Smart Home IoT Kit Lesson 21 4*4 Keypad
4*4 Keypadのレッスンがなかったので作る。
Smart Home IoT Kit Lesson 21 4*4 Keypad
まず、基盤上にPINがアサインされているので接続する。(4×4 Keypadと書いてある)
さて、Yun Iotの
https://osoyoo.com/2018/03/22/osoyoo-yun-iot-lesson-4x4-keypad/
を参考にしてみる。
まずは、Keypadライブラリを導入
次に、Sketchにソースをコピーしてコンパイルしてみる。
#include “console.h”
#include “bridge.h”
#include “keypad.h”
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{‘1′,’2′,’3′,’A’},
{‘4′,’5′,’6′,’B’},
{‘7′,’8′,’9′,’C’},
{‘*’,’0′,’#’,’D’}
};
byte rowPins[ROWS] = {47, 45, 43, 41}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {39, 37, 35, 33}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Bridge.begin();
Console.begin();
while (!Console);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Console.println(customKey);
}
}
Arduino: 1.8.12 (Mac OS X), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
smarthome-lession21iroz:1:10: error: #include expects "FILENAME" or <filename>
#include “console.h”
^
smarthome-lession21iroz:2:10: error: #include expects "FILENAME" or <filename>
#include “bridge.h”
^
smarthome-lession21iroz:3:10: error: #include expects "FILENAME" or <filename>
#include “keypad.h”
^
exit status 1
#include expects "FILENAME" or ≷filename>
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
なんだかエラーが出ているので、よく確認すると、 “と"で違う ”と" ’と' ‘と' ′と' も。ということで修正しとく。 なんでこうなるんだろう?
そして、ConsoleもBridgeも通らないので、ソースを変更。(ConsoleはSerialにして、Bridgeはいらない。)
それで、Keypadから入力すると動いた。入力がシリアルモニターに表示されるようになったが、押したボタンとシリアルモニターに表示される記号がずれる。
入力値 (シリアルモニタ表示)
1 (D)
2 (C)
3 (B)
A (A)
4 (#)
5 (9)
6 (6)
B (3)
7 (0)
8 (8)
9 (5)
C (2)
* (*)
0 (7)
# (4)
D (1)
どうも、ずれ方が対角線で折り返したようなずれ方。(A,6,8,*が正しい・・・・。)
https://osoyoo.com/2018/03/22/osoyoo-yun-iot-lesson-4x4-keypad/
だと、
今の基盤をみると
4*4 Keypad pin <-> 実際の基盤 <-> Webでの接続表記
1 <-> D33 <-> D47
2 <-> D35 <-> D45
3 <-> D37 <-> D43
4 <-> D39 <-> D41
5 <-> D41 <-> D39
6 <-> D43 <-> D37
7 <-> D45 <-> D35
8 <-> D47 <-> D33
の全く逆なので、反転して接続するのが良いのだろうがケーブル長が足りない。
ということで、Sketchを変更して完成。
smarthome-lession21iroz.ino
#include <Key.h>
#include <Keypad.h>
#include "SoftwareSerial.h"
SoftwareSerial EspSerial(A9, A8); // RX, TX
//#include "console.h"
//#include "bridge.h"
//#include "keypad.h"
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
//byte rowPins[ROWS] = {47, 45, 43, 41}; //connect to the row pinouts of the keypad
//byte colPins[COLS] = {39, 37, 35, 33}; //connect to the column pinouts of the keypad
byte rowPins[ROWS] = {33,35,37,39}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {41,43,45,47}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
//Bridge.begin();
//Serial.begin();
Serial.begin(9600);
while (!Serial);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
ちゃんと動きました。
Lession21(自作)作成完了!
このKitに入っている4*4 Keypad使えるようになりました。
Smart Home IoT Blynk導入 3 - Blynk Widgets : LED Blynk
IoTをグラフィカルに簡単に使えるようになるBlynkだが、前回シンプルなLチカであったのと、Light Blinkという同じことをしそうなサンプルがあるので試してみる。
ExampleをLight Blinkで、試してみる。
前回と同様の修正を行う。
auth、ssid、passの入力。SoftwareSerialのMEGA2560向け修正
一応ESP8266_BAUDも9600へ。
WidgetLED led1(V1);
のV1がどこからきたかググると、BlynkアプリのバーチャルPINっぽいぞ。
とういうことで、LEDをキャンパスに追加して、
pinをV1に設定
さて、シリアルモニターで。
19:08:54.874 -> [9]
19:08:54.874 -> ___ __ __
19:08:54.911 -> / _ )/ /_ _____ / /__
19:08:54.949 -> / _ / / // / _ \/ '_/
19:08:54.986 -> /____/_/\_, /_//_/_/\_\
19:08:54.986 -> /___/ v0.6.1 on Arduino Mega
19:08:55.024 ->
19:08:55.483 -> [599] Connecting to aterm-36be98-g
19:08:58.681 -> [3809] AT version:1.2.0.0(Jul 1 2016 20:04:45)
19:08:58.753 -> SDK version:1.5.4.1(39cb9a32)
19:08:58.753 -> Ai-Thinker Technology Co. Ltd.
19:08:58.786 -> Dec 2 2016 14:21:16
19:08:58.823 -> OK
19:08:59.805 -> [4909] Failed to enable MUX
19:09:04.992 -> [10106] +CIFSR:STAIP,"192.168.3.27"
19:09:05.026 -> +CIFSR:STAMAC,"cc:50:e3:e3:d6:02"
19:09:05.064 -> [10116] Connected to WiFi
19:09:15.496 -> [20585] Ready (ping: 40ms).
19:09:17.400 -> LED on V1: on
19:09:18.380 -> LED on V1: off
19:09:19.378 -> LED on V1: on
19:09:20.377 -> LED on V1: off
19:09:21.371 -> LED on V1: on
19:09:22.391 -> LED on V1: off
19:09:23.387 -> LED on V1: on
19:09:24.401 -> LED on V1: off
19:09:25.396 -> LED on V1: on
19:09:26.402 -> LED on V1: off
アプリ上でLEDが点滅するようになりました。
確かにBlynk は勉強用&自慢には良いアプリ。
ただ、やりたいことによっては多くのウィジェットが必要となり費用がかかることと、自分以外で使うときには使いづらいかも。アプリを展開するにはサブスクバージョンが必要ですね。
個人ではちょっと払えないから、副業で少しもらえれば使ってみよう。