37 個のセンサーとモジュールについての言及はインターネット上で広く広まっていますが、実際には、Arduino と互換性のあるセンサー モジュールは 37 個以上あるはずです。手持ちのセンサーやモジュールがいくつかあることを考慮し、学習とコミュニケーションを目的とした実践(ハンズオントライ)の概念に従って、ここで一つずつ実験を行っていきます。成功しても失敗しても記録するのは難しい問題ですが、レンガを投げて翡翠を輝かせられるようになりたいと思っています。
【Arduino】168種類のセンサーモジュールシリーズ実験(データコード+シミュレーションプログラミング+グラフィックプログラミング)
実験212:9 in 1多機能拡張ボードDHT1デバイス温湿度LM3温度5ブザー1UNO互換
「Arduino プログラムコード」+「Mind + グラフィックス プログラミング」+「Linkboy シミュレーション プログラミング」の組み合わせを考えてみましょう。
お互いを補い、基礎を築き、理解を促進する
実験カタログ (Arduino ハンズオン)
1. LED 実験
01 Blink: D13 の青色 LED が点滅
02 Blink2: D12、D13 赤と青の LED が交互に点滅
03 Blink3: 点滅するアラーム光をシミュレート
04 Breath_LED: D9 フルカラー LED が赤色の呼吸光をシミュレート
2. ボタン実験
05 ボタン: D2 ボタン制御 D13 青色 LED
06 Button_Lock: D3 ボタン制御 D13 青色 LED セルフロック実験
3. ポテンショメータ実験
07 RS232_AD: シリアル ポートが A0 ポテンショメータを読み取り、値を収集します (回転角度 270° 出力 0 -3.3 V/5V 電圧信号ポテンショメータの抵抗値 10K)
08 Rotation_LED: A0 ポテンショメータは D11 フルカラー LED 青色端子の輝度を制御します。
09 RC_Motor: A0 ポテンショメータは D7 の出力ポートでステアリング ギアを制御し、その回転角度を制御します (ステアリング ギアは
4. RGB フルカラー LED 実験
10 LED_RGB_Text: フルカラー LED 基本色変更
11 LED_RGB: フルカラー LED レインボー変更
5. 赤外線センサー D6 実験 (赤外線リモコンは別途用意する必要があります) 12 IRrelay :
赤外線リモコンを押します。デバイスの任意のキーで D13 LED スイッチを制御できます (制御距離 1 ~ 8 メートル、周波数 38KHz、市販のほとんどの赤外線リモコンと互換性があります) 13 IRrecord: シリアル ポートに読み取り値が表示されます
。赤外線リモコンコード
6. 温度センサー実験
14 LM35_RS232AD: シリアル ポート
センサーは、A2 ポートの8. 明るさセンサーの実験16 光センサー: シリアル ポートはポート A1 のフォトレジスターによって収集された値を表示します。17 Light_LED: ポートのフォトレジスターの制御A1 D13 LED スイッチ (光に敏感、教育実験や民生用機器に適しています) 9. ブザー実験18 ブザー: 救急車のサイレンをシミュレートするための D5 ポート パッシブ ブザー (簡単な音楽を鳴らすことができます。音楽はプログラムする必要があります) 10 、拡張実験19 アナログ超音波測距センサー (検出タイプ I、IIC/I2C インターフェイス) 20 バス DS18B20 温度センサー (数値タイプ、拡張ボードのデジタル D7 インターフェイスに接続) 21 TM1637 4 桁デジタル チューブ (デジタル チューブおよびドット マトリックス タイプ、22 GY-BMP280-3.3 気圧高度計センサーモジュール(数値型、IIC/I2Cインターフェイス)23 GY-NEO-6MV2 新飛行制御用GPS衛星信号受信モジュール(数値型、TTLインターフェイス) )24 5V ローレベルトリガシングルチャンネルリレーモジュール(実行タイプ、デジタル D7 インタフェース)25 エレクトレットマイク付き 4 線式サウンドセンサモジュール(トリガタイプ、デジタル D7 インタフェース)26 BH1750FVI デジタル光量モジュール光センサ(数値タイプ、 IIC/I2Cインターフェース)
27 オープンソース DFPlayer Mini TF カード MP3 プレーヤー モジュール (出力アクチュエーター タイプ D7/D8 デジタル インターフェイス)
28 LCD1602 LCD スクリーン モジュール (出力表示タイプ、IIC/I2C インターフェイス)
29 人体赤外線焦電モーション センサー モジュール (トリガー タイプ、デジタル D7 インターフェイス) )
30 DS1307 クロックモジュール Tiny RTC I2C モジュール (検出センサータイプ、IIC/I2C インターフェース)
31 互換 HC-06 スレーブ Bluetooth モジュール (通信および記憶タイプ、TTL インターフェース)
10. 拡張実験
22 GY-BMP280-3.3 気圧高度計センサーモジュール(数値、IIC/I2Cインターフェース)
23 GY-NEO-6MV2 新型飛行制御用GPS衛星信号受信モジュール(数値、TTLインターフェース)
BMP280
Bosch Sensortec - BMP280 は、モバイル アプリケーション向けに設計された絶対気圧センサーです。センサーモジュールは非常にコンパクトなパッケージで提供されます。このデバイスは小型で消費電力が低いため、携帯電話、GPS モジュール、時計などのバッテリ駆動のデバイスで使用できます。前世代と同様に、BMP180、BMP280 もボッシュの成熟したピエゾ抵抗圧力センサー技術に基づいており、高い精度と直線性、長期安定性と高い EMC 堅牢性を特徴としています。複数のデバイス操作オプションにより、電力消費、解像度、フィルタリング パフォーマンスの点でデバイスを最適化するための最大限の柔軟性が提供されます。
BMP280はボッシュが発売した最新のデジタル空気圧センサーで、相対精度±0.12hPa(±1メートル相当)、センサー消費電力わずか2.7μAと優れた性能と低価格を実現しています。BMP280 は、わずか 2.0 x 2.5mm2 の設置面積と 0.95 mm のパッケージ高さを備えた非常にコンパクトな 8 ピン金属蓋 LGA パッケージの業界最小パッケージを備えています。圧力・温度測定機能を搭載。気圧センサーは SPI および IIC 通信インターフェースをサポートしています。前世代の BMP180 と比較して精度が大幅に向上しています。低コストのマルチローター航空機フライトコントローラーに非常に適しています。価格は現在普及しているもののわずか 4 分の 1 です。 MS5611.1。センサー モジュールの小型サイズと 2.74μA @ 1Hz の低消費電力により、バッテリー駆動のデバイスへの実装が可能になります。屋内ナビゲーション、ヘルスケア、GPS 改善のための新しいアプリケーションには、高い相対精度と低い TCO が必要です。
BMP280 は、センサーが±1m の高低差に相当する ±0.12 hPa の優れた相対精度と、わずか 1.5 Pa/K のオフセット温度係数 (TCO) を備えているため、床レベル検出などのアプリケーションに最適です。 (12.6cm/K相当)。BMP280 は、2011 年に初めて携帯電話の気圧測定に多用され、広く導入された BMP180 の後継として、正確な圧力測定が必要なあらゆるアプリケーションで高いパフォーマンスを実現します。同時に、BMP280 はアプリケーションの柔軟性が高く、新しいフィルター モードと SPI インターフェイスを備えており、BMP180 と比較して設置面積が 63% 削減されています。
GY-BMP280-3.3 高精度気圧センサーモジュールは、
周囲温度と気圧を測定できる低電力デジタル複合センサーです。気圧検知素子は低ノイズ、高精度、高分解能の絶対大気圧圧電検知素子であり、温度検知素子は低ノイズ、高分解能の特性を有し、温度値は温度補償および自己補正を行うことができます。空気圧の校正。サンプリング レート レジスタを設定することにより、感応素子のサンプリング レートを設定できます。スマートフォン、タブレット、スマートウォッチ、ウェアラブルなどのスペースに制約のあるモバイルデバイス、天気予報、垂直速度表示、飛行制御機器、屋内および屋外のナビゲーション、スマートホームデバイスに最適です。
22. GY-BMP280-3.3 大気圧高度計センサー モジュール (I2C インターフェイス)
プロジェクト: シリアル ポートを介してリアルタイムで温度、気圧、高度データを読み取ります
Arduino実験のオープンソースコード
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序四:基于博世 BME280I2C 环境传感器数据表的测试
安装库:https://itbrainpower.net/downloadables/sSense-BMx280.zip
*/
#define SERIAL_SPEED 19200 //初始化串口
#include <sSense-BMx280I2C.h>//导入驱动库
#include <Wire.h>
/* 推荐模式 -
基于博世 BME280I2C 环境传感器数据表。
天气监测:
强制模式,1 个样本/分钟
压力×1、温度×1、湿度×1、过滤
电流消耗 = 0.16 μA
RMS 噪声 = 3.3 Pa/30 cm, 0.07 %RH
数据输出速率 1/60 Hz
湿度感应:
强制模式,1 个样本/秒
压力×0,温度×1,湿度×1,过滤
电流消耗 = 2.9 μA
RMS 噪声 = 0.07 %RH
数据输出速率 = 1 Hz
室内导航:
正常模式,待机时间 = 0.5ms
压力×16,温度×2,湿度×1,过滤器= x16
电流消耗 = 633 μA
RMS 噪声 = 0.2 Pa/1.7 cm
数据输出速率 = 25Hz
滤波器带宽 = 0.53 Hz
响应时间 (75%) = 0.9 秒
游戏:
正常模式,待机时间 = 0.5ms
压力×4,温度×1,湿度×0,过滤器= x16
电流消耗 = 581 μA
RMS 噪声 = 0.3 Pa/2.5 cm
数据输出速率 = 83 Hz
滤波器带宽 = 1.75 Hz
响应时间 (75%) = 0.3 秒
*/
BMx280I2C::Settings settings(
BME280::OSR_X1,
BME280::OSR_X1,
BME280::OSR_X1,
BME280::Mode_Forced,
BME280::StandbyTime_1000ms,
BME280::Filter_Off,
BME280::SpiEnable_False,
0x76 // I2C 地址。 I2C 专用。
);
BMx280I2C ssenseBMx280(settings);
void setup(){
delay(5000);
DebugPort.begin(SERIAL_SPEED);
while(!DebugPort) {
} // 等待
DebugPort.println("s-Sense BME/BMP280 I2C sensor.");
Wire.begin();
while(!ssenseBMx280.begin())
{
DebugPort.println("Could not find BME/BMP280 sensor!");
delay(1000);
}
switch(ssenseBMx280.chipModel())
{
case BME280::ChipModel_BME280:
DebugPort.println("Found BME280 sensor! Humidity available.");
break;
case BME280::ChipModel_BMP280:
DebugPort.println("Found BMP280 sensor! No Humidity available.");
break;
default:
DebugPort.println("Found UNKNOWN sensor! Error!");
}
// 使用前更改一些设置。
settings.tempOSR = BME280::OSR_X4;
ssenseBMx280.setSettings(settings);
}
void loop(){
printBMx280Data(&DebugPort);
delay(500);
}
void printBMx280Data(
Stream* client
)
{
float temp(NAN), hum(NAN), pres(NAN);
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
BME280::PresUnit presUnit(BME280::PresUnit_Pa);
ssenseBMx280.read(pres, temp, hum, tempUnit, presUnit);
client->print("Temp: ");
client->print(temp);
//client->print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
client->print(" "+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F'));
client->print("\t\tHumidity: ");
client->print(hum);
client->print("% RH");
client->print("\t\tPressure: ");
client->print(pres);
client->println(" Pa");
delay(1000);
}
試験的なシリアルポートの復帰
気圧を高度に変換できますが、この高度が正しいかどうかわかりません。
Arduino リファレンス オープンソース コード
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序五:可换算气压为高度,只是不确定这个高度是否正确?
安装库:https://itbrainpower.net/downloadables/sSense-BMx280.zip
*/
#define SERIAL_SPEED 19200 //初始化串口
#include <BMx280_EnvCalc.h>//导入驱动库
#include <sSense-BMx280I2C.h>
#include <Wire.h>
// 默认值:强制模式,待机时间 = 1000 ms
// 过采样=压力×1,温度×1,湿度×1,过滤掉
BMx280I2C ssenseBMx280;
void setup(){
delay(5000);
DebugPort.begin(SERIAL_SPEED);
while (!DebugPort) {
} // 等待
Wire.begin();
while (!ssenseBMx280.begin())
{
DebugPort.println("Could not find BME280 sensor!");
delay(1000);
}
switch (ssenseBMx280.chipModel())
{
case BME280::ChipModel_BME280:
DebugPort.println("Found BME280 sensor! Humidity available.");
break;
case BME280::ChipModel_BMP280:
DebugPort.println("Found BMP280 sensor! No Humidity available.");
break;
default:
DebugPort.println("Found UNKNOWN sensor! Error!");
}
}
void loop(){
printBMx280Data(&DebugPort);
delay(500);
}
void printBMx280Data( Stream* client )
{
float temp(NAN), hum(NAN), pres(NAN);
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
BME280::PresUnit presUnit(BME280::PresUnit_Pa);
ssenseBMx280.read(pres, temp, hum, tempUnit, presUnit);
client->print("Temp: ");
client->print(temp);
client->print(String(tempUnit == BME280::TempUnit_Celsius ? "C" : "F"));
client->print("\t\tHumidity: ");
client->print(hum);
client->print("% RH");
client->print("\t\tPressure: ");
client->print(pres);
client->print(" Pa");
BMx280_EnvCalc::AltitudeUnit envAltUnit = BMx280_EnvCalc::AltitudeUnit_Meters;
BMx280_EnvCalc::TempUnit envTempUnit = BMx280_EnvCalc::TempUnit_Celsius;
float altitude = BMx280_EnvCalc::Altitude(pres, envAltUnit);
float dewPoint = BMx280_EnvCalc::DewPoint(temp, hum, envTempUnit);
float seaLevel = BMx280_EnvCalc::EquivalentSeaLevelPressure(altitude, temp, pres);
// seaLevel = BMx280_EnvCalc::SealevelAlitude(altitude, temp, pres); // 已弃用。请参见等效SeaLevelPressure()。
client->print("\r\nAltitude: ");
client->print(altitude);
client->print((envAltUnit == BMx280_EnvCalc::AltitudeUnit_Meters ? "m" : "ft"));
client->print("\tDew point: ");
client->print(dewPoint);
client->print(String(envTempUnit == BMx280_EnvCalc::TempUnit_Celsius ? "C" : "F"));
client->print("\t\tEquivalent Sea Level Pressure: ");
client->print(seaLevel);
client->println(" Pa\r\n");
delay(1000);//延时1000毫秒
}
試験的なシリアルポートの復帰
実験的なオープンソース グラフィックス プログラミング (Mind+、学習しながらプログラミング)
試験的なシリアルポートの復帰