回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

#决赛#基于天象的命理推算 简单

头像 kylinpoet 2023.08.28 145 1

项目介绍

 

1.关于硬件

决赛收到的盲盒主件是编号为:SKU:EDU0157,云雀气象仪。

076bdffe93b02c92d89b6a330b0f2a7c.png

这是一个比较完整的小型气象站,除了空气质量检测等可以通过拓展接口获取外,基本上能满足日常需求。不过因为收到的产品是别人已经试用过的,稍有瑕疵。

image.png

但瑕不掩瑜,能够抽到还是比较欣喜的。

 

2. 关于比赛

image.png

但比赛中没有要求使用这个产品,而是用行空板和SCI采集模块 + (Mind+) + 脑洞,不过拿到这么新鲜的东西,怎么能不趁手用用看呢,我们可以看到云雀可以提供如下数据:

--------------------------------------------------------------------------------------------------------------------------------------

1. WindSpeed,风速:风速是由顶上的风杯测得
2. WindDirection:NW,风向:风向是由风向标测得(注意:气象仪放置的位置)
3. Voltage,工作电压
4. Altitude:94.74 m(海拔,这个估计要校准)
5. Pressure:1003.65 hPa (气压)
6. Temp:26.38 C,   (温度)
7. Humi:63.84 %RH (湿度)

----------------------------------------------------------------------------------------------------------------------------------------

已经包含了温湿度数据,但为了让SCI采集模块展现它的强大性,我用精度更高的SHT31温湿度传感器替代。

3. 关于八卦:

image.png

为什么会想到八卦呢?是因为 云雀 已经显性提供了7个数据,加上时间戳正好有8个数据可以获取(实际上,还有一个隐藏数据:Percentage ,但官方也没有具体介绍,这里先忽略)

12345678乾兑离震巽坎艮坤天泽火雷风水山地

 

首先声明 坚信科学杜绝迷信!!

首先声明 坚信科学杜绝迷信!!

 

image.png

八八六十四卦,分上、中、下卦。

 

有了硬件、有了软件、有了脑洞、有了资料,我们就开干了。

image.png

制作过程

 

1.硬件连接

image.png

基本思路:

SHT31→SCI采集模块→ 行空板 ← 云雀气象仪

(为了赶进度,基本上不要脸了,各位看官请轻拍)

 

2. 软件使用

 

主体当然用的Mind+,需要添加模块:

加载云雀库:https://gitee.com/liliang9693/ext-yunque

加载SCI库:https://gitee.com/liliang9693/ext-sci

Mind+切换为Python模式,扩展中选择“官方库-行空板”和“pinpong库-pinpong初始化”

image.png

3. 基本思路

 

使用八卦的基本思路是,根据姓名算出笔画总和余8,作为一爻:

image.png

获取笔画数,这里是用了查表。当然,为了简单点可以直接使用 unicode编码数,这不是为了显出高 * 格吗!

 

使用云雀的所有数据和,作为一爻:

image.png

再加上SHT31温湿度模块,获得的数据:

image.png

另外,为了增加随机性,使用time函数的时间戳毫秒数作为随机因子:

image.png

这样子,数据就有了:

image.png

 

作品演示

image.png

因为没有什么特殊的演示需要,所以就不搞视频了。

 

总结

1.本文只是用数学的方法,得出了计算结果。在过程中使用了八卦的一些资源,没有对八卦文化不敬的意思。

 

2. 行空板+SCI采集模块真得很强大。SCI采集模块和DF产品更配哦。

 

 

 

资源

代码
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
import sys
sys.path.append("/root/mindplus/.lib/thirdExtension/liliang-yunque-thirdex")
from DFRobot_Atmospherlum import *

sys.path.append("/root/mindplus/.lib/thirdExtension/liliang-gravitysci-thirdex")
from dfrobot_rp2040_sci import *

from pinpong.board import Board
import time
from unihiker import GUI
import os


Board().begin()
u_gui=GUI()

yunque_i2c = DFRobot_Atmospherlum_I2C(0x42)
while (yunque_i2c.begin() != 0):
    print("yunque_i2c initialize failed!!")
    time.sleep(1)
print("Sensor initialize success!!")
yunque_i2c.set_local_time()
time.sleep(1)

SCI1 = DFRobot_RP2040_SCI_IIC(addr=0x21)
while SCI1.begin() != 0:
    print("Initialization Sensor Universal Adapter Board failed.")
    time.sleep(1)


def get_stroke(c):
    # strokes_path: https://github.com/helmz/Corpus/blob/master/zh_dict/strokes.txt
    # 按照 unicode 顺序排列的笔画数
    # 如果返回 0, 则也是在 unicode 中不存在 kTotalStrokes 字
    strokes = []
    with open('strokes.txt', 'r') as fr:
        for line in fr:
            strokes.append(int(line.strip()))
    unicode_ = ord(c)
    if 0<= unicode_ <= 127:
        return unicode_
    if 13312 <= unicode_ <= 64045:
        return strokes[unicode_-13312]
    elif 131072 <= unicode_ <= 194998:
        return strokes[unicode_-80338]
    else:
        print("c should be a CJK char, or not have stroke in unihan data.")
        return 0


print('ky' + '-*' * 60 + 'lin')

while True:
    name = input("请输入您的姓名:")
    name_sum = 0
    for v in name:
        name_sum += get_stroke(v)
    u_gui.fill_rect(x=0, y=0, w=200, h=200,  color="#FFFFFF")
    # 获取毫秒数
    now_time_ns = int(time.time() % 1 * 1000)

    Dir_dict = {'E':0, 'SE':1 , 'S':2, 'SW':3 , 'W':4, 'NW':5, 'N':6, 'NE':7}
    Speed = float(yunque_i2c.get_value("Speed")) * 100
    Dir = Dir_dict.get(yunque_i2c.get_value("Dir"),0)
    Pressure = float(yunque_i2c.get_value("Pressure")) * 100
    Voltage = float(yunque_i2c.get_value("Voltage"))  * 100
    Altitude = float(yunque_i2c.get_value("Altitude")) * 100
    # print(type(now_time_ns),type(Speed),type(Dir),type(Pressure),type(Voltage),type(Altitude))

    # 天卦:
    shang={
        0:"地",
        1:"天",
        2:"泽",
        3:"火",
        4:"雷",
        5:"风",
        6:"水",
        7:"山",
    }

    xia={
        0:"坤",
        1:"乾",
        2:"兑",
        3:"离",
        4:"震",
        5:"巽",
        6:"坎",
        7:"艮",
    }

    gua = {
        10: "否  中卦",
        11: "乾  上上卦",
        12: "履  中上卦",
        13: "同人  中上卦",
        14: "无妄  下下卦",
        15: "姤  中上卦",
        16: "讼  中下卦",
        17: "遁  下下卦",
    
        22: "兑  上上卦",
        21: "夬  上上卦",
        23: "革  上上卦",
        24: "随  中卦",
        25: "大过  中下卦",
        26: "困  中上卦",
        27: "咸  中上卦",
        20: "萃  中上卦",
    
        30: "晋  中上卦",
        33: "离  中上卦",
        31: "大有  上上卦",
        32: "睽  下下卦",
        34: "噬嗑  上上卦",
        35: "鼎  中下卦",
        36: "未济  中下卦",
        37: "旅  下下卦",
    
        40: "豫  中卦",
        41: "大壮  中上卦",
        42: "归妹  下下卦",
        43: "丰  上上卦",
        44: "震  中上卦",
        45: "恒  中上卦",
        46: "解  中上卦",
        47: "小过  中上卦",
    
        50: "观  中上卦",
        51: "小畜  下下卦",
        52: "中孚  下下卦",
        53: "家人  下下卦",
        54: "益  上上卦",
        55: "巽  中上卦",
        56: "涣  下下卦",
        57: "渐  上上卦",
    
        60: "比  上上卦",
        61: "需  中上卦",
        62: "节  上上卦",
        63: "既济  中上卦",
        64: "屯  下下卦",
        65: "井  上上卦",
        66: "坎  下下卦",
        67: "蹇  下下卦",
    
        70: "剥  中下卦",
        71: "大畜  中上卦",
        72: "损  下下卦",
        73: "贲  中上卦",
        74: "颐  上上卦",
        75: "蛊  中卦",
        76: "蒙  中下卦",
        77: "艮  中下卦",
    
        7: "谦  中卦",
        1: "泰  中卦",
        2: "临  中上卦",
        3: "明夷  中下卦",
        4: "复  中卦",
        5: "升  上上卦",
        6: "师  中上卦",
        0: "坤  上上卦",
    }
    Temp_Air = SCI1.get_valueFloat0("Temp_Air") * 100
    Humi_Air = SCI1.get_valueFloat0("Humi_Air") * 100

    shanggua  = int(time.time() % 1 * 1000) + Speed + Dir + \
    Pressure + Voltage + Altitude + Temp_Air + Humi_Air

    xiagua = name_sum + int(time.time() % 1 * 1000)

    info = gua.get(shanggua % 8 * 10 + xiagua % 8,'天地异象 空卦')
    print(info)

    卦象=u_gui.draw_text(text=f'{name}:',x=40,y=110,font_size=18, color="#006b6b")
    卦象=u_gui.draw_text(text=info,x=60,y=150,font_size=22, color="#FF0000")
    print('ky' + '-*' * 60 + 'lin')

评论

user-avatar
  • hacker_

    hacker_2023.08.30

    666

    0