08/30/2014 at 22:30 •
Congratulations to the lucky ones who passed the contest cut. In honesty this is not really a practical, marketable or way impressive project, so I wasn't really expecting to pass the quarterfinal cut for the hackaday prize. But still it is very disappointing to scroll through the list and find my project missing. I felt the same for the sci-fi contest. Oh well, that's the way it is. Maybe someday.
With my prime motivation for this project gone, I'm wondering where to take things. I'm not just going to drop it. No, in fact I'm hoping that it will be even better than I was planing because now I'm free to change it in any way I want. And for those few people who were kind enough to follow this, I'll try to make it worth your time to click the occasional link buried in your feed.
I just got back from a trip oversees and jetlag sucks, so I don't think I'll be getting much done this weekend. This is just a note to tell the internet that this project didn't just die after being cut from its sweet sweet motivational nectar thing... stuff.
08/12/2014 at 04:24 •
Here is the second video, which covers the current prototype progress and the next steps and goals.
And here is the official system design document:
This document contains all sorts of information concerning the design concept, components list, current progress, plans and goals, links to code and resources, and license information. That's a lot of stuff.
I believe that this project has completed all requirements for the hackaday prize quarterfinal round. If you notice something I missed, please let me know before it is too late.
Thanks for your support.
08/11/2014 at 13:55 •
I've got the first concept video made. Here it is.
Now that I've had a chance to test out the software a bit, I've refined the model(I'll call the social aspect of the programming "the model") and added some more features. Also, I finally got around to setting up a github account, so I'll be putting the code files there: https://github.com/shlonkin/SocietyOfThings
As for the description, it's becoming a really complex model, so instead of boring you with an endless text description, I'll keep it as concise and graphical as I can.
First, some terminology and basic points.
- "exchange" = two nodes exchange sensor data, either about themselves or a third party node.
- "propose" = two nodes propose to enter either a friend or enemy relationship.
- "ignore" = When a node receives a message, there is a chance to not reply.
- "lie" = during certain exchanges there is a chance to send false sensor data.
- Each node has three personal parameters: confidence, honesty, and desire to socialize.
- Each node has four parameters for each of the other nodes(four x nodeCount total values): affection, trust, perceived social status, and relationship.
Then let's look at what an interaction is like. When a node has a turn to speak, it has the following possibilities.
When a node receives a message, it has the following possibilities.
I hope that this was not too hard to follow. Feel free to ask me any questions. If you are adventurous and have mountains of spare time, you could work your way through the code and figure it out on your own.
08/08/2014 at 14:32 •
The parts arrived and I immediately set to work making the first node. This log will highlight the construction process.
I had a beautiful stroke of luck. Those solar keychain lights from the 100 yen shop(dollar store), from which I love to harvest 5V solar panels and rechargeable coin cells, just happen to provide the perfect enclosure for this project. Here's what the keychains look like new.
That square button on the back is exactly the size of an 8 pin DIP socket and the three LED holes are just right for sticking the IR receiver, LED and light sensor through. And to top everything off, when all the components are removed from the green pcb except for that sophisticated charge controller(a diode), a piece of protoboard of just the right size fits snugly in place. Also notice the small 100uF cap next to the battery.
Then I just snap it back together and it's done. You can see the ATtiny85 sticking out of the button hole on the back along with the thermistor. This allows me to pop the chip out for programming without even opening anything. This is all just too convenient.
And since I obviously had to decide on resistor and capacitor values, I've updated the schematic to include more info. (EDIT: I had the sensor names backwards)
08/05/2014 at 13:20 •
I'm getting pretty excited about this. I was just watching the data scroll by as two nodes happily conversed and saw some interesting interdependencies in their parameters. This is exactly the kind of thing I was hoping for. But before I get carried away, this is just a very preliminary test and things should get much more interesting as the project develops. Anyway, on with the log.
I wrote version one of the software for both the nodes and the monitor. Most of the bugs seem to be worked out of it and the nodes are communicating with acceptable reliability, so I'll release this version of the code. Keep in mind that this code will be changing a lot and I will update the files whenever I make substantial progress.
- SocietyNode.ino - The node.
- SocietyMonitorUSB.ino - The monitor, which also joins the conversation as a node. This version communicates via usb and prints lots of data for debugging purposes.
Also, if you try to use these with the Arduino IDE, you will run into an error for the ATtiny85. It's because Arduino is using an outdated version of the compiler. Don't worry, this has been fixed and all you have to do is replace one file buried deep in your arduino folder. Here is the file(for Windows): tinyPCRELpatch.zip Thank you to the person on the Arduino forums who discovered this fix. Just follow the same folder structure as in the .zip and you'll find the right file.
For testing I just stuck everything on a breadboard and bounced the signals off the wall. There are no sensors here because they haven't arrived yet. Here's the setup:
I drew up a simple schematic for the nodes. Notice that the resistor values are not shown. This is because I'm still waiting for some of the parts to arrive and I want to try them out to get a feel for what values will work best.
07/31/2014 at 13:12 •
I have ordered enough parts for 10 nodes, though I don't know if I'll actually make that many. I think I'll start with just three or four and if things work well I'll make more. The controller is an ATtiny85. The sensors at this point are a thermistor and a photoresistor and I have one more open pin on the controller in case I want to add something else.
I've also begun coding. I got the basic stuff mostly out of the way, like the IR communication. The 38kHz carrier wave is made by a timer and the rest is bit banged with timing similar to the NEC remote control protocol. I doubt any other remote controlled stuff in the room will react, but I may have some trouble turning on the TV.
Right now I'm figuring out the social interactions. Specifically, I'm thinking about the parameters and how they affect and are affected by interactions. Nothing is completely set yet, but I'm thinking of the following. I'm sorry if this looks like an indecipherable wall of text. Things will be better described once they are set.
*Note: exchange means exchanging environmental data. Propose means to propose friendship or enemyship, default relationship is neutral.
Personal parameters: confidence, honesty, desire to socialize
Parameters concerning each of the other nodes: affection, trust, perceived social status, relationship
Parameters affect conversation in the following ways.
- confidence: higher values mean more exchanges are about self and higher chance to propose.
- honesty: lower values mean higher chance and magnitude of sending false self data
- desire: higher values mean more frequent exchanges and lower chance to ignore
- affection: more frequent exchanges and less chance to ignore nodes with high affection. When affection is high enough, there's a chance to propose/accept friendship. When low, same for enemy proposals.
- trust: lower values mean more frequent exchanges with 3rd parties about this node(gossip). Higher values mean lower chance of sending false data to this node.
- status: still working on this, but this is where environmental input is important
Parameters are affected by conversation in the following ways.
- affection: increased by successful exchanges and when enemy proposal is rejected
decreased by ignored exchanges, upon discovering false data and when friendship proposal is rejected
- trust: increased by verifying true data with 3rd party exchanges
decreased by discovering false data with 3rd party exchanges
- status: increased when other's environmental parameters are closer to ideal and when others are in friendly relationships
decreased by opposite of above
- relationship: can be neutral, enemy, or friend. It is changed by accepting proposals.
Parameters affected by environment:
- confidence: related to light intensity (wealth)
- honesty: related to temperature (comfort)
I have thought of writing up a set of equations intertwining everything(imagine a far less elegant set of Maxwell's equations), but there is nothing yet.