Interactive Christmas Ornament-個人專題

Shih Jiun Lin Lv4

簡報網址: canva

Interactive Christmas Ornament

功能及運作

  • 當感應器沒感應到人時,於愛心及向前凝視的眼睛做隨機顯示。
  • 左側感應器偵測到人時,切換到看向左側的眼睛。
  • 右側感應器偵測到人時,切換到看向右側的眼睛。
  • 偵測距離:75公分。

材料準備

  • Arduino 開發板 *1
  • 小塊麵包板 *1
  • 杜邦線(公對母、母對母) *n
  • 超聲波感應器(HC-SR04) *2
  • 配有 max7219 的 LEE 88 矩陣(Generic) 2

電路連接

  • max7219 腳位連接
    • DIN(Data in): 10
    • CLK(Clock): 11
    • CS(Load): 12
  • Ultrasonic Sensor(Right)
    • Trig: 2
    • Echo: 1
  • Ultrasonic Sensor(Left)
    • Trig: 4
    • Echo: 3

程式編寫

  • 需要先安裝LedControl函式庫

  • LED矩陣自定義顯示:

  • 程式碼: 程式碼下載

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "LedControl.h"
LedControl LEDmatrix=LedControl(10,11,12,1);

//顯示內容
const uint64_t middle[] = {
0x007e425a5a427e00,
0x000000ffff000000
};
const uint64_t left[] = {
0x007e424e4e427e00,
0x000000ffff000000
};
const uint64_t right[] = {
0x007e427272427e00,
0x000000ffff000000
};
const uint64_t heart[] = {
0x00183c7effffff66,
0x000000ffff000000
};

//顯示圖形
void displayImage(uint64_t image) {
for (int i = 0; i < 8; i++) {
byte row = (image >> i * 8) & 0xFF;
for (int j = 0; j < 8; j++) {
LEDmatrix.setLed(0, i, j, bitRead(row, j));
}
}
}

//獲取距離
float getDistance(int trig,int echo){
pinMode(trig,OUTPUT);
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
pinMode(echo, INPUT);
return pulseIn(echo,HIGH,30000)/58.0;
}

void setup() {
LEDmatrix.clearDisplay(0);
LEDmatrix.shutdown(0, false);
LEDmatrix.setIntensity(0, 10);
randomSeed(69);
}

void loop() {
//如果右側sensor於75公分處感應到物體,顯示看右方的圖形
if(getDistance(2,1) < 75){
for(int i=0; i<2; i++){
displayImage(right[i]);
delay(750);
}
}
//如果左側sensor於75公分處感應到物體,顯示看左方的圖形
if(getDistance(4,3) < 75){
for(int i=0; i<2; i++){
displayImage(left[i]);
delay(750);
}
}
//如果兩側sensor於75公分處未感應到物體,於愛心眼與凝視前方做隨機顯示
if((getDistance(2,1) > 75) && (getDistance(4,3) > 75)){
int random_num=random(1, 3);
if(random_num==1){
for(int i=0; i<2; i++){
displayImage(middle[i]);
delay(750);
}
}
if(random_num==2){
for(int i=0; i<2; i++){
displayImage(heart[i]);
delay(750);
}
}
}
}

外觀設計

  • 主要以塑膠瓦楞紙板透過保麗龍膠拼接而成。(建議使用熱熔膠,保麗龍膠穩固度不佳!)
  • 一個似房子形狀的五邊形柱體為主體。
    • 頂部:
      • 頂部: 透過束帶的幫助,我將其設計成翻蓋式,以便後續維修或組裝。
    • 正面及背面
      • 正面: 挖出兩個正方形及長方形來放置LED矩陣及Sensor。

      • 背面: 挖出一方形小孔來放置電源供應線。

  • 裝飾
    • 以聖誕帽作點綴。

功能展示

  • Title: Interactive Christmas Ornament-個人專題
  • Author: Shih Jiun Lin
  • Created at : 2023-01-20 01:18:01
  • Updated at : 2023-01-24 01:32:30
  • Link: https://shih-jiun-lin.github.io/2023/01/20/Interactive Christmas Ornament/
  • License: This work is licensed under CC BY-NC-SA 4.0.