故事相框-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6380|回复: 8

[项目] 故事相框

[复制链接]
发表于 2017-10-4 17:09 | 显示全部楼层 |阅读模式
照片是凝固的时间,每一张照片背后都有独特的故事。这里我们制作一个能够讲述照片的相框,可以将影像和回忆一同存储在照片上。

基本原理是:在每一张照片下面有孔,通过判断是否有空来判断当前插入的照片是哪一张。我们使用 LED 来发光,特别注意,LED 需要串联电阻(理论上一些LED不需要,但是这次偏偏我遇到了,烧了2个LED后面还是乖乖串联限制电流吧)
image001.png
穿好之后就插入事先准备好的,打着孔的板子上,背面如下
image002.png
正面看起来就是这样
image003.png
同样的,我们再做接收端,我们使用电阻来完成这个工作。当有光的时候,电阻会小,反之电阻会大。配合引脚设置为 PULL_UP ,内部有20K 的上拉。这样,无遮挡的时候,模拟口读取到的就是 130左右,遮挡之后读取的就是900。足够进行判定区分。
从上面也可以看到,我们有4个洞,这样理论上可以给 2^4-1 张照片进行编码,插入不同照片就可以播放不同的音频内容了。
接好之后效果如下,看起来好像八爪鱼。
image004.png
组装起来,上面是发射,下面是接收,中间是插入照片的位置
image005.png
找了一个纸盒 当作底座
image006.png
贴上纸美化一下
image007.png
负责播放音频的是一个 MP3 模块【参考1】,我们将实现录制好的音频存在SD 卡上即可。
image008.jpg

Arduino代码如下,特别需要注意的有如下几点:
1.    LED 不是同时亮,而是逐个亮,这样可以省电;
2.    模拟口取值之后就可以进行判断;
3.    按照时间,每隔一段会发送一下当前的状态,这是为了保证一定能够正常播放。比如:这一次的串口传输丢失了,那么过几秒还有一次,这样会让装置看起来稳定很多;
4.    MP3 接口是串口,我们在代码中使用软串口即可完成控制播放;
5.    MP3 播放使用的是序号,从0001 开始,特别注意这个序号是拷贝到SD卡中的文件顺序而不是文件名称(原理上说,拷贝一个文件的时候,会在FAT中创建一个文件入口,然后序号即是这个入口的编号)

完整的代码:
[kenrobot_code]#include <SoftwareSerial.h>

SoftwareSerial Mp3Serial(10, 8); // RX, TX

#define LEDTH  400
#define LEDNUM  4

byte led[LEDNUM]={12,11,7,4};
byte hole[LEDNUM]={A3,A2,A1,A0};
byte position[LEDNUM]={1,2,4,8};

int playing=0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Mp3Serial.begin(9600);
  
  for (int i=0;i<LEDNUM;i++) {
    pinMode(hole,INPUT_PULLUP);
    pinMode(led,OUTPUT);
    digitalWrite(led,HIGH);  
    }
}


void loop() {
  int signal=0;
  byte LED=0;
  

  for (int i=0;i<LEDNUM;i++)
   {
     digitalWrite(led,LOW);
     delay(30);
     signal=analogRead(hole);
     if (signal<LEDTH) {
       LED=LED|position;
     }
     digitalWrite(led,HIGH);
     Serial.print(signal);
     Serial.print("  ");
   }
  Serial.println("  ");
  Serial.print("MU=");
  Serial.println(LED);
  
  if (LED!=playing) {
  switch (LED)
  {
      case 1:  Mp3Serial.println("play,0001,$"); break;
      case 2:  Mp3Serial.print("play,0002,$"); break;
      case 3:  Mp3Serial.print("play,0003,$"); break;      
      case 4:  Mp3Serial.print("play,0004,$"); break;   
      case 5:  Mp3Serial.print("play,0005,$"); break;        
      default: Serial.println("Menu item does not exist.");
  }
  playing=LED;
  }
  delay(3000);
}[/kenrobot_code]

本来这个作品打算用 KittenBot 提供的模块式编程来完成,但是在使用中发现不支持逻辑运算等等,最终值得放弃,不得不说是一个遗憾。


感谢成员小树林的大力支持
3.jpg
参考:
1. http://www.lab-z.com/mp3mod/


 楼主| 发表于 2017-10-4 17:17 | 显示全部楼层
本帖最后由 Zoologist 于 2017-10-4 17:19 编辑


工作的视频
 楼主| 发表于 2017-10-4 17:18 | 显示全部楼层
本帖最后由 Zoologist 于 2017-10-4 17:22 编辑


发表于 2017-10-6 15:03 | 显示全部楼层
这个好玩,支持!
发表于 2017-10-7 21:55 | 显示全部楼层
基础版条码识别咯
 楼主| 发表于 2017-10-8 21:17 | 显示全部楼层

led + 光敏电阻效果挺好的
发表于 2017-10-15 19:03 | 显示全部楼层
哈哈,有意思,支持!
发表于 2017-10-19 22:36 | 显示全部楼层
1.感谢对社区比赛的支持,开发者积分和贡献值已发放,请点击以下链接领取纪念衫并参与抽奖~
http://www.arduino.cn/thread-48132-1-1.html
2.比赛结果会在11.15号前公布,请耐心等待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:41 , Processed in 0.140824 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表