st4n 发表于 2015-11-15 09:20:44

#报名NABI黑客马拉松 -- touchlight

这个项目是我们在宁波创客周末完成的一个作品,当时用的是以太连接。
touchlight 是一款通过触碰而产生灯光开关/颜色变化的情侣间的情感传递的产品,假设情侣在异地,通过 touchlight 就可以利用灯光的变化来让对方知道自己的思念。这个想法和 NABI黑客马拉松 所要求的理念满想的,那我们就来试试看能不能参加。



创业周末创客版时候,我们在演示 touchlight
因为当时做的是一个模型,所以我们用的是以太网来连接,目前考虑到了实际的易用性,我们重新写了一下代码,因为牵扯到了某些私有API的问题还没有搞定,下面放出上次用的代码。

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include "string.h"

#define Device 1
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);

unsigned int localPort = 8888;   
unsigned int Count_send = 0;

char packetBuffer;
charReplyBuffer[] = "acknowledged";   
EthernetUDP Udp;

//const int TrigPin = 8; //+,A
//const int EchoPin = 9;
//float distance;
const int blueLed = 13;
const int keyPin = 4;

void setup() {
    Ethernet.begin(mac,ip);
    Udp.begin(localPort);

    Serial.begin(9600);
//pinMode(TrigPin, OUTPUT);
//pinMode(EchoPin, INPUT);   
   
    pinMode(blueLed, OUTPUT);
    pinMode(keyPin,INPUT);               //将4号数字口设置为输入状态
    digitalWrite(blueLed, HIGH);//常态:显示光

    delay(500);
}

void loop() {
   // distanceEcho();
   // Serial.print(distance);

   // if(distance >0 && distance < 10.00){//有人靠近
      int n =digitalRead(keyPin);                   //创建一个变量n,将4号数字口的状态采集出来赋值给他。
      if (n==HIGH)                           //判断n是否为高电平,如果是执行下面的语句,不是则跳过。
      {   
             Serial.print("-- people near + keypress() --");
            keyPressed();//按键被触发
               delay(10);
            digitalWrite(blueLed,HIGH);
            delay(10);
             // Serial.print("high");
            digitalWrite(blueLed,LOW);
             // Serial.print("low");         
      }
      
      int packetSize = Udp.parsePacket();
      Serial.print(packetSize);
      Serial.println();
      if(packetSize){
               digitalWrite(blueLed, HIGH);//有人靠近亮白灯,灯变换
               Serial.print("people+light");
       }else{         
            digitalWrite(blueLed, LOW);//有人靠近不亮白灯,灯变换
            Serial.print("people+low");
            }
      
      Serial.println();
}

void keyPressed() {
   IPAddress ip(192, 168, 1, 178);
   int port = 8888;
   char Buffer_Str[] = "Heloo world!";
   uint8_t *ps_BufferStr = (uint8_t *)Buffer_Str;
   
   Udp.beginPacket(ip, (uint16_t)port);
   Udp.write(ps_BufferStr, strlen(Buffer_Str));
   Udp.endPacket();
}
/*
void distanceEcho(){
      digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
      delayMicroseconds(2);
      digitalWrite(TrigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(TrigPin, LOW);
      distance = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成distance
      distance = (int(distance * 100.0)) / 100.0; //保留两位小数
}
*/
这个代码很基础,仅仅做到了能用的阶段。


而且用到的原件也就只有两块 UNO 的板子,两块 以太网扩展板,超声波传感器, led 灯,电阻还有两个按钮。。。几乎就是基础教程的内容。。。

话说回来,为什么要做 touchlight ?

1. 当然满足自己的需求,解决不能见面的相思之苦,虽然有很好用的通信工具在,但有时候我们还是需要实体物品的慰借。这个时候,我就想到了用灯光来试试,当时的想法就是这么基础。。。很明显,用灯被吐槽了。

2. 虽说是用灯来表达感情并不是一件多么有想法的事情,但这是比较方便的伪智能的方式,街上的 app 灯就是这样,我认为,用 app 来控制一盏灯的亮或灭,明或暗,这在我看来是有点反智的。不是说不好,但这功能应该算是附加的吧,而不是拿来当主打功能。

3. 当时比赛是用点子来找团队的,我是去试试点子的,凑巧刚好被选上了。




当时因为主打情感而被嫌弃了,而这次比赛的内容是情感智能机器人。就情感来说,是符合的。而后面智能机器人而言,用上我所认知的技能,我能做到智能。但做不成机器人,不管怎么样还是试着发个帖子投个稿。

正在开发的功能:

利用 IFTTT 实现通过关键词来改变颜色。




dsweiliang 发表于 2015-11-17 14:01:25

这个好,收藏
页: [1]
查看完整版本: #报名NABI黑客马拉松 -- touchlight