leon...... 发表于 2019-11-18 23:53:58

[小学生DIY作业]红外线和简单编码

本帖最后由 leon...... 于 2019-11-19 00:52 编辑

周三要交作业,临时抱佛脚,和小孩一起完全了这个制作,帮他来理解一下这些基础概念:

* 认识一些常用的元件和符号
* 了解红外线是不可见光,适合来传递消息
* 开关的短按和长按组成编码(主要目的)

画的接线图和飞线板,图纸右上角是老师发给学生的编码
点表示短按
线表示长按





胡乱按一通后,怎么能知道编码是否正确?那么轮到我上场了,给他加上了一个解码器,来直观显示编码:

将红色接收头直接连到ESP32,外置一个下拉电阻,写了一个简单解码程序。有二个版本,一个版本接收老师的编码,另一个将编码扩展成ASCII码,这样可以显示所有E文字符了,效果如下:
《最下方一行才是通过红外解码了出来的字符》
《比如‘c’的编码:短长长短 短短长长》




linhao1581 发表于 2019-11-19 00:08:09

你小孩多大,这么复杂他能搞清楚吗?

leon...... 发表于 2019-11-19 00:21:23

linhao1581 发表于 2019-11-19 00:08
你小孩多大,这么复杂他能搞清楚吗?

这个实验只是让他知道开关的短按和长按可以组成编码。以及红外线传感器的作用。
重点是编码。

dexidz 发表于 2019-11-19 07:59:53

我不教我儿子这些,希望他不入这行

ZHAOBAO511 发表于 2019-11-19 08:08:45

这个短长长短有时间规定吗?没有时间的量化不行吧。

leon...... 发表于 2019-11-19 08:47:43

ZHAOBAO511 发表于 2019-11-19 08:08
这个短长长短有时间规定吗?没有时间的量化不行吧。

是的,我设定的是200MS为区分,小于为短按,大于为长按

#define IRRevPin       36

uint32_t data_ready = 0;
bool ir_sts = false;
int deb = 0;
int hold_count = 0;
int code_count = 0;
uint32_t code_value = 0;
char code_char = ' ';
char words = "          ";
void loop() {
    bool new_sts = false;
    delay(5);
    if(digitalRead(IRRevPin))
    {
      matrix.fillCircle(15,35,5,LED_BLUE_LOW);
      new_sts = true;
    }
    else
    {
      matrix.fillCircle(15,35,5,LED_BLACK);
    }

    if(ir_sts)
    {
      if(!new_sts)
      {
            deb++;
            if(deb > 5)
            {
                deb = 0;
                ir_sts = false;

                //下降沿来测算高脉冲宽度,宽度长则为1,短则为0
                uint32_t is_long = 0;
                if(hold_count > 40)
                {
                  matrix.fillCircle(32,35,5,LED_BLUE_LOW);
                  is_long = 1;
                }
                else
                {
                  matrix.fillCircle(32,35,5,LED_BLACK);
                }

                code_value = (code_value<<1)| is_long;
                //5个code_count记为一个周期。
                code_count++;
                // if(code_count >=5)
                if(code_count >=8)
                {
                  code_char = ' ';
                  code_count = 0;

                #if 0
                  switch(code_value)
                  {
                        case 0x0f: code_char='1'; break;
                        case 0x07: code_char='2'; break;
                        case 0x03: code_char='3'; break;
                        case 0x01: code_char='4'; break;
                        case 0x00: code_char='5'; break;
                        case 0x10: code_char='6'; break;
                        case 0x18: code_char='7'; break;
                        case 0x1c: code_char='8'; break;
                        case 0x1e: code_char='9'; break;
                        case 0x1f: code_char='0'; break;
                        case 0x11: code_char='='; break;
                        case 0x12: code_char='/'; break;
                        case 0x13: code_char='*'; break;
                        case 0x14: code_char='+'; break;
                        case 0x15: code_char='-'; break;
                  }
                #else
                  code_char = code_value;
                #endif

                  //存储最新字符,并显示在屏幕
                  for(int x=0; x<9; x++)
                  {
                        words = words;
                  }
                  words = code_char;

                  for(int x=0; x<10; x++){
                        matrix.drawChar(2+6*x,52,words,LED_RED_MEDIUM, LED_BLACK, 1);
                  }
                  code_value = 0;
                }
                matrix.drawChar(47,35,'0'+code_count,LED_RED_MEDIUM,0,1);
            }
      }
      else
      {
            deb = 0;
      }
      hold_count++;
    }
    else
    {
      if(new_sts)
      {
            deb++;
            if(deb > 5)
            {
                deb = 0;
                ir_sts = true;
            }
      }
      hold_count = 0;
    }
}

loohoo0302 发表于 2019-11-19 08:50:42

不好意思,{:cry:},我去看看幼儿园作业{:sad:}。

leon...... 发表于 2019-11-19 08:52:40

dexidz 发表于 2019-11-19 07:59
我不教我儿子这些,希望他不入这行

但由不得自已啊,这个要考试,反正都要学,那么就帮助他更好地理解这些了。

leon...... 发表于 2019-11-19 09:20:58

loohoo0302 发表于 2019-11-19 08:50
不好意思,,我去看看幼儿园作业。

兄弟别误会了,硬件上我只是让他理解开关和红外线传感器。软件上,只是让他理解什么是编码,编码是如何组成的。其它的再怎么花里胡俏都只是‘辅助’{:smile:}

ldj7501 发表于 2019-11-19 10:10:18

看看了{:handshake:}

huangqi412 发表于 2019-11-19 10:15:47

这啥学校,居然学这个

grash 发表于 2019-11-19 10:16:34

烙铁架好评。。

Jmhh247 发表于 2019-11-19 10:29:12

赞,小孩子玩的,电池一定要做好保护!

grash 发表于 2019-11-19 10:48:21

Jmhh247 发表于 2019-11-19 10:29
赞,小孩子玩的,电池一定要做好保护!

像国外DIY的都是用的9V方块电池或干电池,,用软包锂电的几乎没有

leon...... 发表于 2019-11-19 11:31:05

Jmhh247 发表于 2019-11-19 10:29
赞,小孩子玩的,电池一定要做好保护!

电池有保护电路,实验时全程跟踪,不会让他自已拿去玩。下次换干电池吧。

leon...... 发表于 2019-11-19 11:31:32

grash 发表于 2019-11-19 10:48
像国外DIY的都是用的9V方块电池或干电池,,用软包锂电的几乎没有

谢谢提醒,已买了电池盒,下次用干电池。

leon...... 发表于 2019-11-19 11:34:16

grash 发表于 2019-11-19 10:16
烙铁架好评。。

本来直接线插进去的,不用焊接,可是他要用这个。下次做一个小烙铁架吧

leon...... 发表于 2019-11-19 11:51:27

本帖最后由 leon...... 于 2019-11-19 11:53 编辑

huangqi412 发表于 2019-11-19 10:15
这啥学校,居然学这个

小学现在有一门创客,还要考试的。主要学习各种传感器,数了一数,有十多种。

每节课老师会发一些积木,然后在积木上装传感器组合成各种玩具。

RAMILE 发表于 2019-11-19 13:14:16

小孩同学的妈妈有没有请你去辅导功课{:lol:}

数控铣 发表于 2019-11-21 18:23:15

RAMILE 发表于 2019-11-19 13:14
小孩同学的妈妈有没有请你去辅导功课

同问,,,,,,,

sf49ers 发表于 2019-11-21 19:58:16

grash 发表于 2019-11-19 10:16
烙铁架好评。。

你不说我都没反应过来那是烙铁,以为是螺丝刀

f117_2r 发表于 2019-11-22 09:52:40

这不完全是考家长吗?

xiongpeiyong888 发表于 2019-11-25 09:35:15

这是什么学校,这么牛,纯粹是考家长的啊{:titter:}

leon...... 发表于 2019-11-25 10:01:51

xiongpeiyong888 发表于 2019-11-25 09:35
这是什么学校,这么牛,纯粹是考家长的啊

看这么多坛友误会,我真是要好好检讨一下我的写作和描述能力了。

leon...... 发表于 2019-11-25 10:06:32

本帖最后由 leon...... 于 2019-11-25 10:08 编辑

f117_2r 发表于 2019-11-22 09:52
这不完全是考家长吗?

有时我也这样想,但是换一下老师的角度,老师只是教你如何拼装,讲得出它是什么,怎么操作的。把它当成了一个小玩具而已。

比如下面的台灯:(所有的模块都是现成的,不是学生做的,学生只是拼装而已)

模块有触摸传感器,MCU主板,LED驱动模块,4PIN电线*2)

XTXB 发表于 2019-11-25 11:04:13

感觉这个老师把孩子带沟里去了,一开始就弄这个,会把孩子对电子的兴趣给整没的

Sherry_LV 发表于 2019-11-29 12:46:51

这个感觉让孩子有个实物的概念还不错的!让看电路图,肯定头大的。我教小孩子Scratch,就讲坐标系,对他们都不容易理解,但是小孩可以知道向左向右向上向下怎么走,拖哪个块。 我就满足了。

leon...... 发表于 2019-11-29 14:51:23

Sherry_LV 发表于 2019-11-29 12:46
这个感觉让孩子有个实物的概念还不错的!让看电路图,肯定头大的。我教小孩子Scratch,就讲坐标系,对他们 ...

上面的图我没讲解过,但是他知道:有一个像是开关断开了,LED两个箭头应该是有东西发出来,左边是个电池,他们都是用1PIN线连接着。心想就让他对照着画一画,混个面熟,完全当成美术课了。

我也觉得是有个概念就好了,也没跟他多讲;以他们现在的理解能力,深入去讲就会太浪费时间和折磨了,当然天才儿童不算在内。

leon...... 发表于 2019-12-7 17:35:39

又开始继续瞎折腾折腾了:
专门做了一个刷卡器,在边上留有一条槽用来刷卡,槽中间有一个开关,来识别刷卡时的断开时间,形成一组‘长’ ‘短’ 组合的编码,为了方便卡片更容易做,把码缩成4位编码。

这是刷卡机


这是卡片了

chengyang79 发表于 2019-12-25 14:20:50

这刷卡器过于直观{:lol:}

lancefang 发表于 2020-2-21 16:48:37

感谢分享
页: [1]
查看完整版本: [小学生DIY作业]红外线和简单编码