Arduino勉強会/38-ブレッドボードでRasPi Picoを使ってみよう
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[Arduino勉強会]]
#contents
2021/06/05からのアクセス回数 &counter;
** ブレッドボードでRasPi Picoを使ってみよう [#w7c8ce79]
Arduinoと同じようにスケッチを描けるので、ちょっとした動作...
Arduinoの例題スケッチとライブラリが活用できそうです。
前回のLチカに続いて、シリアル通信、スイッチ入力、アナログ...
既存のスケッチを活用して使い方を調べてみましょう。
実験に使うブレッドボードは以下のように組み立てました。
&ref(breadboard_with_device.png,,70%);
USBシリアル変換を取り除いた配線は、以下のようになります。...
&ref(breadboard_wo_device.png,,70%);
Picoとの結線は以下の通りです。
| Picoピン番号 | GPIO | 接続先 | ピン番号 |h
| 1 | GP0(TX) | USBシリアル変換 | RXI |
| 2 | GP1(RX) | USBシリアル変換 | TXD |
| 3 | GND | USBシリアル変換 | GND |
| 31 | GP26(ADC0) | 半固定抵抗 | 2番ピン |
| 34 | GP28 | タクトスイッチ | 1番ピン |
| 38 | GND | ブレッドボード | GND |
| 39 | VSYS | ブレッドボード | 3.3V |
参考にPicoのPinoutをドキュメントから引用します。
&ref(pico_pinout.png,,70%);
** シリアル通信に挑戦 [#y52acec5]
スケッチをデバッグする時にも活躍するシリアル通信から使い...
Arduino IDEのファイル>スケッチ例>04.Communication>ASCIITa...
main.cppにコピーして、先頭に以下の1行を追加します。
#pre{{
#include <Arduino.h>
}}
Arduino IDEの「シリアルモニタ」を開いて待っていても何も表...
こうなったら前回紹介したデバッガーの登場です。setup関数に...
Serial.beginの次のwhile文でずっと廻っています。
#pre{{
//Initialize serial and wait for port to open:
Serial.begin(9600));
while (!Serial) {
; // wait for serial port to connect. Needed for nati...
}
}}
*** PicoのデフォルトはUSB CDCシリアルだった [#u3402b3e]
Picoは、Arduino Leonardoと同じUSB機能搭載のCPUボードなの...
私の場合、ASCIIテーブルの一部を取りこぼしました。
これでは都合が悪いので、USB CDCシリアルではなく、外付けの...
スイッチサイエンスのサイトに以下の情報があったので、試し...
「ハードウェアシリアルポート(0番ピンおよび1番ピン、RXおよ...
- https://trac.switch-science.com/wiki/Guide/ArduinoLeona...
そこで、ASCIITableスケッチのsetup関数の前に、以下のdefine...
#pre{{
// USB CDC Serialではなく、UART0を使う
#define Serial Serial1
}}
** スイッチとシリアルポートを使う [#z28b1e8c]
シリアルポートが使えるようになったので、シリアルポートか...
スケッチの先頭部分を以下のように変更して動かしてみましょ...
#pre{{
#include <Arduino.h>
// USB CDC Serialではなく、UART0を使う
#define Serial Serial1
// 使用するピンを定義します
const int analogInPin = 26; // 可変抵抗の電圧をADC0に読...
const int analogOutPin = LED_BUILTIN;
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (a...
}}
可変抵抗を回すとsensorの値が0から1023の値に変わります。(...
&ref(serial_monitor.png,,70%);
Picoには、12bitのアナログデジタル変換(ADC)ポートが3個用...
| Pico GPIO | Picoビン番号 | ADCポート |h
| GP26 | 31 | ADC0 |
| GP27 | 32 | ADC1 |
| GP28 | 33 | ADC2 |
PicoのADCは12bitなので、解像度は10bitの4倍なのですが、an...
デバッガを使うと変数の値を直接確認できるので、とても便利...
&ref(debug.png,,70%);
*** タクトスイッチを追加 [#a3ec993e]
次にタクトスイッチを押したときにだけ、半固定の値を読み取...
タクトスイッチの入力には、34番ピンのGP28を使用します。
以下のスケッチで動きを見てみましょう。
#pre{{
#include <Arduino.h>
// USB CDC Serialではなく、UART0を使う
#define Serial Serial1
// 使用するピンを定義します
const int analogInPin = 26; // 可変抵抗の電圧をADC0に読み...
const int analogOutPin = LED_BUILTIN;
const int switchPin = 28; // タクトスイッチの入力ピン
int sensorValue = 0; // 可変抵抗の電圧の読み取り値
int outputValue = 0; // LEDへのPWMの値(レート)
void setup() {
Serial.begin(9600);
pinMode(switchPin, INPUT_PULLUP);
}
void loop() {
if (digitalRead(switchPin) == LOW) {
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 0, 1023, 0, 255);
analogWrite(analogOutPin, outputValue);
Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
}
delay(500);
}
}}
** I2C 温度センサーADT7410を使ってみる [#se81dc52]
はじめてのCPUボードでI2C接続のテストをするときには、設定...
ここでは、秋月で簡単に購入できる
<a href="https://akizukidenshi.com/catalog/g/gM-06675/">
I2C温度センサーADT7410
</a>
を使います。
Arduinoの便利ところは、市販のセンサーに対するライブラリが...
動作確認には、Adafruit_ADT7410ライブラリのサンプルadt7410...
&ref(ADT7410-bbrd.png,,70%);
最初に確認する項目は、I2Cで使用するピンがどれかを知ること...
adt7410testのsetupのtempsensor.begin()を呼び出している行...
#pre{{
void setup() {
Serial.begin(115200);
Serial.println("ADT7410 demo");
if (!tempsensor.begin()) {
Serial.println("Could not find ADT7410!");
while (1);
}
}}
Adafruit_ADT7410のbeginの最初のでi2c_devの内容から
- _sda: 6
- _scl: 7
がセットされていることが確認できました。
&ref(debug_pin_no.png,,70%);
ピンを確認できたので、実際にADT740をつないで、動かしてみ...
こうなると何が悪いのかを調べるのは難しくなります。そこで...
&ref(endtransmission.png,,70%);
この結果mbedとArduinoのラッパー関数の解釈が異なり、正常に...
そこで、tempsensor.begin()の戻り値チェックをしないように...
#pre{{
// if (!tempsensor.begin()) {
// Serial.println("Couldn't find ADT7410!");
// while (1);
// }
tempsensor.begin();
}}
VScodeのシリアルモニターに温度と湿度が無事表示されました。
&ref(ADT7410-serial-monitor.png,,70%);
ロジックアナライザーでもI2Cの信号がやり取りされていること...
&ref(I2C-logiana.png,,70%);
** コメント [#ff93bd6f]
#vote(おもしろかった[1],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
終了行:
[[Arduino勉強会]]
#contents
2021/06/05からのアクセス回数 &counter;
** ブレッドボードでRasPi Picoを使ってみよう [#w7c8ce79]
Arduinoと同じようにスケッチを描けるので、ちょっとした動作...
Arduinoの例題スケッチとライブラリが活用できそうです。
前回のLチカに続いて、シリアル通信、スイッチ入力、アナログ...
既存のスケッチを活用して使い方を調べてみましょう。
実験に使うブレッドボードは以下のように組み立てました。
&ref(breadboard_with_device.png,,70%);
USBシリアル変換を取り除いた配線は、以下のようになります。...
&ref(breadboard_wo_device.png,,70%);
Picoとの結線は以下の通りです。
| Picoピン番号 | GPIO | 接続先 | ピン番号 |h
| 1 | GP0(TX) | USBシリアル変換 | RXI |
| 2 | GP1(RX) | USBシリアル変換 | TXD |
| 3 | GND | USBシリアル変換 | GND |
| 31 | GP26(ADC0) | 半固定抵抗 | 2番ピン |
| 34 | GP28 | タクトスイッチ | 1番ピン |
| 38 | GND | ブレッドボード | GND |
| 39 | VSYS | ブレッドボード | 3.3V |
参考にPicoのPinoutをドキュメントから引用します。
&ref(pico_pinout.png,,70%);
** シリアル通信に挑戦 [#y52acec5]
スケッチをデバッグする時にも活躍するシリアル通信から使い...
Arduino IDEのファイル>スケッチ例>04.Communication>ASCIITa...
main.cppにコピーして、先頭に以下の1行を追加します。
#pre{{
#include <Arduino.h>
}}
Arduino IDEの「シリアルモニタ」を開いて待っていても何も表...
こうなったら前回紹介したデバッガーの登場です。setup関数に...
Serial.beginの次のwhile文でずっと廻っています。
#pre{{
//Initialize serial and wait for port to open:
Serial.begin(9600));
while (!Serial) {
; // wait for serial port to connect. Needed for nati...
}
}}
*** PicoのデフォルトはUSB CDCシリアルだった [#u3402b3e]
Picoは、Arduino Leonardoと同じUSB機能搭載のCPUボードなの...
私の場合、ASCIIテーブルの一部を取りこぼしました。
これでは都合が悪いので、USB CDCシリアルではなく、外付けの...
スイッチサイエンスのサイトに以下の情報があったので、試し...
「ハードウェアシリアルポート(0番ピンおよび1番ピン、RXおよ...
- https://trac.switch-science.com/wiki/Guide/ArduinoLeona...
そこで、ASCIITableスケッチのsetup関数の前に、以下のdefine...
#pre{{
// USB CDC Serialではなく、UART0を使う
#define Serial Serial1
}}
** スイッチとシリアルポートを使う [#z28b1e8c]
シリアルポートが使えるようになったので、シリアルポートか...
スケッチの先頭部分を以下のように変更して動かしてみましょ...
#pre{{
#include <Arduino.h>
// USB CDC Serialではなく、UART0を使う
#define Serial Serial1
// 使用するピンを定義します
const int analogInPin = 26; // 可変抵抗の電圧をADC0に読...
const int analogOutPin = LED_BUILTIN;
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (a...
}}
可変抵抗を回すとsensorの値が0から1023の値に変わります。(...
&ref(serial_monitor.png,,70%);
Picoには、12bitのアナログデジタル変換(ADC)ポートが3個用...
| Pico GPIO | Picoビン番号 | ADCポート |h
| GP26 | 31 | ADC0 |
| GP27 | 32 | ADC1 |
| GP28 | 33 | ADC2 |
PicoのADCは12bitなので、解像度は10bitの4倍なのですが、an...
デバッガを使うと変数の値を直接確認できるので、とても便利...
&ref(debug.png,,70%);
*** タクトスイッチを追加 [#a3ec993e]
次にタクトスイッチを押したときにだけ、半固定の値を読み取...
タクトスイッチの入力には、34番ピンのGP28を使用します。
以下のスケッチで動きを見てみましょう。
#pre{{
#include <Arduino.h>
// USB CDC Serialではなく、UART0を使う
#define Serial Serial1
// 使用するピンを定義します
const int analogInPin = 26; // 可変抵抗の電圧をADC0に読み...
const int analogOutPin = LED_BUILTIN;
const int switchPin = 28; // タクトスイッチの入力ピン
int sensorValue = 0; // 可変抵抗の電圧の読み取り値
int outputValue = 0; // LEDへのPWMの値(レート)
void setup() {
Serial.begin(9600);
pinMode(switchPin, INPUT_PULLUP);
}
void loop() {
if (digitalRead(switchPin) == LOW) {
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 0, 1023, 0, 255);
analogWrite(analogOutPin, outputValue);
Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
}
delay(500);
}
}}
** I2C 温度センサーADT7410を使ってみる [#se81dc52]
はじめてのCPUボードでI2C接続のテストをするときには、設定...
ここでは、秋月で簡単に購入できる
<a href="https://akizukidenshi.com/catalog/g/gM-06675/">
I2C温度センサーADT7410
</a>
を使います。
Arduinoの便利ところは、市販のセンサーに対するライブラリが...
動作確認には、Adafruit_ADT7410ライブラリのサンプルadt7410...
&ref(ADT7410-bbrd.png,,70%);
最初に確認する項目は、I2Cで使用するピンがどれかを知ること...
adt7410testのsetupのtempsensor.begin()を呼び出している行...
#pre{{
void setup() {
Serial.begin(115200);
Serial.println("ADT7410 demo");
if (!tempsensor.begin()) {
Serial.println("Could not find ADT7410!");
while (1);
}
}}
Adafruit_ADT7410のbeginの最初のでi2c_devの内容から
- _sda: 6
- _scl: 7
がセットされていることが確認できました。
&ref(debug_pin_no.png,,70%);
ピンを確認できたので、実際にADT740をつないで、動かしてみ...
こうなると何が悪いのかを調べるのは難しくなります。そこで...
&ref(endtransmission.png,,70%);
この結果mbedとArduinoのラッパー関数の解釈が異なり、正常に...
そこで、tempsensor.begin()の戻り値チェックをしないように...
#pre{{
// if (!tempsensor.begin()) {
// Serial.println("Couldn't find ADT7410!");
// while (1);
// }
tempsensor.begin();
}}
VScodeのシリアルモニターに温度と湿度が無事表示されました。
&ref(ADT7410-serial-monitor.png,,70%);
ロジックアナライザーでもI2Cの信号がやり取りされていること...
&ref(I2C-logiana.png,,70%);
** コメント [#ff93bd6f]
#vote(おもしろかった[1],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
ページ名:
SmartDoc