IR-Receive and Servo shield for Arduino Pro Mini

本体

Arduino Pro Mini用の丸いIR受信+Servo Shield

 

スイッチサイエンスで販売中

IR-Receive and Servo shield for Arduino Pro Mini

<概要>

Arduino Pro Mini用のIR受信&サーボシールド。赤外線リモコンによるサーボ制御用。

<特徴>

  • JP1にてサーボの電源ラインとArduinoのVDDを切り離し可能
    • シリアル通信を確認しながら開発 -> P1からの電源のみで動作
      • Auduino IDEでの開発時, シリアルポートからの制御時: JP1=Open
      • 単独動作時: JP1 = Close
  • 0Ω抵抗(裏面)の実装位置変更でArduino Pro Mini 3.3V/5Vの両方に対応
    • 3.3V版: 0Ω抵抗を“3r3V”側に実装 (Default)
    • 5V版 : 0Ω抵抗を“5V”側に実装
  • コネクタはPro MiniのPinから直結なのでサーボ以外に通常のGPIOとしても使用可能

<仕様>

  • 電源電圧(P1に印加) : 5V(typ)
  • リモコン受光部: VS1838B
  • 動作確認サーボ: SG90 (GND-Vcc-PWMのコネクタ配列に対応)

<結線>

  • 端子横に”G”または”GND”と印刷されているピンがGNDとなります

GND表示

Schemaics

回路図

pinout

PINOUT

 

<サンプルプログラムの仕様>

Baud rate設定: 115200 baud

  1. IRで受信したコードのシリアル出力
  2. シリアル経由でのサーボ制御
  • 送信フォーマット: [CH]_[Command];
    • CH: Servo No. (1-6)
    • Command:
      • at: attach servo
      • dt: detach servo
      • 000-180: servo angle (必ず3桁で入力)
    • 最後に区切り文字として”;”を送信してください
  • Auduino IDEのシリアルモニタではうまくコマンド送信ができないので、Tera Term等のシリアルターミナルを使用してください。

ソースコード(Arduinoのスケッチ)はこちらからダウンロード可能

Digisparkで自動クラッピー

引き続きATTiny85を搭載したDigisparkという小型基板のキーボードエミュレーションで遊んでいます。

P0からP2ポートにかけて指先で握ると勝手にクラッピーのアスキーアートが入力されます。
パチパチクラッピーを知らない方はこちらを見てください。

動画はこちら

Arduino IDEの設定方法

  1. Digispark用ドライバをインストール(Windowsの場合)
    ダウンロードはここ
  2. Arduino IDE(1.6.11で確認)の[ファイル]→[環境設定]→「追加のボードマネージャのURL」に  http://digistump.com/package_digistump_index.json を設定
  3. [ツール]→[ボードマネージャ]を選択し「Digistump AVR Boards」をインストール
  4. [ツール]→[ボード]→[Digispark(Default- 16.5mhz)]を選択

Arduino IDE用のコードは以下。日本語キーボードの環境では同梱のヘッダファイルに入れ替え必要

Digispark_Keyboard_clappyAA.zip

 

ESP-WROOM-32 Breakout Board “Unopuino32”

IMG_1448Arduino UnoフォームのESP-WROOM-32 Breakout Board “Unopuino32″ (ウノっぽいの32)

2017年5月25日現在: 評価用ベータ版(v0.3)

<概要>

  • ピン配置及び取り付け穴位置がUnoと同一
  • Arduino IDEからの自動書込み対応済
  • IO電圧: 3.3V(裏面に5V入力時の分割用の抵抗パターン有)
  • 本バージョンではUSB-SerialにCH340を使用している為、以下の制限があります
    • シリアルモニタ経由でのリセット時のメッセージの文字化け
      • 実行するプログラムには影響ない事は確認済
      • Serialのbaud rateを設定した後の通信は問題なし
    • Arduino IDEによる書込み時のUpload Speed制限
      • “256000”以下を指定 (それ以上では書き込みエラーが発生)

IDE_Setting

※ESP32はArduino IDEで開発できるがライブラリレベルでの互換性はないので注意

<仕様>

CPU: ESP-WROOM-32 (技適取得済モジュール)

USB-Serial: CH340 T

Schematich

Schematics

pinout

PINOUT

<開発環境の準備>

  1. CH340 ドライバーをインストールする
  2. “Arduino core for the ESP32″をダウンロードし解凍
  3. Arduino インストールフォルダの hardware フォルダに、espressif フォルダを作成
  4. espressif フォルダの中に esp32 フォルダを作成
  5. 解凍した”Arduino core for the ESP32″の中身を esp32 フォルダ内にコピー
  6. espressif\esp32\tools にある get.exe を実行しコマンドプロンプトが消えるまで待つ
  7. Arduino IDEを立ち上げると”ツール”->”ボード”でESP32が選択できる

<関連リンク>

Design Data (Open Source Hardware):

Schematic & Board Layout Data (KiCad)

Gerber Data

Bom

header file for Arduino IDE

CH340ドライバー:

Windows MacOS Linux

ESP-WROOM-32 Information (ESPRESSIF web site)

ESP-WROOM-32 Datasheet

ESP-WROOM-32 Schematic and layout 

Arduino core for the ESP32

<覚書(随時更新)>

  1. サーボを使うときはLEDとして扱うと動くらしい(未確認)
  2. Neopixel(WS2812)を使う(Mr. MartyMacGyver’s code)
  3. I2Cを使う時は標準のwire関数の引数にピンを指定する
    • int SDA32 = 22;
    • int SCL32 = 23;
    • Wire.begin(SDA32, SCL32);
  4. ESP32/ESP8266用I2C OLED(SSD1306)ライブラリ
  5. タイマー割り込みを使う
    • ESP32 example sketchの”RepeatTimer”を参考に以下をコードに追加// Timer Interrupt setting
      hw_timer_t * timer = NULL;
      volatile SemaphoreHandle_t timerSemaphore;
      portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;void IRAM_ATTR onTimer(){
      // Increment the counter and set the time of ISR
      portENTER_CRITICAL_ISR(&timerMux);// ここにタイマー割り込みで実行するコードを記載portEXIT_CRITICAL_ISR(&timerMux);
      // Give a semaphore that we can check in the loop
      xSemaphoreGiveFromISR(timerSemaphore, NULL);
      // It is safe to use digitalRead/Write here if you want to toggle an output
      }void setup() {

      // Create semaphore to inform us when the timer has fired
      timerSemaphore = xSemaphoreCreateBinary();

      // Use 1st timer of 4 (counted from zero).
      // Set 80 divider for prescaler (see ESP32 Technical Reference Manual for more info).
      timer = timerBegin(0, 80, true);

      // Attach onTimer function to our timer.
      timerAttachInterrupt(timer, &onTimer, true);

      // Set alarm to call onTimer function every second (value in microseconds).
      // Repeat the alarm (third parameter)
      timerAlarmWrite(timer, 1000, true);

      // Start an alarm
      timerAlarmEnable(timer);
      }