ITEAD创易工作室 发表于 2015-1-5 15:22:12

【教程】给妈妈做的老人手机(已升级至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秒再放开才生效。视频后续添加。
最后祝大家天天开心,父母身体健康!

wwwusr 发表于 2015-1-5 17:25:14

e,手机好像有个功能,叫快速拔号吧,设置好了后,一直按着一个数字键,就拔出对应存储的的号码 。。。。。。。。

小叉 发表于 2015-1-5 21:11:40

我觉得挺不错的,按一个键就好了,对老人而言使用起来也简单。手机的话, 确实年纪大了 ,接受起来有点困难。

ITEAD创易工作室 发表于 2015-1-6 09:55:36

wwwusr 发表于 2015-1-5 17:25 static/image/common/back.gif
e,手机好像有个功能,叫快速拔号吧,设置好了后,一直按着一个数字键,就拔出对应存储的的号码 。。。。。 ...

手机按键太多,老人记不住,有时候连开屏保都不知道怎么弄。学不会的话更会挫伤她们的信心,觉得人老了没有价值了,由此更排斥用手机。

mjgzdnw 发表于 2015-1-6 14:23:04

真不错,楼主有心了。

wwwusr 发表于 2015-1-6 20:44:58

开屏保,锁键盘,对老人,确实是个麻烦事儿。

ITEAD创易工作室 发表于 2015-1-7 14:58:56

wwwusr 发表于 2015-1-5 17:25 static/image/common/back.gif
e,手机好像有个功能,叫快速拔号吧,设置好了后,一直按着一个数字键,就拔出对应存储的的号码 。。。。。 ...

谢谢支持,已上传视频。

ITEAD创易工作室 发表于 2015-1-7 14:59:55

小叉 发表于 2015-1-5 21:11 static/image/common/back.gif
我觉得挺不错的,按一个键就好了,对老人而言使用起来也简单。手机的话, 确实年纪大了 ,接受起来有点困难 ...

谢谢支持,已上传视频。

ITEAD创易工作室 发表于 2015-1-7 15:00:29

mjgzdnw 发表于 2015-1-6 14:23 static/image/common/back.gif
真不错,楼主有心了。

谢谢支持,已上传视频。

ITEAD创易工作室 发表于 2015-1-7 15:01:02

wwwusr 发表于 2015-1-6 20:44 static/image/common/back.gif
开屏保,锁键盘,对老人,确实是个麻烦事儿。

谢谢支持,已上传视频。

老胖熊 发表于 2015-1-7 16:52:44

真心不错,太有爱了。要是能弄个音频拨号器,就可以控制固定电话拨号了。

suoma 发表于 2015-1-7 18:27:05

谢谢分享学习一下

wwwusr 发表于 2015-1-7 21:55:42

(如果不考虑成本,嘿嘿,貌似你现有的配置已经相当的土豪了)还可以加上非特定语音识别,可以达到:

老人按一下唯一的一个键,激活手机,相当于解锁了。
手机吱一声,然后说:“请说您要联系的人名”
老人说:“老伴儿”。
手机说:“正在为您接通”。
然后拔出相应的号码

这样就一个键,作用是想用时唤醒手机,不用时就低功耗。操作更简单,用非特定语音识别,识别率也可以。

ITEAD创易工作室 发表于 2015-1-8 10:49:35

老胖熊 发表于 2015-1-7 16:52 static/image/common/back.gif
真心不错,太有爱了。要是能弄个音频拨号器,就可以控制固定电话拨号了。

老人手机已升级至NFC刷卡打电话了。谢谢关注!

ITEAD创易工作室 发表于 2015-1-8 10:50:01

wwwusr 发表于 2015-1-7 21:55 static/image/common/back.gif
(如果不考虑成本,嘿嘿,貌似你现有的配置已经相当的土豪了)还可以加上非特定语音识别,可以达到:

老 ...

老人手机已升级至NFC刷卡打电话了。谢谢关注!
页: [1] 2
查看完整版本: 【教程】给妈妈做的老人手机(已升级至NFC)