💡

ピエゾ素子でLチカ (Arduino, RaspiPico, 直繋ぎ)

2021/02/22に公開

つくるモノ

衝撃を検知して、LEDがチカチカ光るモノ。

▼ Arduino

完成図

配線図

Arduino UNO (互換機)で実装。
衝撃は、ピエゾ素子で検知。
LED側の抵抗は、150Ω。ピエゾ素子側の抵抗は、1MΩ。
※LED側抵抗の計算: (電源5V - LED順方向電圧2V) / LED最大電流0.02A = 抵抗150Ω

用意したもの

Name 購入したところ
ArduinoUno互換機 https://www.amazon.co.jp/gp/product/B07H4KTVK5
ピエゾ素子 https://www.amazon.co.jp/gp/product/B07Q71KXFW
LED https://www.amazon.co.jp/gp/product/B081W5H8LV
抵抗 https://www.amazon.co.jp/gp/product/B074117W9C
ブレッドボードワイヤ https://www.amazon.co.jp/gp/product/B06Y48V9DL
ブレッドボード https://www.amazon.co.jp/dp/B06ZZSB77C

コード

叩いた強さに応じて、点灯時間を変化させて、叩いた時の強弱を把握。

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}
 
void loop() {
  int val = analogRead(A0);
  if (val > 1) {
    Serial.println(val);
    digitalWrite(13,HIGH);
    delay(val/5);
    digitalWrite(13,LOW);
  }
}

▼ Raspberry Pi Pico

完成図

配線図



【参考: Raspberry Pi Pico - pin layout

用意したもの

Name 購入したところ
Raspberry Pi Pico https://www.switch-science.com/catalog/6900/
スルーホールワイヤ https://www.switch-science.com/catalog/6799/
※その他は基本、Arduinoと同じ

コード

MicroPythonで実装。Picoでコードを走らせるところまでの説明は、ここでは割愛。

from machine import Pin, ADC
from time import sleep

led = Pin(18, Pin.OUT)
adc = ADC(0)
while True:
    val = adc.read_u16()
    slp = val / 65535
    if slp > 0.1:
        led.value(1)
        sleep(slp)
        led.value(0)
    else:
        led.value(0)

▼ LED光らせるだけなら、Arduino無しでもOK

https://twitter.com/ie4kei/status/1363634448449736711

Discussion