【教程】给妈妈做的老人手机(已升级至NFC)
本帖最后由 ITEAD创易工作室 于 2015-3-11 09:41 编辑http://player.youku.com/player.php/sid/XODY2NDYxNzY4/v.swf
Hello,小伙伴们好久不见了。在此先祝各位在2015年扬眉吐气,喜气洋洋!
这次带来的教程是使用Gboard做一个老人手机,一键拨打5个预设号码,可接听,可挂断。
或许你觉得现在的老人手机满大街都是,便宜到白送了。但是所谓的老人手机不过是按键大点,音量大点而已,操作按键还是那么多。
对于一些60岁以上的老人,特别是老太太,可能一辈子也没用过手机,打个电话还要叫老伴或者年轻人代劳。
当然,这只是我们的初衷,希望能给你带来不一样的想法。
制作很简单,先上我DIY的实物效果图。
需要准备的材料有:
将sim卡插入到Gboard背面的sim卡槽。硬件连接如下图所示:
按钮电子积木也是3pin的接口,这里没有画出G 和 V了。使用3pin杜邦线直接连接即可。
需要使用的库下载地址:http://pan.baidu.com/s/1o67eIy2 解压后放到libraries文件夹下面。如果libraries文件夹里面已经有以前下载过的sim900相关库文件,需要暂时删除或者压缩备份,以免有相同文件名冲突。
打开Arduino IDE软件。将以下代码复制黏贴到编辑框:
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "call.h"
CallGSM call;
char number1[]="1234567890";//enter phone or tel number
char number2[]="1234567890";//enter phone or tel number
char number3[]="1234567890";//enter phone or tel number
char number4[]="1234567890";//enter phone or tel number
char number5[]="1234567890";//enter phone or tel number
byte stat=0;
int status=0;
int pickup=1;
int pin1=A0;
int pin2=A1;
int pin3=A2;
int pin4=A3;
int pin5=A4;
int pin6=A5;
char value_str;
void setup()
{
pinMode(pin1,INPUT);
pinMode(pin2,INPUT);
pinMode(pin3,INPUT);
pinMode(pin4,INPUT);
pinMode(pin5,INPUT);
pinMode(pin6,INPUT);
//Serial connection.
Serial.begin(9600);
Serial.println("GSM Shield testing.");
//Start configuration of shield with baudrate.
//For http uses is raccomanded to use 4800 or slower.
if (gsm.begin(9600))
Serial.println("\nstatus=READY");
else Serial.println("\nstatus=IDLE");
};
void loop()
{
if(digitalRead(pin1)==0)
{
delay(100);
while(digitalRead(pin1)==1);
call.Call(number1);
status = 1;
}
if(digitalRead(pin2)==0)
{
delay(100);
while(digitalRead(pin2)==1);
call.Call(number2);
status = 1;
}
if(digitalRead(pin3)==0)
{
delay(100);
while(digitalRead(pin3)==1);
call.Call(number3);
status = 1;
}
if(digitalRead(pin4)==0)
{
delay(100);
while(digitalRead(pin4)==1);
call.Call(number4);
status = 1;
}
if(digitalRead(pin5)==0)
{
delay(100);
while(digitalRead(pin5)==1);
call.Call(number5);
status = 1;
}
if(digitalRead(pin6)==0)
{
delay(100);
while(digitalRead(pin6)==1);
if(status==1)
{
status=0;
call.HangUp();
}
else
{
if(pickup==1)
{
call.PickUp();
pickup=0;
}
else
{
pickup=1;
call.HangUp();
}
}
}
delay(20);
};
连接foca到电脑,选择board类型为“Arduino Duemilanove w/atmega328”,选择相应的串口。编译烧写。
代码上传完成了,DIY一个操作外壳吧。
最后使用电源适配器给Gboard供电即可。开机自启动sim900模块。其中一个按钮是用来挂断和接听电话的,一键两用。
插上麦克风和耳机就可以通话了。妈妈再也不用担心不会用智能手机打电话了!
升级版老人手机
继上一篇【给妈妈做的老人手机】发出后,很多小伙伴们觉得5个预设号码太少了,由此我们推出升级版本:【给妈妈做的NFC老人手机】
先上我DIY 的最终效果图:
需要的材料有: 因为RDM8800使用的是LGT8F88A而非ATMega328等标准Arduino采用的芯片,所以我们还需要在为标准的Arduino IDE打上一个补丁(https://github.com/iteadsw/Iteaduino-Lite-HSP/)。现在补丁可支持1.0x版本和1.5x版本。将补丁包解压到你的arduinoIDE安装目录下,覆盖原来文件即可(此方法对arduino初学者而言)。
另外因为涉及到用RDM8800给13.56MHz的白卡写入号码,建议购买两个RDM8800,这样可以方便后续添加联系人,只有一个的话需要重新搭建,比较麻烦。(上图硬件清单一套的价钱在300元左右,不包括sim卡和外设)
硬件连接如下图所示,分为写卡和读卡两部分:
写卡部分的硬件连接图:
直接使用的是串口通信。
读卡打电话部分的硬件连接图:
将sim卡插入到sim900模块背面的sim卡槽,foca达到5V的一边。按钮电子积木可以用3Pin杜邦线接到rdm8800,另外的G和V刚好可以给sim900模块供电。sim900模块也是直接用的串口通信。
需要使用的库下载地址:http://pan.baidu.com/s/1c03vv7y 解压后放到libraries文件夹下面。如果libraries文件夹里面已经有以前下载过的PN532相关库文件,需要暂时删除或者压缩备份,以免有相同文件名冲突。
打开Arduino IDE软件。连接foca到电脑,选择board类型为“Iteaduino Lite”,选择相应的串口。
http://image.geek-workshop.com/forum/201406/09/130715anmajuh6sx7j8fde.jpg 首先给RDM8800烧写写入电话号码的代码:
#include <;PN532.h>
#include <SPI.h>
const int LED = 3;
#define PN532_CS 10
PN532 nfc(PN532_CS);
int num_length=0;
uint8_t writeBuffer;
uint8_t written=0;
#defineNFC_DEMO_DEBUG 1
void setup(void) {
Serial.begin(9600);
nfc.begin();
nfc.SAMConfig();
}
void loop(void) {
Serial.println("Enter your phone number!\n");
while(!Serial.available());
delay(500);
while(Serial.available())
{
writeBuffer= Serial.read();
num_length++;
}
writeBuffer = ';';
num_length++;
while(num_length!=16)
{
writeBuffer = ' ';
num_length++;
}
for(uint8_t i=0;i<16;i++)
{
Serial.write(writeBuffer);
}
num_length=0;
written = 0;
Serial.println();
uint32_t id;
// look for MiFare type cards
id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
if (id != 0)
{
#ifdef NFC_DEMO_DEBUG
Serial.print("Read card #");
Serial.println(id);
Serial.println();
#endif
uint8_t keys[]= {
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF };
if(nfc.authenticateBlock(1, id ,0x08,KEY_A,keys)) //authenticate block 0x08
{
//if authentication successful
if(written == 0) //Not written
{
written = nfc.writeMemoryBlock(1,0x08,writeBuffer); // Write writeBuffer[] to block 0x08
if(written)
#ifdef NFC_DEMO_DEBUG
Serial.println("Write Successful");
#endif
}
uint8_t block;
//read memory block 0x08
if(nfc.readMemoryBlock(1,0x08,block))
{
#ifdef NFC_DEMO_DEBUG
Serial.println("Read block 0x08:");
//if read operation is successful
for(uint8_t i=0;i<16;i++)
{
//print memory block
Serial.print(block,HEX);
Serial.print(" ");
}
Serial.println();
Serial.println();
Serial.println();
Serial.println();
#endif
}
}
//while(1);
}
else
{
Serial.println("can't find your card!");
}
}
代码上传完成后打开串口监视器,把卡放在天线板上,在输入框输入一个电话号码,回车,即可写入号码。换下一张卡,输入号码,回车。接下来给另一套打电话的RDM8800烧写读卡代码,如果只有一套,需要重新接线和烧写代码:
#include <PN532.h>
#include <SPI.h>
#define delaytime 5000
#define timeout1 5000
#define timeout2 7000
byte comm_buf;
const int LED = 3;
#define PN532_CS 10
PN532 nfc(PN532_CS);
//#defineNFC_DEMO_DEBUG 1
unsigned int frame_format;
unsigned char id_buffer;
uint32_t old_id;
unsigned long lasttime=0;
unsigned long prev_time=0;
unsigned char r_buffer;
void setup(void) {
Serial.begin(9600);
nfc.begin();
nfc.SAMConfig();
pinMode(LED,INPUT);
delay(5000);
lasttime = millis();
}
void loop(void) {
uint32_t id;
// look for MiFare type cards
id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
if (id != 0)
{
if(old_id != id)
{
old_id = id;
while(Serial.available())
Serial.read();
uint8_t keys[]= { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF };
if(nfc.authenticateBlock(1, id ,0x08,KEY_A,keys)) //authenticate block 0x08
{
//if authentication successful
uint8_t block;
//read memory block 0x08
if(nfc.readMemoryBlock(1,0x08,block))
{
Serial.print("ATD");
int a=0;
while(block!=' ')
{
Serial.write(block);
a++;
}
Serial.println();
delay(200);
}
}
}
lasttime = millis();
}
if(millis() - lasttime > delaytime)
{
lasttime = millis();
old_id=0;
}
if(digitalRead(LED)==0)
{
delay(100);
while(!digitalRead(LED)==1);
Serial.flush();
//Serial.setTimeout(1000);
Serial.println("AT+CPAS");
if(Serial.find("+CPAS: 3"))
{
delay(100);
Serial.println("ATA");
}
else
{
Serial.println("ATH");
}
delay(100);
Serial.flush();
}
}
代码上传完成了,按下sim900模块上的power键开机,然后把刚写好电话号码的白卡放到打电话的天线板上刷一下。稍等片刻手机或者固话即可收到来电。插上麦克风和耳机就可以通话了。用双面胶固定在盒子里。
伙伴们可还记得这个盒子是做什么用的?
另外的一个按钮是用来挂断和接听电话的,一键两用。注意:因为程序里面有延迟,按键的时候需要按住1秒再放开才生效。视频后续添加。
最后祝大家天天开心,父母身体健康!
e,手机好像有个功能,叫快速拔号吧,设置好了后,一直按着一个数字键,就拔出对应存储的的号码 。。。。。。。。 我觉得挺不错的,按一个键就好了,对老人而言使用起来也简单。手机的话, 确实年纪大了 ,接受起来有点困难。 wwwusr 发表于 2015-1-5 17:25 static/image/common/back.gif
e,手机好像有个功能,叫快速拔号吧,设置好了后,一直按着一个数字键,就拔出对应存储的的号码 。。。。。 ...
手机按键太多,老人记不住,有时候连开屏保都不知道怎么弄。学不会的话更会挫伤她们的信心,觉得人老了没有价值了,由此更排斥用手机。 真不错,楼主有心了。 开屏保,锁键盘,对老人,确实是个麻烦事儿。 wwwusr 发表于 2015-1-5 17:25 static/image/common/back.gif
e,手机好像有个功能,叫快速拔号吧,设置好了后,一直按着一个数字键,就拔出对应存储的的号码 。。。。。 ...
谢谢支持,已上传视频。 小叉 发表于 2015-1-5 21:11 static/image/common/back.gif
我觉得挺不错的,按一个键就好了,对老人而言使用起来也简单。手机的话, 确实年纪大了 ,接受起来有点困难 ...
谢谢支持,已上传视频。 mjgzdnw 发表于 2015-1-6 14:23 static/image/common/back.gif
真不错,楼主有心了。
谢谢支持,已上传视频。 wwwusr 发表于 2015-1-6 20:44 static/image/common/back.gif
开屏保,锁键盘,对老人,确实是个麻烦事儿。
谢谢支持,已上传视频。 真心不错,太有爱了。要是能弄个音频拨号器,就可以控制固定电话拨号了。 谢谢分享学习一下 (如果不考虑成本,嘿嘿,貌似你现有的配置已经相当的土豪了)还可以加上非特定语音识别,可以达到:
老人按一下唯一的一个键,激活手机,相当于解锁了。
手机吱一声,然后说:“请说您要联系的人名”
老人说:“老伴儿”。
手机说:“正在为您接通”。
然后拔出相应的号码
这样就一个键,作用是想用时唤醒手机,不用时就低功耗。操作更简单,用非特定语音识别,识别率也可以。 老胖熊 发表于 2015-1-7 16:52 static/image/common/back.gif
真心不错,太有爱了。要是能弄个音频拨号器,就可以控制固定电话拨号了。
老人手机已升级至NFC刷卡打电话了。谢谢关注! wwwusr 发表于 2015-1-7 21:55 static/image/common/back.gif
(如果不考虑成本,嘿嘿,貌似你现有的配置已经相当的土豪了)还可以加上非特定语音识别,可以达到:
老 ...
老人手机已升级至NFC刷卡打电话了。谢谢关注!
页:
[1]
2