2022年7月15日金曜日

RGB(フルカラー)LEDの様々

■RGBLEDとは

 RGBLEDとは、その名の通りRGB(Red, Green, Blue)の三原色の光が一つの素子で出せるようになっているLEDです。 

■種類

普通のフルカラーRGBLED



・表面実装用フルカラーRGBLED



・マイコン内蔵型フルカラーRGBLED

■部品一覧

ESP8266-CH340開発ボード

カソードコモン型RGBLED

SMDRGBLEDモジュール

WS2812B-5050LED

ブレッドボード

USBケーブル

ジャンパーワイヤー

■サンプル1ー単色切替

 配線図:

 

    プログラム:

#define B 4 // D2
#define R 14 // D5
#define G 12 // D6
void setup() {
    pinMode(R, OUTPUT);
    pinMode(G, OUTPUT);
    pinMode(B, OUTPUT);
}
void loop() {
  digitalWrite(R, HIGH);
  digitalWrite(G, LOW);
  digitalWrite(B, LOW);
  delay(1000);
  digitalWrite(R, LOW);
  digitalWrite(G, HIGH);
  digitalWrite(B, LOW);
  delay(1000);
  digitalWrite(R, LOW);
  digitalWrite(G, LOW);
  digitalWrite(B, HIGH);
  delay(1000);
}

    効果:



 ■サンプル2ー任意色

 ESP8266の一部ピンはPWM出力できます。単純なHIGH、LOWの数字出力ではなく、0-255の範囲が出力可能ので、RGBの各数字を組み合わせて、任意の色が表示できます。

 上記のD2,D5,D6ピンは全部PWM出力が可能です。

 今回はカソードコモン型RGBLEDを利用します。

 


 プログラムは下記ように調整します:

#define B 4 // D2
#define R 14 // D5
#define G 12 // D6
void setup() {
    pinMode(R, OUTPUT);
    pinMode(G, OUTPUT);
    pinMode(B, OUTPUT);
}
void loop() {
  // 紫色
  analogWrite(R, 247);
  analogWrite(G, 130);
  analogWrite(B, 247);
  delay(1000);
}

 効果:

 

効果はちょっと良くないです、マスクして綺麗になる :)

 ■サンプル3ーWS2812B-5050LED

  WS2812B-5050LEDモジュールは内蔵マイコンがあります。

  ピン情報はこのようなことです。


    VCC:5V電源(ESP8266開発ボードのVU(V)ピン)

    GND:GND

    DIN:データインプット

    DOUT:データアウトプット

    DINとDOUTは違いところですが、もう一番重要なことです。

  DINは最大800KBデータがインプットできます、一つのWS2812B-5050LEDを経過すると24B(RGB各8bit)を取得し、残りデータは次のWS2812B-5050LEDに渡します。で、沢山なLEDを同時的にコントロールが可能になりました。

    このイメージです。


 プログラム:
  事前に、ライブラリーに下記を追加します。

#include <Adafruit_NeoPixel.h>

#define PIN 0  // D3
#define NUMPIXELS 1 // LED数

Adafruit_NeoPixel led(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  led.begin();
  led.setBrightness(10);  // 明るさ
}

void loop() {
  led.setPixelColor(0,led.Color(255,0,0));  // 赤
  led.show();
  delay(1000);

  led.setPixelColor(0,led.Color(0,255,0));  // 緑
  led.show();
  delay(1000);

  led.setPixelColor(0,led.Color(0,0,255));  // 青
  led.show();
  delay(1000);

  led.clear();
  led.show();
  delay(1000);
}
 効果:

半田付け能力不足ね。。。:(

2022年7月14日木曜日

時間を表示ーーTM1637LED表示器

 ■TM1637とは

TM1637 は、4桁7セグメントのLEDを簡単に表示するためのモジュールです。 7セグメントLEDはその名の通り、1文字 (または数字) 毎に7セグメントあるので、本来は制御するためにたくさんの入出力が必要になります。

■主な特徴

・電源電圧 3.3/5V

・表示 8セグメント×6ビット

・キー・スキャン 8×2ビット

・輝度 8レベル

・インターフェース CLK、DIO

■配線図

■部品リスト

ESP8266-CH340開発ボード

TM1637LED表示器

ブレッドボード

USBケーブル

ジャンパーワイヤー

■実物イメージ


■プログラム

 サンプルプログラムはTM1637専用のライブラリを利用しているため、下記場所にダウンロードできます。

 https://github.com/avishorp/TM1637

#include <TM1637Display.h>
const int CLK = 14;  //D5
const int DIO = 12;  //D6
TM1637Display display(CLK, DIO); //set up the 4-Digit Display.
void setup() {
  display.setBrightness(0x0a);
}
void loop() {
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  // コロンマークを点滅する
  display.showNumberDecEx(1840,0x40,true);
  delay(1000);
  display.showNumberDecEx(1840,0x0,true);
  delay(1000);
}

■点滅効果

 


2022年7月4日月曜日

リレーを使ってLEDをコントロール

 ■リレーとは

 「継電器」も呼ばれます。大まかにいうとあることが起こります、それを他に送り伝えて別の動作をさせる。その役目をする部品です。
 コイルと接点(可動接点,固定接点)などで構成され、コイルに一定以上の電流を流すことによって、接点をON/OFFすることができる部品です。

 ■リレーの動作原理

リレーのON時とOFF時の動作原理は以下のようになっています。
ON時
①スイッチをONすると、コイルに電流が流れ、鉄心が磁化する。
②磁化された鉄心に発生した電磁力によって鉄片が引き寄せられる。
③可動接点と固定接点が接触し、リレーがON状態となる。
④その結果、電流が流れて電球が点灯する。

OFF時
①スイッチをOFFすると、コイルに電流が流れなくなるため、磁化しなくなる。
②電磁力が無くなるため、鉄片が元の位置に戻る。
③可動接点と固定接点が離れ、リレーがOFF状態となる。
④その結果、電流が流れなくなりランプが消灯する。

部品リスト:

ESP8266-CH340開発ボード

ブレッドボード

USBケーブル

・5V 1回路リレー

・5MM LED

100Ω抵抗

ジャンパーワイヤー

・スイッチ

■配線図


 回路での普通な接続方法:

■実物イメージ:

 スイッチは押さない場合、LEDは消灯の状態になる 

 スイッチを押すままの場合、


プログラム:

const int RELAY = 5;  //D1
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(RELAY, OUTPUT);
  digitalWrite(RELAY, HIGH);
}
void loop() {
}



2022年6月28日火曜日

水位センサー(water detect sensor)を繋いでみた

 ■紹介:

 Water Sensor水位センサーはArduino開発ボードで直接繋がる使いやすいものであること。水滴サイズや水位などの水量をアナログ電圧として出力しているから 、開発ボードのA0ピンを利用する。

■部品リスト:

ESP8266-CH340開発ボード

ブレッドボード

USBケーブル

水位センサー

■配線図:


 ピンは、右から順に「A0」「VIN」「GND」になっています。
■実物イメージ:
 水がない時:
 水を入ると、A0で渡した値が大きくなる
 
シリアルモニタの出力

■プログラム:

void setup() {
  Serial.begin(115200);
}
 
void loop() {
  int sensorValue;
  sensorValue = analogRead(A0);
  Serial.print("sensor = ");
  Serial.println(sensorValue);
  delay(1000);
}

2022年6月27日月曜日

土壌湿度センサー(FC-28)の使い方

■土壌湿度センサーとは

アナログ土壌湿度センサーは、土壌中に存在する水分の量を読み取る事が出来ます。センサー自体シンプルな構造であることから信頼性が高く、湿度を監視するのに理想的です。

部品リスト:

ESP8266-CH340開発ボード

ブレッドボード

USBケーブル

土壌湿度センサー(FC-28)

配線図:

■説明:
 今回はESP8266-CH340開発ボードを利用しています。
 下記場所にドライバーをダウンロードできます。
実物イメージ:



 ・シリアルモニタの出力

プログラム:

int value1=0;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}
void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("土湿度 Reading: ");
  value1 = analogRead(A0);
  Serial.println(value1);
  delay(2000);
}



2022年6月22日水曜日

光センサー(LDR/CDS)でLEDを自動点滅

LDR/CDSセンサーは、フォトダイオードなどとともに、「光センサー」と呼ばれるものの一部です。
硫化カドミウムを主成分とする光導電素子の一種で、光の当たる量によって抵抗値が変化します。受光部に当たる光の量が多ければ、抵抗値が小さくなります。

部品リスト:

ESP8266開発ボード

・ブレッドボード

USBケーブル

・光センサー

・3mm LED

・10kΩ抵抗 100Ω抵抗(任意)

・ジャンパーワイヤー

配線図

■説明

 LDR/CDSの抵抗を変更に従って、A0ピンで取得の数値も変わります(0~1023の範囲)

 一定の値を超えると、夜を判定し、LEDを自動点灯します。

 一定の値に減ると、昼を判定し、LEDを自動消灯します。

実物イメージ

・通常の場合


・LDRをマスクする


・シリアルモニタの出力

■プログラム

int lightValue=0;
int ledPin=5; // D1
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(ledPin,OUTPUT);
}
void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("LDR Reading: ");
  lightValue = analogRead(A0);
  Serial.println(lightValue);
  if (lightValue > 20) {
    // 点灯
    digitalWrite(ledPin, HIGH);
  } else {
    // 滅灯
    digitalWrite(ledPin, LOW);
  }
  
  delay(1000);
}

気象観測百葉箱作成

 本文は気象関連センサーの使い方のまとめ紹介

■部品リスト:

ESP8266開発ボード(必須)

・ブレッドボード(必須)

USBケーブル(必須)

温度センサーDS18B20(必須)

・雨滴感知センサー(必須)

・気圧センサーBPM180(必須)

・3mm LED

・100Ω抵抗*2(1必須)

・ジャンパーワイヤー(必須)

気圧センサーBPM180

このモジュール単体で、「気温」「気圧」の情報を計測することができます。

ピンは、左から順に「SDA」「SCL」「GND」「VIN」になっています。

・注意点

 今回は「BMP180_Breakout_Arduino_Library」を利用しています。

 下記場所でダウンロードできます。

  https://github.com/sparkfun/BMP180_Breakout_Arduino_Library

 ダウンロードされたZIPファイルが下図でもインストールできます。



配線図

雨滴感知センサー

雨滴感知センサーは状態が変化した時マイクロに通知します。

ピンは、左から順に「A0」「D0」「GND」「VIN」になっています。

・注意点

 アナログ電圧を読み取ってデジタル値に変換するために、ADCを占用しています。

 雨滴感度は調整できます。

配線図

温度センサーDS18B20

高精度デジタル温度専用センサーです。

独自の1-Wireインターフェースは、通信のために1本のポートピンだけを必要とします。

ピンは、左から順に「GND」「DQ」「VDD」になっています。

配線図


■回路イメージ

下図は集成して実物イメージです。




プログラム

#include <OneWire.h>
#include <DallasTemperature.h>
#include <SFE_BMP180.h>
#define ALTITUDE 1655.0
#define rainDigital 16 // D0
const int TEMP = 14;  //D5
OneWire oneWire(TEMP);
DallasTemperature sensors(&oneWire);
SFE_BMP180 pressure;
void setup() {
  Serial.begin(115200);
  sensors.begin();
  pinMode(rainDigital,INPUT);
  //BMP180 Sensor
  if (pressure.begin())
    Serial.println("BMP180 init success");
  else {
    Serial.println("BMP180 init fail\n\n");
    while(1);
  }
}
void loop() {
  // 温度検知
  sensors.requestTemperatures();
  float temperatureC = sensors.getTempCByIndex(0);
  Serial.print(temperatureC);
  Serial.println("℃");
  handleADC();
  // 雨滴検知
  int rain = analogRead(A0);
  Serial.print("R:");
  Serial.println(rain);
  int rainDigitalVal = digitalRead(rainDigital);
  String rainstatus;
  if(rainDigitalVal==1){
    rainstatus="No Rain";
  } else{
    rainstatus="Raining";
  }
  Serial.println(rainstatus);
  
  delay(5000);
}
void handleADC() {
  char status;
  double T,P,p0,a;
  
  Serial.println();
  Serial.print("provided altitude: ");
  Serial.print(ALTITUDE,0);
  Serial.print(" meters, ");
  Serial.print(ALTITUDE*3.28084,0);
  Serial.println(" feet");
 
  status = pressure.startTemperature();
  if (status != 0)
  {
    delay(status);
    status = pressure.getTemperature(T);
    if (status != 0)
    {
      // 温度出力:
      Serial.print("temperature: ");
      Serial.print(T,2);
      Serial.print(" deg C, ");
      Serial.print((9.0/5.0)*T+32.0,2);
      Serial.println(" deg F");
      status = pressure.startPressure(3);
      if (status != 0)
      {
        delay(status);
        status = pressure.getPressure(P,T);
        if (status != 0)
        {
          // 気圧出力:
          Serial.print("absolute pressure: ");
          Serial.print(P,2);
          Serial.print(" mb, ");
          Serial.print(P*0.0295333727,2);
          Serial.println(" inHg");
          p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO)
          Serial.print("relative (sea-level) pressure: ");
          Serial.print(p0,2);
          Serial.print(" mb, ");
          Serial.print(p0*0.0295333727,2);
          Serial.println(" inHg");
          a = pressure.altitude(P,p0);
          Serial.print("computed altitude: ");
          Serial.print(a,0);
          Serial.print(" meters, ");
          Serial.print(a*3.28084,0);
          Serial.println(" feet");
        }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");
}



シンプルロボットカーセットの使い方

■ マイコン :ESP3266-CH340  シンプルの案として、マイコンは安いESP8266-CH340開発ボードを選びました。該当マイコンもWIFI機能があります。  ドライバーダウンロード場所:    https://sparks.gogo.co.nz/ch340.html...