SunFounder 3 in 1 IoT/スマートカー/学習キット

SunFounder 3 in 1スターターキットでをお選びいただき、ありがとうございます。

注釈

このドキュメントは以下の言語で利用可能です。

ご希望の言語でドキュメントにアクセスするために、それぞれのリンクをクリックしてください。

_images/3in_kit.png

オンラインで学習キットを購入したことはありますか?単なるPDFやブックレットが付属していて、プロジェクトの組み立て手順だけが書かれていましたか?

あるいは、自分でスマートカーを製作したいけど、オンラインで見つけたものは高価で複雑すぎると感じたことはありますか?

他の人が作った面白くて役立つIoTプロジェクトを見て、どこから始めたらいいのかわからないことはありますか?

これらの問題は、私たちの3 in 1スターターキットで解決できます。

3 in 1スターターキットには、Arduinoを学ぶための完全なコースが含まれており、他の学習キットには提供されていないさまざまな興味深いプロジェクト、例えば、スマートカーのプロジェクトやIoTのプロジェクトも提供しています。キットのコースをステップバイステップで進めるだけで、コードをコピー&ペーストするのではなく、自分のコードを書いてArduinoプロジェクトを自由に実装できます。

さらに、キットには30以上のScratchプログラミングプロジェクトも提供しており、初心者はプログラミング経験がなくても自分の作品を作成できます!

さあ、ゼロからヒーローになるためのArduinoプログラミングを始めましょう!

質問がある場合は、service@sunfounder.com までメールを送ってください。できるだけ早く返答いたします。

表示言語について

このドキュメントは、他の言語でも利用可能です。表示言語を切り替えるには、ページの左下にある Read the Docs アイコンをクリックしてください。

_images/translation.png

Contents

キットのコンポーネントについて学ぶ

パッケージを開封した後、コンポーネントの数量が商品説明と一致しているか、およびすべてのコンポーネントが良好な状態であるかどうかを確認してください。

以下は、各コンポーネントの紹介です。これには、コンポーネントの動作原理と対応するプロジェクトが含まれています。

Control Board

SunFounder R3ボード

_images/uno_r3.jpg

注釈

SunFounder R3ボードは、 Arduino Uno とほとんど同じ機能を持つマザーボードです。両方のボードは互換性があります。

SunFounder R3ボードは、ATmega328P (データシート)をベースとしたマイクロコントローラボードです。14のデジタル入出力ピン(そのうち6つはPWM出力として使用可能)、6つのアナログ入力、16 MHzのセラミックレゾネーター (CSTCE16M0V53-R0)、USB接続、電源ジャック、ICSPヘッダ、リセットボタンを持っています。マイクロコントローラをサポートするために必要なものはすべて含まれているので、USBケーブルでコンピュータに接続するか、ACからDCへのアダプタやバッテリーで電源を供給するだけで始めることができます。

技術仕様

_images/uno.jpg
  • マイクロコントローラ: ATmega328P

  • 動作電圧: 5V

  • 入力電圧 (推奨): 7-12V

  • 入力電圧 (限界): 6-20V

  • デジタルI/Oピン: 14 (0-13、うち6つはPWM出力(3, 5, 6, 9-11)提供)

  • PWMデジタルI/Oピン: 6 (3, 5, 6, 9-11)

  • アナログ入力ピン: 6 (A0-A5)

  • I/Oピン当たりのDC電流: 20 mA

  • 3.3VピンのDC電流: 50 mA

  • フラッシュメモリ: 32 KB (ATmega328P) うち0.5 KBはブートローダに使用

  • SRAM: 2 KB (ATmega328P)

  • EEPROM: 1 KB (ATmega328P)

  • クロック速度: 16 MHz

  • LED_BUILTIN: 13

  • 長さ: 68.6 mm

  • 幅: 53.4 mm

  • 重量: 25 g

  • I2Cポート: A4(SDA), A5(SCL)

さらに

ESP8266 モジュール

_images/esp8266.jpg

ESP8266は、低価格のWi-Fiマイクロチップで、 組み込みのTCP/IPネットワーキングソフトウェアと マイクロコントローラー機能を持ち、中国上海のEspressif Systemsによって製造されています。

このチップは、2014年8月にAi-Thinkerというサードパーティ製造業者が製造したESP-01モジュールとともに、西洋のメーカーの注目を集めました。 この小型のモジュールは、マイクロコントローラーがWi-Fiネットワークに接続し、Hayes方式のコマンドを使用して簡単なTCP/IP接続を行うことを可能にします。 しかし、最初はこのチップとその受け入れるコマンドに関する英語のドキュメントはほとんどありませんでした。 非常に低い価格と、モジュール上の外部コンポーネントが非常に少ないこと、 そして量産されれば非常に安価になる可能性を示唆するこれらの事実が、 多くのハッカーを引きつけてモジュール、チップ、その上のソフトウェアを探索し、 中国語のドキュメントを翻訳することになりました。

ESP8266のピンとその機能:

_images/ESP8266_pinout.png
ESP8266-01 ピン

ピン

名称

説明

1

TXD

UART_TXD、送信; 汎用入出力: GPIO1; 起動時のプルダウンは許可されていません。

2

GND

GND

3

CU_PD

高レベルで動作; 低レベルが供給されると電源オフ。

4

GPIO2

電源投入時は高レベルでなければならず、ハードウェア的なプルダウンは許可されていません; デフォルトでプルアップ。

5

RST

外部リセット信号、低レベルが供給されるとリセット; 高レベル供給時に動作 (デフォルトは高レベル)。

6

GPIO0

Wi-Fiステータスインジケータ; 動作モード選択: プルアップ: フラッシュブート, 動作モード; プルダウン: UARTダウンロード, ダウンロードモード。

7

VCC

電源供給(3.3V)

8

RXD

UART_RXD、受信; 汎用入出力: GPIO3;

ESP8266 アダプタ

_images/esp8266_adapter.png

ESP8266アダプタは、ESP8266モジュールをブレッドボード上で使用できるようにする拡張ボードです。

これはESP8266のピン配置と完璧に一致しており、Arduinoボードからの電圧を受け取るための5Vピンも追加されています。統合されたAMS1117チップは、電圧を3.3Vに落とした後でESP8266モジュールを駆動するために使用されます。

回路図は以下の通りです:

_images/sch_esp8266adapter.png

Basic

ブレッドボード

_images/breadboard.png

ブレッドボードは、電子機器のプロトタイピング用の基盤です。もともとこの言葉は、文字通りパンを切るための磨かれた木製の板を指していました[1]。1970年代にはんだ不要のブレッドボード(別名:プラグボード、ターミナルアレイボード)が登場し、現在では「ブレッドボード」という言葉は一般的にこれを指して使われています。

ブレッドボードは、回路設計を完成させる前に、迅速に回路の構築やテストをするために使用されます。ICや抵抗器、ジャンパーワイヤーなどの上記のコンポーネントを挿入するための多くの穴があります。ブレッドボードを使用すると、コンポーネントのプラグインや取り外しが容易になります。

写真はブレッドボードの内部構造を示しています。これらの穴は互いに独立しているように見えますが、内部では金属ストリップで互いに接続されています。

_images/breadboard_internal.png

ブレッドボードについてもっと知りたい方は、以下を参照してください: ブレッドボードの使い方 - Science Buddies

抵抗器

_images/resistor.png

抵抗器は、分岐電流を制限することができる電子部品です。固定抵抗器は抵抗器値を変更することができない抵抗器であり、ポテンショメータや可変抵抗器の抵抗器値は調整可能です。

一般的に使用される抵抗器の回路記号です。通常、抵抗器値はこれに記載されています。したがって、回路内でこれらの記号を見た場合、それは抵抗器を示しています。

_images/resistor_symbol.png

Ω は抵抗器の単位で、大きな単位には KΩ、MΩなどがあります。 これらの関係は次のように示されます:1 MΩ = 1000 KΩ、1 KΩ = 1000 Ω。通常、抵抗器の値はその上に記載されています。

抵抗器を使用する際には、まずその抵抗器値を知る必要があります。方法は2つあります:抵抗器のバンドを観察するか、マルチメータを使用して抵抗器値を測定する方法です。より便利で速いので、第一の方法を使用することをお勧めします。

_images/resistance_card.jpg

このカードに示されているように、各色は数字を表します。

オレンジ

灰色

0

1

2

3

4

5

6

7

8

9

0.1

0.01

4バンドおよび5バンドの抵抗器はよく使用されており、それぞれに4つおよび5つの彩色バンドがあります。

通常、抵抗器を取得すると、色を読み取るためのどちらの端を開始するかを判断するのが難しい場合があります。 ヒントは、4番目と5番目のバンドの間の間隔が比較的大きいことです。

したがって、抵抗器の一方の端で2つの彩色バンドの間の間隔を観察できます。他の任意のバンドの間隔よりも大きい場合、反対側から読むことができます。

以下に示す5バンドの抵抗器の抵抗器値の読み取り方法を見てみましょう。

_images/220ohm.jpg

この抵抗器の場合、抵抗器は左から右に読む必要があります。 値は次のフォーマットである必要があります:1st Band 2nd Band 3rd Band x 10^Multiplier (Ω)、許容誤差は±Tolerance%です。 したがって、この抵抗器の抵抗器値は2(赤) 2(赤) 0(黒) x 10^0(黒) Ω = 220 Ωで、許容誤差は±1%(茶色)です。

Wikiで抵抗器についてもっと学ぶことができます: 抵抗器 - Wikipedia

コンデンサ

_images/103_capacitor.png _images/10uf_cap.png

コンデンサは、与えられた電位差のもとでの電荷の蓄積量を指し、Cとして示され、国際単位はファラド(F)です。 一般的に、電荷は電場内で力の下で移動します。導体の間に媒体が存在すると、電荷の移動は妨げられ、導体上に電荷が蓄積されます。

この蓄積された電荷の量は容量と呼ばれます。コンデンサは電子機器の中で最も広く使用される電子部品の一つであり、直流隔離、結合、バイパス、フィルタリング、チューニングループ、エネルギー変換、制御回路などの用途で幅広く利用されています。コンデンサは、電解コンデンサや固体コンデンサなどに分類されます。

材料特性に基づいて、コンデンサはアルミ電解コンデンサ、フィルムコンデンサ、タンタルコンデンサ、セラミックコンデンサ、スーパーコンデンサなどに分けられます。

このキットでは、セラミックコンデンサと電解コンデンサが使用されています。

セラミックコンデンサには103や104のラベルがあり、これは容量値を表しており、103=10x10^3pF、104=10x10^4pFとなります。

単位変換

1F=10^3mF=10^6uF=10^9nF=10^12pF

ジャンパーワイヤー

二つの端子を接続するワイヤーをジャンパーワイヤーと呼びます。さまざまな種類のジャンパーワイヤーがありますが、ここではブレッドボードで使用されるものに焦点を当てます。特に、ブレッドボードの任意の位置からマイクロコントローラの入出力ピンに電気信号を伝送するために使用されます。

ジャンパーワイヤは、その"端子コネクタ"をブレッドボードに提供されるスロットに挿入することで取り付けられ、その表面の下には、エリアに応じて行または列のグループでスロットを接続する平行なプレートのセットがいくつかあります。 "端子コネクタ"は、特定のプロトタイプで接続する必要がある特定のスロットにはんだ付けせずにブレッドボードに挿入されます。

ジャンパーワイヤーには、メス-メス、オス-オス、およびオス-メスの3つのタイプがあります。オスからメスと呼ぶ理由は、一方の端に突出した先端と沈んだメスの端があるためです。オス-オスは両側がオスであり、メス-メスは両端がメスであることを意味します。

_images/image414.png

プロジェクトには複数のタイプが使用されることがあります。ジャンプワイヤの色は異なりますが、それがそれぞれの機能が異なることを意味するわけではありません。それは各回路間の接続をより簡単に識別するために設計されています。

Chip

74HC595

_images/74HC595.png

74HC595は8ビットのシフトレジスタと三状態の並列出力を持つ格納レジスタから成り立っています。シリアル入力を並列出力に変換することで、MCUのIOポートを節約できます。 MR (pin10) がハイレベル、OE (pin13) がローレベルの時、SHcpの立ち上がりエッジでデータが入力され、SHcpの立ち上がりエッジを通じてメモリレジスタに移動します。2つのクロックが連結されている場合、シフトレジスタは常にメモリレジスタよりも1パルス早いです。メモリレジスタには、シリアルシフト入力ピン (Ds)、シリアル出力ピン (Q)、非同期リセットボタン (ローレベル) があります。メモリレジスタは三状態の並列8ビットでバスを出力します。OEが有効(ローレベル)のとき、メモリレジスタのデータがバスに出力されます。

_images/74hc595_pin.png

74HC595のピンとその機能:

  • Q0-Q7: 8ビット並列データ出力ピン。8つのLEDや7セグメントディスプレイの8ピンを直接制御できる。

  • Q7’: シリーズ出力ピン。別の74HC595のDSに接続し、複数の74HC595を直列に接続する。

  • MR: ローレベルでアクティブなリセットピン。

  • SHcp: シフトレジスタのタイムシーケンス入力。立ち上がりエッジでは、シフトレジスタ内のデータが逐次的に1ビット移動する。

  • STcp: ストレージレジスタのタイムシーケンス入力。立ち上がりエッジで、シフトレジスタのデータがメモリレジスタに移動する。

  • CE: ローレベルでアクティブな出力有効ピン。

  • DS: シリアルデータ入力ピン

  • VCC: 正の供給電圧。

  • GND: アース。

Display

LED

_images/LED.png

半導体発光ダイオードは、PN接合を介して電気エネルギーを光エネルギーに変える部品の一種です。波長により、レーザダイオード、赤外発光ダイオード、そして通常LEDとして知られる可視光発光ダイオードに分類されます。

ダイオードは一方向の導通性を持ちますので、回路記号の矢印が示す方向に電流が流れます。陽極に正の電源を供給し、カソードにマイナスを供給することで、LEDは点灯します。

_images/led_symbol.png

LEDには2つのピンがあります。長い方が陽極で、短い方がカソードです。逆に接続しないように注意してください。LEDには一定の順方向電圧降下がありますので、直接回路に接続することはできません。赤、黄、緑のLEDの順方向電圧は1.8V、白色は2.6Vです。ほとんどのLEDは最大20mAの電流に耐えることができますので、直列に電流制限抵抗を接続する必要があります。

抵抗値の計算式は次のとおりです:

R = (Vsupply – VD)/I

R は電流制限抵抗の抵抗値、 Vsupply は供給電圧、 VD は電圧降下、 I はLEDの動作電流を示します。

詳しいLEDの紹介はこちら: LED - Wikipedia

RGB LED

_images/rgb_led.png

RGB LEDは、さまざまな色の光を発するものです。赤、緑、青の3色のLEDを透明または半透明のプラスチックケースに収めたものです。3つのピンの入力電圧を変えて重ね合わせることで、統計によれば1677万7216色の異なる色を作り出すことができます。

_images/rgb_light.png

RGB LEDには、共通アノード型と共通カソード型の2種類があります。このキットでは後者を使用しています。 共通カソード 、またはCC、は3つのLEDのカソードを接続することを意味します。これをGNDに接続し、3つのピンを挿入すると、LEDは対応する色で点滅します。

その回路記号は、以下の図のように示されています。

_images/rgb_symbol.png

RGB LEDには4つのピンがあります。最も長いものがGNDで、残りの3つは赤、緑、青です。プラスチックケースに触れると、切り込みがあります。その切り込みに最も近いピンが最初のピンで、赤としてマークされ、次にGND、緑、青の順になります。

_images/rgb_pin.jpg

7セグメント表示

_images/7_segment.png

7セグメント表示は、8の形をした7つのLEDを搭載した部品です。各LEDはセグメントと呼ばれ、エネルギーを供給すると、表示する数字の一部を形成します。

ピンの接続には2つのタイプがあります:共通カソード(CC)と共通アノード(CA)。CC表示は、7つのLEDのカソードがすべて接続されているのに対し、CA表示は7つのセグメントのアノードがすべて接続されています。

このキットでは、共通カソードの7セグメント表示を使用しています。以下はその電子記号です。

_images/segment_cathode1.png

表示内のLEDのそれぞれは、位置を持つセグメントとして与えられ、接続ピンの1つが長方形のプラスチックパッケージから外に引き出されています。これらのLEDピンは、「a」から「g」までのラベルが付けられ、各個々のLEDを表しています。他のLEDのピンは一緒になっており、共通のピンを形成しています。したがって、LEDのセグメントの適切なピンに順方向のバイアスをかけることで、一部のセグメントが明るくなり、他のセグメントが暗くなり、対応する文字が表示上に表示されます。

表示コード

7セグメント表示(共通カソード)が数字をどのように表示するかを理解するために、以下の表を描きました。Numbersは7セグメント表示に表示される数字0-Fを示し、(DP) GFEDCBAは対応するLEDが0または1に設定されていることを示します。たとえば、00111111はDPとGが0に設定されている一方、他のものは1に設定されていることを意味します。したがって、7セグメント表示には数字0が表示され、HEX Codeは16進数に対応します。

_images/segment_code.png

I2C LCD1602

_images/i2c_lcd1602.png
  • GND: グラウンド

  • VCC: 電源供給、5V。

  • SDA: シリアルデータライン。プルアップ抵抗を通してVCCに接続します。

  • SCL: シリアルクロックライン。プルアップ抵抗を通してVCCに接続します。

LCDや他のディスプレイは人とマシンのインタラクションを豊かにしていますが、共通の弱点があります。それは、コントローラに接続すると、多くのIOポートを占有し、コントローラの他の機能を制限します。

この問題を解決するために、I2Cモジュール付きのLCD1602が開発されました。このI2Cモジュールは、内蔵のPCF8574 I2Cチップを使って、I2CシリアルデータをLCDディスプレイのための並列データに変換します。

I2Cアドレス

基本的なデフォルトアドレスは0x27で、稀に0x3Fの場合もあります。

デフォルトアドレスの0x27を例にとると、デバイスのアドレスはA0/A1/A2パッドを短絡することで変更できます。デフォルト状態では、A0/A1/A2は1で、パッドが短絡されると、A0/A1/A2は0になります。

_images/i2c_address.jpg

バックライト/コントラスト

ジャンパーキャップでバックライトを有効にできます。ジャンパーキャップを外すと、バックライトがオフになります。裏側の青いポテンショメータは、コントラスト(最も明るい白と最も暗い黒の間の明るさの比率)を調整するためのものです。

_images/back_lcd1602.jpg
  • 短絡キャップ: このキャップでバックライトを有効にできます。キャップを外すと、バックライトがオフになります。

  • ポテンショメータ: 表示テキストの明瞭度を調整するためのものです。時計回りで増加し、反時計回りで減少します。

Sound

ブザー

_images/buzzer1.png

ブザーはDC電源で駆動される統合型の電子ブザーとして、コンピュータ、プリンタ、コピー機、アラーム、電子おもちゃ、自動車電子機器、電話、タイマーなどの電子製品や音声デバイスに広く使用されています。

ブザーは、アクティブなものとパッシブなものに分類できます(下の写真を参照)。ブザーを上向きにして、緑の回路基板が付いているブザーはパッシブブザーで、黒いテープで囲まれているものはアクティブブザーです。

アクティブブザーとパッシブブザーの違い:

アクティブブザーには振動源が内蔵されているため、電力を供給すると音がします。しかし、パッシブブザーにはそのような源がないため、DC信号を使用してもビープ音はしない。代わりに、2Kから5Kの範囲の正方形の波形を使用して駆動する必要があります。アクティブブザーは、複数の内蔵振動回路のため、パッシブブザーよりも高価なことがよくあります。

以下はブザーの電気記号です。プラスとマイナスの極を持つ2つのピンがあります。表面に+があるものが陽極で、他方が陰極です。

_images/buzzer_symbol.png

ブザーのピンをチェックすると、長い方が陽極で、短い方が陰極です。接続する際に間違えないようにしてください。そうしないと、ブザーは音を出しません。

ブザー - Wikipedia

Driver

TTモーター

_images/tt_motor.jpg

これはギア比1:48のTT DCギアボックスモーターで、ブレッドボードに適合する0.1"オスコネクタ付きの2 x 200mmワイヤーが付属しています。ブレッドボードや端子ブロックに直接挿入するのに最適です。

このモーターは3〜6VDCで駆動できますが、もちろん、電圧が高いほど少し速くなります。

これは非常に基本的なモーターで、組み込みのエンコーダ、速度制御、位置フィードバックはありません。電圧が入力されると、モーターが回転します。モーターごとにバリエーションがあるため、正確な動きが必要な場合は、別のフィードバックシステムが必要です。

技術詳細

  • 定格電圧: 3~6V

  • 連続無負荷電流: 150mA +/- 10%

  • 最小動作速度 (3V): 90+/- 10% RPM

  • 最小動作速度 (6V): 200+/- 10% RPM

  • ストールトルク (3V): 0.4kg.cm

  • ストールトルク (6V): 0.8kg.cm

  • ギア比: 1:48

  • 本体の寸法: 70 x 22 x 18mm

  • ワイヤーの長さ: 200mm & 28 AWG

  • 重さ: 30.6g

寸法図

_images/motor_size.jpg

サーボ

_images/servo.png

サーボは通常、ケース、シャフト、ギアシステム、ポテンショメータ、DCモータ、組み込みボードなどの部品で構成されています。

動作原理は次のようになります:マイクロコントローラはPWM信号をサーボに送信し、サーボ内の組み込みボードが信号ピンを介して信号を受信し、内部のモータを制御して回転します。その結果、モータはギアシステムを駆動し、減速後にシャフトを動かします。サーボのシャフトとポテンショメータは接続されています。シャフトが回転すると、ポテンショメータは電圧信号を組み込みボードに出力します。次に、ボードは現在の位置に基づいて回転の方向と速度を決定し、定義された正確な位置で正確に停止し、その位置を保持します。

_images/servo_internal.png

角度は、制御線に適用されるパルスの持続時間によって決まります。これはパルス幅変調と呼ばれます。サーボは、20msごとにパルスを受け取ることを期待しています。パルスの長さによってモータの回転角度が決まります。例えば、1.5msのパルスはモータを90度の位置(中立位置)に回転させます。1.5msより短いパルスがサーボに送信されると、サーボはある角度で回転し、出力シャフトを中立点から反時計回りの数度で保持します。パルスが1.5msよりも広い場合、逆のことが起こります。サーボによって指令を送るためのパルスの最小幅と最大幅はそれぞれのサーボによって異なります。一般に、最小のパルスは約0.5ms、最大のパルスは2.5msとなります。

_images/servo_duty.png

遠心ポンプ

_images/pump.png

遠心ポンプは回転運動エネルギーを水力エネルギーに変換して液体を輸送します。この回転エネルギーは電動モーターから供給されます。液体は、回転する軸の近くやその周りを通ってポンプのインペラに入り、インペラによって加速され、放射状に外向きにディフューザやボルート室に流れ、そこから流れ出します。

遠心ポンプの一般的な用途には、水、下水、農業、石油、石油化学のポンプが含まれます。

特徴
  • 電圧範囲: DC 3 ~ 4.5V

  • 動作電流: 120 ~ 180mA

  • 出力: 0.36 ~ 0.91W

  • 最大揚水高: 0.35 ~ 0.55M

  • 最大流量: 80 ~ 100 L/H

  • 連続動作時間: 100時間

  • 防水等級: IP68

  • 駆動方式: DC、磁気駆動

  • 材料: エンジニアリングプラスチック

  • 出口外径: 7.8 mm

  • 出口内径: 6.5 mm

  • このポンプは水中ポンプであり、そのように使用する必要があります。水中にして使用しない場合、過度に加熱してオーバーヒートのリスクがあります。

L298N モジュール

このL298Nモータードライバーモジュールは、DCモーターおよびステッピングモーターを駆動するための高出力モータードライバーモジュールです。このモジュールは、L298モータードライバICと78M05 5Vレギュレータから構成されています。L298Nモジュールは、最大4つのDCモーター、または方向および速度制御を備えた2つのDCモーターを制御できます。

_images/l298n_pin.jpg
  • IN1 & IN2: モーターAの入力ピン。モーターAの回転方向を制御するために使用されます

  • IN3 & IN4: モーターBの入力ピン。モーターBの回転方向を制御するために使用されます

  • ENA: モーターAのPWM信号を有効にします。ここではジャンパキャップを使って5Vに接続されています。

  • ENB: モーターBのPWM信号を有効にします。ここではジャンパキャップを使って5Vに接続されています。

  • OUT1 & OUT2: モーターAの出力ピン

  • OUT3 & OUT4: モーターBの出力ピン

  • 12V: DC電源からの12V入力

  • 5V: L298N IC内部のスイッチングロジック回路の電源供給

  • GND: グラウンドピン

特徴

  • ドライバモデル: L298N 2A

  • ドライバチップ: ダブルHブリッジL298N

  • モーター供給電圧(最大): 46V

  • モーター供給電流(最大): 2A

  • ロジック電圧: 5V

  • ドライバ電圧: 5-35V

  • ドライバ電流:2A

  • 論理電流:0-36mA

  • 最大出力(W): 25W

  • 各モーターの電流センス

  • より良い性能のためのヒートシンク

  • 電源LEDインジケーター

動作原理

ドライバモジュールは2つのモーターを駆動することができます。ENAおよびENBの有効端子は高レベルで効果的です。

ENAおよびIN1、IN2間の動作関係は次のとおりです:

ENA

IN1

IN2

モーターAの状態

0

X

X

停止

1

0

0

ブレーキ

1

0

1

時計回りに回転

1

1

0

反時計回りに回転

1

1

1

ブレーキ

ENBおよびIN3、IN4間の動作関係は次のとおりです。

ENB

IN3

IN4

モーターBの状態

0

X

X

停止

1

0

0

ブレーキ

1

0

1

時計回りに回転

1

1

0

反時計回りに回転

1

1

1

ブレーキ

5V有効キャップについて

L298Nモータードライバーモジュールは、L298モータードライバIC、78M05電圧レギュレータ、抵抗、コンデンサ、電源LED、5Vジャンパーを統合した回路から構成されています。

_images/l298n_introduce.jpg

78M05電圧レギュレータはジャンパが設置されている場合のみ有効になります。電源が12V以下の場合、内部回路は電圧レギュレータで供給され、5Vピンはマイクロコントローラの電源として出力ピンとして使用できます。

電源が12Vを超える場合、ジャンパは設置しないでください。別の5Vを5V端子を通して供給して、内部回路の電源を供給する必要があります。

Controller

ボタン

_images/button_1212.png

ボタンは、電子デバイスを制御するためによく使用される部品です。通常、回路を接続または切断するスイッチとして使用されます。ボタンはさまざまなサイズや形状で提供されますが、ここで使用されるものは、次の写真に示すような6mmのミニボタンです。 ピン1はピン2に、ピン3はピン4に接続されています。そのため、ピン1またはピン2のいずれかをピン3またはピン4に接続するだけです。

以下はボタンの内部構造です。右下のシンボルは、回路内でボタンを表すために通常使用されます。

_images/button_symbol.png

ピン1がピン2に、ピン3がピン4に接続されているため、ボタンが押されると、4つのピンが接続され、回路が閉じます。

_images/button_1212_size.png

リードスイッチ

_images/reed.png

リードスイッチは、磁場の影響で動作する電気スイッチです。これは1936年にBell Telephone LaboratoriesのWalter B. Ellwoodによって発明され、1940年6月27日にアメリカで特許番号2264746の下で特許を取得しました。

リードスイッチの動作原理は非常にシンプルです。鉄とニッケル(2つの金属)でできている2つのリードが、先端で重なるようにガラス管の中に密封されています。これら2つのリードは、数マイクロンのわずかな隙間を保って重なっています。ガラス管は高純度の不活性ガス(例えば窒素)で満たされており、高電圧性能を向上させるために、真空を持つリードスイッチも作られています。

リードは磁束の伝導体として機能します。2つのリードは動作していないときには接触していません。永久磁石や電磁コイルによって生成される磁場を通過すると、適用された磁場により2つのリードの端点近くに異なる極性が生じ、磁力がリード自体のバネ力を超えると、2つのリードは回路を導通するために引き寄せられます。磁場が弱くなるか消失すると、リードは自身の弾性により放され、接触面は回路を開くために分離します。

_images/reed_sche.png

ポテンショメータ

_images/potentiometer.png

ポテンショメータは、3つの端子を持つ抵抗コンポーネントでもあり、抵抗値は一定の変化に応じて調整することができます。

ポテンショメータにはさまざまな形状、サイズ、値がありますが、共通点として以下の特徴があります:

  • 3つの端子(または接続点)がある。

  • 中央の端子と外側のどちらかの端子との間の抵抗を変化させるためのノブ、ネジ、またはスライダがある。

  • ノブ、ネジ、またはスライダが移動すると、中央の端子と外側の端子の一方との間の抵抗が0Ωからポテンショの最大抵抗まで変化する。

こちらがポテンショメータの回路記号です。

_images/potentiometer_symbol.png

ポテンショメータが回路内で果たす機能は以下の通りです:

  1. 電圧分割器としての役割

    ポテンショメータは連続的に調整可能な抵抗器です。ポテンショメータの軸またはスライドハンドルを調整すると、可動接点が抵抗体上でスライドします。この時点で、ポテンショメータにかかる電圧と、移動アームが回転した角度や移動した距離に応じて、電圧が出力されることができます。

  2. リオスタットとしての役割

    ポテンショメータがリオスタットとして使用される場合、中央のピンと他の2つのピンのうちの1つを回路に接続します。このようにすると、移動接点の移動範囲内で、スムーズかつ連続的に変化する抵抗値を取得することができます。

  3. 電流コントローラとしての役割

    ポテンショメータが電流コントローラとして機能する場合、スライド接触端子は出力端子の一方として接続する必要があります。

ポテンショメータに関する詳細は、以下を参照してください: ポテンショメータ - Wikipedia

ジョイスティックモジュール

_images/joystick_pic.png

ジョイスティックの基本的な考え方は、スティックの動きをコンピュータが処理できる電子情報に変換することです。

コンピュータに完全な動きの範囲を伝えるために、ジョイスティックはスティックの位置を2つの軸、X軸(左から右)とY軸(上から下)で測定する必要があります。基本的な幾何学のように、X-Y座標はスティックの正確な位置を特定します。

スティックの位置を判断するために、ジョイスティック制御システムは各軸の位置を監視します。伝統的なアナログジョイスティックデザインはこれを二つのポテンショメータ、または可変抵抗器で行います。

ジョイスティックには、押下すると動作するデジタル入力も備えています。

_images/joystick318.png

IRレシーバー

IRレシーバー

_images/ir_receiver_hs0038b.jpg
  • OUT: シグナル出力

  • GND:GND

  • VCC: 電源供給、3.3v~5V

赤外線受信器は、赤外線信号を受け取り、TTLレベルと互換性のある信号を独立して出力できる部品です。サイズは通常のプラスチックパッケージのトランジスタと同等で、あらゆる種類の赤外線リモコンや赤外線伝送に適しています。

赤外線、またはIR、通信は人気があり、低コストで使いやすい無線通信技術です。赤外線は可視光線よりも僅かに長い波長を持っているため、人間の目には見えない - 無線通信に理想的です。赤外線通信の一般的な変調方式は38KHzの変調です。

  • 採用した HS0038B IR受信センサー、高感度

  • リモートコントロールに使用可能

  • 電源供給: 5V

  • インターフェース: デジタル

  • 変調周波数: 38Khz

  • ピン定義: (1) 出力 (2) Vcc (3) GND

  • サイズ: 23.5mm x 21.5mm

リモートコントロール

_images/image186.jpeg

これは、21の機能ボタンと最大8メートルの伝送距離を持つミニサイズの薄型赤外線ワイヤレスリモコンで、子供部屋のさまざまなデバイスを操作するのに適しています。

  • サイズ: 85x39x6mm

  • リモートコントロール範囲: 8-10m

  • バッテリー: 3Vボタン型リチウムマンガン電池

  • 赤外線キャリア周波数: 38KHz

  • 表面粘着材: 0.125mm PET

  • 有効寿命: 20,000回以上

Sensor

フォトレジスタ

_images/photoresistor.png

フォトレジスタまたはフォトセルは、光に応じて変動する抵抗器です。フォトレジスタの抵抗は、入射光の強度が増加するにつれて減少します。言い換えれば、光電導性を示します。

フォトレジスタは、光感応検出回路や、抵抗半導体として動作する光活性化および暗活性化スイッチ回路に適用できます。暗闇では、フォトレジスタの抵抗は数メガオーム(MΩ)に達することができますが、明るいところでは、数百オームまで低くなることができます。

以下はフォトレジスタの電子記号です。

_images/photoresistor_symbol.png

サーミスタ

_images/thermistor.png

サーミスタは、通常の抵抗器よりも温度に強く依存する抵抗値を持つタイプの抵抗器です。この言葉は、thermal(熱の)とresistor(抵抗器)の組み合わせです。サーミスタは、突入電流リミッタ、温度センサ(通常は負の温度係数またはNTC型)、自己リセット型の過電流保護器、および自己調整型加熱素子(通常は正の温度係数またはPTC型)として広く使用されています。

こちらはサーミスタの電子記号です。

_images/thermistor_symbol.png

サーミスタには、基本的に2つの逆のタイプがあります:

  • NTCサーミスタでは、温度が上昇すると抵抗が減少します。これは、熱激振により価電子帯から打ち上げられる導電電子の増加が原因です。NTCは通常、温度センサとして、または回路と直列に接続された突入電流リミッタとして使用されます。

  • PTCサーミスタでは、温度が上昇すると抵抗が増加します。これは、不純物や欠陥の熱格子振動が特に増加するためです。PTCサーミスタは、回路と直列に取り付けられ、過電流条件に対する保護として、またはリセッタブルヒューズとして使用されることが一般的です。

このキットでは、NTCを使用しています。各サーミスタには標準抵抗があります。こちらは25度セルシウスで測定された10kオームです。

以下は、抵抗と温度の関係です:

RT = RN * expB(1/TK – 1/TN)

  • RT は、温度がTKのときのNTCサーミスタの抵抗です。

  • RN は、評価温度TNでのNTCサーミスタの抵抗です。こちらのRNの数値は10kです。

  • TK はケルビン温度で、単位はKです。TKの数値は、273.15 + 度数セルシウスです。

  • TN は評価ケルビン温度で、単位もKです。TNの数値は、273.15+25です。

  • B(beta) は、NTCサーミスタの材料定数で、熱感受性指数とも呼ばれ、数値は3950です。

  • exp は指数の略で、基数eは自然数であり、おおよそ2.7と等しいです。

この式TK=1/(ln(RT/RN)/B+1/TN)を変換すると、ケルビン温度から273.15を引いた値が度数セルシウスと等しくなります。

この関係は経験的な式です。温度と抵抗が有効範囲内にある場合のみ正確です。

DHT11 湿度温度センサ

デジタル温度および湿度センサのDHT11は、温度と湿度の校正されたデジタル信号出力を含む複合センサです。専用のデジタルモジュール収集技術と温度および湿度検知技術が適用されており、製品の高い信頼性と長期間の優れた安定性を確保しています。

このセンサは、湿度の抵抗式センサとNTC温度計測デバイスを含み、高性能の8ビットマイクロコントローラに接続されています。

使用できるピンは3つだけです:VCC、GND、DATA。 通信プロセスは、DATAラインがDHT11にスタート信号を送信することから始まります。DHT11はこれらの信号を受け取り、応答信号を返します。その後、ホストは応答信号を受け取り、40ビットの湿度データ(8ビットの湿度整数 + 8ビットの湿度小数 + 8ビットの温度整数 + 8ビットの温度小数 + 8ビットのチェックサム)の受信を開始します。

_images/dht11.png

特長

  1. 湿度測定範囲: 20 - 90%RH

  2. 温度測定範囲: 0 - 60℃

  3. 温度および湿度を示すデジタル信号の出力

  4. 動作電圧:DC 5V; PCBサイズ: 2.0 x 2.0 cm

  5. 湿度測定の精度: ±5%RH

  6. 温度測定の精度: ±2℃

ライン追跡モジュール

_images/line_track.png
  • S: 通常は低レベルで、黒いラインが検出された場合は高レベル。

  • V+:電源、3.3v~5V

  • G: グラウンド

これは、名前が示すように、白い背景上の黒いラインまたは黒い背景上の白いラインを追跡する1チャンネルのライン追跡モジュールです。

_images/tcrt5000.jpg

モジュールにはTCRT5000赤外線センサーが使用されており、赤外線LED(青)と光感応三重組(黒)から構成されています。

  • 青い赤外線LEDは、電源が入っていると、人の目には見えない赤外線を放射します。

  • 黒いフォトトランジスタは、赤外線を受信するために使用され、内部の抵抗は、受信した赤外線の量に応じて抵抗が変化します。赤外線の量が多いほど、その抵抗は減少し、その逆も同様です。

モジュールにはLM393コンパレータがあり、フォトトランジスタの電圧を(ポテンショメータによって調整される)設定電圧と比較します。もし設定電圧よりも大きければ、出力は1です。そうでない場合、出力は0です。

したがって、赤外線放射管が黒い表面に光を当てると、黒は光を吸収するため、フォトセンシングトランジスタが受け取る赤外線は少なくなります。その結果、その抵抗は増加します(電圧も増加)。LM393コンパレータを経て、高レベルが出力されます。

同様に、白い表面に光を当てると、反射光が増えてフォトセンシングトランジスタの抵抗が減少します(電圧が減少)。その結果、コンパレータは低レベルを出力し、指示LEDが点灯します。

特徴

  • 赤外線放射センサーTCRT5000を使用

  • 検出距離:1-8mm、焦点距離2.5mm

  • コンパレータの出力信号はクリーンで、波形が良好、駆動能力は15mAを超える

  • 感度調整のためのポテンショメータを使用

  • 動作電圧:3.3V-5V

  • デジタル出力:0(白)および1(黒)

  • 広電圧LM393コンパレータを使用。

  • サイズ:42mmx10mm

土壌湿度モジュール

_images/soil_mositure.png
  • GND: 接地

  • VCC:電源供給、3.3v~5V

  • AOUT: 土壌の湿度値を出力。土壌が湿っているほど、その値は小さくなります。

この容量性土壌湿度センサーは市場の多くの抵抗センサーと異なり、容量性誘導の原理を使用して土壌の湿度を検出しています。これにより、抵抗センサーが腐食に非常に敏感である問題を回避し、作動寿命を大幅に延ばしています。

腐食耐性の素材で作られており、優れた耐用年数があります。植物の周りの土壌に挿入し、リアルタイムで土壌の湿度データを監視します。このモジュールには、3.3〜5.5 Vの電圧範囲で動作できるようにオンボードの電圧調整器が含まれています。3.3 Vおよび5 Vの電源を持つ低電圧のマイクロコントローラに適しています。

容量性土壌湿度センサーのハードウェア回路図は以下の通りです。

_images/solid_schematic.png

固定周波数の発振器があり、555タイマーICで構築されています。生成された正方形の波は、コンデンサのようなセンサーに供給されます。ただし、正方形の波信号には、純粋なオーム抵抗(ピン3の10k抵抗)の抵抗として、ある反応、または論争のために、電圧分配器を形成します。

土壌の湿度が高いほど、センサーの容量が高くなります。その結果、正方形の波は反応が少なく、信号線上の電圧が低下し、マイクロコントローラを介したアナログ入力の値が小さくなります。

仕様

  • 動作電圧: 3.3 ~ 5.5 VDC

  • 出力電圧: 0 ~ 3.0VDC

  • 動作電流: 5mA

  • インターフェース: PH2.0-3P

  • 寸法: 3.86 x 0.905 インチ (L x W)

  • 重量: 15g

障害物回避モジュール

_images/IR_Obstacle.png
  • VCC: 電源供給、3.3 ~ 5V DC。

  • GND: 接地

  • OUT: シグナルピン、通常は高レベルで、障害物が検出されると低レベルになります。

IR障害物回避モジュールは、環境光への適応性が強く、赤外線の送受信チューブのペアを持っています。

送信チューブは赤外線周波数を放射し、検出方向に障害物がある場合、赤外線放射は受信チューブによって受信され、コンパレータ回路処理後、インジケータが点灯し、低レベル信号が出力されます。

検出距離はポテンショメータで調整可能であり、有効距離範囲は2-30cmです。

_images/IR_module.png

超音波モジュール

_images/ultrasonic_pic.png

超音波測距モジュールは2cm - 400cmの非接触測定機能を提供し、測定精度は3mmに達することができます。5m以内の信号が安定していることを保証でき、5m後に信号が徐々に弱くなり、7mの位置で消失します。

モジュールには超音波送信機、受信機、および制御回路が含まれています。基本的な原理は以下のとおりです:

  1. IOフリップフロップを使用して、少なくとも10usの高レベル信号を処理します。

  2. モジュールは自動的に八つの40kHzを送信し、パルス信号の返信があるかどうかを検出します。

  3. 信号が戻ってきた場合、高レベルを通過させ、高出力IOの持続時間は、超音波の送信から返送までの時間です。ここで、テスト距離 = (高時間 x 音速 (340 m / s) / 2。

タイミングダイアグラムは以下のとおりです。

_images/ultrasonic228.png

測距を開始するには、トリガ入力に短い10usパルスを供給するだけで、次にモジュールは 40kHzでの8サイクルの超音波バーストを送出し、その エコーを上げます。トリガ信号の送信とエコー信号の受信の間の時間間隔を通じて 範囲を計算できます。

式:us / 58 = センチメートル または us / 148 =インチ;または:範囲 = 高 レベル時間*速度(340M/S)/ 2;トリガ信号とエコー信号の 信号衝突を防ぐために、60ms以上の測定周期を使用することをおすすめします。

Arduinoを始めよう

Arduinoについて何も知らないなら、以下の言葉を覚えておいてください:電子工学、デザイン、プログラミング、そしてメイカー。これらの言葉が自分たちとはかけ離れていると感じるかもしれませんが、実際にはそうではありません。Arduinoを通じて、私たちはプログラミングの世界に足を踏み入れ、メイカーとしての夢を実現することができます。このセッションでは次の内容を学びます:

  • Arduinoとは何か?

  • Arduinoは何をすることができるのか?

  • Arduinoのプロジェクトをどのように構築するのか?

Arduinoとは?

まず、Arduinoについて簡単に紹介します。

Arduinoは、便利で柔軟、そして使いやすいオープンソースの電子プロトタイピングプラットフォームであり、様々なモデルのArduinoボードとArduino IDEというソフトウェアを含んでいます。これは、迅速なプロトタイピングのためのエンジニアだけでなく、アーティスト、デザイナー、趣味人にも適しています。現代のメイカーには欠かせないツールとも言えます。

Arduinoは非常に大きなシステムです。ソフトウェア、ハードウェア、そして共通の趣味を持つ、互いに知り合いではない多くの人々からなる非常に大きなオンラインコミュニティがあります。Arduinoのコミュニティのメンバーは、自らの知恵を用い、手で制作し、次々と素晴らしい発明を共有しています。そして、あなたもその一部となることができます。

Arduinoは何ができる?

Arduinoが実際に何をすることができるのか疑問に思うかもしれません。簡単に言えば、Arduinoがあなたの問題をすべて解決します。

技術的に言えば、Arduinoはプログラム可能なロジックコントローラーです。これは、リモートコントロールカー、ロボットアーム、バイオニックロボット、スマートホームなど、多くのエキサイティングでクリエイティブな電子クリエーションを作成するために使用できる開発ボードです。

Arduinoボードはシンプルで強力であり、学生、メイカー、さらにはプロのプログラマーにも適しています。

今日に至るまで、世界中の電子愛好者たちは、Arduinoの開発ボードを基に、創造的な電子作品を続けて開発しています。

Arduinoプロジェクトの構築方法

以下のステップに従って、ゼロからArduinoを使用する方法を学びましょう!

Arduino IDE 2.0のダウンロードとインストール

Arduino IDEは、Arduino Integrated Development Environmentとしても知られ、Arduinoプロジェクトを完了するために必要なすべてのソフトウェアサポートを提供します。これはArduino専用に設計されたプログラミングソフトウェアで、Arduinoチームによって提供され、Arduinoボードにプログラムを書き込んだりアップロードしたりすることができます。

Arduino IDE 2.0はオープンソースのプロジェクトです。堅牢な前身であるArduino IDE 1.xから大きく進化し、新しいUI、改善されたボード&ライブラリマネージャ、デバッガ、オートコンプリート機能などが強化されています。

このチュートリアルでは、Windows、Mac、LinuxのコンピュータにArduino IDE 2.0をダウンロードしてインストールする方法を示します。

必要な環境
  • Windows - Win 10以上、64ビット

  • Linux - 64ビット

  • Mac OS X - バージョン10.14 "Mojave" 以上、64ビット

Arduino IDE 2.0のダウンロード
  1. Arduino IDE 2.0.0 Page を訪問してください。

  2. OSのバージョンに合わせてIDEをダウンロードします。

    _images/sp_001.png
インストール方法
Windows
  1. ダウンロードした arduino-ide_xxxx.exe ファイルをダブルクリックして実行します。

  2. ライセンス契約を読み、同意します。

    _images/sp_002.png
  3. インストールオプションを選択します。

    _images/sp_003.png
  4. インストール先を選択します。システムドライブ以外のドライブにソフトウェアをインストールすることをおすすめします。

    _images/sp_004.png
  5. それで完了です。

    _images/sp_005.png
macOS

ダウンロードした arduino_ide_xxxx.dmg ファイルをダブルクリックし、指示に従って Arduino IDE.appApplications フォルダにコピーします。数秒後に、Arduino IDEのインストールが成功したことが確認できます。

_images/macos_install_ide.png
Linux

LinuxシステムでArduino IDE 2.0をインストールする方法についてのチュートリアルは、以下のURLを参照してください:https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing#linux

IDEの起動
  1. Arduino IDE 2.0を初めて開くと、Arduino AVRボード、組み込みのライブラリ、およびその他の必要なファイルが自動的にインストールされます。

    _images/sp_901.png
  2. また、ファイアウォールやセキュリティセンターがいくつかのデバイスドライバをインストールするかどうかを尋ねるポップアップが表示されることがあります。すべてインストールしてください。

    _images/sp_104.png
  3. これで、Arduino IDEの準備が完了です!

    注釈

    ネットワークの問題やその他の理由で一部のインストールが正常に完了しなかった場合、Arduino IDEを再度開くと、残りのインストールが完了します。すべてのインストールが完了した後、確認またはアップロードをクリックしない限り、出力ウィンドウは自動的に開きません。

Arduino IDEの紹介

_images/sp_ide_2.png
  1. 検証(Verify): コードをコンパイルします。構文に問題がある場合、エラーが表示されます。

  2. アップロード(Upload): ボードにコードをアップロードします。ボタンをクリックすると、ボードのRXとTXのLEDが高速で点滅し、アップロードが完了するまで点滅を続けます。

  3. デバッグ(Debug): 行ごとのエラーチェックのため。

  4. ボード選択(Select Board): 簡単にボードとポートを設定します。

  5. シリアルプロッタ(Serial Plotter): 読取値の変化を確認します。

  6. シリアルモニタ(Serial Monitor): ボタンをクリックするとウィンドウが表示されます。コントロールボードから送信されたデータを受信します。デバッグに非常に便利です。

  7. ファイル(File): メニューをクリックするとドロップダウンリストが表示され、ファイルの作成、開く、保存、閉じる、パラメータの設定などが含まれます。

  8. 編集(Edit): メニューをクリックします。ドロップダウンリストには、 切り取り(Cut)コピー(Copy)貼り付け(Paste)検索(Find) などの編集操作と、それに対応するショートカットが表示されます。

  9. スケッチ(Sketch): 検証(Verify)アップロード(Upload)ファイル追加(Add) などの操作を含みます。重要な機能は ライブラリを含める(Include Library) - ライブラリを追加できます。

  10. ツール(Tool): いくつかのツールが含まれています。最も頻繁に使用されるのはボード(使用するボード)とポート(ボードの位置)です。コードをアップロードするたびに、これらを選択またはチェックする必要があります。

  11. ヘルプ(Help): 初心者の場合、メニューのオプションを確認して、IDEの操作、紹介情報、トラブルシューティング、コードの説明などの必要なヘルプを取得できます。

  12. 出力バー(Output Bar): ここで出力タブを切り替えます。

  13. 出力ウィンドウ(Output Window): 情報を表示します。

  14. ボードとポート(Board and Port): ここで、コードのアップロードのために選択されたボードとポートをプレビューできます。何か間違いがある場合は、 ツール(Tools) -> ボード(Board) / ポート(Port) で再選択できます。

  15. IDEの編集エリアです。ここでコードを記述できます。

  16. スケッチブック(Sketchbook): スケッチファイルを管理するため。

  17. ボードマネージャ(Board Manager): ボードドライバを管理するため。

  18. ライブラリマネージャ(Library Manager): ライブラリファイルを管理するため。

  19. デバッグ(Debug): コードのデバッグを支援します。

  20. 検索(Search): スケッチからコードを検索します。

スケッチの作成、開く、保存方法は?

  1. Arduino IDEを初めて開くか、新しいスケッチを作成すると、このようなページが表示されます。Arduino IDEが新しいファイルを作成してくれます。これを"スケッチ"と言います。

    _images/sp221014_173458.png

    これらのスケッチファイルは一時的な名前が付けられており、ファイルの作成日から名前を判断することができます。 sketch_oct14a.ino は10月14日の最初のスケッチを意味し、 .ino はこのスケッチのファイル形式です。

  2. 新しいスケッチを作成してみましょう。以下のコードをArduino IDEにコピーして、元のコードを置き換えます。

    _images/create1.png
    void setup() {
        // 初回のセットアップコードをここに記述:
        pinMode(13,OUTPUT);
    }
    
    void loop() {
        // 主要なコードをこちらに記述し、繰り返し実行:
        digitalWrite(13,HIGH);
        delay(500);
        digitalWrite(13,LOW);
        delay(500);
    }
    
  3. Ctrl+S を押すか、 ファイル(File) -> 保存(Save) をクリックします。デフォルトでスケッチは C:\Users\{your_user}\Documents\Arduino に保存されます。名前を変更したり、新しいパスを指定して保存することもできます。

    _images/create2.png
  4. 保存が成功すると、Arduino IDEの名前が更新されることがわかります。

    _images/create3.png

次のセクションで、この作成したスケッチをArduinoボードにアップロードする方法を学習してください。

ボードにスケッチをアップロードする方法は?

このセクションでは、先ほど作成したスケッチをArduinoボードにアップロードする方法、および考慮すべき点について学びます。

1. ボードとポートを選択

Arduinoの開発ボードには通常、USBケーブルが付属しています。これを使用してボードをコンピュータに接続します。

Arduino IDEで正しい ボード(Board)ポート(Port) を選択します。通常、Arduinoボードはコンピュータに自動的に認識され、ポートが割り当てられるので、ここで選択できます。

_images/board_port.png

もし、ボードが接続されているのに認識されない場合は、 Boards ManagerArduino AVR Boards セクションに INSTALLED のロゴが表示されているか確認してください。表示されていない場合、少し下にスクロールして INSTALL をクリックしてください。

_images/upload1.png

Arduino IDEを再度開いたり、Arduinoボードを再度接続すると、ほとんどの問題が解消されます。また、 ツール(Tools) -> ボード(Board)ポート(Port) をクリックして選択することもできます。

2. スケッチを検証

検証ボタンをクリックすると、スケッチがエラーがないかどうかコンパイルされます。

_images/sp221014_174532.png

何らかの文字を削除したり、間違って数文字入力した場合など、ミスを見つけるのに役立ちます。メッセージバーから、どこでどのようなタイプのエラーが発生したかを確認できます。

_images/sp221014_175307.png

エラーがない場合、以下のようなメッセージが表示されます。

_images/sp221014_175512.png

3. スケッチをアップロード

上記の手順を完了した後、 アップロード(Upload) ボタンをクリックして、このスケッチをボードにアップロードします。

_images/sp221014_175614.png

成功すると、以下のプロンプトが表示されます。

_images/sp221014_175654.png

同時に、ボード上のLEDが点滅します。

_images/1_led.jpg

スケッチがアップロードされた後、電源が適用されるとArduinoボードは自動的にスケッチを実行します。新しいスケッチをアップロードすることで、実行中のプログラムを上書きすることができます。

Arduinoプログラムの構造

新しいスケッチファイルを見てみましょう。数行のコードが書かれていますが、実際には「空の」スケッチです。 このスケッチを開発ボードにアップロードすると、何も起こりません。

void setup() {
// ここに初期設定のコードを記述し、一度だけ実行します:

}

void loop() {
// ここにメインのコードを記述し、繰り返し実行します:

}

setup()loop() を削除して、スケッチを本当の blank ファイルにすると、検証に合格しないことがわかるだろう。 これらは人間の骨格に相当し、欠かせないものです。

スケッチ作成時には、まず setup() が実行され、ボードに電源が供給されたりリセットされたりした後、その内部のコード( {} 内部)が一度だけ実行されます。 loop() はメインの機能を書くためのもので、 setup() 実行後に繰り返し実行されるコードを内部に記述します。

setup() と loop() の理解を深めるために、以下の四つのスケッチを使用します。それぞれの目的はArduinoのオンボードLEDを点滅させることです。順番に各実験を実行して、具体的な効果を記録してください。

  • スケッチ1: オンボードLEDを連続して点滅させる。

void setup() {
    // ここに初期設定のコードを記述し、一度だけ実行します:
    pinMode(13,OUTPUT);
}

void loop() {
    // ここにメインのコードを記述し、繰り返し実行します:
    digitalWrite(13,HIGH);
    delay(500);
    digitalWrite(13,LOW);
    delay(500);
}
  • スケッチ2: オンボードLEDを一度だけ点滅させる。

void setup() {
    // ここに初期設定のコードを記述し、一度だけ実行します:
    pinMode(13,OUTPUT);
    digitalWrite(13,HIGH);
    delay(500);
    digitalWrite(13,LOW);
    delay(500);
}

void loop() {
    // ここにメインのコードを記述し、繰り返し実行します:
}
  • スケッチ3: オンボードLEDをゆっくり点滅させた後、早く点滅させる。

void setup() {
    // ここに初期設定のコードを記述し、一度だけ実行します:
    pinMode(13,OUTPUT);
    digitalWrite(13,HIGH);
    delay(1000);
    digitalWrite(13,LOW);
    delay(1000);
}

void loop() {
    // ここにメインのコードを記述し、繰り返し実行します:
    digitalWrite(13,HIGH);
    delay(200);
    digitalWrite(13,LOW);
    delay(200);
}
  • スケッチ4: エラーを報告する。

void setup() {
    // ここに初期設定のコードを記述し、一度だけ実行します:
    pinMode(13,OUTPUT);
}

digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);

void loop() {
    // ここにメインのコードを記述し、繰り返し実行します:
}

これらのスケッチを利用して、 setup-loop のいくつかの特徴をまとめることができます。

  • ボードに電源が供給された後、 loop() は繰り返し実行されます。

  • ボードに電源が供給された後、 setup() は一度だけ実行されます。

  • ボードに電源が供給された後、まず setup() が実行され、次に loop() が実行されます。

  • コードは setup() または loop(){} の範囲内に書かれる必要があり、その枠組みの外に出るとエラーとなります。

注釈

digitalWrite(13,HIGH) のような命令はオンボードLEDを制御するためのもので、後の章でその使用方法を詳しく説明します。

スケッチの作成ルール

あなたが友人にライトをつけてもらう場合、"ライトをつけてください"や"ライトオン、ブロ"と言うことができます。好きな口調で言うことができます。

しかし、Arduinoボードに何かをしてもらいたい場合は、Arduinoのプログラム作成ルールに従ってコマンドを入力する必要があります。

この章では、Arduino言語の基本的なルールを紹介し、自然言語をコードに変換する方法を理解するのに役立ちます。

もちろん、これは慣れるのに時間がかかるプロセスであり、初心者にとっては最もエラーが発生しやすい部分でもあるので、間違えることが多くても大丈夫です。何度も試してみてください。

セミコロン ;

手紙を書くときのように、各文の最後に句点を書いて終わりとするように、Arduino言語ではコマンドの終了をボードに伝えるために ; を使用する必要があります。

「ボード上のLEDを点滅させる」というおなじみの例を取ってみましょう。正常なスケッチは次のようになります。

例:

void setup() {
    // ここに初期化コードを書く: 一度だけ実行されます
    pinMode(13,OUTPUT);
}

void loop() {
    // ここにメインのコードを書く: 繰り返し実行されます
    digitalWrite(13,HIGH);
    delay(500);
    digitalWrite(13,LOW);
    delay(500);
}

次に、以下の2つのスケッチを見て、実行する前にArduinoに正しく認識されるかどうかを推測してみましょう。

スケッチA:

void setup() {
    // ここに初期化コードを書く: 一度だけ実行されます
    pinMode(13,OUTPUT);
}

void loop() {
    // ここにメインのコードを書く: 繰り返し実行されます
    digitalWrite(13,HIGH)
    delay(500)
    digitalWrite(13,LOW)
    delay(500)
}

スケッチB:

void setup() {
    // ここに初期化コードを書く: 一度だけ実行されます
    pinMode(13,OUTPUT);
}

void loop() {
    // ここにメインのコードを書く: 繰り返し実行されます
    digitalWrite(13,
HIGH);  delay
    (500
    );
    digitalWrite(13,

    LOW);
            delay(500)
    ;
}

結果として、 Sketch A はエラーを報告し、 Sketch B は実行されます。

  • Sketch A のエラーは、 ; が欠落している点で、見た目は普通ですが、Arduinoはこれを読むことができません。

  • Sketch B は、見た目は人間には不親切ですが、実際には、Arduinoプログラムではインデント、改行、ステートメントのスペースは存在しないので、Arduinoのコンパイラにとっては、例のように見えます。

しかし、 Sketch B のようにコードを書かないでください。通常、コードを書き、閲覧するのは自然な人々ですので、自分自身を困らせないようにしてください。

中括弧 {}

{} はArduinoプログラミング言語の主要なコンポーネントで、ペアで現れる必要があります。 より良いプログラムの慣習は、左の中括弧を入力した直後に右の中括弧を入力して、構造体を挿入し、カーソルを中括弧の間に移動してステートメントを挿入することです。

コメント //

コメントはコンパイラが無視するスケッチの部分です。通常、プログラムの動作方法を他者に伝えるために使用されます。

コードの行に隣接する2つのスラッシュを書くと、コンパイラはその行の最後まで何も無視します。

新しいスケッチを作成すると、2つのコメントが含まれています。これらのコメントを削除しても、スケッチに影響はありません。

void setup() {
    // ここに初期化コードを書く: 一度だけ実行されます
}

void loop() {
    // ここにメインのコードを書く: 繰り返し実行されます
}

プログラミングでのコメントは非常に役立ちます。以下にいくつかの一般的な使用例を示します。

  • 使用方法A: このコードのセクションが何をするのか、自分自身や他者に伝える。

void setup() {
    pinMode(13,OUTPUT); // ピン13を出力モードに設定、ボード上のLEDを制御します
}

void loop() {
    digitalWrite(13,HIGH); // ピン13をハイに設定して、ボード上のLEDを活性化
    delay(500); // 500 ms のまま
    digitalWrite(13,LOW); // ボード上のLEDをオフにする
    delay(500); // 500 ms のまま
}
  • 使用B: 一時的にいくつかの文を無効にする(削除せずに)そして、それらを使用する必要があるときにコメントを外すことで、それらを再度書き直す必要がない。これは、コードのデバッグを行い、プログラムのエラーの場所を特定するときに非常に便利です。

void setup() {
    pinMode(13,OUTPUT);
    // digitalWrite(13,HIGH);
    // delay(1000);
    // digitalWrite(13,LOW);
    // delay(1000);
}

void loop() {
    digitalWrite(13,HIGH);
    delay(200);
    digitalWrite(13,LOW);
    delay(200);
}

注釈

コードを迅速にコメントまたはコメント解除するのに役立つショートカット Ctrl+/ を使用してください。

コメント /**/

// と同様のコメントです。このコメントは複数の行にわたることができ、コンパイラが /* を読むと、 */ が現れるまで後続の内容を無視します。

例1:

/* 点滅 */

void setup() {
    pinMode(13,OUTPUT);
}

void loop() {
    /*
    以下のコードはボード上のLEDを点滅させます。
    delay()内の数値を変更して、点滅の頻度を変更することができます。
    */
    digitalWrite(13,HIGH);
    delay(500);
    digitalWrite(13,LOW);
    delay(500);
}
#define

これは便利なC++のツールです。

#define identifier token-string

コンパイラは、それを読むときに自動的に identifiertoken-string で置き換えます。これは、通常、定数定義に使用されます。

例として、defineを使用してコードの可読性を向上させるスケッチを以下に示します。

#define ONBOARD_LED 13
#define DELAY_TIME 500

void setup() {
    pinMode(ONBOARD_LED,OUTPUT);
}

void loop() {
    digitalWrite(ONBOARD_LED,HIGH);
    delay(DELAY_TIME);
    digitalWrite(ONBOARD_LED,LOW);
    delay(DELAY_TIME);
}

コンパイラにとって、実際には以下のように見えます。

void setup() {
    pinMode(13,OUTPUT);
}

void loop() {
    digitalWrite(13,HIGH);
    delay(500);
    digitalWrite(13,LOW);
    delay(500);
}

identifier が置き換えられ、プログラム内に存在しないことがわかります。 したがって、使用する際のいくつかの注意点があります。

  1. token-string は手動でのみ変更でき、プログラムの算術で他の値に変換することはできません。

  2. ; のようなシンボルの使用を避ける。例えば。

#define ONBOARD_LED 13;

void setup() {
    pinMode(ONBOARD_LED,OUTPUT);
}

void loop() {
    digitalWrite(ONBOARD_LED,HIGH);
}

コンパイラはそれを以下のように認識し、エラーとして報告されます。

void setup() {
    pinMode(13;,OUTPUT);
}

void loop() {
    digitalWrite(13;,HIGH);
}

注釈

#define の命名規則は、変数との混同を避けるために identifier を大文字にすることです。

変数

変数はプログラム内で最も強力で重要なツールの一つです。これにより、私たちのプログラム内でデータを保存し、呼び出すことができます。

以下のスケッチファイルは変数を使用しています。オンボードLEDのピン番号を変数 ledPin に、数字 "500" を変数 delayTime に保存します。

int ledPin = 13;
int delayTime = 500;

void setup() {
    pinMode(ledPin,OUTPUT);
}

void loop() {
    digitalWrite(ledPin,HIGH);
    delay(delayTime);
    digitalWrite(ledPin,LOW);
    delay(delayTime);
}

待って、これは #define の動作を複製しているのでしょうか?答えはNOです。

  • #define の役割はテキストを単純かつ直接に置き換えることであり、プログラムの一部としてコンパイラに認識されることはありません。

  • 一方、 variable はプログラム内に存在し、値を保存し呼び出すために使用されます。defineではできないことですが、プログラム内でその値を変更することもできます。

以下のスケッチファイルでは、変数に自己追加が行われ、各点滅ごとにオンボードLEDの点滅が長くなります。

int ledPin = 13;
int delayTime = 500;

void setup() {
    pinMode(ledPin,OUTPUT);
}

void loop() {
    digitalWrite(ledPin,HIGH);
    delay(delayTime);
    digitalWrite(ledPin,LOW);
    delay(delayTime);
    delayTime = delayTime+200; // 実行ごとに値を200増やします
}
変数の宣言

変数を宣言するとは、変数を作成することを意味します。

変数を宣言するには、データ型と変数名の2つが必要です。データ型は変数からスペースで区切り、変数の宣言は ; で終了する必要があります。

この変数を例に取り上げてみましょう。

int delayTime;

データ型

ここで int は整数型と呼ばれるデータ型であり、-32768から32766までの整数を保存するために使用できます。また、小数を保存するためには使用できません。

変数は整数以外のさまざまなデータを保持することができます。Arduino言語(実際にはC++です)は、以下に挙げる最も頻繁に使用されるものに対して組み込みのサポートを持っています。

  • float: 小数点数を保存します、例:3.1415926。

  • byte: 0から255までの数値を保持します。

  • boolean: True または False の2つの可能な値のみを保持しますが、メモリ内で1バイトを占有します。

  • char: -127から127までの数値を保持します。 char としてマークされると、コンパイラはそれを ASCII table of characters の文字に一致させようとします。

  • string: 文字列、例: Halloween を保存できます。

変数名

変数名は好きな名前に設定できます。例えば、 iappleBruceR2D2Sectumsempra などですが、守るべき基本的なルールがいくつかあります。

  1. それが何のために使用されるのかを説明します。ここでは、変数をdelayTimeと名付けたので、それが何をするのかを簡単に理解できます。変数名を barryAllen にするのも構いませんが、コードを見ている人に混乱をもたらします。

  2. 一般的な命名法を使用します。CamelCaseを使用することができ、私は delayTime の初めのTを使用して、変数が2つの単語で構成されていることが容易に分かるようにしました。また、UnderScoreCaseを使用して変数を delay_time として書くこともできます。プログラムの実行に影響はありませんが、好みの命名法を使用すると、プログラマがコードを読むのが容易になります。

  3. キーワードを使用しないでください。"int"をタイプするときと同じように、Arduino IDEはそれが特別な目的を持つ単語であることを思い出させるためにそれを色付けします。それは変数名として使用することができません。もしそれが色付けされていれば、変数の名前を変更します。

  4. 特別な記号は許可されていません。例えば、スペース、#, $, /, +, %などです。英字(大文字・小文字を区別)、アンダースコア、数字の組み合わせは十分ですが、数字は変数名の最初の文字として使用することはできません。

変数に値を割り当てる

変数を宣言したら、データを格納する時が来ます。代入演算子(すなわち =)を使用して変数に値を入れます。

変数を宣言すると同時にその値を割り当てることができます。

int delayTime = 500;

また、ある時点で新しい値を割り当てることも可能です。

int delayTime; // 値なし
delayTime = 500; // 値は500
delayTime = delayTime +200; // 値は700

回路の作成方法

私たちが日常で使用している多くのものは、家の照明やこのコンピュータのように、電気で動いています。

電気を利用するためには、電気回路を組む必要があります。基本的に、回路は電気が流れる経路、または電子回路であり、特定の方法で接続された電気デバイスやコンポーネント(家電製品)から成り立っています。例としては、抵抗器、コンデンサ、電源、スイッチなどがあります。

_images/circuit.png

回路とは、電子が移動して電流を生む閉じた経路のことを指します。電流を流すためには、電源の正極と負極の間に導電経路が必要です。これを閉回路といい、これが切断されると開回路と呼ばれます。

Arduinoボードには、いくつかの電源出力ピン(正)とグラウンドピン(負)があります。 これらのピンを電源の正極と負極として使用し、ボードに電源を接続することができます。

_images/arduinoPN.jpg

電気を使って、光や音、動きのある作品を作成することができます。 LEDの長いピンを正極に、短いピンを負極に接続することでLEDを点灯させることができます。 しかし、そのままではLEDがすぐに壊れてしまうため、回路内に220Ωの抵抗器を追加して保護する必要があります。

以下にその回路の形状を示します。

_images/sp221014_181625.png

「この回路をどうやって組むの?」と疑問に思うかもしれません。ワイヤーを手で持って接続するのか、ピンとワイヤーをテープで固定するのか。

このような場面で、はんだ付けの不要なブレッドボードが非常に役立ちます。

ブレッドボード、こんにちは!

ブレッドボードは、たくさんの小さな穴が開いている長方形のプラスチック板です。 これらの穴を利用して、電子部品を簡単に挿入し、電子回路を組むことができます。 ブレッドボードは電子部品を恒久的に固定しないので、何か問題が発生した場合でも、回路を簡単に修理してやり直すことができます。

注釈

ブレッドボードを使用するための特別なツールは必要ありません。しかし、多くの電子部品は非常に小さく、ピンセットを使用すると小さな部品をより簡単に取り扱うことができます。

インターネット上にはブレッドボードに関する多くの情報があります。

ブレッドボードに関して知っておくべきいくつかの点を以下に示します。

  1. 各半行グループ(例:行1の列A-Eや行3の列F-J)は接続されています。したがって、A1から電気信号が流れ込むと、B1、C1、D1、E1から流れ出ることができますが、F1やA2からは流れ出すことはできません。

  2. ほとんどの場合、ブレッドボードの両側は電源バスとして使用され、各列の穴(約50の穴)は互いに接続されています。一般的に、正の電源は赤いワイヤーの近くの穴に、負の電源は青いワイヤーの近くの穴に接続されます。

  3. 回路内で、電流は負極に到達するまでの間に負荷を通過して正極から流れます。この場合、短絡が発生する可能性があります。

電流の流れる方向に沿って、回路を組み立てましょう!

_images/connect_led.png
  1. この回路では、ボードの5Vピンを使用してLEDに電力を供給します。M2Mジャンパーワイヤーを使用して、それを赤い電源バスに接続します。

  2. LEDを保護するために、電流は220Ωの抵抗器を通過する必要があります。抵抗器の一方の端(どちらの端でもよい)を赤い電源バスに接続し、もう一方の端をブレッドボードのフリーローに接続します。

    注釈

    220Ωの抵抗器のカラーリングは、赤、赤、黒、黒、茶色です。

  3. LEDを手に取ると、リードの一方が他方よりも長いことがわかります。長いリードを抵抗器と同じ行に接続し、短いリードを他の行に接続します。

    注釈

    長いリードはアノードと呼ばれ、回路の正面を表します。短いリードはカソードと呼ばれ、回路の負面を表します。

    アノードは抵抗器を介してGPIOピンに接続する必要があり、カソードはGNDピンに接続する必要があります。

  4. M2Mジャンパーワイヤーを使用して、LEDの短いピンをブレッドボードの負の電源バスに接続します。

  5. ジャンパーを使用して、ボードのGNDピンを負の電源バスに接続します。

短絡に注意

短絡は、接続するべきでない二つの部品が「偶然」接続されたときに発生します。 このキットには、長い金属のピンを持つ抵抗器、トランジスタ、コンデンサ、LEDなどが含まれており、これらがお互いにぶつかって短絡を引き起こす可能性があります。短絡が発生すると、いくつかの回路は正常に機能しなくなります。時折、短絡は電源とグラウンドバスの間で部品を恒久的に損傷させ、回路が非常に熱くなり、ブレッドボードのプラスチックが溶け、部品が焼けてしまうことがあります!

したがって、ブレッドボード上のすべての電子部品のピンが互いに接触していないことを常に確認してください。

回路の向き

回路には方向性があり、この方向性は特定の電子部品において非常に重要な役割を果たします。極性を持つデバイスがいくつかあり、これはその正と負の極に基づいて正しく接続する必要があることを意味します。方向を間違えて組み立てられた回路は正常に動作しません。

_images/connect_led_reverse.png

先ほど組み立てたこのシンプルな回路でLEDを逆にすると、もう動作しなくなることがわかります。

対照的に、この回路の抵抗器のように、方向性を持たないデバイスもあります。そのため、それらを逆にしてもLEDの正常な動作に影響はありません。

"+", "-", "GND", "VCC"などのラベルが付いている部品や異なる長さのピンを持つ部品は、特定の方法で回路に接続する必要があります。

回路の保護

電流は、完全な電気回路のある点を過ぎる電子の流れの速度です。基本的に、電流 = 流れです。アンペア(アンペア)は、電流を測定するための国際的な単位です。それは一定時間内に回路のある点を流れる電子の量(「電気的な充電」とも呼ばれる)を表します。

電流の流れの背後にある駆動力(電圧)は、電圧と呼ばれ、ボルト(V)で測定されます。

抵抗(R)は電流の流れを制限する材料の性質であり、オーム(Ω)で測定されます。

オームの法則によれば(温度が一定の場合)、電流、電圧、および抵抗は比例しています。 回路の電流はその電圧に比例し、その抵抗に反比例します。

したがって、電流(I)= 電圧(V)/ 抵抗(R)です。

オームの法則に関して、簡単な実験を行うことができます。

_images/sp221014_183107.png

5Vを3.3Vに接続するワイヤーを変更すると、LEDの明るさが減少します。 抵抗を220オームから1000オーム(色リング:茶、黒、黒、茶、茶)に変更すると、LEDが以前よりも暗くなることに気付くでしょう。抵抗が大きいほど、LEDは暗くなります。

注釈

抵抗についての紹介や抵抗値の計算方法については、 抵抗器 を参照してください。

ほとんどのパッケージ化されたモジュールは、適切な電圧(通常3.3Vまたは5V)にのみアクセスする必要があります、例えば超音波モジュールのようなもの。

しかし、自作の回路では、電子デバイスの供給電圧と抵抗の使用に注意する必要があります。

例として、LEDは通常20mAの電流を消費し、その電圧降下は約1.8Vです。オームの法則に従い、5Vの電源を使用する場合、LEDを焼き切らないためには、最低160オーム((5-1.8)/20mA)の抵抗を接続する必要があります。

Arduinoでの回路制御

Arduinoのプログラミングと電子回路の基本的な理解ができたので、最も重要な問いに立ち向かう時がきました:Arduinoで回路をどのように制御するか。

簡単に言えば、Arduinoが回路を制御する方法は、ボード上のピンのレベルを変更することです。例えば、オンボードLEDを制御するとき、ピン13に高いまたは低いレベルの信号を書き込みます。

さて、Arduinoボードをコード化して、ブレッドボード上の点滅するLEDを制御してみましょう。LEDがピン9に接続されているように回路を組み立てます。

_images/wiring_led.png

次に、このスケッチをArduinoの開発ボードにアップロードします。

int ledPin = 9;
int delayTime = 500;

void setup() {
    pinMode(ledPin,OUTPUT);
}

void loop() {
    digitalWrite(ledPin,HIGH);
    delay(delayTime);
    digitalWrite(ledPin,LOW);
    delay(delayTime);
}

このスケッチは、オンボードLEDの点滅を制御するために使用したものと非常に似ていますが、 ledPin の値が9に変更されている点が異なります。 これは、今回、ピン9のレベルを制御しようとしているからです。

これで、ブレッドボード上のLEDが点滅しているのが見えるでしょう。

コードをダウンロード

以下のリンクから関連するコードをダウンロードしてください。

基本的なプロジェクト

この章では、Arduinoを使用して電子回路を制御する方法を学びます。

コンポーネントに応じて、Arduinoの基本的な制御方法は4つのタイプに分けることができます。

  • 1. デジタルライト: ピンの出力電圧を高または低に設定し、ライトのオン/オフを制御できます。

  • 2. アナログライト: アナログ値( PWM波 )をピンに書き込み、ライトの明るさを調整できます。

  • 3. デジタルリード: デジタルピンのレベル信号を読み取り、スイッチの動作状態を読み取ることができます。

  • 4. アナログ読み取り: アナログピンの電圧を読み取り、ノブの動作状態を読み取ることができます。

また、追加のライブラリが必要なコンポーネントもあり、それらはセクション 5.11 外部ライブラリのインストール でまとめられています。

最後に、このキットには 6. 面白いプロジェクト も提供されており、多くのシンプルで役立つ操作が含まれています。 このコードのセクションを試して、多くのシンプルなプロジェクトがどのように動作するかを理解してください。

1. デジタルライト

デジタルライト とは、デジタル信号をデジタルピンに出力または書き込むことです。デジタル信号には、0または1、0Vまたは5Vの2つの状態しかないため、LEDやブザーなどのコンポーネントをオン/オフにすることができます。

Arduino R3ボードには、0から13までの14個のデジタルI/0ピンがあり、 pinMode()digitalWrite() 関数を使用して、これらのデジタルピンに高または低レベルを書き込むことができます。

  • pinMode(pin, mode): 特定のピンを INPUT または OUTPUT として設定します。ここでは OUTPUT として設定する必要があります。

    構文

    pinMode(pin, mode)

    パラメータ
    • pin: モードを設定するArduinoピン番号。

    • mode: INPUT, OUTPUT, または INPUT_PULLUP

  • digitalWrite(pin, value): デジタルピンに高レベル(5V)または低レベル(0V)を書き込み、コンポーネントの動作状態を変更します。pinがpinMode()でOUTPUTとして設定されている場合、その電圧は次の値に設定されます:HIGHの場合は5V(3.3Vボードでは3.3V)、LOWの場合は0V(グラウンド)。

    構文

    digitalWrite(pin, value)

    パラメータ
    • pin: Arduinoのピン番号。

    • value: HIGH または LOW

デジタルライトの例:

const int pin = 13;

void setup() {
   pinMode(pin, OUTPUT);    // デジタルピンを出力として設定
}

void loop() {
   digitalWrite(pin, HIGH); // デジタルピンをオンに設定
   delay(1000);            // 1秒待つ
   digitalWrite(pin, LOW);  // デジタルピンをオフに設定
   delay(1000);            // 1秒待つ
}
_images/1_led1.jpg

注意と警告

  • 0~13のピンはすべてデジタルピンです。

  • ピン0と1はコンピュータとの通信に使用されるので使用しないでください。これらのピンに何かを接続すると、通信が妨害され、ボードのアップロードが失敗することがあります。

  • デジタルピンが使い果たされた場合、アナログピン(A0-A5)もデジタルピンとして使用できます。

関連コンポーネント

以下は関連するコンポーネントで、クリックすると使用方法を学ぶことができます。

1.1 ハロー、LED!

「Hello, world!」を表示することは、プログラミングを学ぶ最初のステップであるように、LEDを駆動するプログラムを使用することは、物理的なプログラミングを学ぶ伝統的な導入です。

必要な部品

このプロジェクトでは、以下の部品が必要です。

すべてのキットを購入するのは確かに便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

回路図

_images/circuit_1.1_led.png

この回路の原理は単純で、図には電流の方向が示されています。ピン9が高レベル(5V)を出力すると、220ohmの電流制限抵抗を通過した後、LEDが点灯します。ピン9が低レベル(0V)を出力すると、LEDは消灯します。

配線図

_images/wiring_led1.png

コード

注釈

  • 3in1-kit\basic_project\1.1.hello_led のパスの下にある 1.1.hello_led.ino ファイルを開くことができます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードのアップロードが成功すると、LEDが点滅するのが見えるでしょう。

どのように動作するのか?

ここでは、LEDをデジタルピン9に接続しているため、プログラムの最初にledpinという名前のint変数を宣言し、9という値を割り当てる必要があります。

const int ledPin = 9;

次に、 setup() 関数内でピンを初期化し、ピンを OUTPUT モードに設定する必要があります。

void setup() {
    pinMode(ledPin, OUTPUT);
}

loop() 内で、 digitalWrite() を使用してledpinに5Vの高レベル信号を提供することで、LEDのピン間に電圧差が生じ、LEDが点灯します。

digitalWrite(ledPin, HIGH);

レベル信号がLOWに変わると、ledPinの信号が0 Vに戻ってLEDが消灯します。

digitalWrite(ledPin, LOW);

オンとオフの間にインターバルが必要であり、変化を人々が見ることができるようにするため、 delay(1000) コードを使用してコントローラが1000 ms何もしないようにします。

delay(1000);

1.2 ビープ

アクティブブザーはLEDを点灯させるのと同じくらい簡単に使える典型的なデジタル出力デバイスです!

キットには2種類のブザーが含まれています。 アクティブブザーを使用する必要があります。裏返してみると、密封された背面(露出しているPCBではない)が必要なものです。

_images/buzzer.png

必要な部品

このプロジェクトでは、以下の部品が必要です。

全体のキットを購入するのは非常に便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから別々に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

ブザー

-

回路図

_images/circuit_1.2_beep.png

配線図

_images/wiring_active_buzzer.png

コード

注釈

  • ファイル 1.2.beep.ino3in1-kit\basic_project\1.2.beep のパスで開くことができます。

  • または、このコードを Arduino IDE にコピーします。

  • あるいは、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされると、毎秒ビープ音が聞こえます。

1.3 車輪を回す

モーターは典型的なデジタル出力デバイスであり、LEDと同様の方法で使用されます。 ただし、モーターは大電流で駆動する必要があり、大電流はR3ボードなどのメイン制御ボードを損傷させる可能性があります。 そのため、この場合にはL298Nモジュールを使用して、R3ボードがモーターを安全に制御するのに役立ちます。

必要な部品

このプロジェクトでは、以下の部品が必要です。

全体のキットを購入するのは非常に便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから別々に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

TTモーター

-

L298N モジュール

BUY

回路図

_images/circuit_1.3_wheel.png

IN1〜IN4はL298Nモジュールの入力であり、OUT1〜OUT4は出力です。

使い方としては、INxに高レベルを入力すると、OUTxが高レベルを出力します。INxに低レベルを入力すると、OUTxが低レベルを出力します。 モーターの両端をOUT1とOUT2に接続し、IN1とIN2に逆のレベル信号を入力すると、モーターが回転します。OUT3とOUT4も同様の方法で使用できます。

配線図

L298N

R3ボード

モーター

12V

5V

GND

GND

IN3

9

IN4

10

OUT3

モーターのワイヤー

OUT4

モーターのワイヤー

_images/turn_the_wheel_bb.jpg

コード

注釈

  • ファイル 1.3.turn_the_wheel.ino3in1-kit\basic_project\1.3.turn_the_wheel のパスで開くことができます。

  • または、このコードを Arduino IDE にコピーします。

  • あるいは、 Arduino Web Editor を通じてコードをアップロードします。

1.4 ポンピング

水ポンプもモーターの一つで、モーターや他の外部エネルギーの機械エネルギーを特別な構造を通じて液体を輸送するものです。

必要な部品

このプロジェクトには以下の部品が必要です。

キット全体を購入すると非常に便利です、リンクは以下です:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

L298N モジュール

BUY

遠心ポンプ

-

回路図

_images/circuit_1.3_wheel.png

IN1~IN4はL298Nモジュールの入力であり、OUT1~OUT4は出力です。

それらを使う簡単な方法は:INxに高レベルを入力すると、OUTxは高レベルを出力します。INxに低レベルを入力すると、OUTxは低レベルを出力します。 モーターの両端をOUT1とOUT2に接続し、IN1とIN2に逆のレベルの信号を入力するとモーターが回転します。OUT3とOUT4も同じように使用できます。

配線図

L298N

R3 ボード

モーター

12V

5V

GND

GND

IN3

9

IN4

10

OUT3

モーターのワイヤーの一方

OUT4

モーターのワイヤーの一方

_images/pumping_bb.jpg

コード

注釈

  • ファイル 1.4.pumping.ino3in1-kit\basic_project\1.4.pumping のパスから開くことができます。

  • また、このコードを Arduino IDE にコピーしてください。

  • あるいは、 Arduino Web Editor を使ってコードをアップロードしてください。

ポンプにチューブを追加して、それをベースンに置きます。コードが正常にアップロードされた後、しばらくするとベースンの水が排水されるのを確認できます。 この実験を行う際は、短絡を避けるため回路を水から離してください!

2. アナログライト

Arduinoの14のデジタルピンのうち、6つにはPWM出力機能も備わっています。したがって、これら6つのピンにデジタル信号を書き込むことに加えて、アナログ信号(PWM波信号)も書き込むことができます。このようにして、LEDをさまざまな明るさで点灯させたり、モーターをさまざまな速度で回転させることができます。

パルス幅変調、または PWM は、デジタル手段でアナログの結果を得るための技術です。文字通りの意味を理解するのは難しいかもしれませんので、LEDの強度を制御する例を挙げて、より理解しやすく説明します。

高レベルと低レベルからなるデジタル信号をパルスと呼びます。これらのピンのパルス幅は、ON/OFFの速度を変えることで調整できます。 簡単に言えば、LEDを短い時間(例えば、ほとんどの人の視覚的な滞留時間である20ms)でオン、オフ、オンとすると、 LEDが消えたことには気づかず、光の明るさがわずかに弱くなります。この期間中、LEDがオンになっている時間が長いほど、LEDの明るさは強くなります。 つまり、一定の期間内で、パルスが広いほど、マイクロコントローラによって出力される「電気信号の強さ」が大きくなります。

PWM波を書き込むための関数は以下の通りです。

  • analogWrite(pin, value)

    ピンにアナログ値(PWM波)を書き込みます。指定されたパルス信号を生成することで、異なる出力電圧(0-5V)をシミュレートできます。新しいreadまたはwrite文で呼び出されるまで、ピンはこの信号を保持します。

    文法

    analogWrite(pin, value)

    パラメータ
    • pin: 書き込むArduinoのピン。許容されるデータタイプ: int。

    • value: デューティサイクル:0(常にオフ)から255(常にオン)の間。許容されるデータタイプ: int。

アナログライトの例

int pin = 9;      // PWMピンに接続
void setup() {
   pinMode(pin, OUTPUT);  // ピンを出力として設定
}

void loop() {
   for (int i = 0 ;i<255 ; i++){
      analogWrite(pin, i); //analogWriteの値は0から255まで
      delay(30);
   }
}

注意と警告

  • R3ボードをよく見ると、"~"の記号でマークされたピンにはアナログ出力機能があります。

  • ピン5および6で生成されるPWM出力は、予想よりもデューティサイクルが高くなります。これは、これらのPWM出力を生成するために使用される内部タイマーを共有する millis() および delay() 関数との相互作用のためです。これは主に低デューティサイクルの設定(例えば、0 - 10)で気づかれることが多く、ピン5および6の出力を完全にオフにしない0の値の結果として気づくことがあります。

関連コンポーネント

以下は関連するコンポーネントで、クリックするとそれらの使用方法を学ぶことができます。

2.1 フェージング

このプロジェクトは 1.1 ハロー、LED! に似ていますが、信号の種類が異なります。 前者はデジタル信号(0&1)を出力してLEDの点灯/消灯を制御するのに対し、このプロジェクトはアナログ信号を出力してLEDの明るさを調節します。

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

キット全体を購入すると非常に便利です。リンクは以下の通りです。

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、個別にも購入可能です。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

回路図

_images/circuit_1.1_led.png

配線図

_images/wiring_led1.png

コード

注釈

  • 3in1-kit\basic_project\2.analogWrite\2.1.fading のパスの下の 2.1.fading.ino ファイルを開くことができます。

  • または、このコードを Arduino IDE にコピーしてください。

  • あるいは、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされた後、LEDが息を吹きかえしているのが見えます。

2.2 カラフルな光

光は重ね合わせることができることは周知の通りです。例えば、青い光と緑の光を混ぜるとシアン色の光が得られ、赤い光と緑の光を混ぜると黄色の光が得られます。 これは「加色混色の方法」と呼ばれます。

この方法に基づいて、三原色を使用して、異なる比重に従って任意の色の可視光を混合することができます。例えば、赤色を多く、緑色を少なくすることでオレンジ色が得られます。

この章では、RGB LEDを使用して、加色混色のミステリーを探求します!

RGB LEDは、一つのランプキャップの下に赤、緑、青のLEDを一つずつカプセル化したものと同等であり、これら三つのLEDは共通のカソードピンを共有しています。 各アノードピンに電気信号が供給されるので、対応する色の光が表示されます。 各アノードの電気信号の強度を変更することで、さまざまな色を出力することができます。

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

キット全体を購入することは非常に便利です。以下はリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、個別にも購入可能です。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

RGB LED

BUY

回路図

_images/circuit_2.2_rgb.png

PWMピンの11、10、9は、それぞれRGB LEDの赤、緑、青のピンを制御し、共通のカソードピンをGNDに接続します。 これにより、異なるPWM値でこれらのピンの光を重ね合わせることで、RGB LEDが特定の色を表示することができます。

配線図

_images/rgb_led_sch.png

RGB LEDには4つのピンがあります:最も長いピンは共通のカソードピンで、通常はGNDに接続されます。 最も長いピンの隣の左側のピンは赤で、右側の2つのピンは緑と青です。

_images/colorful_light_bb.jpg

コード

ここでは、お気に入りの色を描画ソフトウェア(例:ペイント)で選択し、RGB LEDで表示することができます。

注釈

  • 3in1-kit\basic_project\2.analogWrite\2.2.colorful_light のパスの下の 2.2.colorful_light.ino ファイルを開くことができます。

  • または、このコードを Arduino IDE にコピーしてください。

  • あるいは、 Arduino Web Editor を通じてコードをアップロードします。

_images/edit_colors.png

color_set() にRGB値を書き込むと、希望する色でRGBが点灯します。

どのように動作するのか?

この例では、RGBの三つのピンに値を割り当てるために使用される関数は、独立したサブ関数 color() にパッケージされています。

void color (unsigned char red, unsigned char green, unsigned char blue)
{
    analogWrite(redPin, red);
    analogWrite(greenPin, green);
    analogWrite(bluePin, blue);
}

loop() 内で、RGB値は color() 関数を呼び出して、RGBが異なる色を発することを実現する入力引数として動作します。

void loop()
{
    color(255, 0, 0); //  赤
    delay(1000);
    color(0,255, 0); //  緑
    delay(1000);
    color(0, 0, 255); //  青
    delay(1000);
}

3. デジタルリード

センサーは実世界の情報をキャッチし、デジタルやアナログのピンを通じてメインボードに情報を伝達します。これにより、コンピュータは現状を知ることができます。

したがって、Arduinoボードは、ボタンやIR障害回避モジュールのようなデジタルピンの値を読むことで、デジタルセンサーの動作状況を知ることができます。

以下は必要な関数です。

  • pinMode(pin, mode): 指定のピンを INPUTOUTPUT として設定します。この場合は INPUT として設定する必要があります。

    構文

    pinMode(pin, mode)

    パラメータ
    • pin: モードを設定するArduinoのピン番号。

    • mode: INPUT、OUTPUT、または INPUT_PULLUP。

  • digitalRead(pin): 指定されたデジタルピンからの値(レベル状態)を読み取ります。

    構文

    digitalRead(pin)

    パラメータ
    • pin: 読み取りたいArduinoのピン番号

    返り値

    HIGH または LOW

デジタルリードの例

int ledPin = 13;  // LEDはデジタルピン13に接続されています
int inPin = 7;    // プッシュボタンはデジタルピン7に接続されています
int val = 0;      // 読み取った値を保存する変数

void setup() {
   pinMode(ledPin, OUTPUT);  // デジタルピン13を出力として設定
   pinMode(inPin, INPUT);    // デジタルピン7を入力として設定
}

void loop() {
   val = digitalRead(inPin);   // 入力ピンを読み取り
   digitalWrite(ledPin, val);  // LEDをボタンの値に設定

注意事項と警告

  1. プルアップ & プルダウン。

    ピンがレベル信号を受け取っていない場合、 digitalRead() はランダムな、不確定な値を出力する可能性があります。入力ピンを既知の状態に指向させることで、プロジェクトの信頼性を高めることができます。 デジタル入力ピンに並列してプルアップまたはプルダウン抵抗を接続することが通常必要です。

    プルアップ抵抗を直接接続するのではなく、コード内でピンモードを INPUT_PULLUP に設定することもできます。例: pinMode(pin,INPUT_PULLUP) 。この場合、ピンはソフトウェア経由でAtmegaの内蔵プルアップ抵抗にアクセスし、プルアップ抵抗を接続するのと同じ効果が得られます。

  2. Pin13について。

    R3ボード上のすべてのデジタルピン(1-13)は digitalRead() として使用できます。 ただし、デジタルピン13は他のデジタルピンよりもデジタル入力として使用するのが難しいです。 これは、LEDと抵抗が接続されていて、ほとんどのボードにはんだ付けされているためです。 内蔵の20kプルアップ抵抗を有効にすると、オンボードのLEDと系列抵抗が電圧レベルを低くするため、期待される5Vの代わりに約1.7Vになります。これは、常にLOWを返すことを意味します。もしピン13をデジタル入力として使用する必要がある場合は、 pinMode() をINPUTに設定し、外部のプルダウン抵抗を使用してください。

  3. アナログピン。

    デジタルピンが不足している場合、アナログピン(A0-A5)もデジタルピンとして使用できます。 pinMode(pin,mode) でINPUTに設定する必要があります。

関連コンポーネント

以下は関連コンポーネントです。クリックして使用方法を学ぶことができます。

3.0 シリアルモニタ

Arduino IDEには、コンピュータからArduinoボードへのメッセージを送信(USB経由)およびArduinoからのメッセージを受信するためのシリアルモニタがあります。

このプロジェクトでは、Arduinoボードからデータを受信する方法を学びます。

注釈

Uno、Nano、Mini、Megaでは、ピン0および1がコンピュータとの通信に使用されます。これらのピンに何かを接続すると、ボードへのアップロードが失敗する原因となる通信の妨害が発生する場合があります。

シリアルモニタの使用方法

  1. Arduino IDEを開き、以下のコードを貼り付けます。

    // setupルーチンはリセットを押すと一度実行されます:
    void setup() {
        // 9600ビット毎秒でシリアル通信を初期化:
        Serial.begin(9600);
    }
    
    // loopルーチンは永遠に繰り返し実行されます:
    void loop() {
        int number = 100;
        Serial.println(number);
        Serial.println("Hello world");
        delay(100);         // 安定した読み取りのための遅延
    }
    
    • Serial.begin(): シリアルデータ伝送のビット毎秒のデータレートを設定します。この場合は9600に設定されています。

    • Serial.println(): データをシリアルポートにASCIIテキストとして人間が読める形式で出力し、キャリッジリターン文字(ASCII 13または 'r')および改行文字(ASCII 10または 'n')に続きます。このコマンドは Serial.print() と同じ形式を取ります。

  2. コードをアップロードするための正しいボードとポートを選択します。

  3. ツールバーで、シリアルモニタを起動するための虫眼鏡アイコンをクリックします。

_images/serial1.png
  1. これがシリアルモニタです。

_images/serial2.png
  • 1: 自動スクロールと非スクロールの選択オプション。

  • 2: シリアルモニタに表示されるデータの前にタイムスタンプを表示するオプション。

  • 3: 終了選択、Arduinoに送信されるデータに追加される終了文字を選択します。選択肢には次のものがあります:

    • No line Ending は入力したものだけを送信します;

    • Newline\n で、入力後にASCIIの新しい行コードを送信します;

    • Carriage Return\r で、入力後にASCIIキャリッジリターン文字を送信します;

    • Both NL & CR\r\n で、入力後にキャリッジリターンと新しい行の両方の文字を送信します。

  • 4: ArduinoボードとPCの間の通信速度を選択します。この値は Serial.begin() で設定した値と同じでなければなりません。

  • 5: 出力コンソール上の全テキストをクリアします。

  • 6: Arduinoボードへの文字送信のためのテキストボックスです。チュートリアルについては、 5.12 シリアルリード を参照してください。

3.1 ボタンの値を読む

前のプロジェクトでは出力機能を使用しましたが、この章では入力機能を使用してボタンの値を読み取ります。

必要な部品

このプロジェクトには、以下の部品が必要です。

全体のキットを購入すると非常に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

ボタン

BUY

回路図

_images/circuit_3.1_button.png

ボタンのピンの一方は5Vに接続され、 もう一方のピンはピン2に接続されているので、 ボタンを押すと、 ピン2はハイ状態になります。しかし、 ボタンを押していないと、 ピン2は未接続状態になり、ハイまたはローのどちらかになります。 ボタンを押していないときに安定したローレベルを得るために、 ピン2を10Kのプルダウン抵抗を介してGNDに再接続する必要があります。

配線図

_images/read_the_button_value_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\3.1.read_button_value のパスの下で 3.1.read_button_value.ino ファイルを開くことができます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされた後、Arduino IDEの右上隅にある虫眼鏡アイコン(シリアルモニタ)をクリックします。

_images/sp220614_152922.png

ボタンを押すと、シリアルモニタに"1"と表示されます。

3.2 磁気を感じる

最も一般的なリードスイッチは、スイッチが開いているときに小さな隙間で分離された、磁化可能な、柔軟な、金属製のリードのペアを含んでいます。

電磁石または永久磁石からの磁場は、リードがお互いを引き付ける原因となり、これにより電気回路が完成します。 磁場が停止すると、リードのばねの力がそれらを分離させ、回路を開きます。

リードスイッチの一般的な使用例は、セキュリティアラームのためのドアや窓の開放を検出することです。

必要な部品

このプロジェクトには、以下の部品が必要です。

全体のキットを購入すると非常に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

リードスイッチ

-

回路図

_images/circuit_3.2_reed.png

デフォルトでは、ピン2はローです。磁石がリードスイッチの近くにあると、ピン2はハイになります。

10Kの抵抗の目的は、磁石が近くにないときにピン2を安定したローレベルに保つことです。

配線図

_images/feel_the_magnetism_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\3.2.feel_the_magnetism のパスの下で 3.2.feel_the_magnetism.ino ファイルを開くことができます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされた後、磁石がリードスイッチの近くにあると、シリアルモニタに1と表示されます。

3.3 障害物を検出する

このモジュールは、前方の障害物の存在を判断するために、車やロボットに一般的に取り付けられています。また、ハンドヘルドデバイスや水道蛇口など、幅広い用途で使用されています。

必要な部品

このプロジェクトには、以下の部品が必要です。

全体のキットを購入すると非常に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

障害物回避モジュール

BUY

回路図

_images/circuit_3.3_obstacle.png

デジタルピン2は、IR障害物回避モジュールの信号を読み取るために使用されます。IRセンサーモジュールのVCCを5Vに、GNDをGNDに、OUTをデジタルピン2に接続します。

配線図

_images/detect_the_obstacle_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\3.3.detect_the_obstacle のパスの下で 3.3.detect_the_obstacle.ino ファイルを開くことができます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

IR障害物回避モジュールが前方に何か障害物を検出すると、シリアルモニターに[0]が表示されます。それ以外の場合は、[1]が表示されます。

3.4 ラインを検出する

ライントラッキングモジュールは、地面に黒いエリア(電気テープで貼られた黒いラインなど)があるかどうかを検出するために使用されます。

モジュールのLEDの一つが地面に適切な赤外線を放射し、黒い表面は光を吸収する能力が比較的強く、反射能力が弱いです。白い表面はその逆です。 反射光を検出した場合、現在の地面が白いことを意味します。検出されない場合、黒いことを意味します。

それが動作原理です。

必要な部品

このプロジェクトには、以下の部品が必要です。

全体のキットを購入すると非常に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

ライン追跡モジュール

BUY

回路図

_images/circuit_3.4_line.png

デジタルピン2は、ライントラックモジュールの信号を読み取るために使用されます。モジュールのVCCを5Vに接続し、GNDをGNDに、OUTをデジタルピン2に接続します。

配線図

_images/detect_the_line_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\3.4.detect_the_line のパスの下で 3.4.detect_the_line.ino ファイルを開くことができます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

ライントラッキングモジュールが黒いラインを検出した場合、シリアルモニターに[1]が表示されます。それ以外の場合は、[0]が表示されます。

4. アナログ読み取り

Arduinoはアナログピンを介して接続されたアナログセンサーの値を読み取ることができます。

R3ボードには、多チャンネル、10ビットのアナログ-デジタル変換器が含まれています。これは、入力電圧を0から動作電圧(5Vまたは3.3V)の間の整数値0から1023にマッピングすることを意味します。

アナログピンの値を読み取るには、 analogRead(pin) 関数が必要です。

  • analogRead(pin): 指定されたアナログピンの値を読み取ります。

    構文

    analogRead(pin)

    パラメータ
    • pin: 読み取りを行うアナログ入力ピンの名前(A0からA5)。

    戻り値

    0-1023。データ型: int。

アナログ読み取りの例

int analogPin = A0; // アナログピンA0に接続されたデバイス
                  // 外部はグラウンドと+5Vにつながる
int val = 0;  // 読み取り値を保存する変数

void setup() {
   Serial.begin(9600);           // シリアルのセットアップ
}

void loop() {
   val = analogRead(analogPin);  // 入力ピンを読み取る
   Serial.println(val);          // 値のデバッグ表示
}

注意点と警告

  • アナログピンはA0-A5です。

  • アナログピンを呼び出す前に pinMode() を呼び出す必要はありませんが、ピンが以前 OUTPUT に設定されていた場合、 analogRead() 関数は正しく動作しません。その場合、 pinMode() を呼び出して INPUT に戻す必要があります。

関連部品

以下は関連する部品です。クリックして使用方法を学ぶことができます。

4.1 ノブを回す

ポテンショメータは3端子の抵抗成分であり、その抵抗値は一定の変化に応じて調整することができます。

必要な部品

このプロジェクトでは、以下の部品が必要です。

一式を購入するのは非常に便利です。購入リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

ポテンショメータ

BUY

回路図

_images/circuit_5.1_potentiometer.png

この例では、アナログピン(A0)を使用してポテンショメータの値を読み取ります。ポテンショメータの軸を回転させることで、これら3つのピンの間での抵抗の分配を変更し、中央のピンの電圧を変更することができます。中央と5Vに接続された外側のピンとの間の抵抗がゼロに近い(そして中央と他の外側のピンとの間の抵抗が10kΩに近い)場合、中央のピンの電圧は5Vに近くなります。逆の操作(中央と5Vに接続された外側のピンとの間の抵抗が10kΩに近い場合)は、中央のピンの電圧が0Vに近くなるようにします。

配線図

_images/turn_thek_knob_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\4.1.turn_the_knob のパスの下にある 4.1.turn_the_knob.ino ファイルを開くことができます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

ボードにコードをアップロードした後、シリアルモニターを開いてピンの読み取り値を確認することができます。ポテンショメータの軸を回転させると、シリアルモニターは「0」~「1023」の値を表示します。

4.2 光を感じる

フォトレジスタはアナログ入力の典型的なデバイスであり、ポテンショメータと非常に似た方法で使用されます。その抵抗値は光の強度に依存しており、照射される光が強ければ強いほど、その抵抗値は小さくなります。逆に、光が弱ければ抵抗値は増加します。

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

キット全体を購入すると非常に便利です。リンクは以下です:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

フォトレジスタ

BUY

回路図

_images/circuit_5.2_light.png

この回路では、10Kの抵抗器とフォトレジスタが直列に接続されており、通過する電流は同じです。10Kの抵抗器は保護として機能し、ピンA0はフォトレジスタの電圧変換後の値を読み取ります。

光が増加すると、フォトレジスタの抵抗が減少し、その電圧が減少するため、ピンA0からの値が増加します。 光が十分強い場合、フォトレジスタの抵抗が0に近づき、ピンA0の値が1023に近づくでしょう。この時、10Kの抵抗器は保護役として機能し、5VとGNDが短絡するのを防ぎます。

フォトレジスタを暗い場所に置くと、ピンA0の値が減少します。十分に暗い場所では、フォトレジスタの抵抗は無限大となり、その電圧は5V(10Kの抵抗器は無視できる)に近づき、ピンA0の値は0に近づくでしょう。

配線図

_images/feel_the_light_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\4.2.feel_the_light のパスの下にある 4.2.feel_the_light.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • あるいは、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされると、シリアルモニタにフォトレジスタの値が表示されます。 周囲の明るさが強いほど、シリアルモニタに表示される値が大きくなります。

4.3 ジョイスティックのトグル

ジョイスティックは、定期的にビデオゲームをプレイする人なら誰もが非常によく知っているはずです。 通常、キャラクターの移動や画面の回転に使用されます。

私たちの動きはジョイスティックによって読み取られ、非常にシンプルな原理で動作します。 これは、互いに直交する2つのポテンショメーターで構成されています。 これらの2つのポテンショメーターは、ジョイスティックの垂直および水平の両方の方向でのアナログ値を測定し、直交座標系での値(x,y)を生成します。

このキットには、デジタル入力を備えたジョイスティックも含まれています。ジョイスティックが押されると、それがアクティブになります。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

一式を購入することは確かに便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

ジョイスティックモジュール

-

回路図

_images/circuit_5.3_joystick.png

注釈

SWピンは10Kのプルアップ抵抗器に接続されています。 その理由は、ジョイスティックが押されていないときにSWピン(Z軸)で安定した高レベルを取得するためです。 そうでなければ、SWは一時停止状態となり、出力値は0/1の間で変動するかもしれません。

配線図

_images/toggle_the_joystick_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\4.3.toggle_the_joystick のパスの下で 4.3.toggle_the_joystick.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードのアップロードが成功した後、シリアルモニタを開いてジョイスティックのx、y、zの値を確認してください。

  • x軸とy軸の値は0から1023までのアナログ値です。

  • Z軸は1または0のステータスを持つデジタル値です(押されると0になります)。

4.4 土壌の湿度を測定する

農業の世界では、作物自体が土壌中の無機元素を直接取得することはできません。 土壌の水は、これらの無機元素を溶解するための溶媒として作用します。

作物は根系を通じて土壌の湿度を吸収し、栄養を取得し、成長を促進します。

作物の成長と発展の過程で、土壌温度に対する要求も異なります。 したがって、土壌湿度センサーが必要となります。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

一式を購入することは確かに便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

土壌湿度モジュール

BUY

回路図

_images/circuit_5.4_soil.png

配線図

_images/measure_the_moisture_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\4.4.measure_soil_moisture のパスの下で 4.4.measure_soil_moisture.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードのアップロードが成功したら、シリアルモニタは土壌の湿度値を表示します。

モジュールを土壌に挿入し、水をやると、土壌湿度センサの値は小さくなります。

4.5 温度計

温度計は、温度または温度勾配(物体の暖かさまたは寒さの度合い)を測定する装置です。 温度計には2つの重要な要素があります:(1)温度が変わると何らかの変化が生じる温度センサー(例:水銀温度計の球部や赤外線温度計の焼結センサー) および(2)この変化を数値に変換する手段(例:水銀温度計にマークされている可視スケールや赤外線モデルのデジタル表示)。 温度計は、工業や技術でのプロセスの監視、気象学、医学、科学研究で幅広く使用されています。

サーミスタは、温度に強く依存する抵抗を持つ温度センサの一種で、2つのタイプがあります: Negative Temperature Coefficient(NTC)およびPositive Temperature Coefficient(PTC)、 またはNTCおよびPTCとして知られています。 PTCサーミスタの抵抗は温度とともに増加し、NTCの状態は前者とは逆です。

この実験では、 NTCサーミスタ を使用して温度計を作成します。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

一式を購入することは非常に便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

サーミスタ

BUY

回路図

_images/circuit_5.5_thermistor.png

各サーミスタには通常の抵抗があります。ここでは、それは10kオームで、25度セルシウスで測定されます。

温度が上昇すると、サーミスタの抵抗は減少します。その後、電圧データはA/Dアダプタによってデジタル量に変換されます。

セルシウス度または華氏での温度は、プログラミングを介して出力されます。

抵抗と温度の間の関係は以下の通りです:

RT =RN expB(1/TK – 1/TN)

  • RT は、温度が TK の場合のNTCサーミスタの抵抗です。

  • RN は、定格温度TN下のNTCサーミスタの抵抗です。ここでは、RNの数値は10kです。

  • TK は、ケルビン温度で、単位はKです。ここでは、 TK の数値は 273.15 + セルシウス度 です。

  • TN は、定格ケルビン温度で、単位もKです。ここでは、TNの数値は 273.15+25 です。

  • B(beta) は、NTCサーミスタの材料定数であり、熱感度指数とも呼ばれ、数値は 3950 です。

  • exp は指数の略であり、基数 e は自然数で、おおよそ2.7に等しいです。

この式 TK=1/(ln(RT/RN)/B+1/TN) を変換して、ケルビン温度から273.15を引くとセルシウス度になります。

この関係は経験的な式です。温度と抵抗が有効範囲内の場合にのみ正確です。

配線図

注釈

  • サーミスタは黒または緑で、103とマークされています。

_images/thermistor_bb.png

コード

注釈

  • euler-kit/arduino/4.5_thermometer のパスの下の 4.5_thermometer.ino ファイルを開くことができます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

アップロードボタンをクリックする前に、Raspberry Pi Picoボードと正しいポートを選択することを忘れないでください。

コードが正常にアップロードされると、シリアルモニタはセルシウス度と華氏温度を出力します。

5. さらなる文法

この章では、多くのプログラムが現実とどのように対話するのかの基本的なロジックを示す例をいくつか紹介します。これにより、Arduinoのプログラミングに慣れる手助けとなります。 創造的なアイデアが頭に浮かんだとき、プログラミングはもはやあなたにとっての課題ではなくなります。

5.1 If else

通常、私たちは条件判断を使って、最も基本的な現実のインタラクションプロジェクトを完成させます。 ここでは、リードスイッチとLEDを使用して、このロジックを示すドア検出システムを構築します。

ドアの片側に磁石を取り付け、ドアの反対側にリードスイッチ(回路付き)を取り付けます。 ドアが閉まっていると、磁石がリードスイッチに近づき、それをオンにします。

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

キット全体を購入するのは間違いなく便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

リードスイッチ

-

回路図

_images/circuit_8.1_ifelse.png

配線図

_images/if_else_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.1.if_else のパスの下で 5.1.if_else.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされた後、ドアを閉めないと、LEDが点灯して、ドアを閉めるように促します。

ちなみに、ドアが閉まっているときにLEDを点灯させる逆の効果が必要な場合、 if の条件を変更するだけです。

  • if else

    if else は、複数のテストをグループ化できることで、基本的なif文よりもコードの流れをより大きく制御することができます。

5.2 しきい値

多くのプロジェクトで、次のような要求に直面します。 「xxxがあるレベルに達したとき、次に...」

例えば、スマートホームでは、光の強度が50Lux未満の場合、照明を点けます; もう一つの例は、コンピュータのマザーボードで、CPUの動作温度が65℃以上の場合、ファンを起動します。

これらの要求で、"しきい値"というキーワードが反映されます。

しきい値の数値を調整することで、回路の動作を個々のニーズに合わせて最適化できます。 例えば、私が明るい生活環境を好む場合、スマートホームの自動照明のしきい値を80Luxに上げることができます。 もう一つの例は、私のスタジオの換気環境があまり良くなく、放熱の要求が高い場合、自動ファンの開始のしきい値を50℃に調整できます。

ここでは、土壌湿度センサーと2つのLEDを使用して、鉢のモニターを作ります。土壌が乾燥していると赤いLEDが点灯し、土壌が十分に湿っていると緑のLEDが点灯します。土壌の乾燥と湿潤を判断するためのしきい値を手動で調整する必要があります。

必要な部品

このプロジェクトには、以下の部品が必要です。

一式を購入するのは非常に便利です、リンクはこちらです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、部品を個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

土壌湿度モジュール

BUY

回路図

_images/circuit_8.2_threshold.png

配線図

_images/threshold_bb.png

コード

注釈

  • 3in1-kit\basic_project\5.2.threshold のパス下の 5.2.threshold.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

コードが正しくアップロードされた後、しきい値が正しく設定されている場合、土壌が乾燥していると赤いLEDが点灯して水をやる必要があることを知らせます。水をやった後、緑のLEDが点灯します。

どのように動作するのか?

...

void loop() {
    int sensorValue = analogRead(soilMoisture);
    Serial.println(sensorValue);
    if (sensorValue > threshold) {
        digitalWrite(redPin, HIGH); // 赤いLEDを点灯
        digitalWrite(greenPin, LOW); // 緑をオフ
    } else {
        digitalWrite(greenPin, HIGH); // 緑のLEDを点灯
        digitalWrite(redPin, LOW); // 赤をオフ
    }
}
...

まず、 threshold 値を設定し、その後、土壌湿度モジュールの値を読み取ります。湿度が高くなるとその値は減少します。現在読み取った値が設定した threshold よりも大きい場合、赤いLEDを点灯させ、そうでない場合は緑のLEDを点灯させます。

この threshold 値は実際の状況に応じて調整する必要があります。まず、コードをアップロードし、シリアルモニタを開いて値を確認します。濡れている状態と乾燥している状態の値を記録し、その中間の値を threshold 値として選択します。

5.3 ステート変更の検出

ボタンが他のデバイスを制御する際、ボタンが押されている間だけ動作するわけではなく、離されると動作が停止することもあります。 ボタンが押されるたびに動作状態を切り替えることも可能です。

この効果を実現するためには、ボタンが押されるとオフとオンの間で動作状態を切り替える方法を知っておく必要があります。 それは「ステート変更の検出」と言います。

このプロジェクトでは、ボタンを使用してモーターを制御します。

必要な部品

このプロジェクトで必要な部品は以下の通りです。

キット全体を購入するのは非常に便利です。リンクは以下の通りです:

名称

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

ボタン

BUY

TTモーター

-

L298N モジュール

BUY

回路図

_images/circuit_8.3_statechange.png

配線図

_images/state_change_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.3.state_change_detection のパスの下にある 5.3.state_change_detection.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされた後、ボタンを押すとモーターが回転し、再びボタンを押すとモーターが停止します。

どのように動作するのか?

  1. モーターやボタンのピンの変数を作成し、ピンを定義します。

    ...
    int detectionState = 0;
    int buttonState = 0;
    int lastButtonState = 0;
    
    • detectionState は、ボタンが押されるたびに値が変わるフラグです。例えば、今回は0、次回は1と交互になります。

    • buttonStatelastButtonState は、今回と前回のボタンの状態を記録するためのもので、ボタンが押されたか、放されたかを比較するために使用されます。

  2. 各ピンを初期化し、シリアルモニタのボーレートを設定します。

    void setup() {
        pinMode(buttonPin, INPUT);
        Serial.begin(9600);
        pinMode(motorPinA,OUTPUT);
        pinMode(motorPinB,OUTPUT);
    }
    
  3. ボタンの状態を最初に読み取り、ボタンが押されると、変数 detectionState が0から1、または1から0に切り替えられます。 detectionState が1の場合、モーターが回転します。この回路の効果は、ボタンが押されるたびにモーターが回転し、次にボタンが押されるとモーターが停止する、というものです。

    void loop() {
        // Toggle the detectionState each time the button is pressed
        buttonState = digitalRead(buttonPin);
        if (buttonState != lastButtonState) {
            if (buttonState == HIGH) {
            detectionState=(detectionState+1)%2;
            Serial.print("The detection state is: ");
            Serial.println(detectionState);
            }
            delay(50);
        }
        lastButtonState = buttonState;
    
        // According to the detectionState, start the motor
        if(detectionState==1){
            digitalWrite(B_1A,HIGH);
            digitalWrite(B_1B,LOW);
        }else{
            digitalWrite(B_1A,LOW);
            digitalWrite(B_1B,LOW);
        }
    }
    

    全体のワークフローは以下の通りです。

    • ボタンの値を読み取ります。

    buttonState = digitalRead(buttonPin);
    
    • buttonStatelastButtonState が等しくない場合、ボタンの状態が変更されたことを意味します。次の判断を続け、この時点のボタンの状態を変数 lastButtonState に格納します。 delay(50) はジッタを排除するために使用されます。

    if (buttonState != lastButtonState) {
    ...
        delay(50);
    }
    lastButtonState = buttonState;
    
    • ボタンが押されると、その値はHIGHになります。ここで、ボタンが押されると、変数 detectionState の値が変更されます。例えば、1つの操作後に0から1になります。

    if (buttonState == HIGH) {
        detectionState=(detectionState+1)%2;
        Serial.print("The detection state is: ");
        Serial.println(detectionState);
        }
    
    • 変数 detectionState が1の場合、モーターを回転させ、それ以外の場合は停止します。

    if(detectionState==1){
        digitalWrite(motorPinA,HIGH);
        digitalWrite(motorPinB,LOW);
    }else{
        digitalWrite(motorPinA,LOW);
        digitalWrite(motorPinB,LOW);
    }
    

5.4 インターバル

時折、同時に2つの作業を行う必要があります。たとえば、LEDを点滅させながらボタンの押下を読み取りたい場合などです。この場合、 delay() を使用することはできません。なぜなら、Arduinoは delay() の間、プログラムを一時停止します。 delay() を待っている間にボタンが押されると、プログラムはボタンの押下を検出しません。

例えるならば、電子レンジでピザを温めるときに、重要なメールを待っている状況と似ています。ピザを電子レンジに入れて10分間セットします。 delay() を使うことに例えると、10分間カウントダウンするタイマーを見つめ続け、0になるのを待つことになります。この時間内に重要なメールが届いても、気づくことはできません。

実際の生活では、ピザを焼き、メールをチェックし、何か他のことをし(あまり時間がかからない!)、時々電子レンジに戻ってタイマーがゼロになったかどうかを確認する。

このスケッチでは、 delay() を使用せずにブザーを鳴らす方法を示しています。 ブザーをオンにし、時刻を記録します。その後、 loop() の中で所望のインターバル時間が経過したかどうかを確認します。 経過していれば、ブザーを鳴らし、新しい時間を記録します。 この方法で、スケッチの実行は一つの指示に遅延することなく、ブザーは継続して音を鳴らします。

この条件に基づいて、LEDを制御するボタンのコードを追加することができます。これにより、ブザーが音楽を再生しても邪魔されることはありません。

必要な部品

このプロジェクトでは、以下の部品が必要です。

全てのキットを購入するのは確かに便利です、以下がリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから別々に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

ボタン

BUY

ブザー

BUY

回路図

_images/circuit_8.5_interval.png

配線図

_images/interval_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.4.interval のパスの下の 5.4.interval.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor でコードをアップロードします。

コードが正常にアップロードされると、ブザーは音楽を再生し、ボタンを押すたびにLEDが点灯します。LEDとブザーの動作は互いに干渉しません。

どのように動作するのか?

マイクロコントローラの前回の操作時間を保存する変数 previousMillis を初期化します。

unsigned long previousMillis = 0;

どのノートが再生されるかをマークします。

int thisNote=0;

各ノートの間隔時間。

long interval = 1000;

loop() 内で、現在の時刻を保存するために currentMillis を宣言します。

unsigned long currentMillis = millis();

現在の動作時間と最後の更新時間の間隔が1000msより大きい場合、特定の機能がトリガーされます。その間、次のトリガーが1秒後に発生するため、previousMillisを現在の時間に更新します。

if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;// 最後の音の最後の時間を保存
    //...
}

メロディのノートを順番に再生します。

tone(buzzerPin,melody[thisNote],100);
interval=1000/noteDurations[thisNote]; // 音を出す間隔
thisNote=(thisNote+1)%(sizeof(melody)/2); //メロディのノートを順番に

ボタンはLEDを制御します。

// ボタンとLEDの再生
digitalWrite(ledPin,digitalRead(buttonPin));

5.5 内蔵ライブラリの使用

Arduino IDEには、対応する .h ファイルを直接コードに追加することで、多数の内蔵ライブラリを使用することができます。

このプロジェクトでは Servo ライブラリを使用してサーボモータを駆動し、0°から180°の間で回転させることができます。

必要な部品

このプロジェクトで必要な部品は以下の通りです。

全てのキットを購入するのは確かに便利です。リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

また、以下のリンクから部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

サーボ

BUY

回路図

_images/circuit_6.2_servo.png

このプロジェクトでは、PWMピン9を使用してサーボを駆動します。サーボのオレンジワイヤーをPWMピン9に、赤ワイヤーを5Vに、ブラウンワイヤーをGNDに接続します。

配線図

_images/swinging_servo_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.5.use_internal_library のパスの下の 5.5.use_internal_library.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • あるいは、 Arduino Web Editor でコードをアップロードします。

コードをR3ボードにアップロードすると、サーボアームが0°〜180°の範囲で回転するのを確認できます。

どのように動作するのか?

ライブラリ Servo.h を呼び出すことで、簡単にサーボを駆動することができます。

#include <Servo.h>

ライブラリの関数:

Servo

サーボを制御するための Servo オブジェクトを作成。

uint8_t attach(int pin);

pinMode() を呼び出してピンをサーボドライバに変換し、失敗時に0を返す。

void detach();

サーボ駆動からピンを解放。

void write(int value);

サーボの角度を度数で設定、0から180。

int read();

最後の write() で設定した値を返す。

bool attached();

サーボが現在接続されている場合は1を返す。

5.6 マッピング

よく観察してみると、多くの値がプログラミングの中で異なる範囲を持っていることに気がつくでしょう。 例えば、アナログ入力の値範囲は(0~1023)です。 アナログ出力の値範囲は(0~255)です。 サーボの出力角度は(0~180)です。

これは、ポテンショメーターを使用してLEDの明るさやサーボの角度を制御したい場合、マッピング操作を行う必要があることを意味します。

では、それをどのように実現するのか見てみましょう。

必要な部品

このプロジェクトでは、以下の部品が必要です。

全体のキットを購入する方が便利です。以下がリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

サーボ

BUY

ポテンショメータ

BUY

回路図

_images/circuit_8.3_amp.png

配線図

_images/map_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.6.map のパスの下で 5.6.map.ino ファイルを開きます。

  • またはこのコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor でコードをアップロードします。

コードが正常にアップロードされた後、ポテンショメータを前後に回転させると、サーボの出力軸も前後に回転します。

どのように動作するのか?

map(value, fromLow, fromHigh, toLow, toHigh): ある範囲の数字を別の範囲にマッピングします。 すなわち、fromLowの値はtoLowに、fromHighの値はtoHighにマッピングされます。

構文

map(value, fromLow, fromHigh, toLow, toHigh)

パラメータ
  • value: マッピングする数字。

  • fromLow: 値の現在の範囲の下限。

  • fromHigh: 値の現在の範囲の上限。

  • toLow: 値の目標範囲の下限。

  • toHigh: 値の目標範囲の上限。

ポテンショメーターでLEDを制御する場合、マップを使用してタスクを完了することもできます。

int x = analogRead(knob);
int y = map(x,0,1023,0,255);
analogWrite(led,y);

注意と警告

  • 両方の範囲の"下限"は"上限"より大きくまたは小さい場合があります。これは、 map() 関数が数の範囲を逆転させるために使用できることを意味します。

    y = map(x,0,180,180,0);
    
  • マッピングは負の数にも適用されます。

    y = map(x,0,1023,-90,90);
    
  • マッピングは整数を使用し、浮動小数点の小数部は破棄されます。

5.7 Tone() または noTone()

Tone() は、指定された周波数(および50%のデューティサイクル)の方形波をピンに生成するために使用されます。持続時間を指定することもできますが、そうしない場合、 noTone() が呼び出されるまで波は続きます。

このプロジェクトでは、この2つの関数を使用して、受動ブザーを振動させて音を出します。 アクティブブザーと同様に、受動ブザーも電磁誘導の現象を利用して動作します。 違いは、受動ブザーには振動源がないため、DC信号を使用するとビープ音が鳴らないことです。 ただし、このことにより、受動ブザーは自身の振動周波数を調整し、“ド、レ、ミ、ファ、ソ、ラ、シ”などの異なる音符を出すことができます。

必要な部品

このプロジェクトには、以下の部品が必要です。

キット全体を購入すると非常に便利です、リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

ブザー

BUY

回路図

_images/circuit_6.1_passive.png

ブザーのカソードをGNDに、アノードをデジタルピン9に接続します。

配線図

_images/custom_tone_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.7.tone_notone のパスの下の 5.7.tone_notone.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードをR3ボードにアップロードすると、7つの音符を含むメロディーが聞こえます。

どのように動作するのか?

注意すべき2点があります:

  1. tone() & noTone(): この関数は受動ブザーの音を直接制御するために使用され、そのプロトタイプは次のとおりです:

文法

void tone(int pin, unsigned int frequency)

void tone(int pin, unsigned int frequency, unsigned long duration)

パラメータ
  • pin: トーンを生成するArduinoのピン。

  • frequency: トーンの周波数(ヘルツ単位)。

  • duration: トーンの持続時間(ミリ秒、オプション)

パッシブ・ブザーを振動させて音を出すように)指定された周波数の矩形波(デューティ・サイクルは50%)をピンに発生させる。継続時間を指定することができ、指定しない場合は noTone() が呼び出されるまで波が継続する。 このピンをピエゾブザーなどのスピーカーに接続し、音を鳴らすことができる。

一度に生成できるトーンは1つだけである。トーン が既に別のピンで再生されている場合、 tone() を呼び出しても効果はない。トーンが同じピンで再生されている場合、呼び出しはその周波数を設定する。

tone() 関数の使用は、ピン3および11のPWM出力を妨害します。

31Hzより低いトーンを生成することはできません。

文法

void noTone(int pin)

パラメータ

pin: トーンを生成するArduinoのピン。

tone() によってトリガーされた方形波の生成を停止します。トーンが生成されていない場合、効果はありません。

これらの2つの関数を知ったら、コードの理解ができるでしょう—配列 melody[] と配列 noteDurations[] の設定は、後続の複数回の tone() 関数の呼び出しと、ループ内でのトーンと持続時間の変更が、音楽の再生効果をより良くするための準備です。

  1. pitches.h: コードは追加のファイル、 pitches.h を使用します。このファイルには、典型的な音符のピッチ値がすべて含まれています。たとえば、NOTE_C4は中央のCです。NOTE_FS4はF#です。この音符テーブルは、 tone() コマンドの基礎となっているBrett Hagmanによって元々書かれていました。音楽の音符を作成したい場合、これが役立つでしょう。

#include "pitches.h"

注釈

このサンプルプログラムにはすでに pitches.h ファイルが含まれています。メインのコードと同じフォルダに置く場合、 pitches.h のインストールの後続の手順は省略できます。

_images/image123.png

コードファイルを開いた後、 pitches.h コードを開くことができない場合は、手動で1つ作成することができます。手順は以下の通りです:

pitches.h ファイルを作成するには、シリアルモニターアイコンのすぐ下のボタンをクリックして New Tab を選択するか、 Ctrl+Shift+N を使用します。

_images/image124.png

次に、以下のコードを貼り付けて、それを pitches.h として保存します:

/*****************
Public Constants
*****************/
#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 49

5.8 ユーザー定義関数

C言語では、大きなプログラムを関数として知られる基本的な構築ブロックに分割することができます。 関数には、{}で囲まれた一連のプログラム文が含まれます。 関数は、Cプログラムに再利用性とモジュール性を提供するために、複数回呼び出すことができます。 言い換えれば、関数の集合がプログラムを構築すると言えます。 関数は、他のプログラミング言語で手続きやサブルーチンとしても知られています。

関数の以下のような利点があります。

  • 関数を使用することで、同じロジック/コードをプログラム内で何度も書く必要がなくなります。

  • Cの関数は、プログラム内の任意の場所から、任意の回数呼び出すことができます。

  • 多数の関数に分割された大きなCプログラムは、追跡が容易です。

  • 再利用性は、C関数の主要な成果です。

  • ただし、関数の呼び出しは、Cプログラム内で常にオーバーヘッドとなります。

Cプログラミングには2種類の関数があります:

  • ライブラリ関数:Cのヘッダーファイルで宣言されている関数。

  • ユーザー定義関数:Cプログラマーが作成した関数で、何度も使用することができます。これにより、大きなプログラムの複雑さが軽減され、コードが最適化されます。

このプロジェクトでは、超音波モジュールの値を読む関数を定義します。

必要な部品

このプロジェクトでは、以下の部品が必要です。

一式を購入するのが便利です。購入リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

超音波モジュール

BUY

回路図

_images/circuit_6.3_ultrasonic.png

配線図

_images/ultrasonic_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.8.user_function のパスの下で 5.8.user_function.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • あるいは、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされると、シリアルモニタは超音波センサと前方の障害物との間の距離を表示します。

どのように動作するのか?

超音波センサの使用方法については、サブ関数を直接確認できます。

float readSensorData(){// ...}

超音波モジュールの trigPin は、2usごとに10usの方形波信号を送信します。

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

echoPin は、範囲内に障害物が存在する場合に高レベルの信号を受信し、 pulseIn() 関数を使用して送信から受信までの時間を記録します。

microsecond=pulseIn(echoPin, HIGH);

音の速度は、340 m/sまたは29マイクロ秒/センチメートルです。

これにより、方形波が往復する距離が得られるので、障害物の距離を得るために2で割ります。

float distance = microsecond / 29.00 / 2;

超音波センサは動作中にプログラムを一時停止するので、複雑なプロジェクトを書いているときに若干の遅延が発生することがあります。

5.9 ShiftOut(LED)

shiftOut() は74HC595が8つのデジタル信号を出力するために使用されます。バイナリ数の最後のビットをQ0に、最初のビットの出力をQ7に行います。つまり、バイナリ数“00000001”を書き込むと、Q0が高レベルを出力し、Q1〜Q7が低レベルを出力します。

このプロジェクトでは、74HC595の使用方法を学びます。74HC595は8ビットのシフトレジスタと三状態の並列出力を持つストレージレジスタで構成されています。シリアル入力を並列出力に変換するため、MCUのIOポートを節約できます。

具体的には、74hc595は8ビットのバイナリ数を書き込むことでデジタル信号出力のための8つのピンを置き換えることができます。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

一式をまとめて購入することは非常に便利です。リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

74HC595

BUY

回路図

_images/circuit_6.4_74hc595.png
  • MR (pin10)が高レベルでOE (pin13)が低レベルのとき、データはSHcpの立ち上がりエッジで入力され、SHcpの立ち上がりエッジを通ってメモリレジスタに移動します。

  • 2つのクロックが連結されている場合、シフトレジスタは常にメモリレジスタよりも1パルス早くなります。

  • メモリレジスタにはシリアルシフト入力ピン(Ds)、シリアル出力ピン(Q)、非同期リセットボタン(低レベル)があります。

  • メモリレジスタは、3状態での8ビット並列のバスを出力します。

  • OEが有効(低レベル)のとき、メモリレジスタのデータはバス(Q0〜Q7)に出力されます。

配線図

_images/74hc595_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.9.shiftout_led のパスの下の 5.9.shiftout_led.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

R3ボードにコードをアップロードすると、LEDが次々に点灯するのが見られます。

どのように動作するのか?

配列を宣言し、 74HC595によって制御される8つのLEDの動作状態を変更するために使用されるいくつかの8ビットバイナリ数を保存します。

int datArray[] = {B00000000, B00000001, B00000011, B00000111, B00001111, B00011111, B00111111, B01111111, B11111111};

最初に STcp を低レベルに設定し、次に高レベルに設定します。 これにより、STcpの立ち上がりエッジのパルスが生成されます。

digitalWrite(STcp,LOW);

shiftOut() は、一度に1ビットのデータをシフトアウトするために使用され、 datArray[num] のデータのバイトを DS ピンを使用してシフトレジスタにシフトします。 MSBFIRST は高ビットからの移動を意味します。

shiftOut(DS,SHcp,MSBFIRST,datArray[num]);

digitalWrite(STcp,HIGH) が実行された後、 STcp は立ち上がりエッジになります。 この時点で、シフトレジスタのデータがメモリレジスタに移動されます。

digitalWrite(STcp,HIGH);

8回の後に、1バイトのデータがメモリレジスタに転送されます。 次に、メモリレジスタのデータがバス(Q0-Q7)に出力されます。 例えば、 B00000001 をシフトアウトすると、Q0によって制御されるLEDが点灯し、Q1〜Q7によって制御されるLEDが消灯します。

5.10 ShiftOut(7セグメント表示)

以前は、 shiftout() 関数を使用して8つのLEDを点灯させましたが、ここではそれを使用して7セグメントディスプレイに0-9を表示します。

7セグメントディスプレイは、基本的に8つのLEDで構成されたデバイスであり、7つのストリップ形状のLEDが「8」の形を作り、小さな点LEDが小数点としてあります。これらのLEDはa, b, c, d, e, f, g, dpとしてマークされています。それぞれが独自のアノードピンを持ち、カソードを共有しています。ピンの位置は下の図に示されています。

_images/segment_cathode.png

必要な部品

このプロジェクトでは、以下の部品が必要です。

キット全体を購入するのは確かに便利です。リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

7セグメント表示

BUY

74HC595

BUY

回路図

_images/circuit_6.5_segment.png

配線図

配線

74HC595

LEDセグメントディスプレイ

Q0

a

Q1

b

Q2

c

Q3

d

Q4

e

Q5

f

Q6

g

Q7

dp

_images/segment_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.10.shiftout_segment のパスの下にある 5.10.shiftout_segment.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされた後、LEDセグメントディスプレイが0〜9を順番に表示するのを見ることができます。

どのように動作するのか?

shiftOut() は74HC595に8つのデジタル信号を出力させます。 それは、二進数の最後のビットをQ0に、 最初のビットの出力をQ7にします。つまり、 二進数"00000001"を書くと、Q0はハイレベルを出力し、Q1〜Q7はローレベルを出力します。

7セグメントディスプレイで数字の「2」を表示すると仮定すると、 a, b, d, e, gにハイレベルを書き、c, f, dpにローレベルを書く必要があります。 つまり、二進数 "01011011"を書く必要があります。 可読性のために、16進表記として"0x5b"を使用します。

_images/7_segment2.png

同様に、7セグメントディスプレイで他の数字も同じ方法で表示させることができます。 以下の表は、これらの数字に対応するコードを示しています。

グリフコード

Numbers

Binary Code

Hex Code

0

00111111

0x3f

1

00000110

0x06

2

01011011

0x5b

3

01001111

0x4f

4

01100110

0x66

5

01101101

0x6d

6

01111101

0x7d

7

00000111

0x07

8

01111111

0x7f

9

01101111

0x6f

これらのコードを shiftOut() に書き込むと、LEDセグメントディスプレイが対応する数字を表示します。

5.11 外部ライブラリのインストール

ライブラリは、Arduino IDEの機能を拡張するための既存のコードや関数の集合体です。ライブラリは、様々な機能のための使用可能なコードを提供し、複雑な機能のコーディングで時間や労力を節約することができます。

ライブラリをインストールする主な方法は2つあります。

Arduinoの Library Manager を通じて、多くのライブラリが直接利用可能です。次の手順で Library Manager にアクセスできます:

  1. Library Manager で、名前で所望のライブラリを検索したり、異なるカテゴリを参照することができます。

    注釈

    ライブラリのインストールが必要なプロジェクトでは、どのライブラリをインストールするかを示すプロンプトが表示されます。指示に従って、"ここで DHT sensor library が使用されています。 Library Manager からインストールできます"のように、推奨されるライブラリをインストールしてください。

    _images/install_lib3.png
  2. インストールしたいライブラリを見つけたら、それをクリックして Install ボタンをクリックします。

    _images/install_lib2.png
  3. Arduino IDEは自動的にライブラリをダウンロードしてインストールします。

関連コンポーネント

以下は関連するコンポーネントです。クリックして使用方法を学ぶことができます。

5.11.1 液晶ディスプレイ

I2C LCD1602は、LCD1602とI2Cモジュールで構成されています。LCD1602は文字、数字などを表示するために使用できますが、多くのピンをメインコントロールに使用する必要があります。I2Cモジュールを設定すると、このLCD1602を駆動するのに2つのI/0ピンのみが必要になります。

このI2C CDL1602がどのように動作するかを見てみましょう。

必要な部品

このプロジェクトでは、以下の部品が必要です。

キット全体を購入するのは非常に便利です。リンクは以下のとおりです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクからそれぞれ別々に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

I2C LCD1602

BUY

回路図

_images/circuit_7.1_lcd1602.png

配線図

_images/lcd_bb.jpg

注釈

R3ボードのSDAとSCLは、ピンA4とA5です。

コード

注釈

  • 3in1-kit\basic_project\5.11.liquid_crystal_display のパスの下にある 5.11.liquid_crystal_display.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • ここでは LiquidCrystal I2C ライブラリが使用されています。 Library Manager からインストールできます。

    _images/lib_liquidcrystal_i2c.png

コードが正常にアップロードされると、I2C LCD1602に"SunFounder"、"Hello World"が表示されます。

注釈

コードと配線が正しいのにLCDが内容を表示しない場合、背面のポテンショメータを回してみてください。

どのように動作するのか?

LiquidCrystal_I2C.h ライブラリを呼び出すことで、LCDを簡単に駆動することができます。

#include "LiquidCrystal_I2C.h"

ライブラリの機能:

LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows)

Arduinoボードに接続された特定のLCDを表す LiquidCrystal_I2C クラスの新しいインスタンスを作成します。

  • lcd_AddR: LCDのアドレスはデフォルトで0x27。

  • lcd_cols: LCD1602には16の列があります。

  • lcd_rows: LCD1602には2行あります。

void init()

lcdを初期化します。

void backlight()

(オプションの)バックライトをオンにします。

void nobacklight()

(オプションの)バックライトをオフにします。

void display()

LCDディスプレイをオンにします。

void nodisplay()

LCDディスプレイをすぐにオフにします。

void clear()

表示をクリアし、カーソルの位置をゼロに設定します。

void setCursor(uint8_t col,uint8_t row)

カーソルの位置をcol,rowに設定します。

void print(data,BASE)

テキストをLCDに表示します。

  • data: 表示するデータ(char、byte、int、long、または文字列)。

  • BASE (オプション): 数字を印刷する基数:BIN(2進数)、DEC(10進数)、OCT(8進数)、HEX(16進数)。

5.11.2 IRレシーバー

このプロジェクトでは、IRレシーバーの使用方法を学びます。

赤外線受信機は、赤外線信号を受信し、独立して赤外線を受信してTTLレベルと互換性のある信号を出力する部品です。 通常のプラスチックパッケージのトランジスタとサイズが似ており、各種の赤外線リモコンや赤外線伝送に適しています。

必要な部品

このプロジェクトでは、以下の部品が必要です。

全体のキットを購入すると非常に便利です、リンクは以下です:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクからそれぞれ購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

IRレシーバー

-

回路図

_images/circuit_7.2_receiver.png

配線図

この例では、IRレシーバーの左のピンをピン11に、中央のピンをGNDに、右のピンを5Vに接続します。

_images/ir_remote_control_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.11.ir_receiver のパスの下にある 5.11.ir_receiver.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • ここでは IRremote ライブラリが使用されています。 Library Manager からインストールできます。

    _images/lib_irremote.png

コードをR3ボードにアップロードすると、IRリモートコントローラの押されたボタンの現在の値がシリアルモニタに表示されます。

どのように動作するのか?

このコードは、 IRremote ライブラリを使用して赤外線(IR)リモコンとともに動作するように設計されています。詳細は以下のとおりです:

  1. ライブラリのインクルード: IRremote ライブラリを含めます。これは、IRリモコンと連携するための関数を提供します。

    #include <IRremote.h>
    
  2. IRセンサーの信号ピンが接続されているArduinoのピンを定義し。

    const int IR_RECEIVE_PIN = 11;  // IRセンサーのピン番号を定義する。
    
  3. ボーレート9600でシリアル通信を初期化します。指定されたピン(IR_RECEIVE_PIN)でIRレシーバを初期化し、LEDフィードバックを有効にします(該当する場合)。

    void setup() {
        Serial.begin(9600);                                     // ボーレート9600でシリアル通信を開始する。
        IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // IRレシーバーの起動
    }
    
  4. ループは、入力されたIRリモコンの信号を継続的に処理します。

    void loop() {
        if (IrReceiver.decode()) {
            String decodedValue = decodeKeyValue(IrReceiver.decodedIRData.command);
            if (decodedValue != "ERROR") {
                Serial.println(decodedValue);
                delay(100);
            }
            IrReceiver.resume();  // Enable receiving of the next value
        }
    }
    
    • IR信号が受信され、正常にデコードされたかどうかを確認します。

    • IRコマンドをデコードし、カスタムの decodeKeyValue() 関数を使用して decodedValue に保存します。

    • デコードされた値がエラーでないかを確認します。

    • デコードされたIR値をシリアルモニタに印刷します。

    • 次の信号のIR信号受信を再開します。

5.11.3 温度・湿度

湿度と温度は物理的な数量自体から実際の人々の生活まで密接に関連しています。 人間の環境の温度と湿度は、人体の体温調節機能と熱伝達効果に直接影響します。 さらに、思考活動と精神状態に影響を与え、私たちの学習や仕事の効率に影響を与えます。

温度は国際単位系における7つの基本的な物理量の1つで、物体の熱さや寒さの度合いを測定するために使用されます。 摂氏は、世界でよく使われる温度の尺度の一つで、"℃"の記号で表されます。

湿度は、空気中に存在する水蒸気の濃度です。 日常生活では空気の相対湿度が一般的に使用され、%RHで表されます。相対湿度は温度と密接に関連しています。 一定の体積の密封されたガスの場合、温度が高いほど相対湿度が低く、温度が低いほど相対湿度が高くなります。

_images/Dht11.png

このキットには、デジタル温度・湿度センサーであるdht11が含まれています。このセンサーは、周囲の空気を測定するための容量性湿度センサーとサーミスターを使用し、データピンにデジタル信号を出力します。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

キット全体を購入するのは非常に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

DHT11 湿度温度センサ

-

回路図

_images/circuit_7.3_dht11.png

配線図

_images/dht11_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.11.temperature_humidity のパスの下で 5.11.temperature_humidity.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • ここでは DHT sensor library が使用されています。 Library Manager からインストールできます。

    _images/lib_dht11.png

コードが正常にアップロードされると、シリアルモニタに継続的に温度と湿度が出力されます。プログラムが安定して動作すると、これらの2つの値はますます正確になります。

どのように動作するのか?

  1. DHT.h ライブラリをインクルードします。これはDHTセンサーと対話するための関数を提供します。次に、DHTセンサーのピンとタイプを設定します。

    #include "DHT.h"
    
    #define DHTPIN 11   // Set the pin connected to the DHT11 data pin
    #define DHTTYPE DHT11 // DHT 11
    
    DHT dht(DHTPIN, DHTTYPE);
    
  2. 115200のボーレートでシリアル通信を初期化し、DHTセンサーを初期化します。

    void setup() {
        Serial.begin(115200);
        Serial.println("DHT11 test!");
        dht.begin();
    }
    
  3. loop() 関数で、DHT11センサから温度と湿度の値を読み取り、シリアルモニタに出力します。

    void loop() {
        // Wait a few seconds between measurements.
        delay(2000);
    
        // Reading temperature or humidity takes about 250 milliseconds!
        // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
        float humidity = dht.readHumidity();
        // Read temperature as Celsius (the default)
        float temperture = dht.readTemperature();
    
        // Check if any reads failed and exit early (to try again).
        if (isnan(humidity) || isnan(temperture)) {
            Serial.println("Failed to read from DHT sensor!");
            return;
        }
        // Print the humidity and temperature
        Serial.print("Humidity: ");
        Serial.print(humidity);
        Serial.print(" %\t");
        Serial.print("Temperature: ");
        Serial.print(temperture);
        Serial.println(" *C");
    }
    
    • dht.readHumidity() 関数は、DHTセンサから湿度の値を読むために呼び出されます。

    • dht.readTemperature() 関数は、DHTセンサから温度の値を読むために呼び出されます。

    • isnan() 関数は、読み取りが有効かどうかを確認するために使用されます。湿度または温度の値がNaN(数値でない)の場合、センサーからの読み取りが失敗したことを示し、エラーメッセージが出力されます。

5.12 シリアルリード

Serial.print() 関数を使用するとき、これに気づいたかもしれません。 印刷があるなら、読取りはありますか?シリアルモニターのテキストボックスは何に使われるのでしょうか? そう、推測通り、シリアルモニタのテキストボックスに情報を入力することで、プログラムや回路を制御する方法があります。

このプロジェクトでは、I2C LCD1602を使用して、シリアルモニタに入力されたテキストを表示し、 Serial.read() の使用法を体験します。

必要な部品

このプロジェクトでは、以下の部品が必要です。

キットをまとめて購入するのはとても便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

I2C LCD1602

BUY

回路図

_images/circuit_7.1_lcd1602.png

配線図

_images/lcd_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.12.serial_read のパスの下にある 5.12.serial_read.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • ここでは LiquidCrystal I2C ライブラリが使用されています。 Library Manager からインストールできます。

    _images/lib_liquidcrystal_i2c.png

コードが正常にアップロードされたら、シリアルモニターのテキストボックスにテキストを入力することができ、LCDに情報が表示されます。

どのように動作するのか?

void loop()
{
// シリアルポートから文字が届いたとき...
    if (Serial.available()) {
        // メッセージがすべて届くのを少し待つ
        delay(100);
        // 画面をクリア
        lcd.clear();
        // 利用可能なすべての文字を読み取る
        while (Serial.available() > 0) {
            // LCDに各文字を表示
            lcd.write(Serial.read());
        }
    }
}
  • Serial.available() は、テキストボックスから何かを入力したときに、入ってくるストリームの文字の数を取得できます。入力には2つの終端記号があるため、 A を入力すると3文字、 AB を入力すると4文字が得られます。

  • Serial.read() は、入ってくるストリームから最初の文字を取得します。例えば、 AB を入力した場合、 Serial.read() を一度だけ呼び出すと、文字 A が得られます。2回目の呼び出しで B が得られます。3回目と4回目の呼び出しで、2つの終了記号が得られます。入力ストリームに利用可能な文字がない状態でこの関数を呼び出すとエラーになります。

要するに、上記の二つを組み合わせ、 while ループを使用して、入力されたすべての文字を毎回読み取ることが一般的です。

while (Serial.available() > 0) {
    Serial.print(Serial.read());
}

ちなみに、入ってくるストリームから文字を取得するために Serial.read() を使用しないと、入ってくるストリームの文字が重なり合ってしまいます。 例えば、 A の後に AB を入力すると、入ってくるストリームは7文字を蓄積します。

5.13 割り込み

delay() をセンサーを使用するプロジェクトで使用すると、これらのセンサーをトリガーするときに、プログラムが何の効果も持たない可能性があります。 これは、delay文がプログラムの一時停止を引き起こし、プログラムがセンサーからメイン制御ボードに送信される信号を取得できないためです。

この場合、割り込みを使用できます。割り込みを使用すると、プログラムがパルスを逃さないようになります。

この章では、アクティブブザーとボタンを使用して、割り込みの使用過程を体験します。

loop() 関数では、 delay(1000) を使用して秒をカウントします。 ボタンを使ってブザーを制御する部分をISRに入れることで、delayの影響を受けずにタスクをスムーズに完了させることができます。

注釈

ISRは、他の関数にはない一部のユニークな制限を持つ特別な関数です。 ISRにはパラメータを持つことができず、何も返すべきではありません。 一般的に、ISRはできるだけ短く、高速であるべきです。複数のISRを使用するスケッチの場合、一度に1つだけ実行でき、他の割り込みは、それらが持っている優先順位に基づいて、現在のものが終了した後に実行されます。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

キット全体を購入すると非常に便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

ボタン

BUY

ブザー

-

回路図

_images/circuit_8.6_interval.png

配線図

_images/interrupt_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.13.interrupt のパスの下で 5.13.interrupt.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされると、シリアルモニタをオンにして、毎秒自動でインクリメントされる数字が表示されます。ボタンを押すと、ブザーが鳴ります。 ボタンで制御されるブザー機能とタイミング機能は互いに競合しません。

どのように動作するのか?

  • attachInterrupt(digitalPinToInterrupt(pin), ISR, mode): 割り込みを追加します。

    文法

    attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

    パラメータ
    • pin: Arduinoのピン番号。実際のデジタルピンを特定の割り込み番号に変換するために、 digitalPinToInterrupt(pin) を使用する必要があります。例えば、ピン3に接続する場合、第一パラメータとしてその digitalPinToInterrupt(3) を使用します。

    • ISR: 割り込みが発生したときに呼び出すISR。この関数はパラメータを取らず、何も返さない必要があります。この関数は、割り込みサービスルーチンとしても参照されることがあります。

    • mode: 割り込みがトリガされるタイミングを定義します。有効な値として4つの定数が事前に定義されています:

      • LOW は、ピンが低い場合に割り込みをトリガします。

      • CHANGE は、ピンの値が変わるたびに割り込みをトリガします。

      • RISING は、ピンが低から高になったときにトリガします。

      • FALLING は、ピンが高から低になったときにトリガします。

注釈

異なるメイン制御ボードは割り込みピンを異なる方法で使用することができます。R3ボードでは、ピン2とピン3だけが割り込みを使用することができます。

5.14 キャリブレーション

アナログ入力コンポーネント、例えばフォトレジスタや土壌湿度センサなどを使用する際、その読み取り範囲が0から1023ではなく、例えば0から800や600から1000のような範囲であることがわかるかもしれません。これは、これらのデバイスの限界に通常の使用で到達することができないためです。

このような場合、センサーの入力をキャリブレーションする技術が利用できます。起動時に、制御ボードはセンサーの読み取りを5秒間行い、最も高いおよび最も低い読み取りを記録します。この5秒間の読み取りは、サイクル中に取得される読み取りの最小および最大の予想値を示します。

このプロジェクトでは、上記のキャリブレーション技法を用いて、フォトレジスタとパッシブブザーを利用し、 テレミン のようなゲームを実装します。

注釈

テレミン は物理的な接触を必要としない電子楽器で、プレイヤーの手の位置を感知して異なる音を生成します。

必要な部品

このプロジェクトに必要な部品は以下のとおりです。

一式を購入すると非常に便利です。こちらがリンクです:

名称

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

また、以下のリンクから各部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

ブザー

BUY

LED

BUY

フォトレジスタ

BUY

回路図

_images/circuit_8.8_calibration.png

配線図

_images/calibration_bb.jpg

コード

注釈

  • 5.14.calibration.ino ファイルを 3in1-kit\basic_project\5.14.calibration のパスで開いてください。

  • または、このコードを Arduino IDE にコピーしてください。

  • あるいは、 Arduino Web Editor を利用してコードをアップロードしてください。

コードが正常にアップロードされた後、LEDが点灯し、フォトレジスタの検出範囲をキャリブレーションするための5秒間が与えられます。これは、使用するたびに異なる光の環境下にある可能性があるためです(例:正午と夕暮れ時の光の強度は異なる)。

この時点で、フォトレジスタの上で手を上下に振る必要があり、手の動きの範囲がこの楽器の演奏範囲にキャリブレーションされます。

5秒後、LEDが消灯し、フォトレジスタ上で手を振って演奏できます。

それはどのように動作しますか?

  1. すべてのコンポーネントの初期値とピンを設定します。

    const int buzzerPin = 9;
    const int ledPin = 8;
    const int photocellPin = A0;  //フォトレジスタはA2に接続
    
    int lightLow = 1023;
    int lightHigh = 0;
    
    int sensorValue = 0;        // センサーから読み取った値
    int pitch = 0;           // センサーの値をLED 'バー'に変換
    
    unsigned long previousMillis = 0;
    const long interval = 5000;
    
  2. setup() でのキャリブレーションプロセスを設定します。

    void setup()
    {
        pinMode(buzzerPin, OUTPUT);// すべてのLEDピンを出力に設定
        pinMode(ledPin, OUTPUT); //LEDピンを出力させる
    
        /* フォトレジスタの最大値 & 最小値のキャリブレーション */
        previousMillis = millis();
        digitalWrite(ledPin, HIGH);
        while (millis() - previousMillis <= interval) {
            sensorValue = analogRead(photocellPin);
            if (sensorValue > lightHigh) {
                lightHigh = sensorValue;
            }
            if (sensorValue < lightLow) {
                lightLow = sensorValue;
            }
        }
        digitalWrite(ledPin, LOW);
    }
    

    動作の流れは以下のとおりです。

    • 5000msの間隔で millis() を使用してタイミングを測定。

    previousMillis = millis();
    ...
    while (millis() - previousMillis <= interval) {
    ...
    }
    
    • この5秒間、フォトレジスタの周りで手を振ると、検出された光の最大値と最小値が記録され、それぞれ lightHighlightLow に割り当てられます。

    sensorValue = analogRead(photocellPin);
    if (sensorValue > lightHigh) {
        lightHigh = sensorValue;
    }
    if (sensorValue < lightLow) {
        lightLow = sensorValue;
    }
    
  3. これでテレミンの演奏を開始することができます。フォトレジスタの値を sensorValue に読み込み、小さな範囲から大きな範囲にマッピングして、ブザーの周波数として使用します。

    void loop()
    {
    /* play*/
    sensorValue = analogRead(photocellPin); //A0の値を読み取る
    pitch = map(sensorValue, lightLow, lightHigh, 50, 6000);  // ブザーの周波数にマップする
    if (pitch > 50) {
        tone(buzzerPin, pitch, 20);
    }
    delay(10);
    }
    

5.15 EEPROM

EEPROM はメモリであり、メインコントロールボードをオフにしてもそのデータは消去されません。これを使用してデータを記録し、次回電源を入れたときにそれを読み取ることができます。

例として、毎日のロープスキップの回数を追跡するスポーツカウンターを作成することができます。

また、あるプログラムでデータを書き込み、別のプログラムでそれを読み取ることもできます。例えば、車のプロジェクトで作業しているとき、2つのモーターの速度が一致しない場合、モーター速度の補正値を記録するキャリブレーションプログラムを書くことができます。

必要な部品

このプロジェクトでは、以下の部品が必要です。

全てを含むキットを購入すると非常に便利です、こちらのリンクから購入できます:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

下記のリンクから別々に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

サーボ

BUY

ボタン

BUY

ポテンショメータ

BUY

回路図

_images/circuit_515_eeprom.png

配線図

_images/eeprom_servo.png

コード

注釈

  • 3in1-kit\basic_project\5.15.eeproom のパスの下で 5.15.eeproom.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • あるいは、 Arduino Web Editor を通じてコードをアップロードします。

この回路を使用するには、ボタンを押して記録を開始し、ポテンショメータを通じて所望の情報を入力するだけです。現在、ボードはあなたの操作を無限に繰り返します(そして、各反復ごとにLEDが点滅します)。新しい操作を記録するためにボタンを再度押すまでです。resolutionとrecordTimeの値を変更することで、記録される時間を変更することもできます。

どのように動作しますか?

  1. EEPROM.h ライブラリをインポートし、EEPROMメモリを初期化します。

    ...
    #include <EEPROM.h>//記録した値を保存するために使用
    
    ...
    float resolution = 1000;//EEPROM.length() より小さくなければならない
    float recordTime = 5; //遅延時間
    bool recording = false;
    ...
    

    /EEPROM.length() より小さくなければならない に注意してください。 setup() で、ボードのEEPROMのメモリがSunFounder R3ボードの場合は1024と表示されます。別のボードを使用している場合は、変数 resolution の値を変更できます。

  2. ボードのEEPROMメモリを印刷します。

    void setup() {
        ...
        Serial.begin(9600);
        //Serial.println(EEPROM.length());
    }
    

    ボードのEEPROMメモリのサイズを知るには、 Serial.println(EEPROM.read(i)) の行のコメントを解除してください。これにより、シリアルモニタにEEPROMのサイズが表示され、変数 resolution の値をそれに応じて変更できます。

  3. ボタンが押されたことを検出すると、すぐに記録が開始され、ポテンショメータを使用して必要な情報が入力されます。その後、ボードはあなたのアクションを無限に繰り返します(各反復でLEDが点滅します)。新しいアクションを記録するために再度ボタンを押すまでです。

    void loop() {
        if (recording == true) {//記録
            for (int i = 1; i <= resolution; i++) {
                digitalWrite(ledPin, HIGH); //状態LEDの点灯
                int val = map(analogRead(A0), 0, 1023, 0, 180);
                EEPROM.write(i, val);
                //Serial.println(EEPROM.read(i));
                myServo.write(val);
                delay(recordTime);
            }
            digitalWrite(ledPin, LOW); //状態LEDをオフ
            delay(1000);//人のための時間を与える
            recording = false;
        }
        else {
            for (int i = 1; i <= resolution; i++) {//再生
                if (digitalRead(buttonPin) == 0) {//再生を停止し、新しい値を記録
                    recording = true;
                    break;
                }
                int readval = EEPROM.read(i);
                myServo.write(readval);
                //Serial.println(readval);
                delay(recordTime);
            }
            digitalWrite(ledPin, HIGH); //新しい繰り返しを示す
            delay(100);
            digitalWrite(ledPin, LOW);
        }
    }
    
    • ボタンが押されたときに変数 recording をtrueにします。

    • 変数 recording がtrueの場合、メモリ範囲にアクションの記録を開始します。

    • ポテンショメータの値を読み取り、0-180にマッピングしてEEPROMに保存し、サーボの回転を制御します。

    • LEDは、記録の開始時に点灯し、終了時に消灯します。

    • LEDの速い点滅で記録されたアクションを繰り返し、新しい繰り返しのリマインダとして機能します。

  4. EEPROM ライブラリについて。

    以下は、その関数の一部です。

    • write(address,value): EEPROMにバイトを書き込みます。

      • address: 書き込む場所、0から始まる (int)

      • value: 書き込む値、0から255まで (byte)

      • EEPROMへの書き込みは3.3msで完了します。EEPROMメモリは、100,000回の書き込み/消去サイクルの寿命が指定されているため、頻繁に書き込む場合は注意が必要です。

    • Read(address): EEPROMからバイトを読み取ります。書き込まれていない場所の値は255です。

    • update(address,value): EEPROMにバイトを書き込みます。値は、同じアドレスにすでに保存されているものと異なる場合のみ書き込まれます。

      • EEPROMへの書き込みは3.3msで完了します。EEPROMメモリは、100,000回の書き込み/消去サイクルの寿命が指定されているため、書き込むデータが頻繁に変更されない場合は、write()の代わりにこの関数を使用してサイクルを節約できます。

    • EEPROM.put(address, data): 任意のデータタイプやオブジェクトをEEPROMに書き込みます。

      • address: 読み取る場所、0から始まる (int)。

      • data: 読み取るデータ、プリミティブタイプ(例:float)やカスタム構造体。

      • この関数はEEPROM.update()を使用して書き込みを実行するため、値が変更されていない場合は再書き込みしません。

    • EEPROM.get(address, data): EEPROMから任意のデータタイプやオブジェクトを読み取ります。

      • address: 読み取る場所、0から始まる (int)。

      • data: 読み取るデータ、プリミティブタイプ(例:float)やカスタム構造体。

6. 面白いプロジェクト

この章では、多くのプログラムが現実とどのように対話するのかの基本的なロジックを示す例をいくつか紹介します。これにより、Arduinoのプログラミングに慣れる手助けとなります。 創造的なアイデアが頭に浮かんだとき、プログラミングはもはやあなたにとっての課題ではなくなります。

6.1 光によって制御される流れるLED

光抵抗またはフォトセルは、光によって変化する可変抵抗です。光抵抗の抵抗は、入射光の強度が増加すると減少します。言い換えれば、これは光電導を示しています。光抵抗は、光感応検出回路や、光と暗闇に反応するスイッチ回路に適用できます。

光抵抗の抵抗は、入射光の強度によって変化します。光の強度が高くなると、抵抗は減少し、光の強度が低くなると、抵抗は増加します。この実験では、光の強度を示すために8つのLEDを使用します。光の強度が十分に高いと、すべてのLEDが点灯します。光がない場合、すべてのLEDは消えます。

必要な部品

このプロジェクトでは、以下の部品が必要です。

キット全体を購入するのは確かに便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、それぞれの部品も購入することができます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

フォトレジスタ

BUY

回路図

_images/circuit_6.1_light_led.png

配線図

_images/light_control_led.png

コード

注釈

  • 3in1-kit\basic_project\6.1.light_control_led のパスの下で 6.1.light_control_led.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

光抵抗に光を当てると、いくつかのLEDが点灯します。もっと光を当てると、さらに多くのLEDが点灯します。暗い環境に置くと、すべてのLEDが消えます。

どのように動作するのか?

void loop()
{
    sensorValue = analogRead(photocellPin); // A0の値を読む
    ledLevel = map(sensorValue, 300, 1023, 0, NbrLEDs); // LEDの数にマップする
    for (int led = 0; led < NbrLEDs; led++)
    {
        if (led < ledLevel ) // ledがledLevelより小さい場合、以下のコードを実行します
        {
            digitalWrite(ledPins[led], HIGH); // レベルより低いピンをオンにする
        }
        else
        {
            digitalWrite(ledPins[led],LOW); // レベルより高いピンをオフにする
        }
    }
}

map() 関数を使用することで、光抵抗の値を8つのLEDにマップすることができます。例えば、sensorValueが560の場合、ledLevelは4となり、この時点でledPins[0]からledPins[4]までが点灯し、ledPins[5]からledPins[7]までが消灯することになります。

6.2 電子サイコロ

このプロジェクトでは、ボタン、7セグメント、および74hc595を使用して電子サイコロを作成します。 ボタンが押されるたびに、1から6までのランダムな数字が生成され、7セグメントディスプレイに表示されます。

必要な部品

このプロジェクトには以下の部品が必要です。

一式を購入するのは確かに便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

ボタン

BUY

74HC595

BUY

7セグメント表示

BUY

回路図

_images/circuit_8.9_eeprom.png

配線図

_images/wiring_electronic_dice.png

コード

注釈

  • 3in1-kit\basic_project\6.2.electronic_dice のパスの下にある 6.2.electronic_dice.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされると、7セグメントディスプレイは0-7を高速でスクロールして表示し、ボタンを押すとランダムな数字が表示されてスクロールが停止します。ボタンを再度押すと、スクロール表示が再開されます。

どのように動作するのか?

このプロジェクトは 5.10 ShiftOut(7セグメント表示) を基にしており、7セグメントディスプレイ上のスクロール表示を開始/一時停止するボタンが付いています。

  1. 各ピンを初期化し、ボタンの値を読み取ります。

    void setup ()
    {
    
        ...
        attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
    }
    
    • ここで割り込みは、ボタンの状態を読むために使用されます。 buttonPin のデフォルト値は低く、ボタンが押されると低から高に変わります。

    • rollDice は割り込みがトリガされたときに呼び出される関数を表しており、変数 state の値をトグルするために使用されます。

    • FALLING は、 buttonPin が低から高に移行するときに割り込みがトリガされることを意味します。

  2. 変数 state が0の場合、関数 showNumber() が呼び出され、7セグメントディスプレイが1から7までのランダムな数字を表示します。

    void loop()
    {
        if (state == 0) {
            showNumber((int)random(1, 7));
            delay(50);
        }
    }
    
  3. rollDice() 関数について。

    void rollDice() {
        state = !state;
    }
    

    この関数が呼び出されると、stateの値をトグルします。例えば、前回が1で、今回が0です。

  4. showNumber() 関数について。

    void showNumber(int num) {
        digitalWrite(STcp, LOW); //ST_CPを接地し、送信している間だけLowを保持する
        shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
        //ラッチ・ピンをハイ・レベルに戻し、チップにそれを知らせる
        //もはや情報をリッスンする必要はない
        digitalWrite(STcp, HIGH); //ST_CPST_CPをプルしてデータを保存する。
    }
    

    これはプロジェクト 5.10 ShiftOut(7セグメント表示)loop() 内のコードを関数 showNumber() に移したものです。

6.3 高温度警報

次に、サーミスター、プッシュボタン、ポテンショメータ、そしてLCDを使用して、高温度警報装置を作成します。 LCD1602は、サーミスターによって検出された温度と、ポテンショメータを使用して調整できる高温度閾値を表示します。 閾値は同時にEEPROMに保存されるため、現在の温度が閾値を超えると、ブザーが鳴ります。

必要な部品

このプロジェクトには、以下の部品が必要です。

キット全体を購入することは確かに便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

ブザー

-

ボタン

BUY

I2C LCD1602

BUY

サーミスタ

BUY

ポテンショメータ

BUY

回路図

_images/wiring_high_tem.png

配線図

_images/tem_alarm.png

コード

注釈

  • 3in1-kit\basic_project\6.3.high_tem_alarm のパスの下にある 6.3.high_tem_alarm.ino ファイルを直接開くことができます。

  • または、このコードをArduino IDE 1/2にコピーします。

  • ここでは LiquidCrystal I2C ライブラリが使用されています。 Library Manager からインストールできます。

    _images/lib_liquidcrystal_i2c.png

コードのアップロードが成功すると、LCD1602はサーミスターによって検出された温度と高温度の閾値を表示します。閾値はポテンショメータで調整することができます。閾値は同時にEEPROMに保存されるため、現在の温度が閾値を超えると、ブザーが鳴ります。

注釈

コードと配線が正しい場合でも、LCDがコンテンツを表示しない場合は、背面のポテンショメータを回してください。

どのように動作しますか?

  1. ボタン、ブザー、I2C LCD1602を初期化し、EEPROMの値を読み取ります。ボタンのステータスもここで読み取るために割り込みを使用しています。

    void setup()
    {
        pinMode(buzzerPin, OUTPUT);
        pinMode(buttonPin, INPUT);
        lcd.init();
        lcd.backlight();
        upperTem = EEPROM.read(0);
        delay(1000);
        attachInterrupt(digitalPinToInterrupt(buttonPin), buttonState, FALLING);
    }
    
    • この割り込みはボタンの状態を読み取るために使用されます。ボタンが押されると、 buttonPin はローよりハイに変わります。

    • 割り込みがトリガされると、buttonState関数が呼び出され、変数stateの値を切り替えます。

    • FALLING は、 buttonPin がローからハイに移行するときに割り込みが発生することを意味します。

  2. 高温閾値を設定するには、メインプログラム内でstateが1のとき(ボタンを押すと0と1の間で切り替えられる)に upperTemSetting() 関数が呼び出され、それ以外の場合は monitoringTemp() が現在の温度と設定された閾値を表示するために呼び出されます。

    void loop()
    {
        if (state == 1)
        {
            upperTemSetting();
        }
        else {
            monitoringTemp();
        }
    }
    
  3. upperTemSetting() 関数について。

    void upperTemSetting()
    {
        int setTem = 0;
    
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Adjusting...");
        lcd.setCursor(0, 1);
        lcd.print("Upper Tem: ");
    
        while (1) {
            lcd.setCursor(11, 1);
            setTem = map(analogRead(potPin), 0, 1023, 0, 100);
            lcd.print(setTem);
            if (state == 0)
            {
                EEPROM.write(0, setTem);
                upperTem = setTem;
                lcd.clear();
                return;
            }
        }
    }
    
    • この関数を使用して閾値を設定することができます。この関数に入ると、LCD1602に現在の閾値が表示され、ポテンショメータを使用してこの閾値を変更することができます。この閾値はEEPROMに保存され、ボタンが再び押されると終了します。

  4. monitoringTemp() 関数について。

    void monitoringTemp()
    {
    long a = analogRead(temPin);
    float tempC = beta / (log((1025.0 * 10 / a - 10) / 10) + beta / 298.0) - 273.0;
    float tempF = 1.8 * tempC + 32.0;
    lcd.setCursor(0, 0);
    lcd.print("Temp: ");
    lcd.print(tempC);
    lcd.print(char(223));
    lcd.print("C   ");
    lcd.setCursor(0, 1);
    lcd.print("Upper: ");
    lcd.print(upperTem);
    lcd.print(char(223));
    lcd.print("C   ");
    delay(300);
    if (tempC >= upperTem)
    {
        digitalWrite(buzzerPin, HIGH);
        delay(50);
        digitalWrite(buzzerPin, LOW);
        delay(10);
    }
    else
    {
        digitalWrite(buzzerPin, LOW);
    }
    }
    
    • この関数を使用すると、温度を表示し、アラームを設定することができます。

    • サーミスタの値は読み取られ、その後、式によって摂氏温度に変換され、LCD1602に表示されます。

    • 設定した閾値もLCDに表示されます。

    • 現在の温度が閾値を超えると、ブザーがアラームを鳴らします。

6.4 駐車補助

科学技術の発展に伴い、多くのハイテク製品が車に取り付けられています。その中で、バックアップアシストシステムはその一つです。このプロジェクトでは、超音波モジュール、LCD、LED、およびブザーを使用して、シンプルな超音波駐車補助システムを作成します。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

一式を購入するのが便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

ブザー

BUY

I2C LCD1602

BUY

超音波モジュール

BUY

回路図

_images/image265.png

配線図

_images/backcar.png

コード

注釈

  • 3in1-kit\basic_project\6.4_reversingAid のパスの下の 6.4_reversingAid.ino ファイルを直接開くことができます。

  • または、このコードをArduino IDE 1/2にコピーします。

  • ここでは LiquidCrystal I2C ライブラリが使用されています。 Library Manager からインストールできます。

    _images/lib_liquidcrystal_i2c.png

コードのアップロードが成功すると、現在検出された距離がLCDに表示されます。そして、ブザーは異なる距離に応じて音の周波数を変えます。

注釈

コードと配線が正しいのに、LCDに内容が表示されない場合は、裏側のポテンショメーターを回してみてください。

どのように動作するのか?

このコードを使用すると、オブジェクト間の距離を測定し、LCDディスプレイとブザーを通じてフィードバックを提供するシンプルな距離測定装置を作成できます。

loop() 関数はプログラムの主要なロジックを含み、連続して実行されます。 loop() 関数について詳しく見てみましょう。

  1. 距離を読み取り、パラメータを更新するループ

    loop 内で、コードはまず超音波モジュールで測定された距離を読み取り、その距離に基づいてインターバルパラメータを更新します。

    // 距離を更新
    distance = readDistance();
    
    // 距離に基づいてインターバルを更新
    if (distance <= 10) {
        intervals = 300;
    } else if (distance <= 20) {
        intervals = 500;
    } else if (distance <= 50) {
        intervals = 1000;
    } else {
        intervals = 2000;
    }
    
  2. ビープ音を鳴らすタイミングを確認

    コードは現在の時間と前回のビープ音の時間の差を計算し、その差がインターバル時間以上であれば、ブザーを鳴らして前回のビープ音の時間を更新します。

    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= intervals) {
        Serial.println("Beeping!");
        beep();
        previousMillis = currentMillis;
    }
    
  3. LCDディスプレイを更新

    コードはLCDディスプレイをクリアし、最初の行に"Dis:"と現在の距離(センチメートル)を表示します。

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Dis: ");
    lcd.print(distance);
    lcd.print(" cm");
    
    delay(100);
    

6.5 反応時間ゲーム

私たちの体は、オーディオRT、ビジュアルRT、タッチRTなど、多くの反応時間を持っています。

反応時間は、運転中の通常よりも遅い反応時間が重大な結果を招くことがあるなど、私たちの日常生活に多くの影響を及ぼします。

このプロジェクトでは、3つのボタンと2つのLEDを使用して、私たちの視覚的な反応時間を測定します。

Arduinoのシリアルモニターには「waiting...」というメッセージが表示されます。 Readyボタンを押すと、2つのLEDのうちの1つがランダムな時間間隔後にランダムに点灯する必要があります。テスターができるだけ早く対応するボタンを押すことが重要です。 Arduinoは、LEDが点灯したときと、人が対応するボタンを押したときとの時間差を記録し、Arduinoのシリアルモニターに測定された応答時間を表示します。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

一式をまとめて購入すると確実に便利です。リンクはこちらです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクからそれぞれ購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

ボタン

BUY

回路図

_images/wiring_reaction_game.png

配線図

_images/reaction_game.png

コード

注釈

  • ファイル 6.5_reaction_time.ino3in1-kit\basic_project\6.5_reversingAid のパスで直接開くことができます。

  • また、このコードをArduino IDE 1/2にコピーすることもできます。

  • LiquidCrystal_I2C ライブラリを追加していることを確認してください。詳しいチュートリアルは 5.11 外部ライブラリのインストール を参照してください。

どのように動作するのか?

  1. ボタンとLEDを初期化し、ボタンの状態を読むためにここで2つの割り込みを使用します。

    void setup()
    {
        ...
        attachInterrupt(digitalPinToInterrupt(buttonPin1), pressed1, FALLING);
        attachInterrupt(digitalPinToInterrupt(buttonPin2), pressed2, FALLING);
        ...
    }
    
  2. rstBtn ボタンが押されると、ゲームが再開します。2から5msのランダムな時間で、LEDの1つを点灯させます。

    void loop()
    {
        if (flag == -1 && digitalRead(rstBtn) == LOW) {
            digitalWrite(ledPin1, LOW);
            digitalWrite(ledPin2, LOW);
            Serial.println("Waiting...");
            int randomTime = random(2000, 5000);
            delay(randomTime);
    
            timer = millis();
            flag = randomTime % 2;
            Serial.println("Light!");
    
            if (flag == 0) {
                digitalWrite(ledPin1, HIGH);
            } else if (flag == 1) {
                digitalWrite(ledPin2, HIGH);
            }
        }
        delay(200);
    }
    
    • フラグが-1で rstBtn ボタンが押されたとき、 random() 関数を使って2-5秒のランダムな時間を生成する。

    • この時間は、LEDの点灯制御に使われる。

    • また、2 つの LED の点灯は randomTime % 2 によって 0 と 1 でランダムに生成されます。 flag が 0 の場合、LED1 が点灯します。 1 の場合、LED2 が点灯します。

  3. pressed1() 関数について

    void pressed1() {
        if (flag == -1) {
            return;
        }
        if (flag == 0) {
            int currentTime = millis();
            Serial.print("Correct! Your reaction time is: ");
            Serial.print(currentTime - timer);
            Serial.println(" ms");
        } else if (flag == 1) {
            Serial.println("Wrong Click!");
        }
        flag = -1;
    }
    

    これはボタン1が押されたときに起動される関数である。ボタン1が押されたとき、このときフラグが0であれば応答時間が出力され、そうでなければ押下エラーが促される。

  4. pressed2() 関数について

    void pressed2() {
        if (flag == -1) {
            return;
        }
        if (flag == 1) {
            int currentTime = millis();
            Serial.print("Correct! Your reaction time is: ");
            Serial.print(currentTime - timer);
            Serial.println(" ms");
        } else if (flag == 0) {
            Serial.println("Wrong Click!");
        }
        flag = -1;
    }
    

    これはボタン2が押されたときに起動される関数である。ボタン2が押されたとき、このときフラグが1であれば応答時間が出力され、そうでなければ押下エラーが促される。

6.6 数字を当てるゲーム

数字を当てるゲームは、楽しいパーティーゲームで、友人と交代で数字(0~99)を入力します。数字を入力するごとに範囲が狭まり、正解すると、そのプレイヤーは負けとなり、罰を受けます。例えば、選ばれたラッキーナンバーが見えない51で、プレイヤー1が50を入力すると、数字の範囲は50~99になります。プレイヤー2が70を入力すると、数字の範囲は50~70になります。プレイヤー3が51を入力すると、彼または彼女が負け者となります。ここでは、IRリモートコントローラーで数字を入力し、LCDで結果を表示します。

必要な部品

このプロジェクトには、以下の部品が必要です。

一式をまとめて購入することが便利です。リンクはこちらです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクからそれぞれ購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

I2C LCD1602

BUY

IRレシーバー

-

回路図

この例では、LCD1602と赤外線受信モジュールの配線は以下の通りです。

_images/circuit_guess_number.png

配線図

_images/wiring_guess_number.png

コード

注釈

  • ファイル 6.6.guess_number.ino は、 3in1-kit\basic_project\6.6.guess_number のパスから直接開くことができます。

  • また、このコードをArduino IDE 1/2にコピーしても良いです。

  • ここでは、 LiquidCrystal I2CIRremoteライブラリ を使用しています。 Library Manager からインストールすることができます。

コードが正しくアップロードされると、LCD1602にウェルカムメッセージが表示されます。画面上の範囲のヒントに従って数字を押すと、表示がどんどん狭くなり、ラッキーナンバーを当てるまで続けます。

注釈

コードと配線が正しければ、しかし、LCDが表示されない場合、背面の可変抵抗を回してコントラストを調整することができます。

どのように動作するのか?

数字を当てるゲームを面白く、リアルにするために、以下の機能を実現する必要があります:

  1. ゲームを開始やリセットすると、ラッキーナンバーが表示され、数字の範囲ヒントが0〜99にリセットされます。

  2. LCDは入力中の数字と数字の範囲ヒントを表示します。

  3. 2桁を入力すると、自動的に結果の判断が現れます。

  4. 1桁の数字を入力した場合、結果の判断を開始するためにCYCLEキー(コントローラの中央のキー)を押すことができます。

  5. 答えが当てられなかった場合、新しい数字の範囲ヒントが表示されます(ラッキーナンバーが51で、50を入力すると、数字の範囲ヒントが50~99に変わります)。

  6. ラッキーナンバーが当てられた後、ゲームは自動的にリセットされ、プレイヤーは新しいラウンドをプレイできます。

  7. POWERボタン(左上のボタン)を直接押すことでゲームをリセットすることができます。

結論として、プロジェクトのワークフローは、フローチャートに示されています。

_images/Part_three_4_Example_Explanation.png

カープロジェクト

たくさんの異なるスマートロボットカーを見たことがあると思いますが、基本的な機能は似ています。基本の動き、障害物回避、ライン追従、フォロー、リモコンでの操作などです。

ここでは、最もシンプルな構造でスマートロボットカーを組み立てますが、上記のすべての機能も実現可能です。さらに、携帯電話で操作することもできます。チュートリアルについては、 8. IoT カー を参照してください。

組み立て手順

車の組み立て

以下の手順に従って、車の組み立てを完了させてください。

  1. アクリルの保護フィルムを取り外してください。

    _images/IMG_6509.JPG
  2. 画像に示されているように、ボードをテーブルに置いてください。R3ボードと同じ穴がある側をAと呼び、裏側をBと呼ぶことにします。これにより、組み立て中のミスを避けるのに役立ちます。

    _images/IMG_6518.jpg
  3. B側に向け、M3x30mmのネジとM3のナットを使用してTTモーターを取り付けます。注意点は2つ: 1 - 出力軸はコウモリの形をした側を向いていること、2 - モーターケーブルは内側を向いていること。

    _images/IMG_6554.JPG
  4. 別のTTモーターを取り付けます。出力軸とケーブルの方向にも同様の注意が必要です。

    _images/IMG_6558.jpg
  5. M3x6mmのネジを使用して、下に示されている位置にM3x12mmのスペーサーを取り付けます。

    _images/IMG_6568.jpg
  6. M3x6mmのネジを使用して、万能車輪を取り付けてください。

    _images/IMG_6572.jpg
  7. 2つの車輪を取り付けると、車の基本構造が完成します。

    _images/IMG_6582.jpg
  8. M3x6mmのネジで車の後部にM3x12mmのブラケットを取り付けます。

    _images/IMG_6599.jpg
  9. M3x6mmのネジでL298Nモジュールを取り付けてください。

    _images/IMG_6611.jpg
  10. 以下に示されている位置にM3x6mmのネジでM3x24mmのスペーサーを取り付けます。

    _images/IMG_6617.jpg
  11. M3x6mmのネジでR3ボードを取り付けてください。

    _images/IMG_6630.jpg
  12. M3x10mmのネジとM3のナットを使用して、2つのIR障害物モジュールを組み立ててください。

    _images/IMG_6649.jpg
  13. B側に向けて、4つのM3x6mmのネジと2つのM3x24mmのスペーサーを使用して、ライントラックモジュールを取り付けます。

    _images/IMG_6655.jpg
  14. 9Vのバッテリーにベルクロを貼り、バッテリークリップを取り付けてください。

    _images/IMG_6481.jpg
  15. バッテリーを固定するために、車にベルクロのもう一方の部分を貼り付けてください。

    _images/IMG_6666.jpg
  16. A側に戻して、ブレッドボードを車の前部に取り付けます。その後、プロジェクトに必要に応じて、ブレッドボードに異なるコンポーネント(例:超音波モジュール)を追加できます。

    _images/IMG_6675.jpg
  17. 車を動かすためには、配線とコードの記述も必要です。これに関する詳細は、後続のセクションで記述されます。

プロジェクト

以下は、Arduino IDEでC言語でプログラムされたカープロジェクトの一部です。Arduinoに特に慣れていない場合は、 Arduinoを始めよう を参照してください。

次のプロジェクトは、プログラムの難易度の順に記述されています。順番にこれらの資料を読むことをおすすめします。

Scratchで車のプログラムをしたい場合は、 Scratchで遊ぼう を参照してください。

1. 移動

_images/l298n_pin.jpg

プログラミングを始める前に、L298Nの動作原理を確認しましょう。

IN1~IN4はL298Nモジュールの入力、OUT1~OUT4は出力です。

これらを使用する簡単な方法は:IN1に高レベルを入力すると、OUT1は高レベルを出力します。IN1に低レベルを入力すると、OUT1は低レベルを出力します。 モータの両端をOUT1とOUT2に接続し、IN1とIN2に逆のレベル信号を入力すると、モータが回転します。OUT3とOUT4も同じ方法で使用できます。

ENAとIN1,IN2の間の動作関係は以下の通りです。

ENA

IN1

IN2

右モータ(A)の状態

0

X

X

停止

1

0

0

ブレーキ

1

0

1

時計回りに回転

1

1

0

反時計回りに回転

1

1

1

ブレーキ

ENBとIN3,IN4の間の動作関係は以下の通りです。

ENB

IN3

IN4

左モータ(B)の状態

0

X

X

停止

1

0

0

ブレーキ

1

0

1

時計回りに回転

1

1

0

反時計回りに回転

1

1

1

ブレーキ

必要な部品

このプロジェクトでは、以下の部品が必要です。

全体のキットを購入するのは確かに便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクからそれぞれの部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

L298N モジュール

BUY

前進

L298Nモジュールの入力を直接12VとGNDに接続することで、車を動かしてみましょう。

  1. R3ボード、L298Nモジュール、2つのモータを接続します。

L298N

R3ボード

モーター

12V

5V

GND

GND

OUT1

右モータの黒線

OUT2

右モータの赤線

OUT3

左モータの黒線

OUT4

左モータの赤線

_images/1.move_1.png
  1. IN2とIN3を12Vに、IN1とIN4をGNDに接続すると、車が前進するのがわかります。

_images/1.move_4.png

両方のモータが前進しない場合、次の状況が発生した場合は、2つのモータの配線を再調整する必要があります。

  • 両方のモータが同時に後退する場合(左モータが時計回り、右モータが反時計回り)、左と右のモータの配線を同時に交換します。OUT1とOUT2、OUT3とOUT4を交換します。

  • 左モータが後退する場合(時計回り)、左モータのOUT3とOUT4の配線を交換します。

  • 右モータが後退する場合(反時計回り)、右モータのOUT1とOUT1の配線を交換します。

後退

IN2とIN3をGNDに、IN1とIN4を12Vに接続すると、車が後退するのがわかります。

_images/1.move_back.png

左折

車を左に曲げたい場合、すなわち、両方のモータを反対の方向に回転させる場合、IN1を12Vに、IN2をGNDに、IN3をGNDに、IN4を12Vに接続します。

_images/1.move_left.png

右折

車を右に曲げたい場合、すなわち、両方のモータを反対の方向に回転させる場合、IN1をGNDに、IN2を12Vに、IN3を12Vに、IN4をGNDに接続します。

_images/1.move_right.png

停止

モーターを停止するには、同じ側の入力を同時に12VまたはGNDに接続します。例えば、IN1とIN2を同時に12Vまたは5Vに接続し、IN3とIN4も同様に接続します。

これはもちろん理論的なもので、後にコードで制御する際に必要となる。ここで、車への電源供給を停止することができます削除します。

2. コードでの移動

前のプロジェクトでは、L298Nの入力の異なるレベルの信号を使用してモーターの操作を制御しました。

プログラムを通じてレベル信号を変更することで、車の動きを柔軟に制御することができます。 ここでは、L298NのIN1〜IN4ピンをR3ボードの5、6、9、10ピンに順に接続します。

必要な部品

このプロジェクトには以下の部品が必要です。

キット全体を購入すると非常に便利です。リンクは以下のとおりです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクからそれぞれ個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

配線図

L298Nモータードライバモジュールは、DCモーターとステッピングモーターを駆動するための高出力モータードライバモジュールです。L298Nモジュールは、最大で4台のDCモーター、または方向と速度の制御が可能な2台のDCモーターを制御することができます。

以下の図に従って、L298NモジュールとR3ボードの間にワイヤーを接続してください。

L298N

R3ボード

モーター

IN1

5

IN2

6

IN3

9

IN4

10

OUT1

右モーターの黒ワイヤー

OUT2

右モーターの赤ワイヤー

OUT3

左モーターの黒ワイヤー

OUT4

左モーターの赤ワイヤー

_images/car_motor1.jpg

コード

注釈

  • 3in1-kit\car_project\2.move のパスの下の 2.move.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーしてください。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードをアップロードすると、車はそれぞれ2秒間で前進、後退、左右に移動します。

どのように動作するのか?

このプロジェクトは基本的に前回のものと同じで、IN1からIN4までの異なるレベルを与えることで車を前進、後退、左右に動かし、停止させるものです。

  1. IN1~IN4のピン配線を初期化する。

    const int in1 = 5;
    const int in2 = 6;
    const int in3 = 9;
    const int in4 = 10;
    
    void setup() {
        pinMode(in1, OUTPUT);
        pinMode(in2, OUTPUT);
        pinMode(in3, OUTPUT);
        pinMode(in4, OUTPUT);
    }
    
  2. 左右のモーターの回転を制御するためにIN1~IN4を異なるハイまたはローレベルに設定し、それらを個別の関数にカプセル化する。

    void moveForward() {
        digitalWrite(in1, LOW);
        digitalWrite(in2, HIGH);
        digitalWrite(in3, HIGH);
        digitalWrite(in4, LOW);
    }
    
    void moveBackward() {
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        digitalWrite(in3, LOW);
        digitalWrite(in4, HIGH);
    }
    ...
    
  3. loop() でこれらの関数を呼び出す。

    void loop() {
        moveForward();
        delay(2000);
        stopMove();
        delay(500);
    
        moveBackward();
        delay(2000);
        stopMove();
        delay(500);
    ...
    
  • digitalWrite(pin, value)

    • pin: Arduinoのピン番号。

    • value: HIGHまたはLOW。

    デジタルピンにHIGHまたはLOWの値を書き込む。ピンが pinMode()OUTPUT として設定されていれば、その電圧は対応する値に設定されます:HIGHの場合は5V(または3.3Vボードで3.3V)、LOWの場合は0V(グラウンド)。

  • pinMode(pin, mode)

    • pin: モードを設定するArduinoのピン番号。

    • mode: INPUT、OUTPUT、またはINPUT_PULLUP。

    指定されたピンを入力または出力として動作するように設定します。

  • delay(ms)

    • ms: 一時停止するミリ秒数。許可されるデータタイプ: unsigned long。

    パラメータとして指定された時間(ミリ秒)の間、プログラムを一時停止します。(1秒には1000ミリ秒があります。)

3. スピードアップ

デジタル信号(HIGH/LOW)に加えて、L298Nの入力はPWM信号も受け取ることができ、これにより出力の速度を制御することができます。

つまり、 AnalogWrite() を使用して車の移動速度を制御することができます。

このプロジェクトでは、車が前進する速度を徐々に変えるようにしています。最初は加速し、その後は減速します。

配線図

このプロジェクトの配線は、 2. コードでの移動 と同じです。

コード

注釈

  • 3in1-kit\car_project\3.speed_up のパスの下で 3.speed_up.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

プログラムが実行されると、車は徐々に加速し、その後徐々に減速します。

どのように動作するのか?

このプロジェクトの目的は、IN1~IN4に異なるPWMの値を書き込むことで、車の前進速度を制御することです。

  1. for() 文を使用して、0から255までの値を5のステップで speed に与え、車の前進速度の変化を確認します。

    void loop() {
        for(int i=0;i<=255;i+=5){
            moveForward(i);
            delay(500);
        }
        for(int i=255;i>=0;i-=5){
            moveForward(i);
            delay(500);
        }
    }
    
  2. moveForward() 関数について。

    2. コードでの移動 ではIN1~IN4に直接高/低のレベルを与えていましたが、ここでは高いレベルを与える必要がある場所に speed パラメータを渡します。

    void moveForward(int speed) {
        analogWrite(in1, 0);
        analogWrite(in2, speed);
        analogWrite(in3, speed);
        analogWrite(in4, 0);
    }
    

for 文は、波括弧で囲まれた文のブロックを繰り返し実行するために使用されます。増分カウンタは通常、ループを増分および終了するために使用されます。

for (initialization; condition; increment) {
// statement(s);
}
  • initialization: 最初に一度だけ実行されます。

  • condition: ループを通るたびに、conditionがテストされます。trueであれば、文のブロックと増分が実行され、その後で再びconditionがテストされます。conditionがfalseになると、ループは終了します。

  • increment: conditionがtrueのとき、ループを通じて実行されます。

4. ラインフォロー

この車にはライントラックモジュールが装備されており、黒いラインに沿って車を走らせることができます。

ラインフォローモジュールが黒いラインを検出すると、右のモーターが回転し、左のモーターは回転しないため、車は左前方に一歩移動します。 車が移動すると、ラインモジュールはラインから外れ、次に左のモーターが回転し、右のモーターは回転しないため、車は右に一歩移動してラインに戻ります。 上記の2つのステップを繰り返すことで、車は黒いラインに沿って移動します。

プロジェクトを開始する前に、黒いラインテープでカーブマップを作成する必要があります。推奨されるラインの幅は0.8-1.5cmで、曲がり角の角度は90度未満であってはなりません。

必要な部品

このプロジェクトには以下の部品が必要です。

全セットを購入するのは確かに便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

ライン追跡モジュール

BUY

配線図

これはデジタルライントラッキングモジュールで、黒いラインが検出されると1を出力し、白いラインが検出されると0の値を出力します。さらに、モジュール上のポテンショメータを通じて感知距離を調整することができます。

以下の図に従って回路を組み立ててください。

ライントラッキングモジュール

R3ボード

S

2

V+

5V

G

GND

_images/car_track.jpg

モジュールの調整

プロジェクトを開始する前に、モジュールの感度を調整する必要があります。

上記の図に従って配線を行い、R3ボードに電源を供給します(USBケーブルを直接接続するか、9Vのバッテリーボタンケーブルを使用)。コードをアップロードしないでください。

テーブルに黒い電気テープを貼り、その上にカートを置きます。

モジュールの信号LEDを観察して、白いテーブル上で点灯し、黒いテープ上で消灯することを確認します。

もしそうでない場合、モジュール上のポテンショメータを調整して、上記の効果を得るようにします。

_images/line_track_cali.JPG

コード

注釈

  • 3in1-kit\car_project\4.follow_the_line のパスの下で 4.follow_the_line.ino ファイルを開きます。

  • あるいは、このコードを Arduino IDE にコピーします。

  • また、 Arduino Web Editor を通じてコードをアップロードすることもできます。

R3ボードにコードをアップロードした後、車の下のライントラッキングモジュールを黒いラインに合わせると、車がラインを追従するのを見ることができます。

どのように動作するのか?

このコードでは、ライントラックモジュールの値に応じて、2つのモーターを微調整して左右に回転させることで、車が黒いラインを追従するのを見ることができます。

  1. ライントラッキングモジュールのピン定義を追加し、 INPUT として設定します。ここではシリアルモニタも初期化し、ボーレートを9600bpsに設定します。

    ...
    const int lineTrack = 2;
    Serial.begin(9600);
    void setup() {
        ...
        pinMode(lineTrack, INPUT);
    }
    
  2. ライントラッキングモジュールの値を読み取ります。もし値が1ならば、車を左に前進させます。それ以外の場合は、右に前進させます。また、右上の虫眼鏡アイコンをクリックしてシリアルモニタを開くことで、USBケーブルを抜く前に黒と白のライン上でのライントラッキングモジュールの値の変化を見ることができます。

    void loop() {
    
        int speed = 150;
    
        int lineColor = digitalRead(lineTrack); // 0:白 1:黒
        Serial.println(lineColor);
        if (lineColor) {
            moveLeft(speed);
        } else {
            moveRight(speed);
        }
    }
    
  3. moveLeft() および moveRight() 関数について。

    プロジェクト 2. コードでの移動 の左右のターン機能とは異なり、ここでは小さな左右のターンだけが必要です。したがって、IN2またはIN3の値を毎回調整するだけでよいです。例えば、左前に移動する場合( moveLeft() )、IN2のスピードを設定して、他のすべてを0に設定するだけで、右のモーターは時計回りに回転し、左のモーターは動かないようになります。

    void moveLeft(int speed) {
        analogWrite(in1, 0);
        analogWrite(in2, speed);
        analogWrite(in3, 0);
        analogWrite(in4, 0);
    }
    
    void moveRight(int speed) {
        analogWrite(in1, 0);
        analogWrite(in2, 0);
        analogWrite(in3, speed);
        analogWrite(in4, 0);
    }
    
  • Serial

    Arduinoボードとコンピュータや他のデバイスとの通信に使用されます。

    • Serial.begin(): シリアルデータ伝送のビットレート(ボーレート)を設定します。

    • Serial.println(): データをシリアルポートに人間が読めるASCIIテキストとして印刷し、次にキャリッジリターン文字(ASCII 13、または 'r')および改行文字(ASCII 10、または 'n')が続きます。

  • if else

    if else ステートメントは、基本的なifステートメントよりもコードの流れをより制御することができます。複数のテストをグループ化できます。

5. 障害物回避モジュールで遊ぶ

車の前部には2つの赤外線障害物回避モジュールが取り付けられており、近くの障害物を検出するのに使用できます。

このプロジェクトでは、車は自由に前進することができ、障害物に遭遇した場合、それを回避して他の方向に移動を続けることができます。

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

全てのキットをまとめて購入するのは非常に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから別々に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

障害物回避モジュール

BUY

配線図

障害物回避モジュールは、距離を調整可能な赤外線近接センサーであり、障害物を検出した場合には通常の出力は高く、低くなります。

以下の図に従って回路を作成してください。

左IRモジュール

R3ボード

OUT

8

GND

GND

VCC

5V

右IRモジュール

R3ボード

OUT

7

GND

GND

VCC

5V

_images/car_avoid.jpg

モジュールの調整

プロジェクトを開始する前に、モジュールの検出距離を調整する必要があります。

上記の図に従って配線し、R3ボードに電源を供給してください(USBケーブルを直接接続するか、9Vの電池ケーブルを取り付けることによって)。コードをアップロードせずに、IR障害物回避の前に約5cmのノートや他の平らな物を置きます。

次に、モジュールの信号インジケータがちょうど点灯するまで、モジュール上のポテンショメータをドライバーで回して、最大検出距離を5cmに調整します。

もう一つの赤外線モジュールも同じ方法で調整します。

_images/ir_obs_cali.jpg

コード

注釈

  • 3in1-kit\car_project\5.obstacle_avoidance_module のパスの下で 5.obstacle_avoidance_module.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされると、車は前進します。左の赤外線モジュールが障害物を検出すると、車は左に後退します。右の赤外線モジュールが障害物を検出すると、車は右に後退します。両方の側面で障害物を検出すると、車はまっすぐ後退します。

どのように動作するか?

このプロジェクトは、左右の赤外線障害物回避モジュールの値に基づいて、車に適切な動作をさせるものです。

  1. 2つの障害物回避モジュールのピン定義を追加します。ここでは、 INPUT に設定されています。

    ...
    const int rightIR = 7;
    const int leftIR = 8;
    
    void setup() {
    ...
    
    //IR障害物
        pinMode(leftIR, INPUT);
        pinMode(rightIR, INPUT);
    }
    
  2. 左右の赤外線モジュールの値を読み取り、車に対応する動作をさせます。

    void loop() {
    
        int left = digitalRead(leftIR);   // 0: 障害物あり  1: 空
        int right = digitalRead(rightIR);
        int speed = 150;
    
        if (!left && right) {
            backLeft(speed);
        } else if (left && !right) {
            backRight(speed);
        } else if (!left && !right) {
            moveBackward(speed);
        } else {
            moveForward(speed);
        }
    }
    
    • 左のIRモジュールが0(障害物検出)で、右のIRモジュールが1の場合、車は左に後退します。

    • 右のIRモジュールが0(障害物検出)の場合、車は右に後退します。

    • 2つのIRモジュールが同時に障害物を検出すると、車は後退します。

    • それ以外の場合、車は前進し続けます。

  3. backLeft() 関数について。

    右のモーターが反時計回りに回転し、左のモーターが回転していない場合、車は左に後退します。

    void backLeft(int speed) {
        analogWrite(in1, speed);
        analogWrite(in2, 0);
        analogWrite(in3, 0);
        analogWrite(in4, 0);
    }
    
  4. backLeft() 関数について。

    左のモーターが時計回りに回転し、右のモーターが回転していない場合、車は右に後退します。

    void backRight(int speed) {
        analogWrite(in1, 0);
        analogWrite(in2, 0);
        analogWrite(in3, 0);
        analogWrite(in4, speed);
    }
    
  • &&: 両方のオペランドが真の場合にのみ、論理ANDは真を返します。

  • !: オペランドが偽の場合、論理NOTは真を返します。

6. 超音波モジュールで遊ぶ

5. 障害物回避モジュールで遊ぶ プロジェクトでは、2つの赤外線障害物回避モジュールを障害物回避のために使用していますが、IR障害物回避モジュールの検出距離は短いため、車が障害物を避けるのが遅くなる可能性があります。

このプロジェクトでは、超音波モジュールを使って遠距離の検出を行い、車がもっと遠くの障害物を感知して判断できるようにします。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

全体のキットを購入すると非常に便利です。リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

超音波モジュール

BUY

配線図

超音波センサモジュールは、超音波を使って物体までの距離を測定する機器です。 2つのプローブがあります。1つは超音波を送信し、もう1つは超音波を受信して送受信の時間を距離に変換し、装置と障害物との間の距離を検出します。

以下の図に従って回路を組み立ててください。

超音波モジュール

R3ボード

Vcc

5V

Trig

3

Echo

4

Gnd

GND

_images/car_ultrasonic.jpg

コード

注釈

  • 3in1-kit\car_project\6.ultrasonic_module のパスの下で 6.ultrasonic_module.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされた後、車を壁に向けてください。距離が遠すぎる場合は前進し、近すぎる場合は後退し、安全な距離であれば停止します。

どのように動作するのか?

このプロジェクトは、超音波モジュールから読み取った距離に基づいて、車に適切な動作をさせるものです。

  1. 超音波モジュールのピン定義を追加します。 trigPin は超音波を送信するために使用され、 OUTPUT に設定されます。 echoPin は超音波を受信するために INPUT に設定されます。

    ...
    const int trigPin = 3;
    const int echoPin = 4;
    
    void setup() {
    ...
    
    //超音波
        pinMode(echoPin, INPUT);
        pinMode(trigPin, OUTPUT);
    }
    
  2. まず、超音波モジュールから取得した距離の値を読み取ります。距離が25より大きい場合、車を前進させます。距離が2~10cmの間であれば、車を後退させます。それ以外の場合(10~25の間)、停止します。

    void loop() {
        float distance = readSensorData();
        if (distance > 25) {
            moveForward(200);
        }
        else if (distance < 10 && distance > 2) {
            moveBackward(200);
        } else {
            stopMove();
        }
    }
    
  3. readSensorData() 関数について。

    超音波モジュールの送信機は、2usごとに10usの正方形の波形信号を送信し、範囲内に障害物がある場合、受信機は高レベル信号を受信します。 pulseIn() 関数を使用して、送信から受信までの時間を記録し、音速340m/sで除算し、さらに2で除算すると、このモジュールと障害物との距離がcm単位で得られます。

    float readSensorData() {
        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(trigPin, LOW);
        float distance = pulseIn(echoPin, HIGH) / 58.00; //(340m/s*1us)/2に相当。
        return distance;
    }
    
  • pulseIn(pin, value)

    • pin: パルスを読みたいArduinoのピンの番号。許可されているデータ型: int。

    • value: 読みたいパルスの種類:HIGHまたはLOW。許可されているデータ型: int。

    ピン上でのパルス(HIGHまたはLOW)を読み取ります。例えば、valueがHIGHの場合、 pulseIn() は、ピンがLOWからHIGHになるのを待ち、タイミングを開始し、次にピンがLOWになるのを待ち、タイミングを停止します。

7. 手を追いかける車

この車をペットと考えてください。あなたが手を振ると、その車はあなたのもとへと駆けてきます。

必要な部品

このプロジェクトでは、以下の部品が必要です。

キットを購入するのが便利です。以下がリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

下記のリンクから部品を個別に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

超音波モジュール

BUY

障害物回避モジュール

BUY

配線図

超音波モジュールと2つのIR障害物回避モジュールを同時に接続します。

R3ボードに超音波を次のように接続します。

超音波モジュール

R3ボード

Vcc

5V

Trig

3

Echo

4

Gnd

GND

2つのIR障害物回避モジュールのR3ボードへの配線は次の通りです。

左IRモジュール

R3ボード

OUT

8

GND

GND

VCC

5V

右IRモジュール

R3ボード

OUT

7

GND

GND

VCC

5V

_images/car_avoid_ultrasonic.jpg

コード

注釈

  • 3in1-kit\car_project\7.follow_your_hand のパスの下で 7.follow_your_hand.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーペーストします。

  • あるいは、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされたら、車を地面に置きます。車の前に手を5〜10cm程度近づけると、車は手の方向に進むように追従します。IR障害物モジュールの両側に手を近づけると、対応する方向にも曲がります。

どのように動作するのか?

このプロジェクトは以前の二つのプロジェクト、 6. 超音波モジュールで遊ぶ5. 障害物回避モジュールで遊ぶ の組み合わせですが、実現される効果は異なります。以前の2つのプロジェクトは障害物を後ろで検出していましたが、ここでは手が前方または回転方向に追従するのを検出します。 このプロジェクトのワークフローは次のとおりです。

  • 超音波モジュールによって検出された距離と両方の赤外線モジュールの値を読み取ります。

  • 距離が5〜10cmの場合、車を手に合わせて動かします。

  • 左のIRモジュールが手を検出した場合、左に曲がります。

  • 右のIRモジュールが手を検出した場合、右に曲がります。

  • 赤外線モジュールも超音波モジュールも手を検出しない場合、車を停止させます。

void loop() {

    float distance = readSensorData();

    int left = digitalRead(leftIR);   // 0: 遮断 1: 空
    int right = digitalRead(rightIR);
    int speed = 150;

    if (distance>5 && distance<10){
        moveForward(speed);
    }
    if(!left&&right){
        turnLeft(speed);
    }else if(left&&!right){
        turnRight(speed);
    }else{
        stopMove();
    }
}

8. 自動運転車

このプロジェクトは、6. 超音波モジュールで遊ぶ5. 障害物回避モジュールで遊ぶ の二つのプロジェクトを組み合わせたものです。 2つの赤外線障害物回避モジュールは、短距離やエッジの検出を行い、 超音波モジュールは長距離検出を行って、自由な運転過程で車が障害物にぶつからないことを確認します。

必要な部品

このプロジェクトでは、以下の部品が必要です。

全体のキットを購入するのが確かに便利です、リンクはこちらです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

超音波モジュール

BUY

障害物回避モジュール

BUY

配線図

超音波モジュールと2つのIR障害物回避モジュールを同時に接続します。

超音波をR3ボードに以下のように配線します。

超音波モジュール

R3ボード

Vcc

5V

Trig

3

Echo

4

Gnd

GND

2つのIR障害物回避モジュールのR3ボードへの配線は以下の通りです。

左IRモジュール

R3ボード

OUT

8

GND

GND

VCC

5V

右IRモジュール

R3ボード

OUT

7

GND

GND

VCC

5V

_images/car_avoid_ultrasonic.jpg

コード

注釈

  • 3in1-kit\car_project\8.self_driving_car のパスの下の 8.self_driving_car.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • または、 Arduino Web Editor を通じてコードをアップロードします。

コードが正常にアップロードされると、車は自由に走り始めます。両側のIR障害物モジュールが障害物を検出すると、緊急回避のために逆方向に移動します。もし車の正面2~10cm以内に障害物がある場合、左にバックアップして方向を調整し、その後前進します。

どのように動作するのか?

このプロジェクトのワークフローは以下の通りです。

  • 左右のIR障害物回避モジュールの値を優先して読み取ります。

  • 左のIRモジュールが0(障害物検出)、右のIRモジュールが1の場合、車を左にバックアップさせます。

  • 右のIRモジュールが0(障害物検出)の場合、車を右にバックアップさせます。

  • 2つのIRモジュールが同時に障害物を検出する場合、車はバックアップします。

  • それ以外の場合は、超音波モジュールによって検出された距離を読み取ります。

  • 距離が50cm以上の場合、車を前進させます。

  • 距離が2-10cmの場合、転回する前に車を後退させます。

  • 距離が10-50cmの場合、車を低速で前進させます。

void loop() {

    int left = digitalRead(leftIR);   // 0: 遮断 1: 空
    int right = digitalRead(rightIR);

    if (!left && right) {
        backLeft(150);
    } else if (left && !right) {
        backRight(150);
    } else if (!left && !right) {
        moveBackward(150);
    } else {
        float distance = readSensorData();
        Serial.println(distance);
        if (distance > 50) { // 安全
            moveForward(200);
        } else if (distance < 10 && distance > 2) { // 注目
            moveBackward(200);
            delay(1000);
            backLeft(150);
            delay(500);
        } else {
            moveForward(150);
        }
    }
}

9. リモートコントロール

このキットには、IRレシーバーが含まれているので、IRリモートコントロールを使用して車の動きをコントロールすることができます。

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

キット全体を購入するのが便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクからそれぞれのアイテムを購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

LED

BUY

IRレシーバー

-

配線図

以下の図に従って回路を組み立ててください。

IR レシーバー

R3 ボード

OUT

12

GND

GND

VCC

5V

LED

R3 ボード

アノード(長いピン)

13

カソード

GND

_images/car_remote.png

コード

注釈

  • 3in1-kit\car_project\9.remote_control のパスにある 9.remote_control.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • ここでは IRremote ライブラリが使用されています。 Library Manager からインストールできます。

    _images/lib_irremote.png

コードのアップロードが成功したら、リモートコントロールのボタンを押すと、LEDが一回点滅して信号が受信されたことを示し、ボタンの指示に従って車が動きます。以下のキーを押して車を操作することができます。

  • +:加速

  • -:減速

  • 1:左前方へ進む

  • 2:前進

  • 3:右前方へ進む

  • 4:左折

  • 6:右折

  • 7:左後方へ後退

  • 8:後退

  • 9:右後方へ後退

どのように動作するのか?

このプロジェクトの効果は、IRリモートコントロールのキー値を読み取り、車を動かすことです。さらに、ピン13のLEDが点滅して、赤外線信号の受信が成功したことを示します。

  1. IRremote ライブラリをインポートします。 Library Manager からインストールできます。

    #include <IRremote.h>
    
    const int IR_RECEIVE_PIN = 12;  // IRセンサのピン番号を定義する
    
  2. ボーレート9600でシリアル通信を初期化します。指定されたピン(IR_RECEIVE_PIN)でIRレシーバを初期化し、LEDフィードバックを有効にします(該当する場合)。

    ...
    
    void setup() {
    
        ...
        //IR リモート
        IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // IRレシーバを開始する
        Serial.println("REMOTE CONTROL START");
    
    }
    
  3. リモートコントロールのキーを押すと、赤外線受信機はどのキーが押されたかを知り、車は対応するキー値に従って動きます。

    void loop() {
    
        if (IrReceiver.decode()) {
            //    Serial.println(results.value,HEX);
            String key = decodeKeyValue(IrReceiver.decodedIRData.command);
            if (key != "ERROR") {
                Serial.println(key);
    
                if (key == "+") {
                    speed += 50;
                } else if (key == "-") {
                    speed -= 50;
                } else if (key == "2") {
                    moveForward(speed);
                    delay(1000);
                ...
                }
                IrReceiver.resume();  // 次の値の受信を有効にする
        }
    }
    
    • IR信号が受信され、正常にデコードされたかどうかを確認する。

    • IRコマンドをデコードし、カスタム decodeKeyValue() 関数を使用して key に保存する。

    • デコードされた値がエラーでないかを確認します。

    • デコードされたIR値をシリアルモニタに表示する。

    • 次の信号のIR信号受信を再開する。

10. ワンタッチスタート

このプロジェクトでは、これまでのプロジェクト(ライン追従、追跡、障害物回避、自動運転など)を統合しました。リモコンのボタンで切り替えることができるので、車をスタートしてすべての機能を一度に体験できます。

配線図

_images/car_all.png

コード

注釈

  • 3in1-kit\car_project\10.one_touch_start のパスの下の 10.one_touch_start.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • ここでは IRremote ライブラリが使用されています。 ライブラリマネージャー からインストールできます。

    _images/lib_irremote.png

コードが正常にアップロードされた後、IRレシーバーがリモートコントロールからの信号を受信するたびに、LEDが3回急速に点滅します。カートを操作するための以下のキーを押すことができます。

  • +: 加速

  • -: 減速

  • 1: 左前方に移動

  • 2: 前進

  • 3: 右に移動

  • 4: 左を向く

  • 6: 右を向く

  • 7: 左に後退

  • 8: 後退

  • 9: 右に後退

  • CYCLE: ラインを追従

  • U/SD: 自動運転

  • ▷▷|: 超音波モジュールを使用した障害物回避

  • |◁◁: IR障害物モジュールを使用した障害物回避

  • EQ: 手を追跡

  • 0: 停止

11. 速度のキャリブレーション

車を前進させる際、車がまっすぐ進まないことがあるかもしれません。 これは、工場での2つのモーターの速度が同じでないためです。 しかし、2つのモーターにオフセットを書き込むことで、それらの回転速度を一致させることができます。

このプロジェクトでは、オフセットを EEPROM に保存する方法を学びます。この目的は、キャリブレーション後に、すべてのプロジェクトがEEPROMから直接オフセット値を取得できるようにするためです。 これにより、車はスムーズに直線で進むことができます。

配線図

このプロジェクトの配線は 2. コードでの移動 と同じです。

遊び方は?

  1. 3in1-kit\car_project\11.speed_calibration のパス下の 11.speed_calibration.ino ファイルを開く。または、このコードを Arduino IDE にコピーします。

  1. コードが正常にアップロードされたら、車を9Vのバッテリーに接続し、地面に置いて前進させ、どちら側にオフセットされているかを確認します。

  • 車が左前方に移動する場合、右モーターの速度が速すぎることを意味し、減速する必要があります。

    EEPROM.write(1, 100) // 1は右モータを意味し、100は速度が100%であることを意味します。実際の状況に応じて90、95などに設定することができます。
    
  • 車が右に移動する場合、左モーターの速度が速すぎることを意味し、減速する必要があります。

    EEPROM.write(0, 100) // 0は左モーターを意味し、100は速度が100%であることを意味します。実際の状況に応じて90、95などに設定することができます。
    
  1. コードを変更した後、R3ボードにコードをアップロードして効果を確認します。車がほぼまっすぐになるまで上記の手順を繰り返します。

  2. このオフセットは EEPROM に記録されます。他のプロジェクトで使用する際にこのオフセットを読み込むだけでよく、 5. 障害物回避モジュールで遊ぶ が一例として取られます。

#include <EEPROM.h>

float leftOffset = 1.0;
float rightOffset = 1.0;

const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

const int rightIR = 7;
const int leftIR = 8;

void setup() {
    Serial.begin(9600);

    //motor
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);

    //IR obstacle
    pinMode(leftIR, INPUT);
    pinMode(rightIR, INPUT);

    leftOffset = EEPROM.read(0) * 0.01;//read the offset of the left motor
    rightOffset = EEPROM.read(1) * 0.01;//read the offset of the right motor
}

void loop() {

    int left = digitalRead(leftIR);   // 0: Obstructed  1: Empty
    int right = digitalRead(rightIR);
    int speed = 150;

    if (!left && right) {
        backLeft(speed);
    } else if (left && !right) {
        backRight(speed);
    } else if (!left && !right) {
        moveBackward(speed);
    } else {
        moveForward(speed);
    }
}

void moveForward(int speed) {
    analogWrite(in1, 0);
    analogWrite(in2, int(speed * leftOffset));
    analogWrite(in3, int(speed * rightOffset));
    analogWrite(in4, 0);
}

void moveBackward(int speed) {
    analogWrite(in1, speed);
    analogWrite(in2, 0);
    analogWrite(in3, 0);
    analogWrite(in4, speed);
}

void backLeft(int speed) {
    analogWrite(in1, speed);
    analogWrite(in2, 0);
    analogWrite(in3, 0);
    analogWrite(in4, 0);
}

void backRight(int speed) {
    analogWrite(in1, 0);
    analogWrite(in2, 0);
    analogWrite(in3, 0);
    analogWrite(in4, speed);
}

IoTプロジェクト

このキットには、ArduinoがIoT実験のためにインターネットに接続することを可能にするESP8266 Wifiモジュールが含まれています。

ここでは、ESP8266 Wifiモジュールを使用してArduinoを BLYNK プラットフォームに接続する方法をガイドします。これにより、興味深いIoTプロジェクトを実現できます。また、携帯電話のBlynk APPを使用してスマートカーを操作することもできます。

Blynkは、個人のIoTプロジェクトから数百万の商用接続製品まで、任意の規模での接続された電子デバイスのプロトタイプ制作、デプロイ、遠隔管理に必要なソフトウェアのフルセットです。 Blynkを使用すると、誰でもハードウェアをクラウドに接続し、コードなしでiOS、Android、およびウェブアプリケーションを構築して、デバイスからのリアルタイムおよび履歴データを分析し、世界中のどこからでも遠隔操作することができます。また、重要な通知を受け取ることができ、さらに多くのことができます…

_images/blynk-iot.png

1. Blynkでのスタート

R3ボードをBlynkと通信させるには、Blynkを初めて使用する際にいくつかの設定が必要です。

以下の手順に従ってください。そして、章を飛ばさず順番通りに行う必要があります。

1.1 ESP8266の設定

このキットに同梱されているESP8266モジュールはすでにATファームウェアで書き込み済みですが、以下の手順に従って設定を変更する必要があります。

  1. 回路を組み立てる。

    _images/iot_1_at_set_bb.jpg
  2. 3in1-kit\iot_project\1.set_software_serial のパスの下にある 1.set_software_serial.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

    #include <SoftwareSerial.h>
    SoftwareSerial espSerial(2, 3); //Rx,Tx
    
    void setup() {
        // セットアップコードをここに書いて、一度だけ実行する:
        Serial.begin(115200);
        espSerial.begin(115200);
    }
    
    void loop() {
        if (espSerial.available()) {
            Serial.write(espSerial.read());
        }
        if (Serial.available()) {
            espSerial.write(Serial.read());
        }
    }
    
  3. 右上の虫眼鏡アイコン(シリアルモニタ)をクリックし、ボーレートを 115200 に設定します。(私のようにいくつかの情報が表示されるか、表示されない場合もありますが、問題ありません。次のステップに進んでください。)

    _images/sp202205241130201.png

    警告

    • ready が表示されない場合は、ESP8266モジュールをリセットして(RSTをGNDに接続)シリアルモニタを再度開いてみてください。

    • さらに、結果が OK の場合、ファームウェアを再書き込みする必要があるかもしれません。詳しくは ESP8266モジュールのファームウェアを再書き込みする方法は? を参照してください。それでも解決しない場合は、シリアルモニタのスクリーンショットを sevice@sunfounder.com に送信してください。可能な限り早く問題を解決するお手伝いをします。

  4. NEWLINE DROPDOWN BOX をクリックし、ドロップダウンオプションで both NL & CR を選択し、 AT を入力します。OKが返ってくれば、ESP8266がR3ボードと正常に接続されていることを意味します。

    _images/sp202205241137021.png
  5. AT+CWMODE=3 を入力すると、管理モードが Station and AP 共存に変更されます。

    _images/sp20220524114032.png
  6. 後でソフトウェアシリアルを使用するために、ESP8266のボーレートを9600に変更するため AT+UART=9600,8,1,0,0 を入力する必要があります。

    _images/PIC4_sp220615_150321.png

1.2 Blynkの設定

  1. BLYNK にアクセスして、 START FREE をクリックします。

    _images/sp220607_142551.png
  2. あなたのメールアドレスを入力してアカウントを登録します。

    _images/sp220607_142807.png
  3. 登録したメールアドレスにアクセスして、アカウント登録を完了します。

    _images/sp220607_142936.png
  4. その後、 Blynk Tour が表示されるので、Blynkに関する基本情報を読むことができます。

    _images/sp220607_143244.png
  5. 次に、この Quick Start でテンプレートとデバイスを作成する必要があります。 Let's go をクリックします。

    _images/sp220607_143608.png
  6. ハードウェアと接続タイプを選択します。

    _images/sp20220614173218.png
  7. どのIDEを準備する必要があるかを知らされます。 Arduino IDE を推奨します。

    _images/sp20220614173454.png
  8. 必要なライブラリが表示されますが、ここで推奨されているライブラリには問題があります。手動で他のライブラリを追加する必要があります(後述)。ここでは Next をクリックして、新しいテンプレートとデバイスが作成されます。

    _images/sp20220614173629.png
  9. 次のステップは、関連するコードをアップロードしてボードをBlynkに接続することですが、先ほど提供されたライブラリに問題があるため、再度他のライブラリを追加する必要があります。したがって、 Quick Start を停止するために、ここで Cancel をクリックします。

    _images/sp20220614174006.png
  10. Search ボタンをクリックすると、作成した新しいデバイスが表示されます。

    _images/sp20220614174410.png
  11. この Quickstart Device にアクセスすると、 Device info ページに TEMPLATE_IDDEVICE_NAMEAUTH_TOKEN が表示されます。これらの情報は後でコピーする必要があります。

    _images/sp20220614174721.png

1.3 必要なライブラリの追加

Arduino IDEでBlynkを使用するための適切なライブラリを追加する必要があります。

  1. こちら をクリックして、ページの最下部にスクロールして最初の .zip ファイルをダウンロードします。

    _images/sp220607_154840.png
  2. このファイルを解凍すると、以下のフォルダが表示されます。

    _images/sp220607_155155.png
  3. これらのフォルダをすべてコピーし、Arduino IDEのデフォルトのライブラリディレクトリ、通常は C:\Users\xxx\Documents\Arduino\libraries にペーストします。

    _images/sp20220614180720.png
  4. ライブラリディレクトリが異なる場合、 File -> Preferences にアクセスして確認することができます。

    _images/install_lib1.png

1.4 R3ボードをBlynkに接続

  1. ESP8266モジュールとR3ボードを再接続します。ここではソフトウェアシリアルが使用されているため、TXとRXはR3ボードのピン2と3にそれぞれ接続されます。

    注釈

    ESP8266モジュールは、安定した動作環境を提供するために高い電流を必要とします。9Vのバッテリーが接続されていることを確認してください。

    _images/wiring_23.jpg
  2. 3in1-kit\iot_project\1.connect のパスの下の 1.connect.ino ファイルを開きます。または、このコードを Arduino IDE にコピーします。

  3. Device info ページからコピーできる以下の3行のコードを置き換えます。これらの3行のコードにより、R3ボードがあなたのblynkアカウントを見つけることができます。

    #define BLYNK_TEMPLATE_ID "TMPLxxxxxx"
    #define BLYNK_DEVICE_NAME "Device"
    #define BLYNK_AUTH_TOKEN "YourAuthToken"
    
    _images/sp20220614174721.png
  4. 使用しているWiFiの ssidpassword を入力します。

    char ssid[] = "ssid";
    char pass[] = "password";
    
  5. コードをR3ボードにアップロードします。次に、シリアルモニタを開き、ボーレートを115200に設定します。R3ボードがBlynkと正常に通信すると、シリアルモニタに ready 文字が表示されます。

    _images/sp220607_170223.png

    注釈

    接続するときに ESP is not responding というメッセージが表示された場合、以下の手順に従ってください。

    • 9Vのバッテリーが接続されていることを確認してください。

    • RSTピンを1秒間GNDに接続してESP8266モジュールをリセットし、それを抜きます。

    • R3ボードのリセットボタンを押します。

    これらの操作を3〜5回繰り返す必要がある場合があります。お手数をおかけしますが、お待ちください。

  6. Blynkのステータスが offline から online に変わります。

    _images/sp220607_170326.png

2. Blynkからデータを取得

この章では、Blynkを使って回路を制御する方法を学びます。インターネットを介してLEDを点灯させましょう!

必要な部品

このプロジェクトには、以下の部品が必要です。

一式を購入することは非常に便利です。以下がリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ESP8266 モジュール

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

1. 回路を組む

注釈

ESP8266モジュールは、安定した動作環境を提供するために高い電流が必要です。9Vのバッテリーが接続されていることを確認してください。

_images/wiring_led.jpg

2. ダッシュボードを編集

  1. 以前に作成した Quickstart Device にアクセスし、右上のメニューアイコンをクリックして edit dashboard を選択します。

    _images/sp220609_112825.png
  2. Datastreamsは、BlynkのウィジェットとR3ボードのコードが相互に認識するための機能です。完全な設定プロセスを体験するために、DatastreamsページからすべてのDatastreamsを削除してください。

    _images/sp220609_114723.png
  3. Datastreamsを削除する前に、警告を注意深く読んで正しいことを確認してください。

    _images/sp220609_114929.png
  4. Blynkのスイッチを使用してLEDを制御するための Virtual Pin タイプのDatastreamを作成します。

    _images/sp220609_115124.png
  5. Virtual Pin を設定します。ボタンとLEDはONとOFFのみが必要なので、DATA TYPEを Integer に設定し、MINとMAXを 01 に設定します。

    _images/sp220609_115520.png
  6. Web Dashboard ページに移動し、既存のウィジェットを削除します。

    _images/sp220609_133707.png
  7. 左の Widget Box から switch ウィジェットをドラッグアンドドロップします。

    _images/sp220609_114508.png
  8. これで設定します。

    _images/sp20220615180127.png
  9. 以前に設定した Datastream を選択します。

    _images/sp220609_133741.png
  10. Datastreamを選択すると、いくつかのカスタム設定が表示されます。それらを設定した後、保存をクリックします。

    _images/sp220609_133950.png
  11. 最後に、 Save And Apply をクリックします。

    _images/sp220609_141733.png

3. コードの実行

  1. 3in1-kit\iot_project\2.get_data_from_blynk のパスの下の 2.get_data_from_blynk.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

  2. Template IDDevice NameAuth Token をあなた自身のものに置き換えます。使用中のWiFiの ssidpassword も入力する必要があります。詳しいチュートリアルは、 1.4 R3ボードをBlynkに接続 を参照してください。

  3. 正しいボードとポートを選択したら、 Upoad ボタンをクリックします。

    _images/2_upload.png
  4. シリアルモニター(ボーレートを115200に設定)を開き、成功した接続のようなプロンプトが表示されるのを待ちます。

    _images/2_ready.png

    注釈

    接続時に ESP is not responding のメッセージが表示される場合、次の手順に従ってください。

    • 9Vのバッテリーが接続されていることを確認します。

    • RSTピンを1秒間GNDに接続してESP8266モジュールをリセットし、その後、それを取り外します。

    • R3ボードのリセットボタンを押します。

    ときどき、上記の操作を3〜5回繰り返す必要があるかもしれませんので、お待ちください。

  5. Blynkに戻ると、ステータスがオンラインに変わっているのがわかります。これで、blynkのスイッチウィジェットを使用してR3ボードに接続されているLEDを制御することができます。

    _images/2_blynk_button.png
  6. モバイルデバイスでBlynkを使用したい場合は、 モバイルデバイスでBlynkを使用する方法は? を参照してください。

どのように動作するのか?

このプロジェクトのコードと前章の 1.4 R3ボードをBlynkに接続 のコードとの違いは、以下の行になります。

const int ledPin=6;

BLYNK_WRITE(V0)
{
    int pinValue = param.asInt(); // V0からの入力値を変数に割り当てる
    // 以下も使用可能:
    // String i = param.asStr();
    // double d = param.asDouble();
    digitalWrite(ledPin,pinValue);
}

void setup()
{
    pinMode(ledPin,OUTPUT);
}

ledPinの pinModedigitalWrite については、すでにお馴染みだと思いますので、再度説明しません。注目すべきは、BLYNK_WRITE(V0) 関数です。

この関数が行うのは、Blynkの V0 の値が変更されると、Blynk.Cloudがあなたのデバイスに「 Virtual Pin V0に書き込みをしています」と通知し、この情報を受け取ったデバイスが何かの動作をすることができることです。

前のステップでV0 Datastreamを作成し、スイッチウィジェットに適用しました。 これは、スイッチウィジェットを操作するたびに、 BLYNK_WRITE(V0) がトリガされることを意味します。

この関数には2つの命令を書き込んでいます。

int pinValue = param.asInt();

V0の値を取得し、変数 pinValue に割り当てます。

digitalWrite(ledPin,pinValue);

取得したV0の値をledPinに書き込むことで、BlynkのスイッチウィジェットでLEDを制御することができます。

3. Blynkへデータをプッシュ

この章では、Blynkにデータを送信する方法を紹介します。

ここでは、ドアと窓の検出デバイスを作成します。リードスイッチの回路はドアや窓の隣に配置され、磁石はドアや窓の端に取り付けられます。 ドアや窓が閉じている場合、磁力でリードスイッチがオンになり、R3ボード上の対応するピンの値が変わります。 Blynk.cloudはこの値を受け取るので、家を離れていても家のドアや窓が閉まっているかどうかを確認できます。

今、BlynkのLEDウィジェットを使用して、窓やドアが閉まっているか(すなわち、リードスイッチがオンかオフか)を表示します。

必要な部品

このプロジェクトでは、以下の部品が必要です。

一式を購入するのが確実に便利です。以下にリンクを示します:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ESP8266 モジュール

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

リードスイッチ

-

1. 回路を組む

注釈

ESP8266モジュールは安定した動作環境を提供するために高い電流が必要ですので、9Vの電池が接続されていることを確認してください。

_images/wiring_reed.jpg

2. ダッシュボードを編集

  1. Datastream ページで、リードスイッチの値を取得するための Virtual Pin タイプの Datastream を作成します。データタイプは Integer 、MINとMAXを 0 および 1 に設定します。

    _images/sp220609_162548.png
  2. Wed Dashboard ページに LED widget をドラッグアンドドロップします。値が1の場合、それは光る(色付き)、それ以外の場合、それは白になります。

    _images/sp220609_163350.png
  3. LED widget の設定ページで、 Datastream として Reed(V1) を選択し、保存します。

    _images/sp220609_163502.png

3. コードの実行

  1. 3in1-kit\iot_project\3.push_data_to_blynk のパスの下にある 3.push_data_to_blynk.ino ファイルを開く、またはこのコードを Arduino IDE にコピーします。

  2. あなた自身の Template IDDevice Name 、および Auth Token で置き換えます。また、使用しているWiFiの ssidpassword を入力する必要があります。詳しいチュートリアルは、 1.4 R3ボードをBlynkに接続 を参照してください。

  3. 正しいボードとポートを選択した後、 Upoad ボタンをクリックします。

  4. シリアルモニタを開き(ボーレートを115200に設定)、成功した接続などのプロンプトが表示されるのを待ちます。

    _images/2_ready.png

    注釈

    接続時に ESP is not responding というメッセージが表示される場合、以下の手順に従ってください。

    • 9Vのバッテリーが接続されていることを確認してください。

    • RSTピンをGNDに1秒間接続してESP8266モジュールをリセットし、その後、それを抜きます。

    • R3ボード上のリセットボタンを押します。

    ときどき、上記の操作を3〜5回繰り返す必要がある場合がありますので、お待ちください。

  5. これで、Blynkはあなたのドアや窓の状態を表示します。ドアや窓が閉まっている場合、LEDウィジェットは緑色になり、それ以外の場合は灰色になります。

  6. Blynkをモバイルデバイスで使用したい場合は、 モバイルデバイスでBlynkを使用する方法は? を参照してください。

どのように動作するのか?

この例では、以下の行に注目する必要があります。「Blynk CloudのV1 Datastreamに毎秒データを書き込む」は、これらの行で定義されています。

BlynkTimer timer;

void myTimerEvent()
{
    Blynk.virtualWrite(V1, pinValue);
}

void setup()
{
    timer.setInterval(1000L, myTimerEvent);
}

void loop()
{
    timer.run(); // BlynkTimerを起動
}

Blynkライブラリは組み込みのタイマーを提供しています、まずタイマーオブジェクトを作成します。

BlynkTimer timer;

setup() 内でタイマーの間隔を設定します。ここでは、1000msごとに myTimerEvent() 関数を実行するように設定しています。

timer.setInterval(1000L, myTimerEvent);

loop() でBlynkTimerを実行します。

timer.run();

カスタム関数 myTimerEvent() を編集します。コード Blynk.virtualWrite(V1, pinValue) は、V1のデータpinValueを書き込むために使用されます。

void myTimerEvent()
{
    Blynk.virtualWrite(V1, pinValue);
}

4. クラウド音楽プレイヤー

このプロジェクトの目標はBlynkを使った音楽プレイヤーを作ることです。 音楽の再生は 5.7 Tone() または noTone() と同じように、プログラムに曲を書いてパッシブ・ブザーで再生する。 しかし、この例では、スイッチをクリックすると再生/一時停止ができ、スライダーをスライドさせると再生の進行状況を変えることができます。

必要な部品

このプロジェクトでは、以下の部品が必要です。

一式をまとめて購入するのは便利です。リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ESP8266 モジュール

BUY

ジャンパーワイヤー

BUY

ブザー

BUY

1. 回路を組む

注釈

ESP8266モジュールは、安定した動作環境を確保するために高電流が必要です。9Vのバッテリーが接続されていることを確認してください。

_images/wiring_buzzer.jpg

2. ダッシュボードを編集

  1. Datastream ページで、後で追加されるスライダーウィジェットまたはコードで変更する値として Virtual Pin タイプの Datastream を作成します。データタイプは Integer にし、MINとMAXを 030 に設定します。

    _images/sp220610_104330.png
  2. 音楽の名前を表示するための Virtual Pin タイプの Datastream も作成します。データタイプは String に設定してください。

    _images/sp220610_105932.png
  3. Wed Dashboard ページに移動して、 Switch ウィジェットをドラッグし、 Datastream をV0に設定します( 2. Blynkからデータを取得 で既に設定済み); Label ウィジェットをドラッグしてV3に設定; Slider ウィジェットをドラッグしてV2に設定します。

    _images/sp220610_110105.png

注釈

あなたの仮想ピンの番号は私のものと異なるかもしれません。あなたの設定が優先されますので、コード内の対応するピン番号を修正してください。

3. コードの実行

  1. パス 3in1-kit\iot_project\4.cloud_music_player の下にある 4.cloud_music_player.ino ファイルを開きます。

  2. Template IDDevice Name 、および Auth Token を自分のものに置き換えます。使用しているWiFiの ssidpassword も入力する必要があります。詳しいチュートリアルについては、 1.4 R3ボードをBlynkに接続 を参照してください。

  3. 正しいボードとポートを選択した後、 Upoad ボタンをクリックします。

  4. シリアルモニタを開き(ボーレートを115200に設定)、成功した接続のようなプロンプトが表示されるのを待ちます。

    _images/2_ready.png

    注釈

    接続時に ESP is not responding メッセージが表示される場合は、以下の手順に従ってください。

    • 9Vのバッテリーが接続されていることを確認してください。

    • RSTピンを1秒間GNDに接続してESP8266モジュールをリセットし、その後プラグを抜きます。

    • R3ボードのリセットボタンを押します。

    ときどき、上記の操作を3〜5回繰り返す必要がある場合があります。お待ちください。

  5. これで、Blynkのボタンコントロールウィジェットを使用して音楽の再生/一時停止を切り替えたり、スライダーで再生の進行状況を調整したりできます。また、音楽の名前も表示されます。

    _images/sp220610_110105.png
  6. Blynkをモバイルデバイスで使用したい場合は、 モバイルデバイスでBlynkを使用する方法は? を参照してください。

どのように動作するのか?

データストリーム V0 は、Switchウィジェットのステータスを取得し、変数 musicPlayFlag に割り当てるために使用されます。これは音楽の再生と一時停止を制御します。

int musicPlayFlag=0;

BLYNK_WRITE(V0)
{
    musicPlayFlag = param.asInt(); // 音楽の開始/一時停止
}

データストリーム V2 は、スライダーウィジェットの値を取得し、スライダーが移動したときに変数 scrubBar に割り当てるために使用されます。

int scrubBar=0;

BLYNK_WRITE(V2)
{
    scrubBar=param.asInt();
}

デバイスが Blynk Cloud に接続されているとき、 V3 データストリームの音楽の名前を書き込み、それを Label ウィジェットで表示します。

BLYNK_CONNECTED() {
    String songName = "Ode to Joy";
    Blynk.virtualWrite(V3, songName);
}

Blynk Timer は毎秒実行されます。 musicPlayFlag が0でない場合、つまり Switch ウィジェットがONの場合、音楽が再生されます。 2つのノートが再生されると、進行バー変数 scrubBar が2増加し、その値は次に Blynk Cloud に書き込まれ、 Slider ウィジェットの値が同期されます。

void myTimerEvent()
{
    if(musicPlayFlag!=0)
    {
        tone(buzzerPin,melody[scrubBar],250);
        scrubBar=(scrubBar+1)%(sizeof(melody)/sizeof(int));
        delay(500);
        tone(buzzerPin,melody[scrubBar],250);
        scrubBar=(scrubBar+1)%(sizeof(melody)/sizeof(int));
        Serial.println(scrubBar);
        Blynk.virtualWrite(V2, scrubBar);
    }
}

5. 住宅環境監視

この章では、Blynkを使用して住宅の環境モニターを作成します。 DHT11とフォトレジスタを使用して、部屋の温度、湿度、および光の強度を測定できます。 これらの値をBlynkに送信することで、インターネット経由で自宅の環境を知ることができます。

必要な部品

このプロジェクトには、以下の部品が必要です。

全体のキットを購入すると非常に便利です。以下のリンクを参照してください:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ESP8266 モジュール

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

フォトレジスタ

BUY

DHT11 湿度温度センサ

-

1. 回路を組む

注釈

ESP8266モジュールは安定した動作環境を提供するために高い電流が必要ですので、9Vのバッテリーが接続されていることを確認してください。

_images/wiring_dht11.jpg

2. ダッシュボードを編集

  1. 湿度の値を記録するために、 Datastream ページで Virtual Pin タイプの Datastream を作成します。DATA TYPEを Double に設定し、MINとMAXを 0100 に設定します。また、単位を Percentage, % に設定します。

    _images/sp220610_145748.png
  2. 次に、温度を記録するための Virtual Pin タイプの Datastream を作成します。DATA TYPEを Double に設定し、MINとMAXを -3050 に設定し、単位を Celsius, °C にします。

    _images/sp220610_145811.png
  3. また、光の強度を記録するための Virtual Pin タイプの Datastream を作成します。デフォルトのデータタイプである Integer を使用し、MINとMAXを 01024 に設定します。

    _images/sp220610_145834.png
  4. Wed Dashboard ページに移動し、2つの Label ウィジェットをドラッグして、それぞれのデータストリームを V4 および V5 に設定し、 Gauge ウィジェットをドラッグしてデータストリームを V6 に設定します。ウィジェットの設定でも、 値に基づいて色を変更 を有効にし、適切な色を選択してウィジェットをより見やすく、直感的にすることができます。

_images/sp220610_150400.png

3. コードの実行

  1. 3in1-kit\iot_project\5.home_environment_monitoring のパスの下にある 5.home_environment_monitoring.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

    注釈

    • ここでは DHT sensor library を使用しています。 Library Manager からインストールできます。

      _images/lib_dht11.png
  2. Template IDDevice Name、そして Auth Token を自分のものに置き換えてください。また、使用しているWiFiの ssidpassword も入力する必要があります。詳しいチュートリアルは 1.4 R3ボードをBlynkに接続 を参照してください。

  3. 適切なボードとポートを選択した後、 Upoad ボタンをクリックします。

  4. シリアルモニター(ボーレートを115200に設定)を開き、成功した接続のようなプロンプトが表示されるのを待ちます。

    _images/2_ready.png

    注釈

    接続時に ESP is not responding というメッセージが表示された場合は、以下の手順に従ってください。

    • 9Vのバッテリーが接続されていることを確認してください。

    • RSTピンを1秒間GNDに接続してESP8266モジュールをリセットし、その後、プラグを抜いてください。

    • R3ボードのリセットボタンを押します。

    こうした操作を3〜5回繰り返すことが必要な場合もありますので、お待ちください。

  5. 今、Blynk上に現在の室温、湿度、光の強度が表示されるようになります。

    _images/sp220610_150400.png
  6. Blynkをモバイルデバイスで使用したい場合は、 モバイルデバイスでBlynkを使用する方法は? を参照してください。

    _images/mobile_home.jpg

どのように動作するのか?

以下の二つの関数は、部屋の温度、湿度、および光の強度を取得するために使用されます。

int readLight(){
    return analogRead(lightPin);
}

bool readDHT() {

    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
    humidity = dht.readHumidity();
    // Read temperature as Celsius (the default)
    temperature = dht.readTemperature();

    // Check if any reads failed and exit early (to try again).
    if (isnan(humidity) || isnan(temperature)) {
        Serial.println("Failed to read from DHT sensor!");
        return false;
    }
    return true;
}

Blynkの Timer を使用して、毎秒、室内の温度、湿度、および光の強度が取得され、Blynk Cloudのデータストリームに送信されます。このデータはウィジェットによって表示されます。

void myTimerEvent()
{
    bool chk = readDHT();
    int light = readLight();
    if(chk){
        Blynk.virtualWrite(V4,humidity);
        Blynk.virtualWrite(V5,temperature);
    }
    Blynk.virtualWrite(V6,light);
}

6. 植物モニター

本プロジェクトの目的は、現在の温度、湿度、光の強度、土壌の湿度を検出し、それらをBlynkに表示するスマートな水やりシステムを作成することです。

Blynk Cloudのスイッチトグルをオンにすると、ポンプが動作し始め、植物に水が供給されます。

必要な部品

このプロジェクトでは、以下の部品が必要です。

一式を購入するのが便利です。リンクは以下のとおりです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ESP8266 モジュール

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

フォトレジスタ

BUY

DHT11 湿度温度センサ

-

土壌湿度モジュール

BUY

L298N モジュール

BUY

遠心ポンプ

-

1. 回路を組む

注釈

ESP8266モジュールは、安定した動作環境を提供するために高電流が必要ですので、9Vのバッテリーが接続されていることを確認してください。

_images/wiring_soil_pump.jpg

2. ダッシュボードを編集

  1. 以前のプロジェクトで作成したデータストリームは保存しておく必要があり、このプロジェクトでも使用されます。

  2. 土壌の湿度を記録するために、 Datastream ページで Virtual Pin タイプの別の Datastream を作成します。DATA TYPEを Integer に設定し、MINとMAXを 0 および 1024 に設定します。

    _images/sp220610_155221.png
  3. さらに、 Web Dashboard ページに移動し、2つの Label ウィジェットをドラッグして、それぞれのデータストリームを V4 および V5 に設定します。次に、2つの Gauge ウィジェットをドラッグして、それぞれのデータストリームを V6 および V7 に設定します。最後に、 Switch ウィジェットをドラッグして、そのデータストリームを V0 に設定します。

    _images/sp220610_155350.png

3. コードの実行

3in1-kit\iot_project\6.plant_monitoring のパスの下で 6.plant_monitoring.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

注釈

  • ここでは DHT sensor library が使用されています。 Library Manager からインストールできます。

    _images/lib_dht11.png
  1. Template IDDevice NameAuth Token を自分のものに置き換えます。また、使用しているWiFiの ssidpassword を入力する必要があります。詳細なチュートリアルは 1.4 R3ボードをBlynkに接続 を参照してください。

  2. 正しいボードとポートを選択した後、 Upoad ボタンをクリックします。

  3. シリアルモニター(ボーレートを115200に設定)を開き、接続成功などのプロンプトが表示されるのを待ちます。

    _images/2_ready.png

    注釈

    接続時に ESP is not responding というメッセージが表示される場合、次の手順に従ってください。

    • 9Vのバッテリーが接続されていることを確認します。

    • ピンRSTを1秒間GNDに接続してESP8266モジュールをリセットし、その後プラグを抜きます。

    • R3ボードのリセットボタンを押します。

    ときどき、上記の操作を3~5回繰り返す必要がありますので、お待ちください。

  4. Blynkに戻ると、現在の温度、湿度、光の強度、土壌の湿度が表示されます。必要に応じて、ボタン制御ウィジェットをクリックして植物に水をやることができます。

    _images/sp220610_155350.png
  5. Blynkをモバイルデバイスで使用したい場合は、 モバイルデバイスでBlynkを使用する方法は? を参照してください。

    _images/mobile_plant.jpg

どのように動作するのか?

この BLYNK_WRITE は、Blynkの Switch ウィジェットがONのときにポンプを起動し、OFFのときにポンプをオフにします。

BLYNK_WRITE(V0)
{
    if(param.asInt()==1){
        digitalWrite(pumpA,HIGH);
    }else{
        digitalWrite(pumpA,LOW);
    }
}

以下の三つの関数は、現在の環境温度、湿度、光の強度、土壌の湿度を取得するために使用されます。

int readMoisture(){
    return analogRead(moisturePin);
}

int readLight(){
    return analogRead(lightPin);
}

bool readDHT() {

    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
    humidity = dht.readHumidity();
    // Read temperature as Celsius (the default)
    temperature = dht.readTemperature();

    // Check if any reads failed and exit early (to try again).
    if (isnan(humidity) || isnan(temperature)) {
        Serial.println("Failed to read from DHT sensor!");
        return false;
    }
    return true;
}

Blynkの Timer を使用して、周囲の温度、湿度、光の強度、土壌の湿度が毎秒取得され、 Blynk Cloud 上のデータストリームに送信され、ウィジェットがデータを表示します。

void myTimerEvent()
{
    bool chk = readDHT();
    int light = readLight();
    int moisture = readMoisture();
    if(chk){
        Blynk.virtualWrite(V4,humidity);
        Blynk.virtualWrite(V5,temperature);
    }
    Blynk.virtualWrite(V6,light);
    Blynk.virtualWrite(V7,moisture);
}

7. 電流制限ゲート

一部の状況、例えば駐車場などでは、数量の管理が必要となります。

ここではスマートゲートを作成します。サーボをゲートとして使用し、その前にIR障害物検出器を配置します。オブジェクト(例えば車)が検出されると、ゲートが開き、数字が1増加します。 そのカウントは7セグメントディスプレイで表示され、Blynkクラウドにもアップロードされるので、遠隔での閲覧も可能です。最後に、Blynkにはこのスマートゲートシステムを有効/無効にするためのスイッチウィジェットがあります。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

全てのキットを一括で購入するのが便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ESP8266 モジュール

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

サーボ

BUY

障害物回避モジュール

BUY

7セグメント表示

BUY

74HC595

BUY

1. 回路を組む

注釈

ESP8266モジュールは、安定した動作環境を提供するために高電流を必要としますので、9Vのバッテリーが接続されていることを確認してください。

_images/wiring_servo_segment.jpg

2. ダッシュボードを編集

  1. 数を記録するために、 Datastream ページで Virtual Pin タイプの Datastream を作成します。DATA TYPEを Integer に設定し、MINとMAXを 010 に設定します。

    _images/sp220610_165328.png
  2. 次に、 Wed Dashboard ページに移動し、 Switch ウィジェットをドラッグして、そのデータストリームを V0 に設定し、 Label ウィジェットをドラッグして、そのデータストリームを V8 に設定します。

    _images/sp220610_165548.png

3. コードの実行

  1. 3in1-kit\iot_project\7.current_limiting_gate のパスの下の 7.current_limiting_gate.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

  2. Template IDDevice Name 、および Auth Token を自分のものに置き換えます。また、使用しているWiFiの ssidpassword も入力する必要があります。詳細なチュートリアルは 1.4 R3ボードをBlynkに接続 を参照してください。

  3. 正しいボードとポートを選択した後、 Upoad ボタンをクリックします。

  4. シリアルモニターを開き(ボーレートを115200に設定)、成功した接続などのプロンプトが表示されるのを待ちます。

    _images/2_ready.png

    注釈

    接続時に ESP is not responding というメッセージが表示された場合、次の手順に従ってください。

    • 9Vのバッテリーが接続されていることを確認します。

    • RSTピンを1秒間GNDに接続してESP8266モジュールをリセットし、その後、それを取り外します。

    • R3ボードのリセットボタンを押します。

    これらの操作を3-5回繰り返すことが必要な場合もありますので、お待ちください。

  5. BlynkのButton Controlウィジェットをクリックして、スマートドアシステムを有効にします。IR障害物回避モジュールが障害物を検出すると、ゲートが開き、Blynkの7セグメント表示およびCountウィジェットが1加算されます。

    _images/sp220610_165548.png
  6. モバイルデバイスでBlynkを使用したい場合は、 モバイルデバイスでBlynkを使用する方法は? を参照してください。

    _images/mobile_gate.jpg

どのように動作するのか?

BLYNK_WRITE(V0) 関数は Switch ウィジェットのステータスを取得し、それを変数 doorFlag に割り当てます。これにより、スマートゲートシステムが有効かどうかを判断するために使用されます。

BLYNK_WRITE(V0)
{
    doorFlag = param.asInt(); // ゲートを有効にする
}

Blynkタイマーでは、 doorFlag が毎秒判定され、有効になっている場合、ゲートのメイン関数が実行されます。

void myTimerEvent()
{
    if (doorFlag)
    {
        channelEntrance();
    }
}

ゲートのメイン関数は channelEntrance() です。 オブジェクトがゲートに近づくと(センサーが障害物があることを検出すると)、 count が1増加します。 Blynk Cloudの V8 データストリームと回路の7セグメント表示に count を書き込み、ドアを開けます。 オブジェクトが存在から不在に移行する場合、つまりオブジェクトがドアに入った場合、ドアを閉じます。

void channelEntrance()
{
    int currentState = digitalRead(irPin); // 0:障害物 1:障害物なし
    if (currentState == 0 && lastState == 1) {
        count=(count+1)%10;
        Blynk.virtualWrite(V8, count);
        showNumber(count);
        operateGate(true);
    } else if ((currentState == 1 && lastState == 0)) {
        operateGate(false);
    }
    lastState = currentState;
}

showNumber(int num) 関数は、7セグメント表示に値を表示するために使用されます。

void showNumber(int num)
{
    digitalWrite(STcp, LOW); //ST_CPを接地して、伝送中は常に低く保つ
    shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
    digitalWrite(STcp, HIGH); //データを保存するためにST_CPST_CPを引き上げる
}

operateGate(bool openGate) 関数は、参照が True の場合、ドアをゆっくり開け、参照が False の場合、ドアをゆっくり閉じます。

void operateGate(bool openGate) {
    if (openGate == true)
    {
        // open gate
        while (angle <= 90) {
        angle++;
        myservo.write(angle);
        delay(5);
        }
    } else {
        // close gate
        while (angle >= 0){
        angle--;
        myservo.write(angle);
        delay(5);
        }
    }
}

8. IoT カー

このプロジェクトでは、スマホのBlynkアプリを使用して車を制御しました。しかし、車を組み立て、基本的な理解を得るためには カープロジェクト を参照する必要があります。 5Gネットワークが普及する時代に、このモードは多くの産業での主要な生産方法の一つになるかもしれません。先取りしてこの遊びを体験しましょう。

1. 回路を組む

_images/wiring_iot_car.jpg

2. ダッシュボードを編集

携帯のBlynkではデータストリームを編集できないため、これらの手順はWeb側で行う必要があります。

  1. Datastream ページで、ジョイスティックのX軸の値を記録するための Virtual Pin タイプの Datastream を作成します。名前は Xvalue 、データタイプは Integer 、最小値と最大値は -1010 に設定します。

    _images/sp220613_164507.png
  2. ジョイスティックのY軸値を記録するために、 Virtual Pin 型の Datastream を作成します。NAMEを Yvalue 、DATA TYPEを Integer 、MINとMAXを -1010 に設定する。

    _images/sp220613_164717.png

次に、携帯電話で以下の操作を行う必要があります。

  1. GOOGLE PlayまたはAPP Storeで "Blynk IoT" (Blynk(legacy)ではない) を検索してダウンロードします。

  2. アプリを開いた後、ログインします。このアカウントは、Webクライアントで使用されたものと同じである必要があります。

  3. 次に、ダッシュボードに移動します(持っていない場合は作成します)。ここで、モバイル用とWeb用のダッシュボードが互いに独立していることがわかります。

_images/APP_11.jpg
  1. 編集アイコンをクリックします。

  2. 空白のエリアをクリックします。

  3. ジョイスティックウィジェットを選択します。

_images/APP_21.jpg
  1. 空白のエリアにジョイスティックウィジェットが表示されますので、それをクリックします。

  2. ジョイスティックの設定が表示されますので、データストリームで先ほど設定したXvalueとYvalueを選択します。

  3. ダッシュボードページに戻り、ジョイスティックを操作することができます。

_images/APP_31.jpg

3. コードの実行

  1. パス 3in1-kit\iot_project\8.iot_car の下にある 8.iot_car.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

  2. Template IDDevice Name 、および Auth Token を自分のものに置き換えます。また、使用しているWiFiの ssid および password を入力する必要があります。詳しいチュートリアルは、 1.4 R3ボードをBlynkに接続 を参照してください。

  3. 正しいボードとポートを選択した後、 Upoad ボタンをクリックします。

  4. シリアルモニターを開き(ボーレートを115200に設定)、接続成功のようなプロンプトが表示されるのを待ちます。

    _images/2_ready.png

    注釈

    接続時に ESP is not responding というメッセージが表示された場合は、以下の手順に従ってください。

    • 9Vのバッテリーが接続されていることを確認します。

    • ESP8266モジュールのRSTピンを1秒間GNDに接続してリセットし、その後、取り外します。

    • R3ボードのリセットボタンを押します。

    これらの操作を3-5回繰り返す必要があることもありますので、お待ちください。

  5. USBケーブルを抜いて、9Vのバッテリーだけでカートに電力を供給します。LEDが点灯すると、車がBlynkに接続されていることを示しています。

  6. 携帯電話のBlynkを開き、ジョイスティックウィジェットを使用して車の動きを制御します。

    _images/iot_car.jpg

どのように動作するか?

これらの関数は、車の動きを制御するために使用されます。

void moveForward(int speed) {...}
void moveBackward(int speed) {...}
void turnRight(int speed) {...}
void turnLeft(int speed) {...}
void stopMove() {...}

IoTセクションでは、ジョイスティックウィジェットの値を読み取り、 XvalueYvalue の変数に代入します。

int Xvalue = 0;
int Yvalue = 0;

BLYNK_WRITE(V9)
{
    Xvalue = param.asInt();
}

BLYNK_WRITE(V10)
{
    Yvalue = param.asInt();
}

loop() の中で、 XvalueYvalue に基づいて車が異なるアクションを実行するようにします。

if (Yvalue >= 5) {
    moveForward(255);
} else if (Yvalue <= -5) {
    moveBackward(255);
} else if (Xvalue >= 5) {
    turnRight(150);
} else if (Xvalue <= -5) {
    turnLeft(150);
} else {
    stopMove();
}

また、 loop() にBlynk Cloudに接続されている場合にLEDを点灯するネットワークステータスの判定を追加します。

if (!Blynk.connected()) {
    digitalWrite(ledPin, LOW);
    Serial.print("offline!");
    bool result = Blynk.connect();
    Serial.println(result);
} else {
    digitalWrite(ledPin, HIGH);
}

Scratchで遊ぼう

Arduino IDEでのプログラミングだけでなく、グラフィカルなプログラミングも利用できます。

ここではScratchを使用したプログラミングを推奨していますが、現在の公式ScratchはRaspberry Piとのみ互換性があります。そこで、STEMPediaという企業と提携し、Arduinoボード(Uno, Mega2560, Nano)用のScratch 3ベースのグラフィカルプログラミングソフトウェア「 PictoBlox 」を開発しました。

_images/1_pictoblox.png

これはScratch 3の基本機能を保持しながら、Arduino Uno、Mega、Nano、ESP32、Microbit、およびSTEMPediaのホームメイドのメインボードなどの制御ボードを追加しています。これにより、外部センサーやロボットを使用してステージ上のスプライトを制御することができ、強力なハードウェア対話機能が備わっています。

さらに、AIや機械学習の機能もあります。プログラミングの基礎があまりなくても、これらの人気の高いハイテク技術を学び、使用することができます。

Scratchのコーディングブロックをドラッグアンドドロップするだけで、クールなゲームやアニメーション、インタラクティブなプロジェクト、そしてロボットを自分の思い通りに制御することができます!

さあ、この発見の旅を始めましょう!

1. はじめに

1.1 PictoBloxのインストール

このリンクをクリックしてください:https://thestempedia.com/product/pictoblox/download-pictoblox/。適切なオペレーティングシステム(Windows、macOS、Linux)を選択し、インストール手順に従ってください。

_images/download.png

1.2 インターフェースの紹介

_images/pictoblox_interface.jpg

スプライト

スプライトは、プロジェクトでさまざまなアクションを実行するオブジェクトやキャラクターです。それは与えられたコマンドを理解し、従います。各スプライトには、カスタマイズもできる特定のコスチュームと音があります。

ステージ

ステージは、あなたのプログラムに従ってバックドロップでスプライトがアクションを実行する領域です。

バックドロップ

バックドロップはステージを装飾するために使用されます。PictoBloxからバックドロップを選択する、自分で描く、またはコンピュータから画像をアップロードすることができます。

スクリプトエリア

スクリプトはPictoBlox/Scratchの言葉でのプログラムやコードです。特定のタスクや一連のタスクを実行するために特定の順序で配置された「ブロック」のセットです。複数のスクリプトを書くことができ、すべて同時に実行できます。スクリプトは画面の中央のスクリプトエリアでのみ書くことができます。

ブロック

ブロックは、スクリプトエリアで単純に積み重ねることでプログラムを書くために使用されるパズルのようなものです。ブロックを使用してコードを書くことは、プログラミングを容易にし、エラーの確率を減少させることができます。

ブロックパレット

ブロックパレットは左側のエリアに位置しており、モーション、サウンド、コントロールなどの機能によって名前が付けられています。各パレットには異なるブロックがあり、たとえば、モーションパレットのブロックはスプライトの動きを制御し、コントロールパレットのブロックは特定の条件に基づいてスクリプトの動作を制御します。

Add Extension ボタンからロードできる他の種類のブロックパレットもあります。

モード

Scratchとは異なり、PictoBloxには2つのモードがあります:

  • ステージモード: このモードでは、スプライトとボードのスクリプトを書き、リアルタイムでスプライトと対話できます。Pictobloxとのボードの接続を切断すると、もう対話することはできません。

  • アップロードモード: このモードでは、スクリプトを書き、ボードにアップロードして、コンピュータに接続されていないときでも使用できるようになります。たとえば、移動するロボットのためのスクリプトをアップロードする必要があります。

詳細については、https://thestempedia.com/tutorials/getting-started-pictoblox を参照してください。

1.3 PictoBloxのクイックガイド

PictoBloxの2つのモードでの使い方を学びましょう。

また、R3ボードのPin 13に接続されたオンボードLEDがありますので、2つの異なるモードでこのLEDを点滅させる方法を学びます。

_images/1_led2.jpg

ステージモード

1. Arduinoボードを接続

USBケーブルでArduinoボードをコンピュータに接続します。通常、コンピュータは自動的にボードを認識し、最終的にCOMポートを割り当てます。

PictoBloxを開くと、Pythonのプログラミングインターフェースがデフォルトで開きます。ブロックインターフェースに切り替える必要があります。

_images/0_choose_blocks.png

次に、モード切替のための右上隅が表示されます。デフォルトはステージモードで、Tobiがステージに立っています。

_images/1_stage_upload.png

上部のナビゲーションバーで Board をクリックしてボードを選択します。

_images/1_board.png

例として、 Arduino Uno を選びます。

_images/1_choose_uno.png

次に、接続するポートを選択するための接続ウィンドウが表示されます。接続が完了するとホームページに戻ります。使用中に接続が切れた場合は、 Connect をクリックして再接続することもできます。

_images/1_connect.png

同時に、 Block Palette にArduino Uno関連のパレット、例えばArduino UnoやActuatorsなどが表示されます。

_images/1_arduino_uno.png

2. ファームウェアのアップロード

ステージモードで作業を行うためには、ボードにファームウェアをアップロードする必要があります。これによりボードとコンピュータ間のリアルタイム通信が可能となります。ファームウェアのアップロードは一度だけのプロセスです。Upload Firmwareボタンをクリックして行います。

少し待つと、アップロード成功のメッセージが表示されます。

注釈

このArduinoボードをPictoBloxで初めて使用する場合、またはこのArduinoが以前Arduino IDEでアップロードされていた場合は、使用する前に Upload Firmware をタップする必要があります。

_images/1_firmware.png

3. プログラミング

  • スクリプトを直接開くと実行

もちろん、スクリプトを直接開いて実行することもできますが、まず github からダウンロードしてください。

右上隅の File をクリックし、 Open を選択します。

_images/0_open.png

Open from Computer を選択します。

_images/0_dic.png

3in1-kit\scratch_project\code のパスに移動して、 1. Stage Mode.sb3 を開きます。必要なコードを github からダウンロードしたことを確認してください。

_images/0_stage.png

スクリプトを直接クリックして実行します。いくつかのプロジェクトは緑の旗をクリックするか、スプライトをクリックします。

_images/1_more.png
  • ステップバイステップのプログラム

これらの手順に従って、スクリプトをステップバイステップで書くこともできます。

Arduino Uno のパレットをクリックします。

_images/1_arduino_uno.png

Arduinoボード上のLEDは、デジタルピン13で制御されます(2つの状態、HIGHまたはLOWのみ)。そのため、[set digital pin out as]ブロックをスクリプトエリアにドラッグします。

LEDのデフォルトの状態は点灯しているため、ピン13をLOWに設定して、このブロックをクリックするとLEDが消灯するのを確認できます。

  • [set digital pin out as]: デジタルピン(2〜13)を(HIGH/LOW)レベルに設定する。

_images/1_digital.png

連続してLEDを点滅させる効果を確認するには、 Control パレット内の[Wait 1 seconds]ブロックと[forever]ブロックを使用する必要があります。これらのブロックを書いた後にクリックすると、黄色のハロが表示されていることを意味します。

  • [Wait 1 seconds]: Control パレットから、2つのブロックの間の時間間隔を設定するために使用されます。

  • [forever]: Control パレットから、手動で一時停止しない限りスクリプトを継続的に実行するために使用されます。

_images/1_more.png

アップロードモード

1. Arduinoボードに接続する

ArduinoボードをUSBケーブルでコンピュータに接続します。通常、コンピュータはボードを自動的に認識し、最終的にCOMポートを割り当てます。

PictoBloxを開き、右上のナビゲーションバーで Board をクリックしてボードを選択します。

_images/1_board.png

例として、 Arduino Uno を選択します。

_images/1_choose_uno.png

接続ウィンドウが表示され、接続するポートを選択します。接続が完了するとホームページに戻ります。使用中に接続が切れた場合は、 Connect をクリックして再接続できます。

_images/1_connect.png

同時に、 Block Palette にArduino Uno関連のパレット、例えばArduino Unoやアクチュエータなどが表示されます。

_images/1_upload_uno.png

アップロードモードを選択すると、ステージは元のArduinoコードエリアに切り替わります。

_images/1_upload.png

2. プログラミング

  • スクリプトを直接開く・実行する

右上のコーナーの File をクリックします。

_images/0_open.png

Open from Computer を選択します。

_images/0_dic.png

3in1-kit\scratch_project\code のパスに移動して、 1. Upload Mode.sb3 を開きます。必要なコードは github からダウンロードしたことを確認してください。

_images/0_upload.png

最後に、 Upload Code ボタンをクリックします。

_images/1_upload_code.png
  • ステップバイステップでプログラムする

これらの手順に従って、スクリプトをステップバイステップで記述することもできます。

Arduino Uno パレットをクリックします。

_images/1_upload_uno.png

スクリプトエリアに[when Arduino Uno starts up]をドラッグします。これはすべてのスクリプトに必要です。

_images/1_uno_starts.png

ArduinoボードのLEDはデジタルpin13(2つの状態のみHIGHまたはLOW)によって制御されるため、[set digital pin out as]ブロックをスクリプトエリアにドラッグします。

LEDのデフォルトの状態は点灯しているので、pin 13をLOWに設定し、このブロックをクリックするとLEDが消えます。

  • [set digital pin out as]: デジタルピン(2〜13)を(HIGH/LOW)レベルに設定します。

_images/1_upload_digital.png

この時点で、右側にArduinoコードが表示されます。このコードを編集したい場合は、編集モードをオンにできます。

_images/1_upload1.png

連続して点滅するLEDの効果を見るために、 Control パレットの[Wait 1 seconds]と[forever]ブロックを使用する必要があります。これらのブロックを書き込んだ後、クリックすると黄色いハローが表示されていることを確認してください。これは、それが実行中であることを意味します。

  • [Wait 1 seconds]: Control パレットから、2つのブロック間の時間間隔を設定するために使用します。

  • [forever]: Control パレットから、スクリプトを手動で一時停止するまで実行し続けることができます。

_images/1_upload_more.png

最後に、 Upload Code ボタンをクリックします。

_images/1_upload_code.png

2. プロジェクト

以下のプロジェクトはプログラミングの難易度の順に書かれています。これらの本を順番に読むことをおすすめします。

各プロジェクトでは、回路の組み立て方やプログラムの手順をステップバイステップで非常に詳細に教えています。最終結果を達成するための方法も含まれています。

もちろん、スクリプトを直接開いて実行することもできますが、関連する資料を github からダウンロードしたことを確認する必要があります。

ダウンロードが完了したら、それを解凍します。 ステージモード を参照して、個々のスクリプトを直接実行します。

ただし、 2.9 温湿度の読取りアップロードモード を使用しています。

2.1 テーブルランプ

ここでは、ブレッドボードにLEDを接続し、スプライトがこのLEDの点滅を制御するようにします。

ステージ上のボタンスプライトがクリックされると、LEDは5回点滅し、その後停止します。

_images/2_button.png

学べること

  • ブレッドボード、LED、抵抗

  • ブレッドボード上の回路の作成

  • スプライトの削除と選択

  • コスチュームの切り替え

  • 回数制限のある繰り返しループの設定

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

全体のキットを購入すると便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

回路の作成

以下の図に従ってブレッドボード上に回路を作ります。

LEDのアノード(長いピン)は220Ωの抵抗を通じてピン9に接続され、LEDのカソードはGNDに接続されているので、ピン9に高レベルを与えることでLEDを点灯させることができます。

_images/led_circuit.png

プログラミング

全体のプログラミングは3部分に分かれています。第1部は目的のスプライトを選択すること、第2部はスプライトのコスチュームを切り替えてクリック可能に見せること、第3部はLEDを点滅させることです。

1. Button3スプライトの選択

右上角のDeleteボタンを使用して既存のTobiスプライトを削除し、再度スプライトを選択します。

_images/2_tobi.png

ここでは、 Button3 スプライトを選択します。

_images/2_button3.png

右上のCostumesをクリックすると、Button3スプライトには2つのコスチュームがあることがわかります。 button3-a をリリース状態、 button3-b を押下状態に設定します。

_images/2_button3_2.png

2. コスチュームの切り替え

スプライトがクリックされたとき( Events パレット)、 button3-b のコスチュームに切り替えます( looks パレット)。

_images/2_switch.png

3. LEDを5回点滅させる

[Repeat]ブロックを使用してLEDを5回点滅させる(High-> LOWサイクル)、ピン13をピン9に変更し、最後にコスチュームを button3-a に戻します。

  • [Repeat 10]: 回数制限のある繰り返しループ。自分で繰り返し回数を設定できます。 Control パレットから選択します。

_images/2_led_on_off.png

2.2 ブリージングLED

LEDの明るさを制御するための別の方法を使います。前のプロジェクトとは異なり、ここではLEDの明るさを徐々に減少させ、消失するようにします。

ステージ上のスプライトをクリックすると、LEDの明るさが徐々に増し、瞬時に消灯します。

_images/3_ap.png

学べる内容

  • PWMピンの出力値の設定

  • 変数の作成

  • スプライトの明るさの変更

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

一式をまとめて購入すると便利です。購入リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、それぞれの部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

LED

BUY

回路の作成

このプロジェクトは前のプロジェクト 2.1 テーブルランプ と同じ回路を使用しますが、LEDを点灯または消灯させるためにHIGH/LOWを使用する代わりに、 PWM - Wikipedia シグナルを使用してLEDを徐々に点灯または消灯させます。

PWM信号の範囲は0-255で、Arduino Unoボードでは3, 5, 6, 9, 10, 11がPWM信号を出力できます。Mega2560では、2 - 13, 44 - 46がPWM信号を出力できます。

_images/led_circuit.png

プログラミング

1. スプライトを選択

デフォルトのスプライトを削除し、スプライト領域の右下隅にある Choose a Sprite ボタンをクリックし、検索ボックスに button3 と入力して追加します。

_images/3_sprite.png

2. 変数の作成

pwmの値の変化を保存するための変数 pwm を作成します。

Variables パレットをクリックして Make a Variable を選択します。

_images/3_ap_va.png

変数の名前を入力します。任意の名前で構いませんが、その機能を説明することを推奨します。データタイプは数値で、すべてのスプライト用です。

_images/3_ap_pwm.png

作成したら、 Variables パレット内とチェック状態で pwm が表示されます。これは、この変数がステージ上に表示されることを意味します。チェックを外して、ステージ上にpwmがまだ存在するかどうか確認してみてください。

_images/3_ap_0.png

3. 初期状態の設定

button3 スプライトがクリックされたとき、コスチュームを button-b (クリック状態)に切り替え、変数 pwm の初期値を0に設定します。

  • [set pwm to 0]: Variables パレットから、変数の値を設定するために使用されます。

_images/3_ap_brightness.png

4. LEDを次第に明るくする

pwmの範囲は255なので、[repeat]ブロックを使用して、変数 pwm を5ずつ255に累積し、[set PWM pin]ブロックに入れると、LEDが徐々に点灯するのを見ることができます。

  • [change pwm by 5]: Variables パレットから、変数を特定の数だけ変更するために使用されます。正または負の数をとることができ、正は毎回増加、負は毎回減少を意味します。例えば、ここでは変数pwmを毎回5ずつ増加させています。

  • [set PWM pin]: Arduino Uno パレットから、pwmピンの出力値を設定するために使用されます。

_images/3_ap_1.png

最後に、button3のコスチュームを button-a に切り替え、PWMピンの値を0にして、LEDが徐々に点灯した後、再び消灯するようにします。

_images/3_ap_2.png

2.3 カラフルボール

このプロジェクトでは、RGB LEDを使ってさまざまな色を表示させます。

ステージエリアの異なる色のボールをクリックすると、RGB LEDが異なる色で点灯します。

_images/4_color.png

学べること

  • RGB LEDの原理

  • スプライトの複製と異なるコスチュームの選択

  • 三原色の重ね合わせ

必要な部品

このプロジェクトには以下の部品が必要です。

全体のキットを購入するのが確かに便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

RGB LED

BUY

回路の作成

RGB LEDは、赤、緑、青の3つのLEDを透明または半透明のプラスチックシェルにパッケージングします。3つのピンの入力電圧を変えることでさまざまな色を表示でき、それらを重ね合わせることで、統計によれば16,777,216色の異なる色を作り出すことができます。

_images/4_rgb.png _images/rgb_circuit.png

プログラミング

1. スプライトの選択

デフォルトのスプライトを削除し、 Ball スプライトを選択します。

_images/4_ball.png

それを5回複製します。

_images/4_duplicate_ball.png

これらの5つの Ball スプライトに異なるコスチュームを選び、それぞれの位置に移動させます。

注釈

Ball3 のスプライトのコスチュームの色は、手動で赤に変更する必要があります。

_images/4_rgb1.png

2. RGB LEDを適切な色で点灯させる

コードを理解する前に、 RGB 色モデル を理解する必要があります。

RGB色モデルは、赤、緑、青の光をさまざまな方法で加えて、幅広い色を再現する加色モデルです。

加色混合:赤と緑を加えると黄色、緑と青を加えるとシアン、青と赤を加えるとマゼンタ、3つの原色をすべて加えると白になります。

_images/4_rgb_addition.png

RGB LEDを黄色に点灯させるコードは以下の通りです。

_images/4_yellow.png

ボールスプライト(黄色のボール)がクリックされたとき、ピン11をハイ(赤いLED点灯)、ピン10をハイ(緑のLED点灯)、ピン9をロー(青いLED消灯)に設定して、RGB LEDが黄色に点灯するようにします。

他のスプライトにも、対応する色でRGB LEDを点灯させるコードを書くことができます。

3. Ball2 スプライト(ライトブルー)

_images/4_blue.png

4. Ball3 スプライト(赤)

_images/4_red.png

5. Ball4 スプライト(緑)

_images/4_green.png

6. Ball5 スプライト(紫)

_images/4_purple.png

2.4 LCD1602

LCD1602は2x16文字を表示することができます。今回、ステージ上のキャラクタースプライトと対応する文字を表示させます。

ステージ上で「Hello」と一つずつクリックすると、異なるアニメーション効果が現れ、同時にLCD1602に文字が表示されます。

_images/5_hello.png

学べること

  • LCD1602の使用方法

  • 複数の異なるスプライトの選択

  • スプライトのサイズ、回転角度、色の変更、表示・非表示の設定

必要な部品

このプロジェクトには以下のコンポーネントが必要です。

一式を購入すると非常に便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

I2C LCD1602

BUY

回路の作成

_images/lcd1602_circuit.png

プログラミング

1. スプライトを選択

デフォルトのスプライトを削除し、 Choose a Sprite をクリックしてから letters をクリックし、希望するスプライトを選択します。

_images/5_sprite.png

例として「Hello」を選択しました。以下に示します。

_images/5_sprite1.png

これらのスプライトに異なる効果を設定し、クリックすると同時にLCD1602に表示します。

2. Hは拡大と縮小

H スプライトをクリックし、スクリプトを記述します。

スプライト H がクリックされると、そのサイズを50%にし、元に戻す。同時にLCD1602の第1行第1列にHを表示する。

  • スプライトのサイズを設定します: Looks パレットからスプライトのサイズを0%から100%の間で設定します。

  • カーソルをコルマン行に設定]: Set cursor at columan row]: Display Modules パレットから、LCD1602の特定の行にカーソルを設定し、文字の表示を開始します。

  • 表示を書き込む]: Display Modules パレットから、LCD1602に文字や文字列を表示するために使用します。

_images/5_h.png

LCD1602の行と列の分布は、図に示されています。

_images/5_row.png

3. Eは左右にフリップ

E スプライトをクリックし、スクリプトを記述します。

スプライト E がクリックされたら、180度時計回りに回転し、180度反時計回りに回転して左右にフリップさせる。LCD1602の第1行第2列にHを表示する。

  • 回転度]: Motions パレットから、スプライトを時計回りまたは反時計回りに回転させるために使用します。

_images/5_lcd.png

4. Lは徐々に縮小して拡大

first L スプライトをクリックし、スクリプトを記述します。

スプライト L がクリックされると、[repeat]ブロックを使用してサイズを50%増加させ(5回、各10回)、同じ方法で元のサイズに縮小します。LCD1602の第1行第3列にLを表示する。

  • サイズ変更 モーションパレットから、スプライトのサイズを変更するために使用します。

_images/5_l.png

5. 2番目のLは色を変える

second L スプライトをクリックして、スクリプトを記述します。

スプライト L がクリックされたら、[repeat]ブロックを使用して、20の増分で10回色を変更し、元の色に戻します。LCD1602の第1行第4列にLを表示する。

  • [change color effect by]: によるカラーエフェクトの変更: 色効果を変更するために使用します。1つのコスチュームは色効果を使用して200の異なる色調を取ることができます。

_images/5_2l.png

6. Oは非表示と表示

O スプライトをクリックし、スクリプトを記述します。

O スプライトがクリックされると、非表示と表示のプロセスを3回繰り返し、LCD1602の第1行第5列にOを表示する。

  • [Hide]と[Show]:スプライトを隠したり見せたりします。

_images/5_o.png

2.5 移動するマウス

今日は、ポテンショメーターで制御されるマウスのおもちゃを作成します。

緑の旗がクリックされたとき、ステージ上のマウスが前進し、ポテンショメーターを回すと、マウスが移動の方向を変えます。

_images/6_mouse.png

学べること

  • ポテンショメーターの原理

  • アナログピンと範囲の読み取り

  • ある範囲を別の範囲にマッピングする

  • スプライトの移動と方向変更

必要な部品

このプロジェクトでは、以下の部品が必要です。

全てのキットを購入することは確かに便利です、リンクはこちらです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

ポテンショメータ

BUY

回路の作成

ポテンショメーターは3端子の抵抗素子で、2つの側面ピンは5VとGNDに接続され、中央のピンはA0に接続されます。ArduinoボードのADCコンバーターによる変換後、値の範囲は0-1023です。

_images/potentiometer_circuit.png

プログラミング

1. スプライトを選択する

デフォルトのスプライトを削除し、スプライトエリアの右下にある Choose a Sprite ボタンをクリックします。検索ボックスに mouse を入力し、それをクリックして追加します。

_images/6_sprite.png

2. 変数の作成

ポテンショメータの読み取り値を保存するための変数 value を作成します。

作成すると、 valueVariables パレット内に表示され、チェックされた状態で表示されます。これは、この変数がステージに表示されることを意味します。

_images/6_value.png

3. A0の値を読み取る

A0の読み取り値を変数 value に保存します。

  • [set my variable to 0]: 変数の値を設定します。

  • [read analog pin A0]: A0~A5の値を0-1023の範囲で読み取ります。

_images/6_read_a0.png

全体を読むためには、[forever]ブロックを使用する必要があります。このスクリプトをクリックして実行し、ポテンショメーターを両方向に回転させると、値の範囲が0-1023であることがわかります。

_images/6_1023.png

4. スプライトを移動する

[move steps]ブロックを使用してスプライトを移動します。スクリプトを実行すると、スプライトが中央から右に移動するのが見えます。

_images/6_move.png

5. スプライトの方向を変える

A0の値によってスプライトの移動方向を変えます。A0の値の範囲は0-1023ですが、スプライトの回転方向は-180~180ですので、[map]ブロックを使用する必要があります。

また、スクリプトの開始時に[when green flag clicked]を追加します。

  • [point in direction]: スプライトの操舵角を設定します。 Motion パレットから。

  • [map from to]: ある範囲を別の範囲にマッピングします。

_images/6_direction.png

2.6 ドアベル

このプロジェクトでは、ステージ上のボタンとベルを使ってドアベルを作成します。

緑のフラグがクリックされた後、ボタンを押すとステージ上のベルが音を鳴らします。

_images/7_doorbell.png

学べること

  • ボタンの動作方法

  • デジタルピンと範囲の読み取り

  • 条件ループの作成

  • 背景の追加

  • 音の再生

必要な部品

このプロジェクトには以下の部品が必要です。

全体のキットを購入するのが便利です。リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

ボタン

BUY

コンデンサ

BUY

回路の作成

ボタンは4ピンのデバイスであり、ピン1がピン2に、ピン3がピン4に接続されています。ボタンが押されると、4つのピンが接続され、回路が閉じます。

_images/5_buttonc.png

以下の図に従って回路を組み立てます。

  • ボタンの左側のピンの一つを、プルダウン抵抗と0.1uF(104)キャパシター(ボタン動作時のジッタを除去し、ボタンが動作するときの安定したレベルを出力するため)に接続されているピン12に接続します。

  • 抵抗とキャパシターのもう一方の端子をGNDに、ボタンの右側のピンの一つを5Vに接続します。

_images/button_circuit.png

プログラミング

1. 背景を追加する

右下の Choose a Backdrop ボタンをクリックします。

_images/7_backdrop.png

Bedroom 1 を選択します。

_images/7_bedroom2.png

2. スプライトを選択する

デフォルトのスプライトを削除し、スプライトエリアの右下の Choose a Sprite ボタンをクリックして、検索ボックスに bell を入力し、それを追加します。

_images/7_sprite.png

ステージ上の bell スプライトを選択し、正しい位置に移動します。

_images/7_doorbell.png

3. ボタンを押すとベルが音を鳴らす

[if then]を使用して条件文を作成します。ピン12の読み取り値が1(キーが押されている)の場合、 xylo1 の音が再生されます。

  • [read status of digital pin]: このブロックは Arduino Uno パレットから来ており、デジタルピンの値を読むために使用され、結果は0または1です。

  • [if then]: このブロックは制御ブロックであり、 Control パレットから来ています。そのブーリアン条件が真である場合、その中に保持されているブロックが実行され、その後関与するスクリプトが続行されます。条件が偽の場合、ブロック内のスクリプトは無視されます。条件は一度だけチェックされます。ブロック内のスクリプトが実行されている間に条件が偽に変わっても、完了するまで実行し続けます。

  • [play sound until done]: Soundパレットから、特定の音を再生するために使用されます。

_images/7_bell.png

2.7 低温警報

このプロジェクトでは、低温警報システムを作成します。温度がしきい値を下回ると、ステージに Snowflake スプライトが表示されます。

_images/9_tem.png

学べること

  • サーミスタの動作原理

  • 多変量および減算操作

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

キット全体を購入することは確かに便利です。こちらのリンクを参照してください:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

サーミスタ

BUY

回路の作成

サーミスタは、標準的な抵抗よりも、温度に強く依存する抵抗のタイプで、PTC(温度が上がると抵抗が上がる)とNTC(温度が上がると抵抗が下がる)の2種類の抵抗があります。

以下の図に従って回路を組み立ててください。

サーミスタの一端はGNDに接続され、もう一端はA0に接続され、10Kの抵抗が5Vに直列に接続されています。

ここではNTCサーミスタが使用されているため、温度が上昇するとサーミスタの抵抗が減少し、A0の電圧分割が減少し、A0から取得される値が減少し、逆に増加します。

_images/thermistor_circuit.png

プログラミング

1. スプライトを選択する

デフォルトのスプライトを削除し、スプライトエリアの右下の Choose a Sprite ボタンをクリックして、検索ボックスに Snowflake と入力し、クリックして追加します。

_images/9_snow.png

2. 変数を2つ作成する

A0の値を異なるケースで保存するための2つの変数、 beforecurrent を作成します。

_images/9_va.png

3. A0の値を読む

緑の旗がクリックされたとき、A0の値が読み取られ、変数 before に保存されます。

_images/9_before.png

4. A0の値を再び読む

[forever]の中で、A0の値を再び読み取り、変数 current に保存します。

_images/9_current.png

5. 温度変化を判断する

[if else]ブロックを使用して、A0の現在の値がbeforeよりも50大きいかどうかを判断します。これは温度の低下を表します。この時点で Snowflake スプライトを表示させ、それ以外の場合は非表示にします。

  • [-] & [>]: Operators パレットからの減算および比較演算子。

_images/9_show.png

2.8 光アラーム時計

私たちの日常生活にはさまざまなアラーム時計があります。今回は、光で制御されるアラーム時計を作成してみましょう。朝になり、明るさが増すと、この光アラーム時計はあなたに起きる時間であることを知らせます。

_images/10_clock.png

学べること

  • フォトレジスタの動作原理

  • 音の再生の停止およびスクリプトの実行停止

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

一式をまとめて購入するのはとても便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

フォトレジスタ

BUY

回路の作成

フォトレジスタまたはフォトセルは、光によって変わる可変抵抗器です。フォトレジスタの抵抗は、入射光の強度が増加すると減少します。

以下の図に従って回路を組み立てます。

フォトレジスタの一方の端を5Vに、他方の端をA0に接続し、この端に10Kの抵抗をGNDとシリーズに接続します。

したがって、光の強度が増加すると、フォトレジスタの抵抗が減少し、10Kの抵抗の電圧分割が増加し、A0から得られる値が大きくなります。

_images/photoresistor_circuit.png

プログラミング

1. スプライトを選択

デフォルトのスプライトを削除し、スプライト領域の右下の Choose a Sprite ボタンをクリックし、検索ボックスに bell と入力して、それを追加します。

_images/10_sprite.png

2. A0の値を読む

beforecurrent の2つの変数を作成します。緑のフラグがクリックされると、A0の値を読み取り、参照値として変数 before に格納します。[forever]の中で、A0の値を再度読み取り、変数 current に格納します。

_images/10_reada0.png

3. 音を鳴らす

現在のA0の値が前の値よりも50大きい場合、これは現在の光の強度がしきい値よりも大きいことを示し、その場合にはスプライトに音を鳴らさせます。

_images/10_sound.png

4. スプライトを回転させる

[turn block]を使用して、 bell スプライトを左右に回転させ、アラーム効果を実現します。

_images/10_turn.png

5. すべてを停止

一定の時間アラームが鳴った後、アラームを停止します。

_images/10_stop.png

2.9 温湿度の読取り

前のプロジェクトではステージモードを使用していましたが、アップロードモードでしか使用できない機能もあります。例えば、シリアル通信の機能です。このプロジェクトでは、 アップロードモード のシリアルモニターを使用して、DHT11の温湿度を表示します。

_images/11_serial.png

学べること

必要な部品

このプロジェクトには以下のコンポーネントが必要です。

一式を購入することは非常に便利です。リンクはこちらです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから別々に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

DHT11 湿度温度センサ

-

回路の作成

DHT11のデジタル温湿度センサーは、温度と湿度の較正されたデジタル信号出力を含む複合センサーです。

次の図に従って回路を組み立ててください。

_images/dht11_circuit.png

プログラミング

1. 拡張の追加

Upload モードに切り替え、左下の Add Extension ボタンをクリックし、 Communication を選択して追加します。それがパレットエリアの最後に表示されます。

_images/11_addcom.png

2. Arduino Unoとシリアルモニターの初期化

Upload モードでArduino Unoを起動し、シリアルポートのボーレートを設定します。

  • [Arduino起動時]: Upload モードでArduino Unoを起動します。

  • [シリアルボーレートを設定]: Communications パレットから、シリアルポート0のボーレートを設定します。デフォルトは115200です。Mega2560を使用している場合は、シリアルポート0~3でボーレートを設定することができます。

_images/11_init.png

3. 温度と湿度の読取り

温度と湿度をそれぞれ保存するための2つの変数 temhumi を作成します。ブロックをドラッグ&ドロップすると、コードが右側に表示されます。

_images/11_readtem.png

4. シリアルモニターに表示

読み取った温度と湿度をシリアルモニターに書き込みます。転送が速すぎてPictoBloxがジャムを起こすのを避けるため、[wait seconds]ブロックを使用して、次回の印刷のための一定の時間間隔を追加します。

_images/11_writeserial.png

5. コードのアップロード

Stage モードとは異なり、 Upload モードのコードは、効果を見るために Upload Code ボタンを使用してArduinoボードにアップロードする必要があります。このようにして、USBケーブルを抜いてもプログラムが実行され続けます。

_images/11_upload.png

6. シリアルモニターの起動

今、 Serial Monitor を開き、温度と湿度を確認します。

_images/11_serial.png

2.10 振り子

このプロジェクトでは、矢印の振り子を作りながら、サーボが回転に従います。

_images/12_pun.png

学べること

  • サーボの動作と角度の範囲

  • スプライトを描き、中心点を尾に配置する。

必要な部品

このプロジェクトには、以下の部品が必要です。

キット全体を購入するのは確かに便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

サーボ

BUY

回路の作成

サーボは、180度しか回転できない歯車式のモーターです。回路板からの電気パルスで制御されます。これらのパルスは、サーボにどの位置に移動するべきかを指示します。

サーボには3本のワイヤーがあります。茶色のワイヤーはGND、赤はVCC(3.3Vに接続)、オレンジは信号ワイヤーです。角度の範囲は0-180度です。

以下の図に従って回路を組み立ててください。

_images/servo_circuit.png

プログラミング

1. スプライトの描画

デフォルトのスプライトを削除し、スプライトボタンを選択して Paint をクリックすると、空のスプライト Sprite1 が表示されます。

_images/12_paint1.png

開かれた Costumes ページで、 Line tool を使用して矢印を描きます。

注釈

  • キャンバスの中心から外向きに矢印を描き始めることで、矢印が中心点を原点として円を描くように回転します。

  • Shiftキーを押しながら、ラインの角度を直線または45度にします。

_images/12_paint2.png

描画後、 arrow スプライトがステージに表示されます。それを arrow と名付けます。その後、 Direction の後の数字をクリックすると、円形のダイヤルが表示されます。この矢印をドラッグして、ステージ上の arrow スプライトが尾を原点として回転するかどうかを確認します。

_images/12_paint3.png

arrow スプライトを左から右に振るためには、角度の範囲は-90から-180、180から90です。

_images/12_paint4.png _images/12_paint5.png

2. 変数の作成

servo という名前の変数を作成します。これは角度の値を格納し、初期値を270に設定します。

_images/12_servo.png

3. 左から右に振る

arrow スプライトが左の-90度の位置から右の90度の位置まで振られるようにします。

[repeat]ブロックを使って、毎回変数に-10を加えると、18回で90度になります。それから[point in block]を使って、矢印スプライトがこれらの角度に向かうようにします。

スプライトの回転角度は-180 ~ 180であるため、この範囲外の角度は以下の条件で変換されます。

  • 角度 > 180の場合、角度 -360。

_images/12_servo1.png

4. サーボを回転させる

緑の旗をクリックすると、矢印がすぐに右に回転してから左に戻るのがわかります。そのため、ここで[wait seconds]ブロックを使用して、回転を遅くします。また、[set servo on to angle]ブロックを使用して、Arduinoボードに接続されたサーボを特定の角度に回転させます。

_images/12_servo2.png

5. 右から左への振り

同じ方法で、サーボと arrow スプライトを右から左にゆっくりと回転させます。

  • 角度 > 180の場合、角度 -360。

_images/12_servo3.png

2.11 回転する扇風機

このプロジェクトでは、回転する星のスプライトと扇風機を作ります。

ステージ上の左右の矢印スプライトをクリックすると、モーターと星のスプライトの時計回りと反時計回りの回転を制御でき、星のスプライトをクリックすると回転が停止します。

_images/13_fan.png

学べること

  • モーターの動作原理

  • ブロードキャストの機能

  • スプライト内の他のスクリプトを停止するブロック

必要な部品

このプロジェクトには、以下の部品が必要です。

一式を購入するのは非常に便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

TTモーター

-

L298N モジュール

BUY

回路の作成

_images/motor_circuit.png

プログラミング

目指す効果は、2つの矢印スプライトを使用してモーターと星のスプライトの時計回りと反時計回りの回転をそれぞれ制御し、星のスプライトをクリックするとモーターの回転を停止させることです。

1. スプライトの追加

デフォルトのスプライトを削除し、 Star スプライトと Arrow1 スプライトを選択し、 Arrow1 を1つコピーします。

_images/13_star.png

Costumes オプションで、 Arrow1 スプライトを異なる方向のコスチュームに変更します。

_images/13_star1.png

スプライトのサイズと位置を適切に調整します。

_images/13_star2.png

2. 左の矢印スプライト

このスプライトをクリックすると、メッセージ - turnをブロードキャストし、デジタルピン9をローにし、ピン10をハイに設定し、変数 flag を1に設定します。左の矢印スプライトをクリックすると、モーターが反時計回りに回転します。もし時計回りに回転する場合は、ピン9とピン10の位置を交換してください。

注意点が2つあります。

  • [broadcast]: Events パレットから、他のスプライトにメッセージをブロードキャストするために使用します。他のスプライトがこのメッセージを受け取ると、特定のイベントを実行します。例えば、ここでは turn で、 star スプライトがこのメッセージを受け取ると、回転スクリプトを実行します。

  • 変数 flag: 星のスプライトの回転方向はflagの値によって決まります。ですので、 flag 変数を作成する際には、すべてのスプライトに適用する必要があります。

_images/13_left.png

3. 右の矢印スプライト

このスプライトをクリックすると、メッセージ turnをブロードキャストし、デジタルピン9をハイにし、ピン10をローにしてモーターを時計回りに回転させ、 flag 変数を0に設定します。

_images/13_right.png

4. 星のスプライト

ここには2つのイベントが含まれています。

  • star スプライトがブロードキャストされたメッセージ turnを受け取ると、flagの値を判断します。もしflagが1なら、左に10度回転し、それ以外の場合は逆になります。[FOREVER] にあるので、常に回転し続けます。

  • このスプライトをクリックすると、モーターの両方のピンをハイにして回転を停止させ、このスプライト内の他のスクリプトを停止させます。

_images/13_broadcast.png

2.12 光感知ボール

このプロジェクトでは、フォトレジスタを使用して、ステージ上のボールを上方に飛ばします。フォトレジスタの上に手を置いて、受け取る光の強度をコントロールします。手をフォトレジスタに近づけるほど、その値は小さくなり、ステージ上のボールはより高く飛びます。そうでなければ、ボールは落ちます。ボールが糸に触れると、きれいな音ときらきらとした星の光が放たれます。

_images/18_ball.png

学べること

  • スプライトを色で塗りつぶす

  • スプライト間の接触

必要な部品

このプロジェクトで必要な部品は以下の通りです。

キット全体を購入すると、確かに便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

フォトレジスタ

BUY

回路の作成

フォトレジスタまたはフォトセルは、光に制御される可変抵抗器です。フォトレジスタの抵抗は、入射光の強度が増えると減少します。

以下の図に従って回路を組み立てます。

フォトレジスタの一方の端子を5Vに、他方の端子をA0に接続し、この端子で10Kの抵抗をGNDと直列に接続します。

したがって、光の強度が増えると、フォトレジスタの抵抗が減少し、10K抵抗の電圧分割が増加し、A0で取得される値が大きくなります。

_images/photoresistor_circuit.png

プログラミング

目指す効果は、手をフォトレジスタに近づけるほど、ステージ上のボールのスプライトが上に上がり続け、そうでなければボウルのスプライト上に落ちることです。上を歩くか、下に落ちる際に、ラインのスプライトに触れると、楽音を発し、全方向に星のスプライトを放出します。

1. スプライトと背景の選択

デフォルトのスプライトを削除し、 BallBowl 、および Star スプライトを選択します。

_images/18_ball1.png

Bowl スプライトをステージの下中央に移動し、そのサイズを拡大します。

_images/18_ball3.png

上に移動する必要があるので、 Ball スプライトの方向を0に設定します。

_images/18_ball4.png

Star スプライトのサイズと方向を180に設定します。これにより、下に落ちるようになりますが、別の角度に変更することもできます。

_images/18_ball12.png

Stars の背景を追加します。

_images/18_ball2.png

2. Lineスプライトの描画

Lineスプライトを追加します。

_images/18_ball7.png

Line スプライトの Costumes ページに移動し、キャンバス上の赤いラインの幅を若干狭め、それを5回コピーしてラインを整列させます。

_images/18_ball8.png

ラインに異なる色を塗りつぶします。好きな色を選択し、 Fill ツールをクリックして、ラインの上でマウスを動かして色を塗りつぶします。

_images/18_ball9.png

同じ方法で、他のラインの色を変更します。

_images/18_ball10.png

3. Ballスプライトのスクリプト

Ball スプライトの初期位置を設定し、光の値が800未満の場合(現在の環境に応じて別の値にすることができます)、Ballを上に動かします。

light_valueの変数をステージ上で表示させて、光の強度の変化を随時観察することができます。

_images/18_ball5.png

そうでなければ、 Ball スプライトは落ち、そのY座標を-100の最小値に制限します。これを修正して、 Bowl スプライト上に落ちているように見せることができます。

_images/18_ball6.png

Line スプライトが当たったとき、現在のY座標を ball_coor 変数に保存し、 Bling メッセージがブロードキャストされます。

_images/18_ball11.png

4. Starスプライトのスクリプト

スクリプトが開始されたとき、まず Star スプライトを隠します。 Bling メッセージを受信すると、 Star スプライトをクローンします。

_images/18_ball13.png

Star スプライトがクローンとして表示されると、音声効果を再生し、その座標を Ball スプライトと同期させます。

_images/18_ball14.png

Star スプライトの表示効果を作成し、必要に応じて調整します。

_images/18_ball15.png

2.13 ゲーム - シューティング

テレビでシューティングゲームを見たことはありますか?ターゲットの中心に近づくほど、得点が高くなります。

今日もScratchでシューティングゲームを作ります。このゲームでは、クロスヘアでできるだけ中心に近づけてシュートして、高得点を狙います。

緑のフラグをクリックして開始します。障害物回避モジュールを使用して弾を発射します。

_images/14_shooting.png

学べること

  • 障害物回避モジュールの仕組みと角度の範囲

  • 様々なスプライトの描画

  • タッチカラー

必要な部品

このプロジェクトには以下のコンポーネントが必要です。

一式を購入するのが便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

障害物回避モジュール

BUY

回路の作成

障害物回避モジュールは、距離が調整可能な赤外線近接センサーで、通常はハイ出力で、障害物が検出されるとローになります。

下の図に従って回路を組み立ててください。

_images/avoid_circuit.png

プログラミング

1. クロスヘアスプライトの描画

デフォルトのスプライトを削除し、 Sprite ボタンを選択し、 Paint をクリックすると、空白のスプライト Sprite1 が現れますので、名前を Crosshair とします。

_images/14_shooting0.png

Crosshair スプライトの Costumes ページに移動します。 Circle ツールをクリックし、塗りつぶし色を削除し、アウトラインの色と幅を設定します。

_images/14_shooting02.png

Circle ツールで円を描きます。描画が終わったら、 Select ツールをクリックして、原点がキャンバスの中心に合わせるように円を移動します。

_images/14_shooting03.png

Line ツールを使用して、円の中に十字を描きます。

_images/14_shooting033.png

ターゲットスプライトの描画

新しいスプライトとして Target スプライトを作成します。

_images/14_shooting01.png

Target スプライトのコスチュームページに移動し、 Circle ツールをクリックして、塗りつぶし色を選択し、アウトラインを削除して大きな円を描画します。

_images/14_shooting05.png

同じ方法で、異なる色の円を追加で描画します。 ForwardBackbard ツールを使用して、重なる円の位置を変更できます。すべての円の原点とキャンバスの中心が合うように、ツールで円を移動することも忘れないでください。

_images/14_shooting04.png

3. 背景の追加

色が多すぎず、 Target スプライトの色と一致しない背景を追加します。ここでは Wall1 の背景を選択しました。

_images/14_shooting06.png

4. クロスヘアスプライトのスクリプト

Crosshair スプライトの位置とサイズをランダムに設定し、ランダムに動かします。

_images/14_shooting4.png

障害物回避モジュールの前に手を置くと、低レベルを送信信号として出力します。

_images/14_shooting5.png

shooting メッセージを受け取ると、スプライトは動きを停止し、ゆっくりと縮小します。これは、弾が発射される効果をシミュレートしています。

_images/14_shooting6.png

[Touch color ()] ブロックを使用して、ショットの位置を判断します。

_images/14_shooting7.png

ショットが黄色い円の中にある場合、10が報告されます。

_images/14_shooting8.png

同じ方法を使用して、弾のショット位置を判断します。それが Target スプライトに設定されていない場合、円の外にあることを意味します。

_images/14_shooting9.png

2.14 ゲーム - 風船を膨らます

ここでは、風船を膨らませるゲームをします。

緑のフラグをクリックすると、風船がどんどん大きくなります。風船が大きすぎると爆発します。逆に、小さすぎると落ちてしまいます。いつボタンを押して上に飛ばすかの判断が求められます。

_images/13_balloon0.png

学べること

  • スプライトのコスチュームをペイントする

必要な部品

このプロジェクトに必要なコンポーネントは以下の通りです。

一式を購入すると便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

コンデンサ

BUY

ボタン

BUY

回路の作成

ボタンは4ピンのデバイスです。ピン1はピン2に、ピン3はピン4に接続されています。ボタンが押されると、4つのピンが接続され、回路が閉じます。

_images/5_buttonc.png

以下の図に従って回路を組み立ててください。

  • ボタンの左側のピンの1つを、プルダウン抵抗および0.1uF(104)キャパシタ(ボタンの動作時にジッタを除去し、安定したレベルを出力するため)に接続されているピン12に接続します。

  • 抵抗とキャパシタの他端をGNDに、ボタンの右側のピンの1つを5Vに接続します。

_images/button_circuit.png

プログラミング

1. スプライトと背景の追加

デフォルトのスプライトを削除し、スプライトエリアの右下の Choose a Sprite ボタンをクリックして、 Balloon1 スプライトを選択します。

_images/13_balloon1.png

Choose a backdrop ボタンを使って Boardwalk の背景を追加します。または、好きな背景を選んでください。

_images/13_balloon2.png

2. Balloon1スプライトのコスチュームを描画

風船スプライトの爆発エフェクトのコスチュームを描画しましょう。

Balloon1 スプライトの Costumes ページに移動し、左下の Choose a Costume ボタンをクリックし、 Paint を選択して、空の Costumes 画面を開きます。

_images/13_balloon7.png

色を選んで Brush ツールを使って模様を描きます。

_images/13_balloon3.png

再度色を選択し、塗りつぶしツールをクリックし、マウスを模様の内部に移動して色を塗りつぶします。

_images/13_balloon4.png

最後に、BOOMというテキストを書いて、爆発エフェクトのコスチュームが完成します。

_images/13_balloon5.png

3. Balloonスプライトのスクリプティング

Balloon1 スプライトの初期位置とサイズを設定します。

_images/13_balloon6.png

次に、Balloon スプライトをゆっくりと大きくします。

_images/13_balloon8.png

ボタンが押されたとき(値が1の場合)、 Balloon1 スプライトのサイズの増大が停止します。

  • サイズが90未満の場合、落ちる(y座標が減少)。

  • サイズが90より大きく、120より小さい場合、空に飛ぶ(y座標が増加)。

_images/13_balloon9.png

ボタンが押されていない場合、風船はゆっくりと大きくなり、サイズが120より大きくなると、爆発します(爆発エフェクトのコスチュームに切り替えます)。

_images/13_balloon10.png

2.15 GAME - スタークロスド

次のプロジェクトでは、PictoBloxで楽しいミニゲームをプレイします。

このゲームではジョイスティックモジュールを使用して「スタークロスド」というゲームをプレイします。

スクリプトが実行されると、星がランダムにステージ上に表示されます。ロケットを操作して星を避けるためにジョイスティックを使ってください。星に触れるとゲームオーバーとなります。

_images/16_rocket.png

学べること

  • ジョイスティックモジュールの仕組み

  • スプライトのx、y座標の設定

必要な部品

このプロジェクトで必要なコンポーネントは以下の通りです。

キットで一式を購入すると便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

ジョイスティックモジュール

-

回路の作成

ジョイスティックは、基盤上でピボットとして動くスティックで構成された入力デバイスです。これは主にビデオゲームやロボットの制御に使われます。

完全な動きをコンピューターに伝えるため、ジョイスティックはスティックの位置を二つの軸、X軸(左から右)とY軸(上から下)で測定する必要があります。

ジョイスティックの動きの座標は次の図で示されています。

注釈

  • x座標は左から右、範囲は0-1023。

  • y座標は上から下、範囲は0-1023。

_images/16_joystick.png

次に、以下の図に従って回路を組み立ててください。

_images/joystick_circuit.png

プログラミング

このスクリプトの全体の目的は、緑のフラグがクリックされると、 Stars スプライトがステージ上で曲線を描いて動き、ジョイスティックを使用して Rocketship を動かし、 Star スプライトに触れないようにすることです。

1. スプライトと背景の追加

デフォルトのスプライトを削除し、 Choose a Sprite ボタンを使用して Rocketship スプライトと Star スプライトを追加します。 Rocket スプライトのサイズは50%に設定してください。

_images/16_sprite.png

次に、 Choose a BackdropStars の背景を追加してください。

_images/16_sprite1.png

2. Rocketshipのスクリプティング

Rocketship スプライトは、ランダムな位置に表示され、次にジョイスティックで上、下、左、右に動かす効果を実現します。

作業の流れは以下の通りです。

  • 緑のフラグがクリックされると、スプライトはランダムな位置に移動し、2つの変数 xy を作成します。これらは、A0(ジョイスティックのVRX)とA1(ジョイスティックのVRY)から読み取られる値をそれぞれ格納します。スクリプトを実行し、ジョイスティックを上下、左右に切り替えて、xとyの値の範囲を確認することができます。

_images/16_roc2.png
  • A0の値は0-1023の範囲内にあり(中央は約512)、x-512>200 を使用してジョイスティックが右に切り替えられているかどうかを判断し、そうであれば、スプライトのx座標を+30にします(スプライトを右に移動)。

_images/16_roc3.png
  • ジョイスティックが左に切り替えられている場合(x-512<-200)、スプライトのx座標は-30にします(スプライトを左に移動)。

_images/16_roc4.png
  • ジョイスティックのy座標は上(0)から下(1023)へ、そしてスプライトのy座標は下から上へです。そのため、ジョイスティックを上に動かし、スプライトを上に動かすためには、スクリプト内のy座標は-30でなければなりません。

_images/16_roc5.png
  • ジョイスティックが下にフリックされると、スプライトのy座標は+30になります。

_images/16_roc6.png

3. Starのスクリプティング

Star スプライトの目的は、ランダムな位置に表示され、 Rocketship に当たった場合は、スクリプトが停止してゲームが終了することです。

  • 緑のフラグがクリックされ、スプライトがランダムな位置に移動すると、[turn degrees] ブロックは Star スプライトを少し角度を変えて前進させ、曲線で動いているように見えるようにします。もしエッジに当たったら、バウンスします。

_images/16_star1.png
  • スプライトが動いている間に Rocketship スプライトに触れた場合、スクリプトの実行を停止します。

_images/16_star2.png

2.16 ゲーム - りんごを食べる

このプロジェクトでは、ボタンを使用してビートルを操作し、りんごを食べるゲームを楽しみます。

緑のフラグをクリックした後、ボタンを押すとビートルは回転します。ボタンを再度押すとビートルはその角度で直進します。マップ上の黒い線に触れずに、適切な角度でビートルを操作し、りんごを食べるまで進めてください。もし黒い線に触れてしまったら、ゲームオーバーとなります。

_images/14_apple.png

必要な部品

このプロジェクトで必要な部品は以下の通りです。

全ての部品が含まれたキットを購入するのは非常に便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、部品を個別に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

コンデンサ

BUY

ボタン

BUY

回路の作成

ボタンは4ピンのデバイスです。ピン1はピン2に、ピン3はピン4に接続されています。ボタンが押されると、4つのピンが接続され、回路が完成します。

_images/5_buttonc.png

下記の図に従い、回路を組み立ててください。

  • ボタンの左側のピンの1つを、プルダウン抵抗と0.1uF (104) のキャパシターに接続されているピン12に接続します(ボタン動作時のジッタを除去し、安定した出力を得るため)。

  • 抵抗とキャパシタのもう一方の端子をGNDに接続し、ボタンの右側のピンの1つを5Vに接続します。

_images/button_circuit.png

プログラミング

私たちが達成したい効果は、ボタンを使って Beetle スプライトの方向を制御し、 Maze バックドロップ上の黒い線に触れずに前進してりんごを食べ、食べるとバックドロップが切り替わることです。

まず関連するバックドロップとスプライトを追加します。

1. バックドロップとスプライトの追加

Choose a backdrop ボタンを使って Maze バックドロップを追加します。

_images/14_backdrop.png

デフォルトのスプライトを削除し、 Beetle スプライトを選択します。

_images/14_sprite.png

Beetle スプライトを Maze バックドロップの入口に配置し、この時点でのx,y座標の値を覚えておき、スプライトのサイズを40%に調整します。

_images/14_sprite1.png

2. バックドロップの描画

次に、WIN!キャラクターが表示されるバックドロップを簡単に描画します。

まずバックドロップのサムネイルをクリックして Backdrops ページに移動し、blank backdrop1をクリックします。

_images/14_paint_back.png

描画を開始します。下の画像を参考に描くことができますし、勝利の表情として独自のバックドロップを描くこともできます。

  • Circle ツールを使用して、色を赤に設定し、アウトラインを持たない楕円を描きます。

  • 次に Text ツールを使って、"WIN!"という文字を書き、文字の色を黒に設定し、文字のサイズと位置を調整します。

  • バックドロップの名前を Win にします。

_images/14_win.png

3. バックドロップのスクリプト作成

ゲームが開始するたびに、バックドロップを Maze に切り替える必要があります。

_images/14_switchback.png

4. Beetleスプライトのスクリプトの記述

ボタンの制御の下で前進と方向転換ができるように、スプライト Beetle のスクリプトを書きます。ワークフローは以下の通りです。

  • 緑のフラグがクリックされたとき、 Beetle の角度を90に設定し、位置を(-134, -134)に設定します。また、自分で配置した位置の座標値に置き換えることもできます。変数 flag を作成し、初期値を-1に設定します。

_images/14_bee1.png

次に、[forever]ブロック内で、4つの[if]ブロックを使用して様々な可能性のあるシナリオを判断します。

  • キーが1(pressed)の場合、[mod]ブロックを使用して変数 flag の値を0と1の間で切り替えます(このプレスのための0、次のプレスのための1を交互にする)。

_images/14_bee2.png
  • flag=0(このキーの押下)の場合、 Beetle スプライトは時計回りに回転します。次にflagが1(再びキーが押された)と等しいかどうかを判断し、 Beetle スプライトが前進するか、時計回りに回り続けるかを決定します。

_images/14_bee3.png
  • Beetleスプライトが黒( Maze バックドロップ上の黒い線)に触れると、ゲームは終了し、スクリプトは実行を停止します。

注釈

[Touch color]ブロック内の色領域をクリックし、アイドロッパーツールを選択してステージ上の黒い線の色を取得する必要があります。任意で黒を選択すると、この[Touch color]ブロックは動作しません。

_images/14_bee5.png
  • Beetleが赤に触れると(アップルの赤い色を取得するためにストロツールも使用します)、バックドロップは Win に切り替わり、ゲームは成功し、スクリプトの実行が停止します。

_images/14_bee4.png

2.17 ゲーム - フラッピーパロット

このゲームでは、超音波モジュールを利用して、フラッピーパロットというゲームをプレイします。

スクリプトが実行されると、緑の竹がランダムな高さで右から左へとゆっくりと移動します。超音波モジュールの上に手を置き、超音波モジュールと手の距離が10cm未満の場合、パロットは上昇します。それ以外の場合、下降します。 緑の竹(パドル)にぶつからないように、手と超音波モジュールとの距離を調節する必要があります。もし接触した場合、ゲームオーバーです。

_images/15_parrot.png

必要な部品

このプロジェクトには以下の部品が必要です。

全てのキットをまとめて購入するのが便利です。以下にリンクを記載します。

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、個別に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

超音波モジュール

BUY

回路の作成

超音波センサーモジュールは、超音波を使って対象物までの距離を測定する機器である。 2つのプローブがある。1つは超音波を送信するもので、もう1つは超音波を受信し、送受信時間を距離に変換することで、障害物との距離を検出する。

以下の図に従って回路を組み立ててください。

_images/ultrasonic_circuit.png

プログラミング

実現したい効果は、超音波モジュールを使って、スプライト Parrot の飛行高さをコントロールし、同時に Paddle スプライトを避けることです。

1. スプライトの追加

デフォルトのスプライトを削除し、 Choose a Sprite ボタンで Parrot スプライトを追加します。サイズを50%に設定し、位置を左中央に移動します。

_images/15_sprite.png

次に、 Paddle スプライトを追加し、サイズを150%に設定、角度を180に設定し、初期位置を右上隅に移動します。

_images/15_sprite1.png

Paddle スプライトの Costumes ページに移動して、アウトラインを削除します。

_images/15_sprite2.png

2. Parrotスプライトのスクリプト作成

次に、飛行中の Parrot スプライトのスクリプトを記述します。飛行高さは超音波モジュールの検出距離によって決まります。

  • 緑のフラグがクリックされたとき、0.2秒ごとにコスチュームを切り替えて常に飛んでいるように見せます。

_images/15_parr1.png
  • 超音波モジュールの値を読み取り、[round]ブロックを使って四捨五入した後、変数 distance に格納します。

_images/15_parr2.png
  • 超音波の検出距離が10cm未満の場合、y座標を50増やし、 Parrot スプライトは上昇します。それ以外の場合、y座標の値は40減少し、 Parrot は下降します。

_images/15_parr3.png
  • Parrot スプライトが Paddle スプライトに触れると、ゲームは終了し、スクリプトの実行が停止します。

_images/15_parr4.png

3. Paddleスプライトのスクリプト作成

次に、 Paddle スプライトのスクリプトを書きます。これはステージ上でランダムに表示する必要があります。

  • 緑のフラグがクリックされたとき、スプライト Paddle を非表示にし、同時に自分自身のクローンを作成します。[create clone of] ブロックはコントロールブロックおよびスタックブロックです。引数のスプライトのクローンを作成します。

_images/15_padd.png
  • Paddle がクローンとして表示されるとき、x座標は220(一番右)で、y座標はランダムに(-125から125)(高さランダム)になります。

_images/15_padd1.png
  • [repeat]ブロックを使用して、x座標の値をゆっくりと減少させることで、 Paddle スプライトのクローンが右から左にゆっくりと移動するのを見ることができます。

_images/15_padd2.png
  • 新しい Paddle スプライトのクローンを再度作成し、前のクローンを削除します。

_images/15_padd3.png

2.18 ゲーム - ブレイクアウトクローン

このゲームでは、ポテンショメータを利用してブレイクアウトクローンゲームをプレイします。

緑のフラグをクリックした後、ポテンショメータでステージ上のパドルを操作してボールをキャッチします。ボールを上に移動させ、ブロックをヒットさせると、すべてのブロックが消え、ゲームに勝利します。ボールをキャッチしないと、ゲームに敗北します。

_images/17_brick.png

必要な部品

このプロジェクトで必要となる部品は以下のとおりです。

一括でキットを購入することがおすすめです。以下のリンクを参照してください:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから部品を個別に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

ポテンショメータ

BUY

回路の作成

ポテンショメータは3端子の抵抗素子です。2つのサイドピンは5VとGNDに接続し、中央のピンはA0に接続します。ArduinoボードのADCコンバータを使用して変換した後、値の範囲は0-1023となります。

_images/potentiometer_circuit.png

プログラミング

ステージには3つのスプライトが存在します。

1. パドルスプライト

Paddle の目的は、ステージの底の中央に初期位置があり、ポテンショメータで左右に動かすことです。

  • デフォルトのスプライトを削除し、 Choose a Sprite ボタンで Paddle スプライトを追加して、xとyの位置を(0, -140)に設定します。

_images/17_padd1.png
  • Costumes ページに移動して、アウトラインを削除し、色を濃い灰色に変更します。

_images/17_padd3.png
  • 緑のフラグがクリックされたとき、 Paddle スプライトの初期位置を(0, -140)に設定し、A0の値(ポテンショメータ)を変数 a0 に読み取ります。 Paddle スプライトはx座標 -195~195で左右に移動するため、[map]ブロックを使用して、変数 a0 の範囲0~1023を-195~195にマッピングします。

_images/17_padd2.png
  • ポテンショメータを回して、ステージ上で Paddle が左右に動くかを確認します。

2. ボールスプライト

ボールスプライトの動作は、ステージを移動し、端に触れると跳ね返ります。ステージの上のブロックに触れると下に跳ね返り、落下中にパドルスプライトに触れると上に跳ね返ります。そうでない場合は、スクリプトの実行を停止し、ゲームが終了します。

  • Ball スプライトを追加します。

_images/17_ball1.png
  • 緑のフラグをクリックすると、 Ball スプライトの角度を45°に設定し、初期位置を(0, -120)に設定します。

_images/17_ball2.png
  • さて、 Ball スプライトをステージの周りに移動させ、端に触れると跳ね返るようにします。緑のフラグをクリックして効果を確認してください。

_images/17_ball3.png
  • Ball スプライトが Paddle スプライトに触れた場合、反射を行います。これを簡単に実行する方法は、角度を直接反転させることですが、それを行うとボールの軌道が完全に固定されてしまい、非常に退屈になります。したがって、2つのスプライトの中心を使用して計算し、バッフルの中心の反対方向にボールを跳ね返すようにします。

_images/17_ball4.png _images/17_ball6.png
  • Ball スプライトがステージの端に落ちると、スクリプトの実行が停止し、ゲームが終了します。

_images/17_ball5.png

3. Block1 スプライト

Block1 スプライトは、ステージの上で自身の4x8のクローンをランダムな色で表示し、 Ball スプライトに触れられるとクローンを削除する効果があります。

Block1 スプライトは PictoBlox ライブラリには含まれていないので、自分で描くか、既存のスプライトを修正する必要があります。ここでは Button3 スプライトを使って修正します。

  • Button3 スプライトを追加した後、 Costumes ページに移動します。まず button-a を削除し、 button-b の幅と高さを縮小し、スプライトの名前を Block1 に変更します。

注釈

  • Block1 の幅については、画面上で8つ並べることができるかどうかをシミュレートして確認してください。できない場合は、幅を適切に縮小してください。

  • Block1 スプライトを縮小する過程で、中心点をスプライトの中央に保持する必要があります。

_images/17_bri2.png
  • まず2つの変数を作成します。 block はブロックの数を、 roll は行数を保存します。

_images/17_bri3.png
  • Block1 スプライトのクローンを作成し、左から右、上から下に1つずつ、合計4x8でランダムな色で表示する必要があります。

_images/17_bri4.png
  • スクリプトを書き終えたら、緑のフラグをクリックしてステージ上の表示を確認します。もし、表示がコンパクトすぎるか小さすぎる場合は、サイズを変更できます。

_images/17_bri5.png
  • トリガーイベントを書きます。クローン化された Block1 スプライトが Ball スプライトに触れると、クローンを削除し、 crush というメッセージをブロードキャストします。

_images/17_bri6.png
  • Ball スプライトに戻って、 crush が受信された場合( Ball スプライトが Block1 スプライトのクローンに触れた場合)、 Ball は逆の方向にポップします。

_images/17_ball7.png

2.19 ゲーム - 釣り

このゲームでは、ボタンを使って釣りを楽しむことができます。

スクリプトを実行すると、魚がステージの左右を泳ぐので、魚が釣り針に近づいたとき(長押し推奨)にボタンを押して魚を釣ります。釣れた魚の数は自動的に記録されます。

_images/18_fish.png

必要な部品

このプロジェクトには、以下の部品が必要です。

全ての部品を含むキットを購入すると非常に便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、個別にも購入できます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

コンデンサ

BUY

ボタン

BUY

回路の作成

ボタンは4ピンのデバイスで、ピン1はピン2に、ピン3はピン4に接続されています。ボタンを押すと、4つのピンが接続されて回路が閉じます。

_images/5_buttonc.png

以下の図に従って回路を組み立てます。

  • ボタンの左側のピンの一つを、プルダウン抵抗と0.1uF (104) のキャパシタ(ボタンが動作する際のジッタを除去し、安定したレベルを出力するため)に接続されているピン12に接続します。

  • 抵抗とキャパシタのもう一方の端をGNDに、ボタンの右側のピンの一つを5Vに接続します。

_images/button_circuit.png

プログラミング

まず、 Underwater の背景を選択し、 Fish スプライトを追加してステージ上で左右に泳がせます。次に、 Fishhook スプライトを描き、ボタンで制御して釣りを開始します。 Fish スプライトがフック状態(赤くなる)で Fishhook スプライトに触れると、フックされます。

1. 背景の追加

Choose a Backdrop ボタンを使って、 Underwater の背景を追加します。

_images/18_under.png

2. 釣り針スプライト

Fishhook スプライトは通常、黄色の状態で水中に留まっています。ボタンが押されると、釣り状態(赤)になり、ステージの上に移動します。

Pictobloxには Fishhook スプライトがありませんので、 Glow-J スプライトを修正して釣り針のように見せることができます。

  • Choose a SpriteGlow-J スプライトを追加します。

_images/18_hook.png
  • 次に、 Glow-J スプライトの Costumes ページに移動し、画面のCyanの塗りつぶしを選択して削除します。その後、Jの色を赤に変更し、その幅も縮小します。最も重要な点は、その上部を中心点ちょうどに配置することです。

_images/18_hook1.png
  • Line tool を使用して、中心点から上方向に可能な限り長く線を引きます(ステージ外の線)。スプライトが描かれたら、スプライトの名前を Fishhook に変更し、適切な位置に移動します。

_images/18_hook2.png
  • 緑のフラグがクリックされたとき、スプライトの色効果を30(黄色)に設定し、その初期位置を設定します。

_images/18_hook3.png
  • ボタンが押された場合、色効果を0(赤、釣り開始状態)に設定し、0.1秒待った後、 Fishhook スプライトをステージの上部に移動します。ボタンを離すと、 Fishhook は初期位置に戻ります。

_images/18_hook4.png

3. 魚スプライト

Fish スプライトが達成すべき効果は、ステージの左右に移動し、釣りの状態である Fishhook スプライトに遭遇したとき、それを縮小して特定の位置に移動させてから消失させ、新しい fish スプライトを再度クローンすることです。

  • 今度は fish スプライトを追加し、そのサイズと位置を調整します。

_images/18_fish1.png
  • 釣れた魚の数を保存する変数 score を作成し、このスプライトを隠し、それをクローンします。

_images/18_fish2.png
  • fish スプライトのクローンを表示し、そのコスチュームを切り替え、最後に初期位置を設定します。

_images/18_fish3.png
  • fish スプライトのクローンを左右に移動させ、エッジに触れると反射させます。

_images/18_fish4.png
  • Fishhook スプライトを通過しても、 sss**fish** スプライト(クローンのもの)は反応しません。釣りの状態(赤くなる)で Fishhook スプライトに触れると、それが捕まり、その時点でスコア(変数score)+1、そしてスコアアニメーションも表示されます(サイズを40%縮小し、スコアボードの位置に素早く移動して消失)。同時に、新しい魚が作成され(新しい魚スプライトのクローン)、ゲームが続行されます。

注釈

[Touch color] ブロックの色エリアをクリックして、ステージの Fishhook スプライトの赤色を取得するためのアイドロッパーツールを選択する必要があります。適当に色を選択すると、この [Touch color] ブロックは機能しません。

_images/18_fish5.png

2.20 ゲーム - 白いタイルをタップしないで

多くの方がスマートフォンでこのゲームをプレイしたことがあると思います。このゲームは、ランダムに出現する黒いタイルをタップしてポイントを追加し、スピードはどんどん速くなります。白いブロックをタップしたり、黒いブロックを見逃したりするとゲームオーバーです。

今回は、PictoBloxを使用してこれを再現します。

ブレッドボード上に2つのIR障害物回避モジュールを縦に挿入します。手をIRモジュールの上に置くと、ステージ上に点滅するドットが表示され、タップが行われたことを示します。

黒いブロックにタップすると、スコアは1増え、白いブロックに触れると、スコアは1減ります。

ステージ上の黒いブロックの位置に応じて、左のIRモジュールの上か、右のIRモジュールの上に手を置くかを決める必要があります。

_images/21_tile.png

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

全てのキットを購入するのは確かに便利です。リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤー

BUY

障害物回避モジュール

BUY

回路の作成

障害物回避モジュールは、出力が通常は高く、障害物が検出されると低くなる距離調整可能な赤外線近接センサーです。

以下の図に従って回路を組み立てます。

_images/2avoid_circuit.png

プログラミング

ここでは3つのスプライト、 TileLeft IRRight IR が必要です。

  • Tile スプライト: 黒と白のタイルが交互に下方向に移動する効果を実現するために使用されます。スマートフォンのこのゲームは通常4列ですが、ここでは2列だけを行います。

  • Left IR スプライト: クリック効果を実現するために使用されます。左のIRモジュールがあなたの手を感知すると、 Left IR スプライトにメッセージ - left を送信し、それを起動します。ステージ上の黒いタイルに触れると、スコアは1増加し、それ以外の場合はスコアは1減少します。

  • Right IR スプライト: 機能は Left IR とほぼ同じですが、 Right の情報を受け取ります。

1. Tileスプライトを描く

デフォルトのスプライトを削除し、 Add Sprite アイコンにマウスオーバーして Paint を選択し、空のスプライトが表示され、それを Tile と名付けます。

_images/21_tile1.png

Costumes ページに移動し、 Rectangle ツールを使用して長方形を描きます。

_images/21_tile2.png

長方形を選択し、 Copy -> Paste をクリックして同じ長方形を作成し、2つの長方形をフラッシュポジションに移動します。

_images/21_tile01.png

長方形の1つを選択し、塗りつぶしの色を黒に選択します。

_images/21_tile02.png

2つの長方形を選択して、キャンバスの中心点が一致するように移動します。

_images/21_tile0.png

costume1を複製し、2つの長方形の塗りつぶしの色を交互に変更します。例えば、costume1の塗りつぶしの色は左が白で右が黒、costume2の塗りつぶしの色は左が黒で右が白です。

_images/21_tile3.png

2. Tile スプライトのスクリプト作成

Blocks ページに戻り、 Tile スプライトの初期位置をステージの上部に設定します。

_images/21_tile4.png

変数 - blocks を作成し、Tile スプライトが何回現れるかを決定する初期値を設定します。[repeat until] ブロックを使用して、 blocks 変数を徐々に減少させ、 blocks が 0 になるまで続けます。この間、スプライト Tile のコスチュームをランダムに切り替えます。

緑の旗をクリックすると、ステージ上で Tile スプライトがコスチュームを素早く切り替えるのを見ることができます。

_images/21_tile5.png

blocks 変数が減少している間、 Tile スプライトのクローンを作成し、blocks が 0 になったらスクリプトの実行を停止します。ここでは2つの [wait () seconds] ブロックが使用されています。1つ目は Tile のクローン間の間隔を制限するため、2つ目は変数 blocks がすぐにプログラムを停止せずに0に減少させるため、最後のタイルスプライトに十分な移動時間を与えるためです。

_images/21_tile6.png

Tile スプライトのクローンがゆっくりと下に移動し、ステージの底に達したら削除するようにスクリプトを書きます。y座標の変化は、落下速度に影響を与えます。値が大きいほど、落下速度は速くなります。

_images/21_tile7.png

本体を非表示にし、クローンを表示します。

_images/21_tile8.png

3. 2つのIRモジュールの値を読む

バックドロップで、2つのIRモジュールの値を読み取り、対応するアクションを行います。

  • 左のIR障害物回避モジュールが手を感知した場合、メッセージ - left をブロードキャストします。

  • 左のIR回避モジュールが手を感知した場合、メッセージ - right をブロードキャストします。

_images/21_tile9.png

4. Left IR スプライト

再度、 Add sprite アイコンの上にマウスを置き、 Paint を選択して Left IR という新しいスプライトを作成します。

_images/21_tile10.png

Left IR スプライトの Costumes ページに移動し、塗りつぶし色(黒と白を除く任意の色)を選択し、円を描きます。

_images/21_tile11.png

次に、 Left IR スプライトのスクリプトを開始します。メッセージ - left が受信されたとき(左のIR受信モジュールが障害物を検出した場合)、 Tile スプライトの黒ブロックがタッチされているかどうかを判断し、タッチされていれば、変数 count を1増やし、そうでなければ1減らします。

_images/21_tile12.png

注釈

Tile スプライトをステージに表示させ、 Tile スプライトの黒ブロックの色を吸収する必要があります。

_images/21_tile13.png

Left IR のセンシング効果(ズームイン/アウト)を実装しましょう。

_images/21_tile14.png

緑の旗がクリックされたときに Left IR スプライトを非表示にし、メッセージ - left が受信されたときに表示し、最終的に再び非表示にします。

_images/21_tile15.png

5. Right IR スプライト

Left IR スプライトをコピーして、 Right IR に名前を変更します。

_images/21_tile16.png

次に、受信メッセージを - right に変更します。

_images/21_tile17.png

すべてのスクリプト作成が完了したら、緑の旗をクリックしてスクリプトを実行できます。

2.21 GAME - 心を守れ

このプロジェクトでは、反応速度を試すゲームを作成しましょう。

舞台には矩形の箱に守られた心があり、舞台の任意の位置からこの心に向かって矢が飛んできます。矢の色はランダムに黒と白の間で変わり、矢はますます速く飛びます。

矩形の箱の色と矢の色が同じ場合、矢は外部にブロックされ、レベルが1追加されます。両方の色が同じでない場合、矢は心を撃ち抜き、ゲームは終了します。

ここでは、矩形のボックスの色はLine Trackingモジュールによって制御されます。モジュールが黒い表面(反射する表面)に置かれたとき、矩形のボックスの色は黒であり、それ以外の場合は白です。

従って、矢の色に応じて、Line Trackingモジュールを白い表面または黒い表面に置くかどうかを決定する必要があります。

_images/22_heart.png

必要な部品

このプロジェクトには、以下のコンポーネントが必要です。

キット全体を購入すると確かに便利です。リンクはこちらです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

ライン追跡モジュール

BUY

回路の作成

これはデジタルのLine Trackingモジュールであり、黒い線が検出されると1を出力し、白い線が検出されると0の値を出力します。さらに、モジュール上のポテンショメータを通じて感知距離を調整することができます。

次の図に従って回路を組み立ててください。

_images/linetrack_circuit.png

注釈

プロジェクトを開始する前に、モジュールの感度を調整する必要があります。

上記の図に従って配線し、R3ボードに電源を供給します(USBケーブルを直接挿入するか、9Vの電池ボタンケーブルを使用)。コードをアップロードせずに。

机の上に黒い電気テープを貼り、Line Trackモジュールを机から2cmの高さに置きます。

センサーを下に向け、モジュールの信号LEDが白いテーブルで点灯し、黒いテープで消灯することを確認します。

そうでない場合、モジュール上のポテンショメータを調整して、上記の効果を実現できるようにします。

プログラミング

ここでは、 HeartSquare BoxArrow1 の3つのスプライトを作成する必要があります。

  • Heart:舞台の真ん中で止まっていて、 Arrow1 スプライトに触れるとゲームが終了します。

  • Square Box:コスチュームが2種類あり、黒と白で、Line Trackingモジュールの値に応じてコスチュームを切り替えます。

  • Arrow:任意の位置から舞台の中央に向かって黒/白で飛びます。その色が Square Box スプライトの色と一致する場合、それはブロックされ、ランダムな位置から舞台の中央に再び飛ぶ。その色が Square Box スプライトの色と一致しない場合、 Heart スプライトを通過し、ゲームが終了します。

1. Square Boxスプライトを追加する

Arrow1とSquare Boxスプライトの両方が白いコスチュームを持っているため、それらを舞台に表示するために、今、背景を黒、白、赤を除く任意の色で塗りつぶします。

  • Backdrop1 をクリックして、その Backdrops ページに移動します。

  • 塗りつぶす色を選択します。

  • 描画ボードと同じサイズの矩形を描画するために Rectangle ツールを使用します。

_images/22_heart0.png

デフォルトのスプライトを削除し、 Choose a Sprite ボタンを使用して Square Box スプライトを追加し、そのxとyを(0, 0)に設定します。

_images/22_heart1.png

Square Box スプライトの Costumes ページに移動して、黒と白のコスチュームを設定します。

  • 選択ツールをクリックします。

  • キャンバス上の矩形を選択します。

  • 塗りつぶしの色を黒に設定します。

  • そして、コスチュームの名前を Black とします。

_images/22_heart2.png

2番目のコスチュームを選択し、塗りつぶしの色を白に設定し、その名前をWhiteに設定し、残りのコスチュームを削除します。

_images/22_heart3.png

2. Heartスプライトの追加

Heart スプライトを追加し、その位置を(0, 0)に設定し、Square Boxの中に位置しているようにサイズを縮小します。

_images/22_heart5.png

Costumes ページで、紫色のハートのコスチュームを破損しているように調整します。

_images/22_heart6.png

3. Arrow1スプライトの追加

Arrow1 スプライトを追加します。

_images/22_heart7.png

Costumes ページで、右向きのコスチュームを保持・複製し、その色を黒と白に設定します。

_images/22_heart8.png

4. Square Boxスプライトのスクリプト作成

Blocks ページに戻り、 Square Box スプライトのスクリプトを作成します。

  • デジタルピン2(ラインフォローモジュール)の値が1(黒い線が検出された場合)の場合、コスチュームを Black に切り替えます。

  • それ以外の場合は、コスチュームを White に切り替えます。

_images/22_heart4.png

5. Heartスプライトのスクリプト作成

Heart スプライトは Square Box 内に保護されており、デフォルトでは赤いコスチュームです。Arrow1スプライトが触れた場合、ゲームは終了します。

_images/22_heart9.png

6. Arrow1スプライトのスクリプト作成

緑のフラグがクリックされたとき、 Arrow1 スプライトを非表示にし、クローンを作成します。

_images/22_heart10.png

[init] ブロックを作成して、 Arrow1 スプライトの位置、向き、色を初期化します。

ランダムな位置で現れ、それと Heart スプライトとの距離が200未満の場合、距離が200以上になるまで外向きに移動します。

_images/22_heart11.png

Heart スプライトの方向に向けてその方向を設定します。

_images/22_heart12.png

色を黒/白の間でランダムに切り替えます。

  • 変数の色が0の場合、コスチュームを White に切り替えます。

  • 変数の色が1の場合、コスチュームを Black に切り替えます。

_images/22_heart14.png

これで、移動を開始します。変数 level の値が増加すると、移動速度が速くなります。

_images/22_heart13.png

Square Box スプライトとの衝突効果を設定します。

  • Arrow1 スプライトと Square Box スプライトの色が同じ(Line Trackモジュールの値に応じて変更される)場合、新しいクローンが作成され、ゲームは続行されます。

  • 彼らの色が一致しない場合、 Arrow1 スプライトは移動を続け、 Heart スプライトに当たるとゲームが終了します。

_images/22_heart15.png

注釈

2つの [touch color()] ブロックは、Square Boxの黒/白のコスチュームをそれぞれ別々に取得する必要があります。

_images/22_heart16.png

2.22 GAME - ドラゴン討伐

このゲームでは、ジョイスティックを使ってドラゴンを討伐します。

緑色をクリックすると、ドラゴンは右側で上下に浮かび、時々火を吹きます。魔法の杖の動きをジョイスティックで制御し、ドラゴンに向かって星の攻撃を打ち出しつつ、ドラゴンが放つ炎を避けて、最終的に倒す必要があります。

_images/19_dragon.png

必要な部品

このプロジェクトには以下の部品が必要です。

全セットを購入することは非常に便利です。リンクは以下の通りです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ジャンパーワイヤー

BUY

ジョイスティックモジュール

-

回路の作成

ジョイスティックは、ベース上で旋回するスティックを持つ入力デバイスで、制御するデバイスにその角度や方向を報告します。ジョイスティックは、ビデオゲームやロボットの制御によく使用されます。

コンピュータに完全な動きを伝えるために、ジョイスティックはスティックの位置を2つの軸で測定する必要があります – X軸(左から右)とY軸(上から下)です。

ジョイスティックの動きの座標は以下の図に示されています。

注釈

  • x座標は左から右へ、範囲は0-1023。

  • y座標は上から下へ、範囲は0-1023。

_images/16_joystick.png

以下の図に従って回路を組み立ててください。

_images/joystick_circuit.png

プログラミング

1. ドラゴン

Woods の背景は Choose a Backdrop ボタンから追加します。

_images/19_dragon01.png
  • デフォルトのスプライトを削除し、 Dragon スプライトを追加します。

_images/19_dragon0.png
  • Costumes ページに移動し、dragon-b と dragon-c を水平に反転します。

_images/19_dragon1.png
  • サイズを50%に設定します。

_images/19_dragon3.png
  • 変数 - dragon を作成して、ドラゴンのライフポイントを記録し、初期値を50に設定します。

_images/19_dragon2.png
  • 次に、スプライトのコスチュームを dragon-b に切り替え、 Dragon スプライトを一定の範囲で上下に動かします。

_images/19_dragon4.png
  • Dragon スプライトが吹き出す火として、 Lightning スプライトを追加します。Costumesページで90°時計回りに回転させ、 Lightning スプライトが正しい方向に動くようにします。

注釈

Lightning スプライトのコスチュームを調整する際、中心から外れてしまうことがありますが、それは避ける必要があります! 中心点はスプライトの真ん中に合わせてください!

_images/19_lightning1.png
  • まず、 Dragon スプライトの dragon-c コスチュームを調整し、その中心点が火の尾に位置するようにします。これにより、 Dragon スプライトと Lightning スプライトの位置が正確になり、 Lightning がドラゴンの足元から発射されるのを防ぎます。

_images/19_dragon5.png
  • 対応するように、 dragon-b はドラゴンの頭を中心点と一致させる必要があります。

_images/19_dragon5.png
  • Lightning スプライトのサイズと方向を調整し、画像がより調和のとれたものになるようにします。

_images/19_lightning3.png
  • 今度は Lightning スプライトをスクリプト化します。これは簡単で、 Dragon スプライトを常に追従させるだけです。この時点で緑の旗をクリックすると、 Dragon が稲妻を口にくわえて動き回るのが見えるでしょう。

_images/19_lightning4.png
  • Dragon スプライトに戻り、口から火を吹き出すようにします。口の中の火を発射しないよう注意し、 Lightning スプライトのクローンを作成します。

_images/19_dragon6.png
  • Lightning スプライトをクリックし、 Lightning のクローンをランダムな角度で発射します。一定の時間が経過すると、壁から跳ね返り消えます。

_images/19_lightning5.png
  • Lightning スプライトで、その本体を隠し、クローンを表示します。

_images/19_lightning6.png

これでドラゴンは上下に動きながら火を吹き出すことができます。

2. Wand

  • Wand スプライトを作成し、方向を180にして右を向かせます。

_images/19_wand1.png
  • 変数 hp を作成して、そのライフ値を記録します。初期設定は3にします。次に、ジョイスティックの値を読み取り、それを使用してワンドの動きを制御します。

_images/19_wand2.png
  • ドラゴンは雷を持っており、それを砕くワンドには「魔法の弾丸」があります! Star スプライトを作成し、サイズを変更して、常に Wand スプライトに従い、星の数を3つに制限します。

_images/19_star2.png
  • Wand スプライトが星を自動的に撃つようにします。 Wand スプライトが星を撃つ方法は、ドラゴンが火を吹き出す方法と同じです。クローンを作成するだけです。

_images/19_wand3.png
  • Star スプライトに戻り、そのクローンが右に回転して撃つようにスクリプトを書きます。ステージの外に出た後に消え、星の数を回復します。 Lightning スプライトと同様に、本体を隠してクローンを表示します。

_images/19_star3.png

これで、星の弾丸を撃つワンドができました。

3. Fight!

ワンドとドラゴンは現在まだ互いに対立していますが、それらを戦わせることにします。ドラゴンは強力であり、ワンドはドラゴンに対して聖戦を行う勇敢な人です。彼らの間の相互作用は、以下の部分で構成されます。

  1. ワンドがドラゴンに触れると、ワンドは後ろに打ち退けられ、ライフポイントを失います。

  2. 雷がワンドに当たると、ワンドはライフポイントを失います。

  3. 星の弾丸がドラゴンに当たると、ドラゴンはライフポイントを失います。

その後、各スプライトのスクリプトを変更する作業に進みます。

  • WandDragon に当たると、後ろに打ち退けられ、ライフポイントを失います。

_images/19_wand4.png
  • LightningLightning スプライトのクローン)が Wand スプライトに当たると、ポップ音を鳴らして消え、 Wand はライフポイントを失います。

_images/19_lightning7.png
  • StarStar スプライトのクローン)が Dragon に当たると、収集音を発して消え、 Star の数を回復し、 Dragon はライフポイントを失います。

_images/19_star4.png

4. ステージ

WandDragon の戦いは最終的に勝者と敗者に分かれることになりますが、それはステージで表現します。

  • Blue Sky の背景を追加し、それに「WIN!」の文字を書き、ドラゴンが倒され、夜明けが来たことを示します。

_images/19_sky0.png
  • そして、次のように空白の背景を修正して、ゲームが失敗し、全てが闇になることを示します。

_images/19_night.png
  • これらの背景を切り替えるスクリプトを書きます。緑の旗がクリックされると、 Woods の背景に切り替えます。ドラゴンのライフポイントが1未満の場合、ゲームが成功し、背景を Blue Sky に切り替えます。 Wand のライフポイントが1未満の場合、 Night の背景に切り替え、ゲームが失敗します。

_images/19_sky1.png

3. Scratchで車を操作する

以下のプロジェクトはプログラミングの難易度の順に書かれています。これらの本を順番に読むことをおすすめします。

各プロジェクトでは、回路の組み立て方やプログラムの手順をステップバイステップで非常に詳細に教えています。最終結果を達成するための方法も含まれています。

もちろん、スクリプトを直接開いて実行することもできますが、関連する資料を github からダウンロードしたことを確認する必要があります。

ダウンロードが完了したら、それを解凍します。 アップロードモード を参照して、個々のスクリプトを直接実行します。

3.1 車をテストする

このセクションでは、車を前進させるためのスクリプトの書き方を学びますが、まずは カープロジェクト を参照して車の組み立て方や基本的な理解を得る必要があります。

プロジェクトを開始する前に、アップロードモード で PictoBlox を使用する手順を知っておく必要があります。

必要な部品

このプロジェクトでは、以下の部品が必要です。

キットでまとめて購入すると便利です。以下にリンクを掲載しています。

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから、部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

回路の作成

L298N モータードライバモジュールは、DCモーターやステッピングモーターを駆動するための高出力モータードライバモジュールです。L298N モジュールは、最大4つの DC モーターや、2つの DC モーターの方向と速度を制御することができます。

以下の図に従って、L298N モジュールと R3 ボードの間にワイヤを接続してください。

L298N

R3 ボード

モーター

IN1

5

IN2

6

IN3

9

IN4

10

OUT1

右モーターの黒ワイヤ

OUT2

右モーターの赤ワイヤ

OUT3

左モーターの黒ワイヤ

OUT4

左モーターの赤ワイヤ

_images/car_motor11.jpg

プログラミング

1. 車を前進させる

上記の配線に基づいて、ピン5と6は右モーターの回転を制御するために使用され、ピン9と10は左モーターの回転を制御するために使用されることがわかります。それでは、車を前進させるスクリプトを書いてみましょう。

Arduino Unoをボードとして選択した後、 アップロードモード に切り替え、以下の図に従ってスクリプトを書いてください。

_images/1_test1.png

Upload Code ボタンをクリックして、R3 ボードにコードをアップロードします。完了すると、車の2つのモーターが前進します(車を地面に置くと、直線上で前進しますが、2つのモーターの速度が少し異なるため、カーブするかもしれません)。

もし両方のモーターが前進しない、または以下の状況が発生した場合、2つのモーターの配線を調整する必要があります。

  • 両方のモーターが同時に後退する場合(左モーターが時計回り、右モーターが反時計回りに回転する場合)、左と右のモーターの配線を同時に交換します。OUT1とOUT2、OUT3とOUT4を交換します。

  • 左モーターが後退する場合(時計回りの回転)、左モーターのOUT3とOUT4の配線を交換します。

  • 右モーターが後退する場合(反時計回りの回転)、右モーターのOUT1とOUT1の配線を交換します。

2. ブロックを作成

スクリプトをよりクリーンで使いやすくするため、前進の動作を制御するすべてのブロックを1つのブロックにまとめ、使用するときはこのブロックを直接呼び出します。

My Blocks パレットの Make a Block をクリックします。

_images/1_test31.png

ブロックの名前を forward に設定し、 Add an input にチェックを入れ、入力名を speed に設定します。

_images/1_test32.png

車を前進させるためのブロックを forward にドラッグ&ドロップします。pin6とpin9にパラメーター speed を追加する必要があります。

_images/1_test33.png

作成したブロックを [Forward] ブロックの forward で呼び出します。Uploadモードでは、最初に [When Arduino Uno starts up] ブロックを追加する必要があります。

  • モーターの回転速度の範囲は100~255です。

_images/1_test3.png

3. モーターの速度を調整

2つのモーターの速度にわずかな違いがあるため、車がまっすぐ進むことができない場合、車ができるだけまっすぐ進むように、左と右のモーターに異なる速度を設定します。

私の車は右前方にゆっくりと進むので、左のモーターの速度を少し下げます。

_images/1_test2.png

3.2 動き

このプロジェクトは 3.1 車をテストする に基づいて車を全方向に移動させるものです。

プログラミングを始める前に、L298Nの動作原理を確認しましょう。

ENAとIN1、IN2の動作関係は以下の通りです。

ENA

IN1

IN2

右モータ(A)の状態

0

X

X

停止

1

0

0

ブレーキ

1

0

1

時計回りに回転

1

1

0

反時計回りに回転

1

1

1

ブレーキ

ENBとIN3、IN4の動作関係は次の通りです。

ENB

IN3

IN4

左モータ(B)の状態

0

X

X

停止

1

0

0

ブレーキ

1

0

1

時計回りに回転

1

1

0

反時計回りに回転

1

1

1

ブレーキ

プログラミング

次に、車が前進、後退、左右回転、及び停止するためのブロックを作成します。

1. 前進

右モータは時計回り、左モータは反時計回りに回転して車を前進させます。

_images/2_forward.png

2. 後退

後退はその逆で、右モータは反時計回り、左モータは時計回りに回転が必要です。

_images/2_backward.png

3. 左に曲がる

左右のモータを同時に時計回りに回転させて車を左に曲がらせます。

_images/2_turn_left.png

4. 右に曲がる

同様に、左右のモータを反時計回りに回転させて車を右に曲がらせます。

_images/2_turn_right.png

5. 停止

全モータの設定を0にして車を停止させます。

_images/2_stop.png

6. 車を動かす

車を前進、後退、左右に1秒間動かしてから停止します。すべてのブロックが[Forever]ブロック内に配置されているので、車が上記の動作を繰り返すのを見ることができます。

_images/2_move.png

3.3 黒い線を追う

この車にはライン追跡モジュールが搭載されており、車が黒い線を追跡するようにすることができます。

プロジェクトを開始する前に、黒い線テープを使ってカーブマップを作成する必要があります。推奨されるラインの幅は0.8-1.5cmで、曲がり角は90度未満であってはなりません。

必要な部品

このプロジェクトでは、以下の部品が必要です。

全体のキットを購入すると非常に便利です。リンクは以下の通りです。

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

ライン追跡モジュール

BUY

回路の作成

これはデジタルライン追跡モジュールで、黒い線を検出すると1を出力し、白い線を検出すると0の値を出力します。さらに、モジュール上のポテンショメータを通じて感知距離を調整することができます。

以下の図に従って回路を組み立ててください。

ライン追跡モジュール

R3ボード

S

2

V+

5V

G

GND

_images/car_track1.jpg

モジュールの調整

プロジェクトを開始する前に、モジュールの感度を調整する必要があります。

上記の図に従って配線し、R3ボードを電源に接続してください(USBケーブルまたは9Vの電池ボタンケーブルで直接接続)。コードをアップロードすることなく電源を入れます。

テーブルに黒い電気テープを貼り、カートをその上に置きます。

モジュールのシグナルLEDを観察して、白いテーブル上で点灯し、黒いテープ上で消灯することを確認してください。

そうでない場合は、モジュール上のポテンショメータを調整して、上記の効果が得られるようにします。

_images/line_track_cali1.JPG

プログラミング

左前または右前に車を動かす2つのブロックを作成します。

1. 左前方に移動

右のモーターが時計回りに回転し、左のモーターが動かないと、車は左前方にわずかに移動します。

_images/3_forward_left.png

2. 右前方への移動

同様に、左モータが反時計回りに回転し、左モータが動かないと、車は右方向にわずかに移動します。

_images/3_forward_left.png

3. ライン追跡

ライン追跡モジュールの値を読み取り、1の場合は黒い線が検出されたことを意味するので、車を左に進めます。そうでなければ、右方向に進みます。

_images/3_follow.png

R3ボードにコードをアップロードした後、ライン追跡モジュールを車の下の黒い線と一致させると、車が線を追跡するのを見ることができます。

3.4 手を追う

この車をペットと考えてみてください。手を振ると、車はあなたの方へ走ってきます。

必要な部品

このプロジェクトには、以下の部品が必要です。

全体のキットを購入すると非常に便利です。リンクは以下の通りです。

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することも可能です。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

超音波モジュール

BUY

回路の作成

超音波センサーモジュールは、超音波を使用して物体までの距離を測定する道具です。 2つのプローブがあります。1つは超音波を送るためのもので、もう1つは波を受信して送受信の時間を距離に変換し、デバイスと障害物との距離を検出するためのものです。

以下の図に従って回路を組み立ててください。

超音波モジュール

R3ボード

Vcc

5V

Trig

3

Echo

4

Gnd

GND

_images/car_ultrasonic1.jpg

プログラミング

車が前進し停止するブロックを作成します。

_images/4_hand1.png

車の前に手をかざして、超音波モジュールの値を読み取ります。手の検出距離が5-10cmの場合、車を前進させ、それ以外の場合は停止させます。

_images/4_hand2.png

3.5 障害物回避

車の前部には2つの赤外線障害物回避モジュールが取り付けられており、近くの障害物を検出するのに使用できます。

このプロジェクトでは、車は自由に前進し、障害物に遭遇するとそれを避けて他の方向に移動することができます。

必要な部品

このプロジェクトには、以下の部品が必要です。

全体のキットを購入することは非常に便利です。以下がリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

障害物回避モジュール

BUY

回路の作成

障害物回避モジュールは、距離調整可能な赤外線近接センサーで、通常は出力が高く、障害物を検出すると低くなります。

以下の図に従って回路を組み立ててください。

左IRモジュール

R3ボード

OUT

8

GND

GND

VCC

5V

右IRモジュール

R3ボード

OUT

7

GND

GND

VCC

5V

_images/car_avoid1.jpg

モジュールの調整

プロジェクトを開始する前に、モジュールの検出距離を調整する必要があります。

上記の図に従って配線し、R3ボードに電源を供給します(USBケーブルを直接挿入するか、9Vのバッテリーケーブルを取り付ける)。コードをアップロードせずに電源を入れます。

赤外線障害物回避の前に約5cmのノートや他の平らな物を置きます。

その後、モジュール上のポテンショメータを回して、モジュール上の信号インジケータがちょうど点灯するように、最大検出距離5cmに調整します。

もう一つの赤外線モジュールも同じ方法で調整します。

_images/ir_obs_cali1.jpg

プログラミング

達成したい効果:

  • 左のIRモジュールが障害物を検出すると、車は左に後退します。

  • 右のIRモジュールが障害物を検出すると、車は右に後退します。

  • 両方のIRモジュールが障害物を検出すると、車は直接後退します。

  • それ以外の場合、車は前進します。

対応するブロックを作成してください。

1. 車が左に後退する

右のモータが反時計回りに回転し、左のモータが回転しない場合、車は左に後退します。

_images/5_avoid1.png

2. 車が右に後退する

左のモータが時計回りに回転し、右のモータが回転しない場合、車は右に後退します。

_images/5_avoid2.png

3. 車は前進、後退し、停止します

_images/5_avoid3.png

4. 2つのIRモジュールの値を読み取る

Variables パレットで Make a variable をクリックします。

_images/5_avoid4.png

変数名を入力し、 OK をクリックして新しい変数を作成します。

_images/5_avoid5.png

左および右のIR障害物回避モジュールの値を読み取り、2つの新しい変数に保存します。

_images/5_avoid6.png

5. 障害物を避ける

  • 左のIRモジュールが0(障害物検出)で、右のIRモジュールが1の場合、車は左にバックアップします。

  • 右のIRモジュールが0(障害物検出)の場合、車は右にバックアップします。

  • 2つのIRモジュールが同時に障害物を検出すると、車は後退します。

  • それ以外の場合、車は前進を続けます。

_images/5_avoid7.png

3.6 あなたの手を追跡する2

3.4 手を追う のプロジェクトでは、超音波モジュールのみが使用されており、前方の手だけを追跡することができます。

このプロジェクトでは、2つのIR障害物回避モジュールを同時に使用することで、車があなたの手を左または右に追跡できるようになります。

必要な部品

このプロジェクトに必要な部品は以下のとおりです。

一式のキットを購入することは非常に便利です。以下がリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

超音波モジュール

BUY

障害物回避モジュール

BUY

回路の作成

超音波モジュールと2つのIR障害物回避モジュールを同時に接続します。

超音波モジュールとR3ボード間の配線は以下の通りです。

超音波モジュール

R3ボード

Vcc

5V

Trig

3

Echo

4

Gnd

GND

2つのIR障害物回避モジュールとR3ボード間の配線は以下の通りです。

左IRモジュール

R3ボード

OUT

8

GND

GND

VCC

5V

右IRモジュール

R3ボード

OUT

7

GND

GND

VCC

5V

_images/car_avoid_ultrasonic1.jpg

プログラミング

このプロジェクトで達成したい効果は以下の通りです

  • 超音波は、前方で5-10cmの距離で手を検出し、車を追跡させます。

  • 左の赤外線モジュールが手を検出すると、左に曲がります。

  • 右のIRモジュールが手を検出すると、右に曲がります。

1. ブロックを作成する

前進、左折、右折、停止するためのブロックを作成します。

_images/6_follow2_1.png

2. 前進するための追跡

超音波の値を読み取り、手が5-10cmの距離で検出された場合、車を追跡させます。

_images/6_follow2_2.png

3. 左と右に追跡する

左と右のIRモジュールの値を読み取ります。

  • 左のIRモジュールが手を検出した場合、左に曲がります。

  • 右のIRモジュールが手を検出した場合、右に曲がります。

  • 両方のIRモジュールと超音波モジュールが手を検出しない場合、車を停止させます。

_images/6_follow2_3.png

3.7 障害物回避 2

3.5 障害物回避 プロジェクトでは、2つのIR障害物回避モジュールのみが障害物回避のために使用されていましたが、IR障害物回避モジュールの検出距離は短く、車が障害物を避けるのが遅すぎることがあります。

このプロジェクトでは、遠距離検出のために超音波モジュールも追加します。これにより、車はより遠くの障害物を感知して判断を下すことができます。

必要な部品

このプロジェクトには、以下の部品が必要です。

キット全体を購入すると確実に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

L298N モジュール

BUY

TTモーター

-

超音波モジュール

BUY

障害物回避モジュール

BUY

回路の作成

超音波モジュールと2つのIR障害物回避モジュールを同時に接続します。

超音波をR3ボードに次のように接続します。

超音波モジュール

R3 ボード

Vcc

5V

Trig

3

Echo

4

Gnd

GND

2つのIR障害物回避モジュールのR3ボードへの配線は次のとおりです。

左 IR モジュール

R3 ボード

OUT

8

GND

GND

VCC

5V

右 IR モジュール

R3 ボード

OUT

7

GND

GND

VCC

5V

_images/car_avoid_ultrasonic1.jpg

プログラミング

1. 関数を作成する

車を前後に動かします。

_images/7_avoid2_1.png

車を左後ろおよび右後ろに動かします。

_images/7_avoid2_2.png

車を停止させます。

_images/7_avoid2_3.png

2. 緊急障害物回避

車の2つの赤外線障害物回避モジュールは、緊急障害物回避のために使用され、短距離、角度、または比較的小さな障害物での障害物を検出します。

  • 左の赤外線モジュールが障害物を検出すると、車は左に後退します。

  • 右のIRモジュールが障害物を検出すると、車は右後ろに後退します。

  • 2つのモジュールが同時に障害物を検出すると、車は直接後ろに後退します。

_images/7_avoid2_4.png

3. 長距離障害物回避

超音波モジュールの値を読み取り、検出された値が10未満の場合、車は後退します。それ以外の場合は前進を続けます。

_images/7_avoid2_5.png

ビデオ講座

  • 基本的なプロジェクト セクション用

    オンラインドキュメントの内容が理解しにくいと感じた場合、進行形式のビデオ講座に従うことで学びの体験を向上させることができます。これらのビデオにより、Arduinoの学びがさらに魅力的で視覚的になります。

    _images/video_learn.png

    ビデオ講座へのアクセスはこちら: Ultimate Guide to Arduino

    これらのビデオでは、Arduinoの概念や原則を楽しくインタラクティブに提示する魅力的な実験やプロジェクトを発見します。ビデオを視聴し、実践的な活動に参加することで、Arduinoとともに興奮と楽しさを感じる学びの経験を持つことができます。

  • カープロジェクト セクション用

    より多くのガイダンスや実践的な経験を得るために、次のYouTubeプレイリストを視聴することをおすすめします: Video Tutorials for Car Projects

    _images/video_car.png

    これらのビデオで、魅力的なビデオレッスンを通じてロボティクスとArduinoの基礎を学びます。ステップバイステップで、モーターや障害物回避モジュール、ライントラッキングモジュール、赤外線受信機の仕組みを理解しながら、ロボットカーを組み立てます。車がさまざまな機能を実現する方法を探索し、ロボティクスとテクノロジーの世界でクリエイティブさを発揮してください。

  • WiFi機能について

    オンラインチュートリアルの IoTプロジェクト セクションでは、IoTプラットフォームBlynkとの通信方法を学びます。

    Video Tutorials for Car Projects では、Webサーバーの作成とセンサーデータのアップロードの方法を指導されます。このチュートリアルでは、WiFiを使用してArduinoプロジェクトとWebサーバーとの接続を確立する方法を学びます。

    _images/video_iot.png

よくあるご質問(FAQ)

モバイルデバイスでBlynkを使用する方法は?

注釈

データストリームはウェブ上のBlynkでのみ作成できるため、ウェブ上でデータストリームを作成するために異なるプロジェクトを参照し、次に以下のチュートリアルに従ってモバイルデバイスのBlynkでウィジェットを作成する必要があります。

  1. お使いのモバイルデバイスでGoogle PlayまたはAPP Storeを開き、"Blynk IoT"(Blynk(legacy)ではない)を検索してダウンロードします。

  2. APPを開いた後、ログインします。このアカウントは、ウェブクライアントで使用されるアカウントと同じものでなければなりません。

  3. 次に、 Dashboard に移動します(まだ持っていない場合は作成します)。モバイル用とウェブ用の Dashboard は互いに独立していることがわかります。

    _images/APP_1.jpg
  4. 編集 アイコンをクリックします。

  5. 空白のエリアをクリックします。

  6. ウェブページ上と同じウィジェットを選択します。例えば、 Joystick ウィジェットを選択します。

    _images/APP_2.jpg
  7. 今、空白のエリアに Joystick ウィジェットが表示されますので、それをクリックします。

  8. Joystick の設定が表示されるので、ウェブページで設定した Xvalue および Yvalue データストリームを選択します。各プロジェクトの各ウィジェットが異なるデータストリームに対応していることに注意してください。

  9. Dashboard ページに戻り、必要に応じて Joystick を操作できます。

    _images/APP_3.jpg

ESP8266モジュールのファームウェアを再書き込みする方法は?

R3でのファームウェアの再書き込み

1. 回路の作成

ESP8266とSunFounder R3ボードを接続します。

_images/connect_esp8266.png

2. ファームウェアの書き込み

  • Windows を使用している場合、以下の手順でファームウェアを書き込んでください。

    1. ファームウェアと書き込みツールをダウンロードします。

    2. 展開すると、4つのファイルが表示されます。

      • BAT_AT_V1.7.1.0_1M.bin: ESP8266モジュールに書き込むファームウェア。

      • esptool.exe: Windows用のコマンドラインユーティリティ。

      • install_r3.bat: Windowsシステム用のコマンドパッケージ。このファイルをダブルクリックすると、ファイル内のすべてのコマンドが実行されます。

      • install_r4.bat: install_r3.bat と同じですが、UNO R4ボード専用です。

    3. install_r3.bat をダブルクリックしてファームウェアの書き込みを開始します。以下のプロンプトが表示されたら、ファームウェアが正常にインストールされたことを示します。

      _images/install_firmware.png

      注釈

      書き込みに失敗した場合は、以下の点を確認してください。

      • ESP8266アダプターのRSTをGNDに挿入してから抜き、ESP8266モジュールをリセットします。

      • 配線が正しいか確認してください。

      • コンピュータがボードを正しく認識しているか、またポートが占有されていないことを確認してください。

      • install.batファイルを再度開いてください。

  • Mac OS を使用している場合、以下の手順でファームウェアを書き込んでください。

    1. Esptoolをインストールするには、以下のコマンドを使用します。EsptoolはEspressifチップのROMブートローダーと通信するためのPythonベースのオープンソース、プラットフォーム独立のユーティリティです。

      python3 -m pip install --upgrade pip
      python3 -m pip install esptool
      
    2. esptoolが正しくインストールされていれば、 python3 -m esptool を実行すると[usage: esptool]のようなメッセージが出力されます。

    3. ファームウェアをダウンロードします。

    4. 展開すると、3つのファイルが表示されます。

      _images/bat_firmware.png
      • BAT_AT_V1.7.1.0_1M.bin: ESP8266モジュールに書き込むファームウェア。

      • esptool.exe: Windows用のコマンドラインユーティリティ。

      • install_r3.bat: Windowsシステム用のコマンドパッケージ。

      • install_r4.bat: install_r3.bat と同じですが、UNO R4ボード専用です。

    5. ターミナルを開き、 cd コマンドを使用してダウンロードしたファームウェアのフォルダに移動し、次のコマンドを実行して既存のファームウェアを消去し、新しいファームウェアを再書き込みします。

      python3 -m esptool --chip esp8266 --before default_reset erase_flash
      python3 -m esptool --chip esp8266 --before default_reset write_flash 0 "BAT_AT_V1.7.1.0_1M.bin"
      
    6. 以下のプロンプトが表示されたら、ファームウェアが正常にインストールされたことを示します。

      _images/install_firmware_macos.png

      注釈

      書き込みに失敗した場合は、以下の点を確認してください。

      • ESP8266アダプターのRSTをGNDに挿入してから抜き、ESP8266モジュールをリセットします。

      • 配線が正しいか確認してください。

      • コンピュータがボードを正しく認識しているか、またポートが占有されていないことを確認してください。

      • install.batファイルを再度開いてください。

3. テスト

  1. 元の配線の基盤上で、IO1を3V3に接続します。

    _images/connect_esp826612.png
  2. 右上の虫眼鏡アイコン(シリアルモニタ)をクリックし、ボーレートを 115200 に設定すると、ESP8266モジュールに関する情報が表示されます。

    _images/sp20220524113020.png

    注釈

    • ready が表示されない場合は、ESP8266モジュールをリセットして(RSTをGNDに接続)、シリアルモニタを再度開いてみてください。

  3. NEWLINE DROPDOWN BOX をクリックし、ドロップダウンオプションで both NL & CR を選択し、 AT を入力します。OKが返された場合、ESP8266がR3ボードと正常に接続されていることを示します。

    _images/sp20220524113702.png

次に、 1.1 ESP8266の設定 に従って、ESP8266モジュールの動作モードとボーレートを設定することができます。

R4でファームウェアを再書き込み

1. 回路を作成する

ESP8266とArduino UNO R4ボードを接続します。

_images/faq_at_burn_bb.jpg

2. R4に以下のコードをアップロードする

void setup() {
    Serial.begin(115200);
    Serial1.begin(115200);
}

void loop() {
    if (Serial.available()) {      // シリアル(USB)から何かが入力された場合
        Serial1.write(Serial.read());   // それを読み取り、Serial1(ピン0 & 1)で送信する
    }
    if (Serial1.available()) {     // Serial1(ピン0 & 1)から何かが入力された場合
        Serial.write(Serial1.read());   // それを読み取り、シリアル(USB)で送信する
    }
}

3. ファームウェアの書き込み

  • Windows を使用している場合は、以下の手順でファームウェアを書き込む方法に従ってください。

    1. ファームウェアと書き込みツールをダウンロードします。

    2. 解凍すると、4つのファイルが表示されます。

      • BAT_AT_V1.7.1.0_1M.bin: ESP8266モジュールに書き込むファームウェア。

      • esptool.exe: Windows用のコマンドラインユーティリティ。

      • install_r3.bat: Windowsシステム用のコマンドパッケージ。このファイルをダブルクリックすると、ファイル内のすべてのコマンドが実行されます。

      • install_r4.bat: install_r3.bat と同じですが、UNO R4ボード専用です。

    3. install_r4.bat をダブルクリックしてファームウェアの書き込みを開始します。以下のプロンプトが表示されたら、ファームウェアが正常にインストールされました。

      _images/install_firmware.png

      注釈

      書き込みに失敗した場合は、以下の点を確認してください。

      • ESP8266 AdapterのRSTをGNDに挿入してから取り外すことで、ESP8266モジュールをリセットします。

      • 配線が正しいか確認してください。

      • コンピュータがボードを正しく認識しているか、およびポートが占有されていないか確認してください。

      • install.batファイルを再度開きます。

  • Mac OS システムを使用している場合、以下の手順に従ってファームウェアを書き込む方法に従ってください。

    1. Esptoolをインストールするには、以下のコマンドを使用します。EsptoolはPythonベースのオープンソース、プラットフォームに依存しないユーティリティで、EspressifチップのROMブートローダーと通信します。

      python3 -m pip install --upgrade pip
      python3 -m pip install esptool
      
    2. esptoolが正しくインストールされている場合、 python3 -m esptool を実行すると[usage: esptool]というメッセージが出力されます。

    3. ファームウェアをダウンロードします。

    4. 解凍すると、4つのファイルが表示されます。

      • BAT_AT_V1.7.1.0_1M.bin: ESP8266モジュールに書き込むファームウェア。

      • esptool.exe: Windows用のコマンドラインユーティリティ。

      • install_r3.bat: Windowsシステム用のコマンドパッケージ。

      • install_r4.bat: install_r3.bat と同じですが、UNO R4ボード専用です。

    5. ターミナルを開き、ダウンロードしたファームウェアのフォルダに移動するために cd コマンドを使用します。その後、以下のコマンドを実行して既存のファームウェアを消去し、新しいファームウェアを再書き込みします。

      python3 -m esptool --chip esp8266 --before no_reset_no_sync erase_flash
      python3 -m esptool --chip esp8266 --before no_reset_no_sync write_flash 0 "BAT_AT_V1.7.1.0_1M.bin"
      
    6. 以下のプロンプトが表示されたら、ファームウェアが正常にインストールされました。

      _images/install_firmware_macos.png

      注釈

      書き込みに失敗した場合は、以下の点を確認してください。

      • ESP8266 AdapterのRSTをGNDに挿入してから取り外すことで、ESP8266モジュールをリセットします。

      • 配線が正しいか確認してください。

      • コンピュータがボードを正しく認識しているか、およびポートが占有されていないか確認してください。

      • install.batファイルを再度開きます。

4. テスト

  1. 元の配線に基づいて、IO1を3V3に接続します。

    _images/faq_at_burn_check_bb.jpg
  2. 右上隅の虫眼鏡アイコン(シリアルモニタ)をクリックし、ボーレートを 115200 に設定すると、ESP8266モジュールに関する情報が表示されます。

    _images/sp20220524113020.png

    注釈

    • ready が表示されない場合、ESP8266モジュールをリセット(RSTをGNDに接続)し、シリアルモニタを再度開くことができます。

  3. NEWLINE DROPDOWN BOX をクリックし、ドロップダウンオプションで both NL & CR を選択し、 AT を入力します。OKが返されると、ESP8266がボードとの接続を正常に確立したことを意味します。

    _images/sp20220524113702.png

次に、 1.1 ESP8266の設定 を参照して、ESP8266モジュールの動作モードとボーレートを設定できます。

ありがとうございます

製品を評価してくれた評価者、チュートリアルの提案をしてくれたベテラン、そして私たちをフォローしサポートしてくれるユーザーの皆様、ありがとうございます。 皆様からの貴重な提案は、私たちがより良い製品を提供するための動機となっています。

特別な感謝

  • レン・デイビスソン

  • カレン・ダニエル

  • フアン・デラコスタ

少しだけお時間を割いて、このアンケートに回答していただけますか?

注釈

アンケートを提出した後、結果を表示するためにページの先頭に戻ってください。

著作権通知

このマニュアルに含まれるテキスト、画像、コードなどの全内容はSunFounder Companyが所有しています。それは個人的な学習、調査、楽しむこと、または他の非営利目的のためにのみ使用することができます。作者と関連する権利者の法的権利を侵害せず、関連する規定および著作権法の下で。許可なくこれらを営利目的で使用するすべての個人や組織に対して、会社は法的措置を取る権利を留保します。