0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Arduino自制儿童小电脑

454398 来源:互联网 作者:佚名 2015-12-15 10:46 次阅读

如果你家有小孩,一定能懂我做这个项目的初衷。我们每天都会玩着手机,敲着键盘跟朋友聊天,小孩子看见了就想模仿,但出于保护眼睛等一系列考虑,我们又不能让他们过早的接触电子设备。所以我就想到,能不能做一个小玩意让他们也尝试着学习阅读和书写呢?不过项目刚开始时确实挺困难,所以我又不断添加新功能以保持它对孩子的吸引力。

在开始写教程之前,我想感谢http://www.rinkydinkelectronics.com,我从上面汲取了很多营养,从各种库到代码,有了它们我才能玩转这块TFT触摸屏。

所需零配件:

·Arduino Mega 2560开发板。

·一块3.2英寸的触摸屏和保护壳,别忘了触控笔。

·一张SD卡,用来保存孩子的涂鸦。

·ESP8266 WiFi模块,以便设备连接互联网。

·DS1703时钟模块。

·电池适配器(找适合你所用电池的哦)。

·一个漂亮的壳子

·设定好一个互联网接入点,这样即使你不在家也可连上热点使用设备。

·在服务器上创建一个随时能通过PHP访问的数据库。

·为不同的孩子创建不同的电邮地址。

第一步:连接硬件

由于屏幕和外壳占据了Mega 2560的所有接口,所以我不得不在Mega开发板两边又焊接了几个接口,虽然看起来丑了点,但至少管用了。这样我们准备的 DS1703和ESP8266模块,甚至电池都可以顺利连接了。

说到ESP8266 WiFi模块,这次我算是走了狗屎运,连接时我直接将ESP8266模块的RX和TX接口连上了Mega开发板上的TX和RX接口,幸运的是,它居然运行无误。其实这不是正确的连接方法,我推荐你们还是参考下下面这个网页的连接方法吧:

随后你就可以将触摸屏连上Mega开发板并套上保护壳了。对了,别忘了插入准备好的SD卡。

第二步:载入软件

想要运行该设备,你需要两个软件组件。第一个是Arduino Sketch,第二个则是运行在你服务器上的PHP脚本和来自Arduino的HTTP Get请求。ESP8266上使用的HTTP 1.0协议有些过时,用起来有些不舒服,你只能通过它发送HTTP Get请求和HTTP Post请求。所以你需要将来自Arduino的HTTP Get请求转换成STMP(简单电子邮件协议)或其他格式,而这正是PHP脚本的一部分。

Arduino

在Arduino 1.5.6 beta上,该Sketch的运行和测试都进行的很顺利,但升级到最新的1.6.0就不行了(出现了TFT校准错误)。所以在你加载这个Sketch之前,请对其进行编辑并根据你的互联网接入点设置相应参数。下面是范例:

#define DEST_HOST “www.your_own_host.de”

#define SSID_HOME “FritzBoxHOME”

#define PASS_HOME “ABCDEFGHIJKLMNOPQRSTUVWXYZ”

记住,DEST_HOST并不是你在服务器上的IP地址,所以你的PHP脚本不会在那里运行。在你的根目录里,Sketch会建立一个名为“Scripts”的文件夹,而你的PHP脚本最终会上传到这里。

SSID_HOME 和PASS_HOME则是互联网接入点的设置。想要通过路由器上网(我用的是德国的Fritz Box路由),你就要进入路由器设置中心对其进行配置。想使用移动热点的话,你就要进入设置-》更多设置-》WLAN热点-》移动热点对其进行配置(安卓系统)。

下载了Sketch之后记得先阅读详细步骤并做出正确的配置调整。如果一切运行正常,在加载了Sketch之后,你就会看到主界面,上面会显示键盘,一些图标和WiFi状态栏(绿色为已连接,红色则为断开)。

PHP

PHP脚本在这个项目中起了很重要的作用,它是Arduino开发板和SMPT服务器之间的接口,你可以通过它收发邮件。它可以将开发板上反馈来的HTTP Get请求转换成相应的动作,完成阅读邮件,发送邮件和图片等工作。

第三步:使用应用程序:用户和邮件设置

用户

该程序可供三个不同用户使用,每个用户都可设定自己的头像(.c文件,和Sketch一起上传到RAM中)。这个格式比较少见,你可以通过网站JPG_to_C converter将一张32x32的JPG图片转换成一个.c文件。

创建三个用户时可使用下列代码(三个用户分别为Samira,Kilian和Keanu):

#define SENDER_CNT 3

//Photo .c Files:

extern unsigned int keanu[0x1024];

extern unsigned int kilian[0x1024];

extern unsigned int samira[0x1024];

char *key_sendername[SENDER_CNT] = { “Samira”, “Kilian”, “Keanu” };

unsigned int *icon_sendername[SENDER_CNT] = {samira, kilian, keanu};

你在创建用户时只需修改用户名和图片就行了,其他代码完全相同。

更换用户时,你只需点击Logged User图标并选择要使用的用户就好。登陆的用户可以发送邮件或阅读收到的邮件,每个用户在SD卡的根目录上都会有自己专用的信箱文档,你的邮件和邮件中的附图都会保存在这里。未来,我想让该设备能定期扫描邮箱并下载邮件供用户阅读。

设定邮件发送人和收件人

选择好用户后,HTTP Get请求就会记录用户的相关信息,随后便会在服务器上生成用户的邮件地址。

想要改变收件人,只需点击Mail To图标并在其中进行选择就好。与上一步相同,设备会记录收件人的相关信息,然后通过PHP转换出正确的邮件地址。

更多详细信息请参阅第六步:发送邮件。

第四步:使用应用程序:涂鸦

想要画画,点击彩虹图标就行,该图标在作画前是红色的。

所有的画作都会保存在SD卡上,用户可以找到它们并将其添加到邮件中。

由于HTTP 1.0的限制,你无法采用二进制发送图片,所以孩子的涂鸦会转换成一种特有格式并保存在一个文本文档中,发送后服务器便会将其重新转换为图片。

为了避免发送的图片体积过于庞大,在屏幕中央右侧还会显示一个彩色图标,它会根据图片的大小不断变色。如果该图标变红,就说明图片体积已达上限,自此SD卡就不会继续记录信息了。最大图片体积为3K,这对孩子的涂鸦来说绝对足够了。

彩色图标还会充当确认键,画图完成时你需要点击它进行确认。随后彩虹图标就会显现出来,这时你就可以将图片添加进邮件了。如果你暂时不想发送,该图片会被保存在SD中,随后你可以通过图片浏览器回看这些图片。

第五步:使用应用程序:发送邮件

发邮件也很简单,只要点击信封图标,就可以发出一封邮件(原始邮件是HTTP Get请求,随后会转换为可读邮件)。如果系统工作正常,发送状态栏会呈绿色,若WiFi连接出现问题,状态栏则会变成红色。

HTTP Get请求包含了许多服务器端的邮件信息,包括用户的姓名和收件人的姓名。而PHP脚本则会收到一条包含请求和配置值的信息。当然,我们必须在PHP脚本上传到服务器前搞定这些设置,这样邮件系统才能正常工作。

下面是PHP脚本中很有趣的一部分:

/*****************************************/

/* SEND MAIL */

/*****************************************/

if( (strlen($send_mail_from) 》 0 && strlen($send_mail_to) 》 0)

|| strlen($get_image) 》 0 || strlen($_POST[“MailImage”])》0

|| strlen($end_image) 》 0 || strlen($get_image_name) 》 0

|| strlen($give_me_image) 》 0 )

{

$handy_light = 0;

$to = ‘mama@your_domain.com’;

if( strcmp($send_mail_to, “Papa”) == 0 )

$to = ‘papa@your_domain.com’;

else if( strcmp($send_mail_to, “Keanu”) == 0 )

{

$to = ‘keanu@your_domain.com’;

$handy_light = 1;

}

else if( strcmp($send_mail_to, “Kilian”) == 0 )

{

$to = ‘kilian@your_domain.com’;

$handy_light = 1;

}

else if( strcmp($send_mail_to, “Samira”) == 0 )

{

$to = ‘samira@your_domain.com’;

$handy_light = 1;

}

else if( strcmp($send_mail_to, “Mami”) == 0 )

$to = ‘gradnma@hotmail.com’;

else if( strcmp($send_mail_to, “Juanito”) == 0 )

$to = ‘oncle@hotmail.com’;

else if( strcmp($send_mail_to, “Javier”) == 0 )

$to = ‘myfriend@gmail.com’;

$subject = ‘De: ’ 。 $send_mail_from;

$message = $mailbody;

$headers = ‘From: ’ 。 $send_mail_from 。 ‘@your_domain.com’ 。 “ ” 。

‘Reply-To: ’ 。 $send_mail_from 。 ‘@your_domain.com’ 。 “ ” 。

‘X-Mailer: PHP/’ 。 phpversion();

你只需要将我的发件人Mama,Papa等改成你想要的名字就好。

mama@your_domain.com

papa@your_domain.com.。 etc

此外你还可以修改邮箱地址。

PHP 脚本需要获知是否收件人已经通过PC,手机或Mailduino收到了邮件。只有这样,它才能决定是否执行对图片的转换工作,以便收件人在不同的设备上看到正常的图片(普通设备会转换为JPG,Mailduino则会直接读取.c格式的文档)。所以,请将PHP变量$handy_light设为true或 false(应对不同的收信设备)。

第六步:使用应用程序:接收邮件

想阅读邮件的话,你需要点击卡车图标,这样就能进入邮件界面了。不过屏幕上只会显示最近的四封邮件,所有收到的邮件都保存在邮箱文档里。该设备无法读取采用HTML代码的邮件,所以在正式使用前我推荐你先在PC上做下测试,将设定改为“仅文本”。

想要看看是否收到了新邮件?很简单,只需点击主界面上部的卡车图标就好。只要用户在两分钟内没有活动,系统就会自动检查并下载新邮件。在整个过程中,开发板会发送一个HTTP Get请求,随后PHP脚本便会开始检查新邮件,所有新邮件都会以较为简单的格式回传到Arduino开发板。如果收到了新邮件,界面右下方就会出现一个蓝色的M图标来提醒你。

在邮件域中,标准文本呈白色,发送人地址则为红色。为了保证发送域包含一个已知人的标识符,屏幕上会显示发送人的头像。

如果邮件内含有图片,那么收到的邮件会包含图片的名字,Arduino会通过HTTP Get再次向服务器发起请求,这时设备就会开始新的下载,你就能看到原始的全像素图片了。此外,你可以通过接收状态栏来了解下载的状态。

如果邮件内含有图片,你会在邮件域的右边看到一片彩虹,点击它就能打开图片。

PHP配置

如果你想随时查看账户,服务器端也有些设置需要改变。来自Arduino的HTTP Get请求包含了账户的名字,这些会保存在一个名为$get_mails_for的变量PHP脚本中。请参考下列代码并修改你想查看的邮件地址和密码。

/*****************************************/

/* RECEIVE MAILS */

/*****************************************/

else

{

if( strcmp($get_mails_for,“Keanu”) == 0 )

{

$USER_NAME=“keanu@your_domain.com”;

$USER_PASS=“A123456b”;

}

else if( strcmp($get_mails_for,“Kilian”)==0 )

{

$USER_NAME=“kilian@your_domain.com”;

$USER_PASS=“A123456b”;

}

else if( strcmp($get_mails_for,“Samira”) == 0 )

{

$USER_NAME=“samira@your_domain.com”;

$USER_PASS=“A123456b”;

}

else

$USER_NAME=“default@your_domain.com”;

echo “Reading Mails for ” 。 $get_mails_for 。 “ from Server with PHP ”;

$inbox = imap_open (“{”。 $MAIL_HOST 。 “:143}INBOX”, $USER_NAME, $USER_PASS) or die(“Can‘t connect IMAP-Server!”);

第七步:使用应用程序:图片浏览器

用户的所有画作都会存储在SD卡上,只要点击时钟图标左边的图标就可进入图片浏览模式,图片浏览器中的图片会按名字呈九宫格排列。

想要看原始大小的图片,你只需点击它就行。看完之后,随便点击以下图片就能回到刚刚的浏览界面。

如上图所示,手型图标可以让你进入下一页。

确认图标则可以让你回到主界面。

第八步:时钟界面

想要激活该设备的时钟功能,你需要先对你的DS1307时钟模块进行设置。只需加载下列Arduino Sketch并调好时间就行(记得用unix格式):

/* T(string_utctime) */

#include

#include

#include // a basic DS1307 library that returns time as a time_t

void setup()

{

Serial.begin(9600);

setSyncProvider(RTC.get); // the function to get the time from the RTC

if(timeStatus()!= timeSet)

Serial.println(“Unable to sync with the RTC”);

else

Serial.println(“RTC has set the system time”);

}

void loop()

{

if(Serial.available())

{

time_t t = processSyncMessage();

if(t 》0)

{

RTC.set(t); // set the RTC and the system time to the received value

setTime(t);

}

}

digitalClockDisplay();

delay(1000);

}

void digitalClockDisplay(){

// digital clock display of the time

Serial.print(hour());

printDigits(minute());

printDigits(second());

Serial.print(“ ”);

Serial.print(day());

Serial.print(“ ”);

Serial.print(month());

Serial.print(“ ”);

Serial.print(year());

Serial.println();

}

void printDigits(int digits){

// utility function for digital clock display: prints preceding colon and leading 0

Serial.print(“:”);

if(digits 《 10)

Serial.print(’0‘);

Serial.print(digits);

}

/* code to process time sync messages from the serial port */

#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits

#define TIME_HEADER ’T‘ // Header tag for serial time sync message

time_t processSyncMessage() {

// return the time if a valid sync message is received on the serial port.

while(Serial.available() 》= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits

char c = Serial.read() ;

Serial.print(c);

if( c == TIME_HEADER ) {

time_t pctime = 0;

for(int i=0; i 《 TIME_MSG_LEN -1; i++){

c = Serial.read();

if( c 》= ’0‘ && c 《= ’9‘){

pctime = (10 * pctime) + (c - ’0‘) ; // convert digits to a number

}

}

return pctime;

}

}

return 0;

}

设定好你的DS1307后,只需点击主界面上的时钟图标就可以用该设备查看当前时间了。

一个DIY的儿童电脑就完成啦,大家快试试吧!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184809
收藏 人收藏

    评论

    相关推荐

    【OK210申请】智能型儿童平板电脑

    申请理由:之前在用OK6410开发板,对飞凌的技术及服务很有信息。同时,想通过这个开发板缩短目前项目的开发周期和设计难度。项目描述:传统的平板电脑都是怎么来提高学习成绩,智能型儿童平板更注重对儿童行为的引导和纠正,从不同的阶段根
    发表于 07-09 13:10

    请问自制arduino控制板不能直接用Arduino IDE烧录程序怎么办?

    因为需要,自制了一块arduino2560,USB这一块用的是CH340G,但是直接用Arduino IDE不能烧入程序,试过用Arduino烧录bootloader,并作为ISP进行
    发表于 12-03 11:19

    【开源分享】小白开源V3S miniPC小电脑

    作者:树莓学LINUX简介:小白完成了v3s_linux小电脑的制作,在这个过程中,很有收获。linux硬件部分包括:1、板载USB_hub,摄像头网卡均使用外置,所以足够的USB接口十分重要。2
    发表于 04-14 15:20

    仅硬盘大小电脑问世:无CPU无内存无系统

    国内第一台无CPU、无内存、无系统的电脑主机在沪投产,仅硬盘大小电脑问世:无CPU无内存无系统
    发表于 07-16 14:18 1235次阅读

    IBM推世界最小电脑你绝对想不到 1立方毫米成本10美分

    IBM推出世界最小电脑,比颗粒盐还袖珍,该微型电脑的尺寸为1毫米x 1毫米,比一粒盐还小,制造成本不到10美分。
    的头像 发表于 03-20 14:23 3837次阅读

    世界最小电脑面世_“袖珍电脑”作用是什么_何时普及

    3月19日消息,据国外媒体报道,IBM将在3月19日召开的IBM Think 2018大会上推出世界上最小的电脑。据称,IBM推出的这款最小电脑比一粒盐还小。就计算机能力而言,这款电脑拥有1990年x86芯片的计算能力。在没有显
    的头像 发表于 03-20 17:42 1.6w次阅读

    英伟达推出人工智能小电脑Jetson Nano,为机器人提供大脑

    英伟达今天在游戏开发者大会上发布的99美元的Jetson Nano人工智能小电脑可以加快这一进程。
    的头像 发表于 03-20 10:13 4811次阅读

    英伟达最新推出基于嵌入式的小电脑

    在游戏者开发大会上,英伟达宣布发布一款售价99美元名为Jetson Nano人工智能小电脑。据介绍,该款产品可以为机器人或其它AI设备提供图像识别、即时翻译等“大脑”支持。
    发表于 09-05 11:44 765次阅读

    三星专为儿童设计推出一款平板电脑

    据消息报道,近日三星在美国推出三星Galaxy Tab A Kids Edition(2019)平板电脑,型号为“SM-T290”,专为儿童设计。
    的头像 发表于 10-18 14:51 3636次阅读

    使用Arduino优化自制电力的电源路由器

    电子发烧友网站提供《使用Arduino优化自制电力的电源路由器.zip》资料免费下载
    发表于 11-08 15:27 0次下载
    使用<b class='flag-5'>Arduino</b>优化<b class='flag-5'>自制</b>电力的电源路由器

    基于arduino自制呼吸机

    电子发烧友网站提供《基于arduino自制呼吸机.zip》资料免费下载
    发表于 11-16 09:28 9次下载
    基于<b class='flag-5'>arduino</b>的<b class='flag-5'>自制</b>呼吸机

    自制Arduino Nano俄罗斯方块游戏

    电子发烧友网站提供《自制Arduino Nano俄罗斯方块游戏.zip》资料免费下载
    发表于 12-07 15:18 3次下载
    <b class='flag-5'>自制</b><b class='flag-5'>Arduino</b> Nano俄罗斯方块游戏

    8085自制电脑开源硬件

    电子发烧友网站提供《8085自制电脑开源硬件.zip》资料免费下载
    发表于 02-07 14:43 0次下载
    8085<b class='flag-5'>自制</b><b class='flag-5'>电脑</b>开源硬件

    Arduino自制一个只有表针的时钟

    我们来一起看看如何用Arduino自制一个只有表针,没有表盘的“空心时钟”。
    的头像 发表于 03-09 13:33 1019次阅读

    儿童乐高Arduino教程之眨眼草图

    电子发烧友网站提供《儿童乐高Arduino教程之眨眼草图.zip》资料免费下载
    发表于 07-10 15:15 0次下载
    <b class='flag-5'>儿童</b>乐高<b class='flag-5'>Arduino</b>教程之眨眼草图