Tamesuke-Goto Maker的Blog -2ページ目

Tamesuke-Goto Maker的Blog

地域ISP管理者だけれど、ここ3年ほどMakerなJobが増えたのでまとめてみたいと思います 旧ハンドル Ringoro

スイッチサイエンス ダストセンサー SPS30 を ESP32で使ってみました。

 

センサーモジュールはこちら、、

 

https://www.switch-science.com/catalog/5328/

 

モジュールの接続には JST ZHR-5 を使います。スイッチサイエンスのモジュールには専用ケーブルが付いてきますが先がピンでブレッドボード用になっているので先バラがないかと探してみたらaitendoにあったのでこれを使ってみます。(今見たら売り切れてた。。)

 

 

 

接続:

 

SPS30 pin     ESP32

  1 VCC -------- VUSB

  2 RX  -------- TX  pin 26

  3 TX  -------- RX  pin 25

  4 Select      (NOT CONNECTED)

  5 GND -------- GND

 

 

スケッチは こちらのサンプルを参考にして

 

https://github.com/paulvha/sps30

 

このクラスライブラリ、ESP32用と書いてありますが、Example1_sps30_BasicReadings がそのままでコンパイルが通りません。 ライブラリソースSPS30.h を開いて、

 

#define INCLUDE_SOFTWARE_SERIAL 1

 

の行をコメントアウトしてください。

 

Example1_sps30_BasicReadings.ino をコンパイルして実行すると計測を開始します。

 

動作中センサ内のモータが動いているのがわかります。

 

 

-------------Mass -----------    ------------- Number --------------   -Average-

     Concentration [μg/m3]             Concentration [#/cm3]             [μm]

P1.0    P2.5    P4.0    P10    P0.5    P1.0    P2.5    P4.0    P10    PartSize

 

0.94    1.33    1.61    1.70    5.59    7.06    7.43    7.48    7.49    0.61

1.08    1.13    1.13    1.13    7.51    8.67    8.69    8.69    8.69    0.46

1.25    1.30    1.30    1.30    8.71    10.05    10.08    10.08    10.08    0.41

1.35    1.41    1.41    1.41    9.38    10.82    10.85    10.85    10.85    0.43

1.43    1.49    1.49    1.49    9.92    11.44    11.48    11.48    11.48    0.39

1.47    1.52    1.52    1.52    10.17    11.73    11.77    11.77    11.77    0.41

1.50    1.57    1.57    1.57    10.45    12.05    12.09    12.09    12.09    0.43

1.57    1.64    1.64    1.64    10.92    12.59    12.63    12.63    12.63    0.43

1.60    1.66    1.66    1.66    11.09    12.79    12.83    12.83    12.83    0.42

1.65    1.71    1.71    1.71    11.44    13.19    13.23    13.23    13.23    0.43

1.69    1.76    1.76    1.76    11.73    13.52    13.56    13.56    13.56    0.45

1.73    1.80    1.80    1.80    12.04    13.89    13.93    13.93    13.93    0.44

 

計測はできたので次にwww post する機能など追加したいと思います。

 

 

 

 

 

昨年作った ハロウィン用LEDチカを今年も作ってみました

 

 

 

今回は秋月のLEDストリングを使ってやってみます。

LEDストリングは4-5個づつ切り取って、抵抗値は 220Ωでやってみます。

 

LEDストリング

 

今回はATTiny13Aのウォッチドッグタイマーを使ってDeppSleepをさせながら動かしてみました。

512msecのWDタイマーで0.5sec点灯 1sec消灯にしてみます。

 

ウォッチドッグの省電力化はなかなかです。CR2032一個で2週間くらい点灯しっぱなしですが、まだ光っています。

 

消費電力を計算してみます  LEDの電圧降下2.8V として

 

(3-2.8)/220 * 2 = 0.9 mA

 

これが連続ではなく1.5sec間に0.5sec なので消費電力約1/3。 CR2032ボタン電池の容量が 220mAHなので、、、ATTinyの待機電流は10μAとかなのでとりあえず無視。

 

220/(0.9/3) = 733h   ... 30日


大分長持ちする計算です。少なくとも20日くらいは持つと考えて良いでしょう。

 

 

 

スケッチはこんな感じ

 
/*
     Blink 2 LEDs
     for  ATTiny13 LED Board

     2018/10/17
 
   PCINT5/A0/D5/RST |1---O---8| VCC
      *PCINT3/A3/D3 |2       7| D2/A1/INT0/PCINT2*
       PCINT4/A2/D4 |3       6| D1/PWM/PCINT1
                GND |4-------5| D0/PWM/A0/PCINT0*

  *Use PIN
  PIN5 (D0) ... PCINT SW ON/OFF connect to GND
 
 */
 
//#include <avr/pgmspace.h>

#include <avr/interrupt.h>
#include <avr/sleep.h>

#define LED1 3
#define LED2 4
#define LED3 0
#define LED4 1
#define LED5 2

volatile int pcint;
volatile bool wait;

/*
 *    Random
 */

unsigned int randshort(unsigned int init)
{
  static unsigned int seed;
  if(init!=0){
  seed ^= init;
  }
  seed *= 52341;
  seed += 37;
  return(seed ^ 0x1234);
}


ISR(PCINT0_vect) {
  if(digitalRead(0)==0){
    pcint=pcint ^ 1;
  }
}  


void setup() {
  randshort(analogRead(0));
  pinMode(LED1, OUTPUT);
//  pinMode(LED2, OUTPUT);
//  pinMode(LED3, OUTPUT);
//  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);

  pinMode(0, INPUT_PULLUP);
  GIMSK |= _BV(PCIE);                     // Enable Pin Change Interrupts
  PCMSK |= _BV(PCINT0);                   // Use PB1 as interrupt pin for My Board

  // set timer to 0.5s
  WDTCR |= (1<<WDP2) | (1<<WDP0);

// set timer to 4 sec
//  WDTCR |= (1<<WDP3);

// Set watchdog timer in interrupt mode
  WDTCR |= (1<<WDTIE);
  WDTCR |= (0<<WDE);
  sei(); // Enable global interrupts
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
}


ISR(WDT_vect) {

}

void loop() {
  static unsigned char d;
  static unsigned char t;

  if(pcint){
    sleep_mode();
    return;
  }


//  d = randshort(0) & 0x60;

//  digitalWrite(LED1,(d & 0x11));
//  digitalWrite(LED2,(d & 0x22));
//  digitalWrite(LED4,(d & 0x44));
//  digitalWrite(LED5,(d & 0x88));
//  digitalWrite(LED3,(d & 0x41));

  d = randshort(0) & 0x05;
//  d++;
  digitalWrite(LED1,(d));
  digitalWrite(LED5,(d^0x01));
//  digitalWrite(LED2,(d^0x01));

  sleep_mode();
  digitalWrite(LED1,0);
  digitalWrite(LED5,0);
//  digitalWrite(LED2,0);
  sleep_mode();
  sleep_mode();

}
 
----------------------
 

 ATTiny13/85 を書き込みするのに ArduinoUnoではちょとかさばるので、Arduono Nanoを使ってライタを作ってみました

 

 今回この辺の記事を参考にしていますが、Arduino nano 互換機を使って作ったのですが、、

 

https://arduinodiy.wordpress.com/2012/02/28/program-an-attiny-with-an-arduino-nano/

 

なんと書き込めない、、、 直接nanoのLEDブリンクをやろうにもそれも書き込めない。。

 

どうも変。一番あやしいのは RTS端子の10uFの電解です。おかしいなと思いつつ配線を切って外してみたら、、、OKでした。

 

互換機なのでシリアルUSBはCH340仕様だし、RTS周りの回路は異なっていると考えます。とりあえずATTiny13Aには書込みできるのでよしとします。