CSK.Blog--个人原创Weblog

自制的山寨版Sunjar

不知山寨这个词何时已经变成DIY的代名词了... Sunjar是什么呢?它是由英国的一家叫做Suck UK公司(这什么名字)设计的可以存储阳光并在夜间释放的玻璃罐。有兴趣的可以自行google下(关键词:sunjar 淘宝)。

虽然这个玻璃罐并非真正是将阳光“存储”了起来,不过创意还是十分的不错。尽管就是一个太阳能灯,但是通过罐子这个概念一包装,就给人新奇感。

但是,撇开如此好的创意,看到其正品的售价(¥200 + )实在上我觉得买它太不值得了。同时,不出我预料的国内已经有不少仿品了,且开价都低于60。同时还声称拥有多种其它功能。后来,那些卖正品的卖家估计是自身利益受损,就想尽办法在商品描述中“诋毁”那些山寨货。我觉得最经典的一句是:“那些仿品罐子还允许随意切换黄色或者蓝色的光线,这个主意看似很妙,实则很糟糕。要知道这是一个存储阳光的罐子,不是地摊上的变色灯……”原文大致如此,看得我实在觉得好笑...

好了,不胡扯了。与其花大价钱买这个玻璃罐,还不如自己做一个吧。实用价值还是有一点的,比如当小夜灯。于是,我花了2个周末作了2个山寨版Sunjar:

白天将它们至于阳光处(阳台上即可),到了晚上(光线变暗时),它们就开始发光了:

像不像Diablo里边的Mana药剂瓶...

 以上便是这山寨Sunjar的效果。自认为很不错。Sunjar这样优秀的创意,再加之自己DIY,其中的乐趣绝对要比在Taobao上花大价钱买一个好!同时,我认为它的电气特性要远远高于那些200多地“正规军”。下面我主要介绍制作过程以及原理和成本与性能分析。欢迎各位仿制,此为开源硬件项目。

原理和性能

Sunjar其实原理十分简单,就是一个太阳能储能装置+LED。或者说就是一个太阳能灯。不过实际作起来,并不是简单的将光伏电池、充电电池与LED接在一起如此简单。需要考虑几个问题:

  1. 玻璃罐限制了太阳能电池的功率,输出电压也不高
  2. 需要有光控电路控制LED仅在夜间发光

一般能装进玻璃罐的太阳能电池板一般开路电压都在1.5-5V左右,且短路电流一般不会超过200mA。同时考虑成本因素,一般3-4V 40-180mA的太阳能电池板是比较合理的选择。同时这里的数值是需要在室外晴天阳光照射下才能实现的。同时单晶硅或者多晶硅太阳能电池的弱光性差,在阴天和市内基本就不会有什么电流了。因此这样的配置下,充电电池一般考虑使用单节或双节的(1.2-2.4V)。这样的选择能确保在白天大多数情况下,太阳能电池输出的能量能尽可能充入电池。

但一般LED都需要2V以上电压驱动,尤其是蓝色和白色LED需要的驱动电压更高,即使2.4V的电压下白色LED的发光亮度也不高。因此很有必要设计驱动LED用的升压电路。将LED端的电压提升到3-5V。

对于上述第二个问题很好理解,实现起来就是一个简单的开关电路。

下面是本山寨Sunjar采用的电路图:

该电路并不复杂,所用元件也很少,且基本都能从已有的废旧设备上拆下。这里我就简要的介绍下原理,后文会提到材料的来源和选择问题。

该电路主要分为2部分,一为驱动LED的升压电路,它可以整体上看作一个负载。当图中9012三极管集电极上施加0.6-3V的电压时,图中的8050以及电感构成了一个振荡电路,通过电磁感应会在输出端(LED两侧)产生峰值约为5V的脉冲电压。经过电解电容的滤波可近似看成直流。此时驱动LED将得到耀眼的光线。足以驱动玻璃罐发光。

电路另一部分为光控电路,其主要靠两个9013管的饱和/截至特性构成了非门,并经过末端的9012驱动升压电路工作。

经我测量,在使用单节镍氢电池(1.2V)供电时,电池出的输出电流在35mA。如果使用600mAh的充电电池供电的话,大致可以在整个晚上持续发光了。电路中采用了最高4V-180mA输出的单晶硅太阳能电池。虽然理论上存在将电池过充的风险。但是考虑到白天日照是不持续且不稳定的。因此该风险其实大部分情况是不存在的。且较高功率的太阳能电池也允许在室内将充电电池充满,并不一定需要在阳光下暴晒。可以说如此的山寨Sunjar性能应当是很强悍的。

成本、选材与制作

这里先介绍选材的问题。我想大部分人手头是不会留有什么元件盒这类东西的,因此这里我主要介绍如何从身边废弃物中取出有用的元件来制作电路。

首先是太阳能电池板,该组件直接关系到Sunjar的性能,前文已经提到了,我使用的是4V/180mA的单晶圆形太阳能电池,直径为80mm。采用的是压层封装,寿命在10-15年。太阳能电池板很多时候只能自己购买。目前taobao上卖太阳能电池板的商家十分多。要挑选自己合适的太阳能板是很方便的,这里要注意的是应当注重其寿命以及输出电流。我购买的单片价格约为¥9。如果不在乎寿命,使用滴胶封装的板子,价格应当会很便宜。

其次是充电电池,因为LED耗电并不好,一般选用600mAh的镍氢电池即可。没必要使用高容量的。我采用了GP AAA的600mAh镍氢电池。如果使用锂电池要注意充电电路,避免过充爆炸。

其次是电路中电感用到的磁芯,我推荐用环形的磁芯。也可用柱状的。环形的磁芯其实很好找,可以从废弃的电子镇流器或者节能灯灯泡底座(需要拆除)取出。然后使用0.5mm的漆包线或者单股导线分别绕9匝以及15匝。如果没有环形的磁芯,也可采用中波收音机内的磁棒。

上图中绕有漆包线的黑色环就是磁环

白色部分为用收音机磁棒天线制作的电感

其余元件基本都能从电子玩具废旧的电子设备里找到。或者可以替代。图中第一级9013集级处的可变电阻的目的是调节光控电路的灵敏度,也可忽略该电阻。

LED只要选用自己喜欢的颜色即可,不过最好采用高亮度,散色类型的。

如果能顺利搞到这些材料,细心的焊接好基本就能工作了。这里就不介绍元器件的常识了。

那么实在不想或者不会焊接电路怎么办?这里有2个办法:

  1. 其中的升压电路可以从地摊买到的单节电池驱动的LED手电,或者那种用单节五号电驱动的手机应急充电器中拆出。效果是一样的。
  2. 可以在taobao购买一个草坪太阳能灯,将所有电路拆出。

其实,如果你选择了第二个方案,其成本已经高出直接购买一个山寨版Sunjar了。但DIY的乐趣还是很值得的。

我先是做了一个原形电路来验证这个电路图,十分的原始,没有用PCB板,完全架空焊接。且用了2节充电电池供电/储能,因此驱动的LED比较亮。之后又在万用PCB上作了一个“精美版”,采用单节电池供电/储能。

对于罐子的选择,为了充分发挥山寨本色,外形上要和正版的类似。我用了宜家中卖的那种玻璃罐。其内径也正好是80mm。正好将太阳能板装入。不过宜家的罐子是全透明的,最好在内壁贴上磨砂纸这类的实现漫反射效果。

好了,下面就算算材料成本。

一个宜家的玻璃罐 ¥11

太阳能电池板 ¥9

充电电池 ¥10

电路部分 ¥0-10 (如果完全废物利用,就不算成本了)

这样算来总共花费还是很低的,虽然做工可能没有正品精美(其实有本事完全可以超越),但是性能上是远远超过正品的。并且我怀疑市面上销售的Sunjar无论是否正品,都采用的是滴胶工艺的太阳能电池,其寿命一般只有2-3年。进一步说,DIY的乐趣绝对不是花钱能买来的。如果做的很好拿去送人也很有面子(骗小姑娘?)。

如果你也对此感兴趣,欢迎仿制,有什么问题也欢迎交流。

topic:开发人员眼中的RIA,基于Flash实现

请点击文章标题进入正文以下载附加信息

前不久因为不少朋友对这个主题感兴趣,就在公司组里做了这个topic。主要从软件开发人员的角度来介绍flash的最新技术以及当今一些新兴的RIA应用。

整个topic主要分为下面几个部分:

1. RIA的介绍,当前状况

2. Flash的起源,内部运作模式,AVM2虚拟机构架

3. Flash10的最新应用:Pixel Blender以及3D渲染支持以及其意义

4. AS1/2/3语法比较,AIR构架

5. OpenSource Flash,Flex sdk与FD3

6. Flash和Silverlight的比较

7. Demos. 基于FlArtoolkits库的演示、现场演示制作音乐可视化特效、编译Flash实现的人脸识别程序

 

这里就把当时做topic用的ppt以及一些demo代码公布出来,其中那个音乐可视化特效会在后面花些篇幅解释下。其实我很久没接触AS3.0的东西了,很多数据和资料也是看了相关文献得到的,如果有错误或者遗漏,希望谅解,也欢迎给出纠正。

下面贴一些该topic ppt截图:

 

 

包含的Demo介绍

1. Flartoolkits 的应用

不得不承认现在AS3.0在JIT的帮助下性能的确提高了很多。以至于处理一些简单的CV都可以了。FlArtoolkits是一个基于Flash实现的artoolkits(主页介绍)库。在目前主流的计算机配置下,使用摄像头配合浏览器任何人都可以进行虚拟现实应用。这次介绍了一个Flash的虚拟鼓的应用,如下图。有摄像头的朋友可以直接去给出的链接中亲自体验。不过之前需要打印marker到一张A4纸上。大致意思就是将虚拟的3d物件影射到现实世界中,并且能和现实世界产生些“互动”。

上图以及该DEMO来源:http://www.squidder.com/2009/03/03/augmented-reality-drum-kit/

FlArtoolkit和上面这个demo都是开源的。

2. 音乐频谱的视觉化效果器

这个是我花了1个小时写的,演示了提取当前声音输出FFT频谱的功能。程序也比较简单,100行代码。比较适合新手了解Flex sdk以及FD3的使用。另外要说明的是该demo附带的音乐出自我表弟Somnia之手的WayOutWest-Melt,给他做下宣传,呵呵。

Linux下的语音天气预报脚本

请点击文章标题进入正文下载代码

这是最近我刚在家里部署的一个程序,主要功能就是在每天的特定时间(7:30 以及 18:30 )计算机将自动用中文人声朗读出当天以及后一天的天气情况/预报。天气预报的信息由程序采集自中国气象网(weather.com.cn)。如果你对此感兴趣,不妨了解下这篇文章。

其实类似的应用网上应该也不少,我完成这个应用其实大部分精力也并不是花在天气预报的采集上。而是解决如何将Windows的TTS引擎(MS SAPI)“移植”到Linux上,以及编写相关的服务框架程序。同时,这个应用实际上只是我之前提过的智能化家庭系统(IHES)的一个小应用,所以这次也会连带着发布ihes framework的一些代码(比较简陋,看过算过,哈哈)。在给出具体的程序代码之前,我将一步步介绍其中的一些细节问题,以便有兴趣的人自己实现类似的功能。

1.天气预报的抓取

前文已经提到,我使用的是weather.com.cn的数据。实际上这部分工作是通过一个bash script来完成的。从该网站抓取并提取我们需要的天气信息的一个难点是如何从内容繁多的html代码中有效的筛选我们要的内容。这里我偷了下懒,通过观察他们网站,我发现其wap版本网站内容简单,特别适合抓取:http://wap.weather.com.cn/wap/

基本除了我们需要的天气情况外,只有写简单的关于信息,而且主要都使用了文字。这里以我家所在地:上海松江为例,分析信息提取过程:

该网站wap版不同城市以及预报范围的组织很简单,仅仅通过url地址来标示,比如上海松江24小时(当天)的预报信息页面地址为:http://wap.weather.com.cn/wap/58462/h24/ 而对应的48小时天气预报(第二天)地址为:http://wap.weather.com.cn/wap/58462/h48/ 。很明显,前面的58462应当为地区的区域代码,而预报范围就是后面的h{24|48|...}。因此,实现当天以及第二天的预报提取,只要抓取这2个地址即可。

采用curl工具抓取网页

对于还不熟悉linux环境的朋友,可以在shell里面输入man curl来参看该命令相关信息。直接通过curl即可将对应html输出到stdout。

$curl http://wap.weather.com.cn/wap/58462/h24/
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml" xml:lang="utf-8">
<head>
<title>24小时[松江]城市天气详情</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
...

接下来要做的就是仅提取出我们需要的预报信息,比如:

2009年3月15日 星期天:
[农历二月十九]:
松江  :
天气:晴 :
气温:17度到4度:
风向风力:西南风4-5级转3-4级:
紫外线指数:中等:

我做的处理首先是过滤掉所有html标签,观察curl抓取的html代码可以发现我们需要的信息没有被html tag包含,经过这一步处理,输出的文本中含有可读文字了。接下来需要将空白行去除。最后仅提取我们需要的文本所在的其实行以及终止行即可。这里采用sed过滤。这样一来,最终的处理命令为:

curl -s http://wap.weather.com.cn/wap/58462/h24/ | sed  's/<[^<]*>//g' |

sed 's/^M//g' | sed '/^[ ]*$/d' | sed 's/^.*$/&:g' | sed -n '3,9p'

这样便可得到上面要求的文本输出了。

2.Linux下部署SAPI以及TTS引擎

一定要采用SAPI主要还是因为linux下面我没找到原生的中文TTS库。因此只好想办法利用Windows下面的资源了。办法其实也很简单,用wine... 这里所说的部署,是指同样通过wine运行自己编写的windows程序调用部署在linux下的tts engine来进行朗读。实际上就是进行SAPI com组件以及需要的tts engine com组件的注册工作。这里有一个偷懒的办法:http://www.linuxdiyf.com/viewarticle.php?id=121686

接下来要做的其实就和windows下一样了,打开VC写一段SAPI的调用程序吧...

不过其实问题要复杂些,存在两个困难:

  1. 该windows程序如何与原生的linux程序/脚本交互(基于wine)
  2. SAPI依赖窗口消息,需要X-windows环境

可能对一部分人第二个并不是什么问题,不过我目前家里用作服务器的机器配置比较老,为节省资源平时完全禁用了XServer。我又没心思去修改wine来解决这个问题,所以XServer是必须启动的了,那么需要将他的资源消耗尽可能减少。而对于第一个问题,我的解决办法是将TTS发音功能做成一个C/S构架的体系。提供一个./readit的命令,该命令为linux的native程序,readit将需要朗读的文本用tcp报文发送给基于windows(wine)的server程序完成真正的合成朗读。同时我发现每次加载/结束使用sapi的程序,所在的XServer的虚拟内存都会无故增加。因此C/S构架是的server常驻系统也避免了潜在的内存泄露。还有一个好处就是在局域网内任何机器都可以调用该TTS功能。具体的实现这里就不给出了,有兴趣的可以去看源代码。文末给出了readit的linux/win32版本。我的实现中,readit支持如下2种方式调用:

./readit <Text to read>

echo "Text to read by pipe" | ./readit

后者的好处在于能够朗读超过命令行参数长度限制的文本,同时能很好的结合前面介绍的脚本。Linux需要终端设置为UTF-8编码。

对于TTS engine的选择这里就不介绍了,大家选择比较合适的版本即可(Windows自带的那个中文男声其实不怎么样),我采用了上次eArts中运用的TTS引擎。

3.部署

在上面几个问题解决后,就是部署问题了,我把天气预报获取的脚本抽象成命令GetWeather( 24 | 48 )。要朗读明天的天气,采用命令

./GetWeather 48 | readit

即可。在运行该命令前要确保我们的TTS server已经启动了。因为Server部分依赖于Wine和XServer。这里用下面命令来完成Server的加载:

X :3 -ac &

sleep 60
export DISPLAY=":3" && wine win_voice.exe  1>/dev/null 2>&1 &

其中win_voice.exe就是TTS server。可以在开机时配置该脚本。不过要注意脚本运行的当前用户要和部署TTS时,wine所在的用户要一致。

公布个我自己用的备忘录/日记系统

早在去年3月就打算写一个作为我记录日记以及当作备忘录的东西。同时又希望能通过手机访问,不希望拥有过复杂的功能。于是去年9月份左右用asp写了下面这个日志管理系统:

 

 

虽然功能很简陋,不过自己用着还行。主要有下面几个功能:

1. 支持TODO:关键字的高亮显示

2. 支持*strong*, #URL#的解析

3. 按照工作日跟踪遗漏的日志,会给出提示要求记录

4. 自动按季度进行日志存档

5. 允许创建多个日志并分别存储

6. 数据存储为xml形式

 

同时,如果希望一次性记录不同日期的日志,可以在相应日志前加上日期,系统将自动识别:

[2009-02-01]

Log of this Date

[2009-02-03]

Log of that Date

功能介绍就到此为止,如果感兴趣并打算自己部署一个的话,直接将代码放到你希望的目录即可。不过如果打算记录私人信息的话最好加上权限访问。公布的版本中是没有密码保护的。还有要澄清的是上图画面不是我正在记录的日志,是为了示意做的。

至于源代码,风格很糟糕,而且还是JS和VBS混合编程。所以关于代码就别抱怨了。呵呵。不过能帮我做些改进的话还是很感谢。

我自己基本上每天都会用这个系统写当天的日志以及做一些摘录、点子等。感觉还是很好用的。同时通过手机访问效果也很好。

说实话有了这个工具自己生活状态改变了不少,以前一直觉得活得漫无目的。后来想想大概是自己定的计划没有坚持一直时刻对照和反省。同时每天没有很好的进行当日的总结和第二天的计划。其实这些也不是因为一个工具就改变的。但毕竟有了这样一个工具,同时也坚持保持这样一种习惯,感觉还是很不错的。

人生就是要时刻提醒自己,也要时常做些记录和总结。好了,扯淡扯远了。

我的blog似乎冷清了不少,偶尔发写文章貌似回复的也不多。看来自己太堕落了,以后要重新培养时常写blog的习惯。争取本周再发布两篇文章吧,应该都会比这篇有实际内容...

差点忘记了,本文提到的系统的代码下载地址:http://www.csksoft.net/data/Log_Tracer.rar

发下牢骚

感觉这两周里一直被ADSL的事情烦着。先是住处ADSL线路被电信无故切断,报修后维修人员竟然花了2天才修好。接着是家里ADSL线路被莫名限速至512kbps(一年前还是3Mbps)。上周末无奈去松江电信办理带有2M带宽的e8套餐。却被告知之前已经过期的IPTV业务无法取消,工作人员给出的理由是“已经自动帮我办理20元新套餐,且无法取消套餐”。这和强盗有何区别...(同时,IPTV早在2个月前无法使用了)。

不过早对电信的低劣服务有所耳闻,也不去多想了。谁知今天家里网络从14:00开始无法链接。可能你要问这又和问题?

关键在于,目前基本我左右的数据和资料都是通过家里的中央服务器管理的(所有代码的SVN,个人日志,档案信息)。现在断网基本可以宣告周末前我日常工作要瘫痪了。

看来还是不能太依赖计算机网络了。曾听过一个说法,人类文明越是发达,该文明也将会已越快的速度灭亡。想想也有道理,现在虽然建立了个RAID1的数据仓库,只要一把火、强盗的一榔头、电信“不小心”断了下网、小偷一光顾,便什么都没了。看来只能怪自己。如果自己活得落后点,也不会去用啥ADSL,自然也没那电信的事情了。

牢骚到此为止。想了解最近我有啥进展的朋友,请期待近阶段将发布的文章。

分页:[«]1[»]

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)