arduino:grovebeginnerkit

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
arduino:grovebeginnerkit [2023/05/16 01:09] – [5. Rotary Potentiometer] babaarduino:grovebeginnerkit [2023/05/30 11:50] (現在) – [10. 3-Axis Accelerator] baba
行 160: 行 160:
 } }
 </code> </code>
-===== 音階で音を鳴らしてみる =====+==== 音階で音を鳴らしてみる ====
 ON/OFFの感覚を狭くすることで、高い音が、広くすることで低い音がなることが確認できました。また、任意の周波数であればtone()関数を利用して簡単に音を鳴らすことができるのも確認できました。ではこれをもう少しわかりやすく、所謂ドレミファソラシド...といった音程にて再現できるようにしてみましょう。 ON/OFFの感覚を狭くすることで、高い音が、広くすることで低い音がなることが確認できました。また、任意の周波数であればtone()関数を利用して簡単に音を鳴らすことができるのも確認できました。ではこれをもう少しわかりやすく、所謂ドレミファソラシド...といった音程にて再現できるようにしてみましょう。
  
行 220: 行 220:
 } }
 </code> </code>
-===== 余談 =====+==== 余談 ====
 鳴らしたいノート番号を指定することでその周波数を計算することができますが、その逆である「鳴らしたい周波数が決まっている場合、それはピアノの鍵盤でいうところのどの位置になるのか?」を計算するには、方程式をnについてとけば良いです。 鳴らしたいノート番号を指定することでその周波数を計算することができますが、その逆である「鳴らしたい周波数が決まっている場合、それはピアノの鍵盤でいうところのどの位置になるのか?」を計算するには、方程式をnについてとけば良いです。
  
行 293: 行 293:
 </file> </file>
 ==== 6. Light ==== ==== 6. Light ====
 +<file> 
 +void setup() 
 +
 +  Serial.begin(9600); 
 +
 +void loop() { 
 +  int a = analogRead(6); 
 +  Serial.println(a); 
 +  delay(33); 
 +
 +</file>
 ==== 7. Sound ==== ==== 7. Sound ====
 +<file>
 +void setup()
 +{
 +  Serial.begin(9600);
 +}
 +void loop() {
 +  int a = analogRead(2);
 +  Serial.println(a);
 +  delay(33);
 +}
 +</file>
 +
 +=== FFT ===
 +<file>
 +#include <arduinoFFT.h>
 +
 +#define SAMPLES 64             // サンプル数(2の累乗数)
 +#define SAMPLING_FREQUENCY 1000 // サンプリング周波数
 +
 +
 +unsigned int sampling_period_us;
 +unsigned long microseconds;
 +
 +double vReal[SAMPLES]; // 複素数の実部
 +double vImag[SAMPLES]; // 複素数の虚部
 +
 +arduinoFFT FFT = arduinoFFT();
 +
 +void setup() {
 +  Serial.begin(9600);
 +  sampling_period_us = round(1000000*(1.0/SAMPLING_FREQUENCY));
 +}
 +
 +void loop() {
 +  /* サンプリング */
 +  for(int i=0; i<SAMPLES; i++) {
 +    microseconds = micros();    // サンプリング開始時間を取得
 +    vReal[i] = analogRead(2);
 +    vImag[i] = 0;
 +    // 次のサンプリング時間まで待つ
 +    while(micros() - microseconds < sampling_period_us){
 +      // wait
 +    }
 +  }
 +
 +  /* FFT */
 +  FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
 +  FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
 +  FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
 +  
 +  double peak = FFT.MajorPeak(vReal, SAMPLES, SAMPLING_FREQUENCY);
 +
 +  /* 結果を出力 */
 +  Serial.println(peak);     
 +
 +  // delay(1000);  // 1秒間隔で解析
 +}
 +
 +</file>
  
 ==== 8. Temperature & Humidity Sensor ==== ==== 8. Temperature & Humidity Sensor ====
 +Grove Temperature And Humidity Sensor
 +<file>
 +//Temperature and Humidity Sensor
 +#include "DHT.h"
 +#include <Arduino.h>
 +#include <U8x8lib.h>
  
 +#define DHTPIN 3     // what pin we're connected to
 +#define DHTTYPE DHT11   // DHT 11 
 +DHT dht(DHTPIN, DHTTYPE);
 +
 +U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
 +
 +void setup(void) {
 +  Serial.begin(9600); 
 +  Serial.println("DHTxx test!");
 +  dht.begin();
 +  u8x8.begin();
 +  u8x8.setPowerSave(0);  
 +  u8x8.setFlipMode(1);
 +}
 +
 +void loop(void) {
 +
 +  float temp, humi;
 +  temp = dht.readTemperature();
 +  humi = dht.readHumidity();
 +  
 +  u8x8.setFont(u8x8_font_chroma48medium8_r);
 +  u8x8.setCursor(0, 33);
 +  u8x8.print("Temp:");
 +  u8x8.print(temp);
 +  u8x8.print("C");
 +  u8x8.setCursor(0,50);
 +  u8x8.print("Humidity:");
 +  u8x8.print(humi);
 +  u8x8.print("%");
 +  u8x8.refreshDisplay();
 +  delay(200);
 +}
 +</file>
 ==== 9. Air Pressure Sensor ==== ==== 9. Air Pressure Sensor ====
 +Barometer Sensor BMP280 を追加する
 +<file>
 +//Air pressure detection
 +#include "Seeed_BMP280.h"
 +#include <Wire.h>
  
 +BMP280 bmp280;
 +
 +void setup() {
 +    Serial.begin(9600);
 +    if (!bmp280.init()) {
 +        Serial.println("Device not connected or broken!");
 +    }
 +}
 +
 +void loop() {
 +
 +    float pressure;
 +
 +    //get and print temperatures
 +    Serial.print("Temp: ");
 +    Serial.print(bmp280.getTemperature());
 +    Serial.println("C"); // The unit for  Celsius because original arduino don't support speical symbols
 +
 +    //get and print atmospheric pressure data
 +    Serial.print("Pressure: ");
 +    Serial.print(pressure = bmp280.getPressure());
 +    Serial.println("Pa");
 +
 +    //get and print altitude data
 +    Serial.print("Altitude: ");
 +    Serial.print(bmp280.calcAltitude(pressure));
 +    Serial.println("m");
 +
 +    Serial.println("\n");//add a line between output of different times.
 +
 +    delay(1000);
 +}
 +</file>
 ==== 10. 3-Axis Accelerator ==== ==== 10. 3-Axis Accelerator ====
 +grove-3-axis-digital-accelerometer-2g-to-16g を追加
 +<file>
 +//Gravity Acceleration
 +#include "LIS3DHTR.h"
 +#ifdef SOFTWAREWIRE
 +    #include <SoftwareWire.h>
 +    SoftwareWire myWire(3, 2);
 +    LIS3DHTR<SoftwareWire> LIS;       //Software I2C
 +    #define WIRE myWire
 +#else
 +    #include <Wire.h>
 +    LIS3DHTR<TwoWire> LIS;           //Hardware I2C
 +    #define WIRE Wire
 +#endif
  
 +void setup() {
 +    Serial.begin(9600);
 +    while (!Serial) {};
 +    LIS.begin(WIRE, 0x19); //IIC init
 +    delay(100);
 +    LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ);
 +}
 +void loop() {
 +    if (!LIS) {
 +        Serial.println("LIS3DHTR didn't connect.");
 +        while (1);
 +        return;
 +    }
 +    //3 axis
 +    Serial.print("x:"); Serial.print(LIS.getAccelerationX()); Serial.print("  ");
 +    Serial.print("y:"); Serial.print(LIS.getAccelerationY()); Serial.print("  ");
 +    Serial.print("z:"); Serial.println(LIS.getAccelerationZ());
 +
 +    delay(500);
 +}
 +</file>
  
  
  • /home/users/2/lolipop.jp-4404d470cd64c603/web/ws/data/attic/arduino/grovebeginnerkit.1684166949.txt.gz
  • 最終更新: 2023/05/16 01:09
  • by baba