乐山峨眉游(2)

第二天早上不慌不慢,快要10点钟过去游客中心买票上车,淡季110+90车费。票价默认给你加5块钱,我明确说不要保险,就省了10块钱保险费,真的没啥必要。从游客中心到零公里坐车要一个多小时,还好自己没开车。

到达零公里的时候就要换车了,由于一些人是没有买门票的所以在这里需要补票。还好我们是买了票的,检票的有两个地方,运气比较好的是第二条线没有排多长,抱着儿子赶紧跑过去,抢了个前面的地方。检票几分钟就过了,换另外个大巴车上车。中途有一个小插曲,一个拿本地身份证的人在检票口过不去,因为人对不上号,被要求重新补票。在山脚下就有很多人兜售这样的票,如果不是本地身份证这里就傻了。

冬季由于山上积雪,车只能停到零公里。旅游车刚上去一点路,就开始挂雪地链了。一路又花费一个小时,到了雷洞坪,已经12点了。

下车给小孩拉个尿,在全福商务酒店休息一下。本来背了两盒自热米饭,准备山顶吃的,但老婆觉得该吃饭了,那就吃吧。现在的旅游比之前规范了很多,什么东西都是明码标价,而且分量也是标准的,看来之前肯定是坑了很多人然后政府出来规范的。点了两个菜,都不错,分量确实也不错,三个人吃了42块钱。老板和我们一桌吃饭,他说今天天气好,上面有太阳,哇塞!我们又再问现在滑雪还来得及不,他说不行。上了金顶就没时间了。而且滑雪一个小时的免费,等弄好器具都20分钟了,再滑一下就一两个小时过去了,然后就收钱了,哈哈。老板真实在。

在雪地上一定要冰爪,否则滑你没商量。上次在海螺沟就幸好买了几个便宜的,要不然根本没法走。后来老爸做了好几个简易的,这次又派上用场了。

从雷洞坪到金顶缆车还有一段路程(地图上显示1.1公里),在冰雪上面带着小孩走了接近一个小时,一路上吵着要买铲子。还好丁仔比较坚强,一路到头。路上的猴子还好啦,没有生态猴区那么猛,很温顺。

猴子必不可少
猴子必不可少
猴子必不可少

出太阳啦!!!
出太阳啦

坐到缆车已经是两点钟了,时间过得真快。我们坐的不是那个很大的缆车,好像冬天没有开。缆车风景非常漂亮,只是缆车速度很快,有些接头的地方抖一抖吓死人。





小朋友上山以后就有点走不动了,原来是脚趾头受伤了。一路上试着抱着背着,好累。来,做几个雪球。


这次运气真的很好,金顶上阳光很足,云海非常漂亮。除了坐飞机,这是第一次看到这么漂亮的云海。可以看到远处的瓦屋山,甚至更远的贡嘎山。


全景:




猜猜这是什么山?

有两个平顶的山,这个的是瓦屋山

这个是什么山呢?

问问[度娘](http://tieba.baidu.com/p/833837251)

一路上小朋友都想要铲雪的铲子,想了好久,路上问了小卖部没得卖。好吧,只能打劫一个了。遇到了一个美女背一个小孩,看起来也是背个铲子多事的,给了25块钱买了个铲子。这下丁仔满意了,一路上当铲雪工,非常高兴。

阳光下的金顶非常漂亮,但是小朋友有点害怕。十年前和朋友夏天来这里的时候,全是雾气,一点都不壮观。这次非常的通透,当然上面的雪也已经比较硬了,风也非常大,冷风就像刀割一样。


勤劳的铲雪工

月亮都能看到啦

刚好挡着太阳,感觉像是发光一样




3点50左右,赶紧下山,因为观光车5点钟就要收车了。一路上背着丁丁赶路下去,坐缆车,继续赶路,最后4点40多到车站。仔仔已经冷的双手发冷,玩了一个雪球以后看起来没精神了,抱在怀里睡了一觉。之前都是老婆抱的,这次我来抱,足足站了半个多小时,终于上了车。今天由于有一些活动,搞得观光车有点接不上气,排队排的很远,还好我们下去的稍微早点,要不然更惨。

一坐上车小宝就醒了,一路上精神得很。一路上我都试着睡觉,但山路甩得我都晕晕的想吐,只有不睡,看着路,很难受。这个状态是没法回成都了。下山到客运中心已经是7点过了,还是决定就住下吧。吃了个3077烧烤麻辣烫排档,不怎么好吃,拿上来就冷了,又辣得要死,没啥特色。给小孩点的蛋炒饭还行。

晚上住在橡树缘连锁地中海主题,也是直接过去订房,由于是周日了,所以价格也便宜150住一晚。房间装修还算比较有风格,但空调也是响,由于不是变频空调,突然制热响一下吓一跳。其他东西还算可以吧,卫浴都是TOTO的,但不知道为啥烧水一直有一股烧糊的怪味,很奇怪。没注意到上一家酒店也是不是这样。这个亲子房有一个1.5米的床,有一个1.2米的。我睡1.2米的被子,但被子短了,郁闷。

睡好觉,周一回成都,在乐山买了王浩儿纪六孃(致江路总店)买了鸭子,在乡村黑豆花佛光路店吃了中午饭,很棒,然后就回成都了。

累死哥哥了。。。。

Android SDK Offline Download

Github Repo

Updated:

做出这个工具后,我司达人告诉我,只需要把SDK Manager代理服务器设置为www.google.cn或者其国内IP即可,速度可以达到满格。在电信网络中测试,果然很霸道,请大家尝试。

由于Google被GFW的问题Android SDK下载速度总是非常的慢,甚至用了代理服务器速度也很慢,因为是单线程的。我写了这个工具,可以在线生成需要的SDK的下载链接,这样就可以方便的用你喜欢的工具下载了(迅雷和QQ旋风速度都很不错)。
如果还不能下载,则可以在下载工具中设置代理服务器,让其进行多线程下载,速度也非常理想。

This tool help to you generate latest offline down links for Android SDK. This is helpful when you don’t have internet access or speed is low.

You can use your favorite download tool to download them. Then put these downloaded files into sdk/temp folder and open Android SDK Manager. Click the items in Android SDK Manager, it will read from your downloaded cache.

If your can’t get the Android SDK Manager items or if they are not update, or the download speed is slow, please try to use the proxy listed here

Online site 在线网址

http://www.april1985.com/android-sdk-offline/

Clone and run locally

git clone https://github.com/derekhe/android-sdk-offline.git
npm install
cd web
bower install
cd ..
npm install -g http-server
//You may need to set proxy if your network is blocked
npm run generate
npm run serve

open your browser and navigate to localhost:8080

WaveShare 7-inch user space driver 微雪7寸触摸驱动

Github Repo

I brought a WaveShare 7-inch HDMI LCD and it provides a USB touchscreen.
But the company only provide binary driver and images, which is quite bad. Installing binary driver will break self compiled kernel, and you can’t get updated kernels.
I asked the company to provide the source code but they refused. They said they won’t provide any source code because other companies can copy very fast so that their products can’t sell out at good price.

OK. If they company won’t want to provide anything, that’s fine. I finally find out we can still drive the touchscreen by writing a user space driver.

Tested using official image: 2015-05-05-raspbian-wheezy.img

Install

ssh into your raspiberry

clone this repo into any dir,then

chmod +x install.sh
./install.sh

sudo restart

How do I hack it

By looking at the dmesg information, we can see it is installed as a hid-generic driver, the vendor is 0x0eef(eGalaxy) and product is 0x0005.
0x0005 can’t be found anywhere, I think the company wrote their own driver to support this.

dmesg infomation

[    3.518144] usb 1-1.5: new full-speed USB device number 4 using dwc_otg
[ 3.606036] udevd[174]: starting version 175
[ 3.631476] usb 1-1.5: New USB device found, idVendor=0eef, idProduct=0005
[ 3.641195] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3.653540] usb 1-1.5: Product: By ZH851
[ 3.659956] usb 1-1.5: Manufacturer: RPI_TOUCH
[ 3.659967] usb 1-1.5: SerialNumber: \xffffffc2\xffffff84\xffffff84\xffffffc2\xffffffa0\xffffffa0B54711U335
[ 3.678577] hid-generic 0003:0EEF:0005.0001: hiddev0,hidraw0: USB HID v1.10 Device [RPI_TOUCH By ZH851] on usb-bcm2708_usb-1.5/input0

kernel config provide us more clue:

CONFIG_USB_EGALAX_YZH=y

It is really a eGalaxy based device. Google this config but found nothing. I don’t have a eGalxy to compare, maybe waveshare’s touchscreen is only modifed the product id.

Then I look at the response of hidraw driver:

hidraw driver analysis

pi@raspberrypi ~/python $ sudo xxd -c 25 /dev/hidraw0
0000000: aa00 0000 0000 bb00 0000 0000 0000 0000 0000 0000 0000 0000 00 .........................
0000019: aa01 00c5 0134 bb01 0000 0000 0000 0000 0000 0000 0000 0000 cc .....4...................

You can try by your self, by moving the figure on the screen you will notice the value changes.
Take one for example:

0000271: aa01 00e4 0139 bb01 01e0 0320 01e0 0320 01e0 0320 01e0 0320 cc  .....9..... ... ... ... .

“aa” is start of the command, “01” means clicked while “00” means unclicked. “00e4” and “0139” is the X,Y position (HEX).
“bb” is start of multi-touch, and the following bytes are the position of each point.

Write the driver

I use python to read from hidraw driver and then use uinput to emulate the mouse. It is quite easy to do. Please look at the source code.

Other systems

I think this driver can work in any linux system with hidraw and uinput driver support.

Calibration and Multitouch

Please try this driver and if you need to support multitouch and calibration, please contact me to get the pro version.

Other displays

I received an email from Adam, this driver may work with another type of screen:

Hi there. Wanted to say thank you for writing and sharing the user space driver for 7” USB touchscreen, you have saved me!

Mine is branded Eleduino (see here for details: http://www.eleduino.com/5-Inch-HDMI-Input-Touch-Screen-for-Raspberry-PI-2-B-B-and-Banana-pro-pi-p10440.html) and I had exactly the same issue - closed source binary driver which simply replaced kernel modules.

Your solution worked out of the box, and didn’t even need calibration.

You’re a hero!

3D打印的各种问题及解决方案

3D打印机已经买回来几个月了,基本上每天都要打印一些东西,期间遇到了很多的问题积累了很多的经验。虽然现在桌面级的3D打印也算是比较简单好用了,但要追求好一点的打印质量,还是得折腾。

打印校准

打印机的校准包括X、Y、Z和A、B(就是喷头)两个轴的校准。最重要的是XYAB,因为他们直接关系到打印的尺寸大小及表面质量。

Cura和Slic3r等工具导出的是GCODE格式。GCODE格式使用明文描述路径。Sailfish Firmware只支持X3G文件,是一种二进制文件。由于打印机所使用的CPU速度较慢,处理文件并转换成脉冲比较慢,会影响打印质量。所以使用GPX工具将GCODE转换为X3G后,每个指令所走的位置都已经转换成脉冲,甚至可以对一些路径进行加减速的处理。打印机的CPU就可以直接的读取脉冲并控制电机运动。

XY steps/mm矫正

在转换的过程中,XY的steps per mm这个参数非常重要,讲的是走一个毫米需要多少的脉冲,如果该值过小,则会少走一些距离,造成距离偏小。这个和机器的结构有一定的关系,牵扯到同步齿的齿数、电机的参数等,RepRap Calculator提供了这个参数的计算器,非常方便。

计算器配图

MBot最初用的是17齿的齿轮,和Replicator是一样的。后来经过改进用了18齿的齿轮,和Replicator 2是一样的。通过计算器可以看到,88.89 steps/mm是理论值,但是MBot和Replicator 2中用的是88.573186这个值。和88.89比较起来,会少走一些距离,导致最后打印尺寸偏小。dcnewman开发的GPX提供了正确的参数,但截至目前尚有一些问题,不建议使用。

为了矫正88.57带来的误差,可以采用自定义的配置文件进行配置。mbot.ini是我的Mbot Cube的配置文件,在使用gpx的时候,指定gpx -c mbot.ini xxxx.gcode即可正确转换。

当然你的打印机可能依然不是正确的,需要使用一些工具进行矫正。传统的做法是使用20mm calibration box,测量外观尺寸。但这样做有一个缺点,由于喷头挤出的塑料可能有误差,会造成纠正的值将外壳的误差也算进去了。正确的测量方式是使用calibration sticks,根据不同的打印平台的长度,分别进行XY的测量,然后测量出两个缺口的距离。这样可以排除喷头的误差。

Calibration-sticks

我的打印机使用88.89,打印出来的距离正确。

AB轴喷头纠正

喷头的step per mm会对挤出的塑料的多少有影响,在机械结构不变的情况下,该值越大,则挤出的料越多。过多的料称之为过挤出,会造成外观尺寸偏大,内圆半径变小,顶层可见各种重叠的塑料;挤出过小,会造成外观尺寸变小,内圆半径变大,顶层可以见各种孔洞。正确的喷头参数,会对打印质量造成非常大的影响。

Calibrate your 3D printer提供了调整喷头的参数方法,当然这篇文章也提到了如何修正其它参数。还有一种普遍使用的方式是在材料上做好标记,然后走10cm,测量实际走的长度。当然对于不能用print run的打印机,我写了一个gcode文件,执行后会自动走10cm,然后测量实际的长度。我的打印机是正确的,所以对于喷头也不用做过多的处理。

孔偏小

打印中非常常见的问题是孔变小,通常孔会变小0.5mm左右,如果打印这个图形,很可能会发现无法插上。测量孔的直径,会发现孔小0.5mm,而柱子的直径是正常的。
测试图形

我在MBot Cube打印,结果是这样。然而在FlashForge Creator Pro上面,则两个可以插上。这个问题困扰了我很久,至今还没有解决。试过将同样的gcode文件分别转换成两种机型的x3g进行打印,还是一样,所以可以排除一些切片器的问题。在研究这个问题中,有一些文章可以参考。

虽然我没用过最终解决这个问题,但以下是有一些方法可以改善这种问题:

  • 改变挤出量
    在Cura和Slic3r中,都有改变挤出量的选项。甚至在Simplify3D中,PLA材料的默认挤出量就是90%。经过测试,90%的挤出量比较合适,打出来的测试块刚好可以卡上。但是外观尺寸会同样变小0.2mm,内圆仍然小0.2mm,但圆柱也同样会小0.2mm,这样两个尺寸就刚好能够插入。更小的挤出量则会带来一些问题,不推荐设置。
    改变挤出量虽然能够缓解一些圆孔的问题,但也会影响顶层的质量。为了弥补这样的缺陷,只能将顶层的厚度设置为1mm,或者5层。这样顶层基本上就密闭了。

  • 喷头形状
    打印negative_space_tolerance_test.stl,我的打印机只能拆下来2个,只能说打印质量比较差。通过很多次的对比,发现喷头的Flat tip area(见下图)的大小会影响到tolerance的,厂商已经在着手改进中了。

喷头

  • XY Size Compensation
    Slic3r中提供了一个XY Compensation的选项,在Dimension Errors中有提到。和改变挤出量不一样,这个直接对切片后的图形进行补偿,不会产生顶层孔洞的问题。
    在目前的Cura中还没提供这样的功能,但在Cura的开发15.06版本中,已经准备提供类似功能。Simplify3D在最新的版本中已经提供。

  • 从设计上规避
    在设计的阶段就根据孔的大小预留一些空间,但这样对于别人已经设计好的模型就很难修正了。并且你的打印机的修正量不一定适合别人。

圆不是圆

你可能会发现打印园的起始的连接部位会有一些凸起,并且圆可能是椭圆。如果观察一下打印时候的速度及噪音,你会发现在打印圆的时候可能会嘎吱嘎吱的响。这是因为园会拆分成多条直线,导致每条直线会起起停停,在速度较高的时候可能会造成一些丢步或者抖动。解决方法是打印周长的时候,选择小一些的速度,例如40mm/s,这样打印质量就会很好了。观察Simplify3D的GCODE,发现它可能对不同的周长做了不同的处理,小的圆弧走的速度较慢,打印质量很好。

顶层的洞

如果挤出正常,顶层出现孔洞,则需要将Top/Bottom的层数设置得更好,一般1mm左右能够得到很好的效果。另外infill的百分比也比较影响,因为infill很低(10%以下)的时候,打印Top的时候就会变成Bridge,造成打印质量下降。

打印错层

Sailfish Firmware中有一个Accerlation的选项,该选项打开时固件会根据当前的GCODE生成相应地加速度,使得打印机在降速和提速的时候,能够平稳的以一定的加速度进行提速。关闭时,会始终以电机的最大能力作为最大加速度进行加减速,当电机无法接受预定的速度时,会造成丢步,久而久之积累下造成打印错层。

打印机噪音

我的打印机一直有嘎嘎嘎的噪音,晚上打印的时候声音巨大,关上门隔一个屋子都能听到。轴承都是加了油还是一样。

经过排查,最终发现是中间的塑料块裂了。这个塑料块的非常重要,应该是和XY的垂直度有很大的关系。换了以后基本上就恢复了。

第一层不粘连

第一层不粘连的问题,其实很头痛。和以下因素有关:

  • 喷头和第一层的高度
    一般保持到一张纸的厚度即可。
  • 第一层的挤出量。
    一般选择200%的挤出量会好一些
  • 温度
    一般第一层温度保持在230度比较好
  • 材料
    材料的影响包括材料的好坏和颜色。有些材料表面粗糙,挤出后会不粘连,然后卷到喷头上,越卷越多,造成打印失败。
    解决方法包括打印一个raft,减小速度

3D printing in ThoughtWorks ChengDu office

Industrial 4.0 is coming, what we will do? We brought a 3D printer 2 months ago and some of the guys here are very interested in how it works and how we can utilise it. To give the answer to them, I had one session these days that introduced the basic steps to use the machine.

###What can we print?

The first question they ask: can we build everything? The answer is definitely no, but we can build a lot. 3D printer consumes plastic and builds things layer by layer, so it is constrained by the material. And non-industrial 3D printer’s precision is not so good, so we can’t print too detailed model. Although it is a toy like thing, let’s see what we printed.

The Big Hero and the Iron Man’s helmet are quite famous. ThoughtWorks label is printed for fun, and the gear toy is much more complex. (Watch the video: http://www.thingiverse.com/thing:402412). Depends on the complexity, we will spend several minutes to several hours to print.

Thingiverse(http://www.thingiverse.com/) has a lot of creative things for us to print. I recommend to download them and try to print for beginners. They really found a lot of interesting things to try.

Pic1

###How could it help for our life?

I had one kid had he loves the train the most. I printed him train crossing for the IKEA wood train for more fun, and also a train engine for him. He was very excited about this gift. To my surprise, 2.5-years-old kid now knew how the 3D printer works. Inline image 2

Pic2

Another example is to create things. One day my wife told me that our case lock is broken, I used 123D design tool to draw a model and then printed it. It fit good and now the case was fixed.

In the picture below, you can see the battery holder and iPad holder. They are quite useful. I would like to great thanks to the 3D printer to make life easier and happy.

Pic3

###Next Step

Now we know how to use the machine, but we are still beginner at the design. More session around design work will happen in office, and our UX guys can think of creative things. Next time, you may see our business card is 3D printed.

I’m now also trying to build a cheap 3D scanner, so that we can scan the world and then print it.