author
1Instructables758Views16CommentsJoined April 9th, 2009

Tell us about yourself!

Complete Your Profile
  • harristotle made the instructable Acoustic Levitator1 month ago
    Acoustic Levitator

    This doesn't work for me. I have built it, but no joy. I have checked each ultrasonic sensor by wiring a transducer across my cro leads and using it to listen to each sensor - I found 4 with very low energy output so have replaced them. I blew talc powder into the array, hoping to see a standing wave. Instead the talc either fell to the bottom or was blown out of the array by the sound pressure. Ditto small paper balls. I am running at 9v (500ma), 10v 500ma and 12v (500ma) - I don't have a nice powerpack like yours. Initially I had pins 2,3and 4 all grounded (raise, lower and reset), I have also tried them floating.I did the phasing of the array by pressing the sensor and watching on a scope. I am pretty sure that they are ok. Have you any suggestions as to what I can try next?Cheers,H.

    View Instructable »
  • harristotle commented on Gordana O 's instructable Capillary Electrophoresis 1 month ago
    Capillary Electrophoresis

    Really impressive effort ! You have massively improved on the way I used to do CE and I love your detector. One thing only - what do you think about dropping the salt concentration in your buffer? At 0.15M the resistance would be so high that you may not get 20Kv across the capillary, even if that is what it is rated at.When I did this, I used a ccv power supply for a couple of bucks with a cockroft walton voltage quadrupler and ended up with about 5kv. That struggled with food dye in DI water. Whatever, you have inspired me to go back to this. I love your detector, and am going to have a go at building one with some high impedance 5v opamps I have. I will use copper tape instead of the graphite TEM stuff that you have. Also, I plan to pull my own capillary from a 3.15ml insulin cartrid...

    see more »

    Really impressive effort ! You have massively improved on the way I used to do CE and I love your detector. One thing only - what do you think about dropping the salt concentration in your buffer? At 0.15M the resistance would be so high that you may not get 20Kv across the capillary, even if that is what it is rated at.When I did this, I used a ccv power supply for a couple of bucks with a cockroft walton voltage quadrupler and ended up with about 5kv. That struggled with food dye in DI water. Whatever, you have inspired me to go back to this. I love your detector, and am going to have a go at building one with some high impedance 5v opamps I have. I will use copper tape instead of the graphite TEM stuff that you have. Also, I plan to pull my own capillary from a 3.15ml insulin cartridge and a blowtorch, because unlike you rich Europeans, we are a bit ghetto like that around here!Fantastic job - you have inspired me!

    View Instructable »
  • harristotle commented on Asier Marzo's instructable Acoustic Levitator2 months ago
    Acoustic Levitator

    I have built one. His supplier is awesome. To put it into context, the transducers arrived from China one day before the 3d printed part I submitted online the the service down the road. The cost of product is USD67.5. for 150 transmittersThe freight is USD30.The PayPal Fee is USD5.5.I was really impressed actually. The lady I spoke with (Jenny Wang) was exceptionally helpful, and this was my first alibaba purchase. 45 cents a tranducer, 40 for 500! Amazing !

    Thanks. Duh! I can't believe I missed that. It is sort of working, and I will get onto it this next weekend!

    View Instructable »
  • harristotle commented on Asier Marzo's instructable Acoustic Levitator2 months ago
    Acoustic Levitator

    Hi. Nice Instructable.I am finding that this doesn't work, on either my nano or uno. When I put the ocilloscope onto it, I find that there is a nice 40.0 KHz signal on pin 10 of my nano (39.7KHz on my Uno), and nothing on A0, A1, A2, or A3.I am very surprised by this, as the wiring is clean, free of shorts etc. I am testing on a nano (dccduino), and ocasionally an Uno. There are no reported incompatibilities. The version of the code I used is from this instructible, and I have appended it below. Any ideas as what I should do next?Cheers, H.#include <avr/sleep.h>#include <avr/power.h>#define N_PORTS 1#define N_DIVS 24#define WAIT_LOT(a) __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__...

    see more »

    Hi. Nice Instructable.I am finding that this doesn't work, on either my nano or uno. When I put the ocilloscope onto it, I find that there is a nice 40.0 KHz signal on pin 10 of my nano (39.7KHz on my Uno), and nothing on A0, A1, A2, or A3.I am very surprised by this, as the wiring is clean, free of shorts etc. I am testing on a nano (dccduino), and ocasionally an Uno. There are no reported incompatibilities. The version of the code I used is from this instructible, and I have appended it below. Any ideas as what I should do next?Cheers, H.#include <avr/sleep.h>#include <avr/power.h>#define N_PORTS 1#define N_DIVS 24#define WAIT_LOT(a) __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop");__asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop");__asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop");__asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop")#define WAIT_MID(a) __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop");__asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop");__asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop")#define WAIT_LIT(a) __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop"); __asm__ __volatile__ ("nop")#define OUTPUT_WAVE(pointer, d) PORTC = pointer[d*N_PORTS + 0]#define N_BUTTONS 6//half a second#define STEP_SIZE 1#define BUTTON_SENS 2500 #define N_FRAMES 24static byte frame = 0;static byte animation[N_FRAMES][N_DIVS] = {{0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa},{0x9,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x6,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa},{0x9,0x9,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x6,0x6,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa},{0x9,0x9,0x9,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x6,0x6,0x6,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa},{0x9,0x9,0x9,0x9,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x6,0x6,0x6,0x6,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa},{0x9,0x9,0x9,0x9,0x9,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x6,0x6,0x6,0x6,0x6,0xa,0xa,0xa,0xa,0xa,0xa,0xa},{0x9,0x9,0x9,0x9,0x9,0x9,0x5,0x5,0x5,0x5,0x5,0x5,0x6,0x6,0x6,0x6,0x6,0x6,0xa,0xa,0xa,0xa,0xa,0xa},{0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x5,0x5,0x5,0x5,0x5,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0xa,0xa,0xa,0xa,0xa},{0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x5,0x5,0x5,0x5,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0xa,0xa,0xa,0xa},{0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x5,0x5,0x5,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0xa,0xa,0xa},{0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x5,0x5,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0xa,0xa},{0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x5,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0xa},{0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6},{0x5,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0xa,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6},{0x5,0x5,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0xa,0xa,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6},{0x5,0x5,0x5,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0xa,0xa,0xa,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6},{0x5,0x5,0x5,0x5,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0xa,0xa,0xa,0xa,0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6},{0x5,0x5,0x5,0x5,0x5,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0xa,0xa,0xa,0xa,0xa,0x6,0x6,0x6,0x6,0x6,0x6,0x6},{0x5,0x5,0x5,0x5,0x5,0x5,0x9,0x9,0x9,0x9,0x9,0x9,0xa,0xa,0xa,0xa,0xa,0xa,0x6,0x6,0x6,0x6,0x6,0x6},{0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x9,0x9,0x9,0x9,0x9,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x6,0x6,0x6,0x6,0x6},{0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x9,0x9,0x9,0x9,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x6,0x6,0x6,0x6},{0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x9,0x9,0x9,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x6,0x6,0x6},{0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x9,0x9,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x6,0x6},{0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x9,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x6}};void setup(){/* for (int i = 0; i < (N_PORTS*N_DIVS); ++i){ animation[frame][i] = 0; } for (int i = 0; i < (N_PORTS*N_DIVS/2); ++i){ animation[frame][i] = 0b11111111; } for(int i = 0; i < N_DIVS; ++i){ if (i % 2 == 0){ animation[frame][i * N_PORTS] |= 0b00000001; }else{ animation[frame][i * N_PORTS] &= 0b11111110; } }*/ DDRC = 0b00001111; //A0 to A3 are the signal outputs PORTC = 0b00000000; pinMode(10, OUTPUT); //pin 10 (B2) will generate a 40kHz signal to sync pinMode(11, INPUT_PULLUP); //pin 11 (B3) is the sync in //please connect pin 10 to pin 11 for (int i = 2; i < 8; ++i){ //pin 2 to 7 (D2 to D7) are inputs for the buttons pinMode(i, INPUT_PULLUP); } // generate a sync signal of 40khz in pin 10 noInterrupts(); // disable all interrupts TCCR1A = bit (WGM10) | bit (WGM11) | bit (COM1B1); // fast PWM, clear OC1B on compare TCCR1B = bit (WGM12) | bit (WGM13) | bit (CS10); // fast PWM, no prescaler OCR1A = (F_CPU / 40000L) - 1; OCR1B = (F_CPU / 40000L) / 2; interrupts(); // enable all interrupts // disable everything that we do not need ADCSRA = 0; // ADC power_adc_disable (); power_spi_disable(); power_twi_disable(); power_timer0_disable(); //power_usart0_disable(); Serial.begin(115200); byte* emittingPointer = &animation[frame][0]; byte buttonsPort = 0; bool anyButtonPressed; bool buttonPressed[N_BUTTONS]; short buttonCounter = 0; LOOP: while(PINB & 0b00001000); //wait for pin 11 (B3) to go low OUTPUT_WAVE(emittingPointer, 0); buttonsPort = PIND; WAIT_LIT(); OUTPUT_WAVE(emittingPointer, 1); anyButtonPressed = (buttonsPort & 0b11111100) != 0b11111100; WAIT_MID(); OUTPUT_WAVE(emittingPointer, 2); buttonPressed[0] = buttonsPort & 0b00000100; WAIT_MID(); OUTPUT_WAVE(emittingPointer, 3); buttonPressed[1] = buttonsPort & 0b00001000; WAIT_MID(); OUTPUT_WAVE(emittingPointer, 4); buttonPressed[2] = buttonsPort & 0b00010000; WAIT_MID(); OUTPUT_WAVE(emittingPointer, 5); buttonPressed[3] = buttonsPort & 0b00100000; WAIT_MID(); OUTPUT_WAVE(emittingPointer, 6); buttonPressed[4] = buttonsPort & 0b01000000; WAIT_MID(); OUTPUT_WAVE(emittingPointer, 7); buttonPressed[5] = buttonsPort & 0b10000000; WAIT_MID(); OUTPUT_WAVE(emittingPointer, 8); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 9); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 10); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 11); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 12); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 13); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 14); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 15); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 16); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 17); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 18); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 19); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 20); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 21); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 22); WAIT_LOT(); OUTPUT_WAVE(emittingPointer, 23); if( anyButtonPressed ){ ++buttonCounter; if (buttonCounter > BUTTON_SENS){ buttonCounter = 0; if (! buttonPressed[0] ) { if( frame < STEP_SIZE ) { frame = N_FRAMES-1; }else{ frame-=STEP_SIZE; } } else if (! buttonPressed[1] ) { if ( frame >= N_FRAMES-STEP_SIZE ) { frame = 0; }else { frame+=STEP_SIZE; } }else if (! buttonPressed[2] ) { frame = 0; } emittingPointer = & animation[frame][0]; } }else { buttonCounter = 0; } goto LOOP; }void loop(){}

    View Instructable »