-
TheSixthSense as a gift
07/23/2016 at 10:29 • 0 commentsThere are no real engineering new's on this project.
But I wrote a organisation for blind people to find a person who could wear this anklet and give me some test feedback.
So, I gifted my anklet away...
The results are: While he was walking he has to concentrate on his blindman's stick and couldn't "read" the information from the anklet at the same time. But he managed this with short stops to get the compass information. He find this additional information really interesting.
It feels good to help people in there difficult situations!
-
artist's rendition
09/20/2015 at 18:41 • 0 commentsThanks to my buddy Robby I can present an artist's rendition of the sixth sense.
A bunch of vibration motors:
A sixth sense without battery?The sewn anklet with an extra pocket for the PCB:It's easy to put the sixth sense on:
It's not so easy to do a three point blind walk :)
-
Add sleep mode
09/06/2015 at 21:13 • 0 commentswoohhhooo... My project made it into the Top 100 chosen semifinalists. How great is that?
A big thanks to all supporters and especially a big big thanks to Reiner for his video support (coming soon) and Reinhard for his English lessons and video support :)
I have recently added a new software feature: a sleep mode when the battery gets low. This is important to improve the overall battery lifetime. Of course, a good battery like the one I use has a deep discharge protection. Unfortunately the protection trigger is a bit late ( ~ 3 V). It's always a good idea not to discharge a Lithium-Ion battery below 3,4 V.
For TheSixthSense PCB it's of major importance to use a LDO with a very low Input Quiescent Current. The Microchip MCP1700 is a good and cheap solution. The 2,5 V version has a typical Iq of 1.6 µA and at higher temperature only 4 µA @ Iout = 0 A.
The next crucial part is a good schematic design. You should design a voltage divider to measure the battery voltage with a "disconnect function". A P-MOS at the positive voltage rail of the resistor divider is used here.
The main advantage of parts that have good sleep modes is that they don't need to be disconnected from the voltage supply. Like the LSM303D and the ATXMega32E5:
LSM303D: Current consumption in power-down IddSL = 1 µA typ.
Atmel ATXMega32E5: from Datasheet Figure 37-17. Power-down Mode Supply Current vs. Temperature -> @ 25 °C, ~2,5 V => 0.15 µA (no Watchdog, no POR, no RTC)
Okay, there are 0.15 µA + 1.6 µA + 1 µA = 2.75 µA in theory.
How is it in practice?
It’s not so easy to measure those low values, but I measured it with my cheap and out of range multimeter (2000 µA range). The result is a toggling value between 2 and 3 µA ! :)
You can easily verify this reading with 1 Meg Ohm +- 10 % resistor as additional parallel load.
Toggling 2 to 3 µA reading:
verify the multimeter reading with an additional 1 Meg Ohm load (2,5 V / 1 Meg Ohm = 2,5 µA additional):
~ 2.5 µA current consumtion is almost low enough because a LiPo has a standard self discharge current in this region and higher.
Check out my new git commit for the software update…. -
System Design
08/15/2015 at 10:37 • 0 commentsIn Germany we say: "Die Sprache des Ingenieurs ist die Zeichnung"...
"the language of the engineer is a drawing"... or so :)
-
v1.3 PCB components list
08/10/2015 at 18:00 • 0 commentsTheSixthSense v1.3 components list; date 10.08.2015 Quantity Value Mouser Part Number Device Part 1 10-XX 688-SKSCLAE010 10-XX S3 2 PINHD-1X1 538-22-28-8020 PINHD-1X1 JP1, JP2 8 0R 667-ERJ-3GEY0R00V R-EU_R0603 R13, R19, R22, R25, R28, R31, R34, R37 3 1u 80-C0603C105K8P C-EUC0603 C2, C4, C11 2 4k7 667-ERJ-3EKF4701V R-EU_R0603 R9, R14 4 4u7 80-C0603C475K8P C-EUC0603 C3, C8, C9, C12 23 10k 667-ERJ-3EKF1002V R-EU_R0603 R2, R3, R4, R5, R7, R8, R10, R11, R12, R17, R18, R20, R21, R23, R24, R26, R27, R29, R30, R32, R33, R35, R36 4 100R 667-ERJ-3EKF1000V R-EU_R0603 R1, R6, R15, R16 2 100n 80-C0603C104K4R C-EUC0603 C1, C5 2 220n 80-C0603X224K4R C-EUC0603 C6, C7 1 10118193-0001LF 649-10118193-0001LF MOLEX-47346-0001 USB1 1 ALPSSSSS811101 688-SSSS811101 ALPSSSSS811101 S1 1 ATXMEGA32E5-AU 556-ATXMEGA32E5-AU AVR_XMEGA_E U1 1 F0603E0R25FSTR 581-F0603E0R25FSTR PMS1812 F1 1 IRLML 5203 942-IRLML5203TRPBF IRLML5203 Q1 2 KPGA-1602CGC-KA 859-LTST-S270KGKT APA1606SURCK U6, U7 1 LSM303D 511-LSM303DTR LSM303D U3 1 MCP1700T-2502E/TT 579-MCP1700T2502E/TT XC6206P332MR U4 1 MCP73831 579-MCP73831T-2ATIOT MCP73831 U2 1 MICROMATCH-16SMD 571-8-2178711-6 MICROMATCH-16SMD X1 1 PDTC114YT 771-PDTC114YTT/R BC848ALT1SMD Q2 8 PMEG4010ETR 771-PMEG4010ETR115 MBR0520LT D1, D2, D3, D4, D5, D6, D7, D8 8 Si2302CDS 781-SI2302CDS-E3 BSS123 Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10 1 MICROMATCH-16SMD-Plug 571-8-215083-6 See also "COMPONENTS"-Section at this project page to don't miss a part.
-
Video and program flowchart
08/09/2015 at 11:28 • 0 commentsHey... my quarterfinals video is done.
Here it is:
I made also a nicely looking gliffy flowchart for the ATXMega32E5 microcontroller program.
I will also add a part list for all components of TheSixthSense PCB v1.3 this week.
I think that's all for the quarterfinals entry!?
All licence are documented at github. -> It's for the µC program the Atmel ASF licenes plus my GPLv2 on top and the PCB is a open hardware GPLv2 too.
-
PCB version 1.3
08/03/2015 at 16:37 • 0 commentsI am afraid I am running a bit out of time for the quarter finals. :-/
I have received the PCB version 1.3 from OSH Park and cut down my old stencil in two parts to solder the most parts (especially the LGA-16 package) in my reflow oven. It looks complicated but it was working like a charm! The hinted pasting process:
My mouser order was arriving right in time and I added the new push button, main power switch, fuse and micro-match connector.
I spend half an hour to try to fiddle the micro-match connectors together until I was realizing that I have ordered a micro-match ribbon connector for direct soldering. Unfortunate, but then again it was my first project with micro-match parts.
Obviously wrong for TheSixthSense project:
Correct (but must be a 16 pin type):
I was also adding two cutted 90° pin-headers for the battery connection. The battery fits well but must be hold with a zipties in place since I haven’t designed a well fitting case. The new colorful ribbon cable with the vibration motors looks a bit like art.
I hope I will receive my new mouser order tomorrow and can start with the 2 minutes video for the contest and more importantly, I could test the new software functions, like starting the calibration process with the new push button interaction. -
adding more features
06/21/2015 at 08:42 • 0 commentsBefore I switch over to a Bluetooth Low Energy solution I was ordering a new PCB (v1.3 see on github) with some added features:
- main power switch to fully disconnect the battery
- 250 mA fuse to make sure the anklet can’t be aflame
- a small push button to start calibration process and future use
- new “battery connector”/pin headers in position with Nokia 2600 battery terminals
- micro match connector to disconnect the motors if needed
I hope I will get the order from oshpark.com in three weeks (shipping time to europe). I will use my old stencil to get only the LSM303D on the board the other components could be easily added by soldering iron.
It’s interesting if the battery directly under the magnetometer IC is a problem. It should depend on the potential reservoir of ferromagnetic materials in the lithium battery.
Has anybody experience with that? -
add eight motor support
06/16/2015 at 06:08 • 0 commentsThrough ebay I was able to purchase 30 additional motors from China. Before that point, I used to order the vibration motors from the following link: http://www.seeedstudio.com/depot/Mini-vibration-motor-20mm-p-2300.html. The seeedstudio order is more reliable but a lot more expensive. By chance, the ebay motors seem to be from the same kind. There are some small differences with the DC resistance between each motor and also the resistance is changing after rotation. Maybe it's an indication for decreased commutator quality?!
Changing Hard- and Software at github
I have tagged the four motor version in source code and in design at github. If anyone has already started to build the old version, you could still use the correct (older) versions:
TheSixthSense_XMega is tagged with V1.0
TheSixthSense-PCB is tagged with V1.1
I would prefer to use the newest version with eight motor support.
Whats new
There aren't so many (eight / 16 bit) PWM Pins on a XMegaE, because I2C data- and clock line is blocking two PWM pins. Thats no problem cause the pwm resolution doesn’t need to be very high. Its enough to have 32 steps to adjust the vibration force to your needs.
I changed the hardware PWM to a software BAM (http://www.batsocks.co.uk/readme/art_bcm_3.htm)
Here is my implementation to init a timer with 4 compare interrupts an overflow interrupt using the Atmel Software Framework:
#define TIMER_RESOLUTION 500 // 250 HZ at 2 MHz and div = 8 //init BAM with one timer to supply 8 motors with 250 Hz void init_bam(void) { /* Unmask clock for ... */ tc45_enable(&TCC4); /* Configure TC in normal mode */ tc45_set_wgm(&TCC4, TC45_WG_NORMAL); /* Configure period equal to resolution to obtain 250Hz */ tc45_write_period(&TCC4, TIMER_RESOLUTION); //no cc outputs TCC4.CTRLE = 0; //bam timing -> 5 Bit possible with ovf vector tc45_write_cc_buffer(&TCC4, TC45_CCA, TIMER_RESOLUTION >> 4); tc45_write_cc_buffer(&TCC4, TC45_CCB, TIMER_RESOLUTION >> 3); tc45_write_cc_buffer(&TCC4, TC45_CCC, TIMER_RESOLUTION >> 2); tc45_write_cc_buffer(&TCC4, TC45_CCD, TIMER_RESOLUTION >> 1); tc45_set_overflow_interrupt_callback(&TCC4, ovf_interrupt_callback); tc45_set_cca_interrupt_callback(&TCC4, cca_interrupt_callback); tc45_set_ccb_interrupt_callback(&TCC4, ccb_interrupt_callback); tc45_set_ccc_interrupt_callback(&TCC4, ccc_interrupt_callback); tc45_set_ccd_interrupt_callback(&TCC4, ccd_interrupt_callback); /* * Enable TC interrupts */ tc45_set_overflow_interrupt_level(&TCC4, TC45_INT_LVL_LO); tc45_set_cca_interrupt_level(&TCC4, TC45_INT_LVL_LO); tc45_set_ccb_interrupt_level(&TCC4, TC45_INT_LVL_LO); tc45_set_ccc_interrupt_level(&TCC4, TC45_INT_LVL_LO); tc45_set_ccd_interrupt_level(&TCC4, TC45_INT_LVL_LO); /* * Run */ tc45_write_clock_source(&TCC4, TC45_CLKSEL_DIV8_gc); }
As you can see it’s rather easy to setup the timer with ASF support.
Before you could call this function you should define the callback functions for the interrupts. The source code for every interrupt callback is mostly the same. You have just to define which bit should be modulated:
static void ovf_interrupt_callback(void) { soft_bam_process(0x01); tc45_clear_overflow(&TCC4); } static void cca_interrupt_callback(void) { soft_bam_process(0x02); tc45_clear_cc_interrupt(&TCC4, TC45_CCA); }
...and so one.
The function soft_bam_process turns on and off all the motors you could add and you could add so mutch motors you have free digital pins.
Lets take a look in this function:
void soft_bam_process(uint8_t bitmask) { //error if adding motors without changing source #if(MOTOR_NUM != 8) #error (add more motors here) #endif if(motor_soft_bam[0] & bitmask) { gpio_set_pin_high(M1_O); } else { gpio_set_pin_low(M1_O); } if(motor_soft_bam[1] & bitmask) { gpio_set_pin_high(M2_O); } else { gpio_set_pin_low(M2_O); }
Its good to have some precompiler errors if you try to add more motors and forgot to map this motors to there gpios. The motor_soft_bam array is the new compare register array you could change from the main loop. If you set one 8 bit value to zero the corresponding motor will not vibrate. A value of 31 turns on all bits and you will have the full DC voltage from the battery at the motor pins. The processing power to map the bits to their corresponding gpios is very light.
Result
In theorie accuracy of the cardinal direction could be maximum ± 22.5 ° with eight motors. But there are some additional errors:
- positioning of the motors at the anklet
- sensitivity of the shin/skin
- reading and filter errors from sensor or software
Nevermind, I like the eight motor version. It is a lot more accurate than the four motors version. You could really feel the huge differences to the old version.
TODOs
It’s a good idea to make this anklet a bit smarter and more useful for people without a debugger. Of course the solution in this year is bluetooth low energy. TI has a new BLE Processor, this time with a Cortex M3 on the chip. I liked the old Sensortag from TI a lot and I have a hole bunch here but I never reprogrammed it because of the old 8051 microcontroller core (free compiler problem). Things changed and TI was releasing the CC2650 this days.
The new Sensortag has a 9D Sensor (MPU-9250) and an extension header… Enough to control the motors direct from the Sensortag CPU…
I will order a Sensortag and test this out...