author
3Instructables13,125Views28CommentsAutomation engineering @ Politecnico di MilanoJoined May 5th, 2016
3d printing, electronics, programming, automation. Currently studying automation engineering at Politecnico di Milano. The profile picture is some years old. Maker of RapidoTreno: https://appworld.blackberry.com/webstore/content/59998595/?countrycode=IT&lang=it

Achievements

10K+ Views Earned a bronze medal
Design Now: 3D Design Contest 2016
Contest Winner Runner Up in the Design Now: 3D Design Contest 2016
Show 1 More »
  • Simo_Dax commented on funelab's instructable Arduino Air Bonsai Levitation13 hours ago
    Arduino Air Bonsai Levitation

    Unrelated question: what's your floating magnet size? Mine is 35x10 mm and I have a feeling it's too big/heavy..

    View Instructable »
  • Simo_Dax commented on funelab's instructable Arduino Air Bonsai Levitation21 days ago
    Arduino Air Bonsai Levitation

    Hi,I've tried limiting the pwm. It heats up to an acceptable temperature as expected, but I wasn't able to tune the PID to keep the magnet floating (I have a 50x10mm disc). I'm trying to understand why, I've been reverse engineering models identical to this one that are sold on aliexpress (I have proof they're not scam since there are videos showing them work), and they're rated 0.2 A, so the fault is certanly not the limitation on the PWM

    View Instructable »
  • Simo_Dax commented on funelab's instructable Arduino Air Bonsai Levitation8 weeks ago
    Arduino Air Bonsai Levitation

    I don't know why you need them, but you can count them from the photos on aliexpress

    View Instructable »
  • Simo_Dax commented on funelab's instructable Arduino Air Bonsai Levitation3 months ago
    Arduino Air Bonsai Levitation

    Yes, if the design will turn out to be quite different from this one I'll consider making an instructable, for clarity

    Hey there, engineering student here!I'm making one these days and I clearly see the issues this design has, the first thing i would try is adding a 10 ohm resistor in series to each coil pair. It will:1) Lower the current, thus avoiding melting stuff around :)2) Reduce the time constant (L/R) of the coil circuit, making it respond much quicker to the pwm signal, helping stabilize the system3) Unluckily, it will also lower the magnetic field generated by the coils, which is direcly proprtional to the current. I'm confident, though, that it's not much of an issue as these coils are the same ones used in pre-built ready to use boards to make floating stuffThe MAX power draw from the supply should be around 17 watts with the resistor. Without it it's way higher, I've checked with a tester a...

    see more »

    Hey there, engineering student here!I'm making one these days and I clearly see the issues this design has, the first thing i would try is adding a 10 ohm resistor in series to each coil pair. It will:1) Lower the current, thus avoiding melting stuff around :)2) Reduce the time constant (L/R) of the coil circuit, making it respond much quicker to the pwm signal, helping stabilize the system3) Unluckily, it will also lower the magnetic field generated by the coils, which is direcly proprtional to the current. I'm confident, though, that it's not much of an issue as these coils are the same ones used in pre-built ready to use boards to make floating stuffThe MAX power draw from the supply should be around 17 watts with the resistor. Without it it's way higher, I've checked with a tester and the coil windings roughly have a 3.5 ohm resistance.. so it would be 42 watts, higher than the supply rating used in the project (that's why some people burned it)The downside is that a power resistor (rated at least 10w) is needed, common ones can't handle so much power, and it will heat up as well.A simpler solution would be to limit the PWM duty cycle in order to limit the average voltage fed to the coils. It would for sure help with point 1). It can easily be done by changing the two lines in the setup function to PID_X.SetOutputLimits(-127,127) and PID_Y.SetOutputLimits(-127,127). Why 127? Because it would roughly draw the same power as if you added the resistor.I culd have explained more in depth about how I did my maths but I think it's getting quite a long comment and I don't even know if anyone will read this :)Anyway, for now I'm following the second option. If you try it, feedback is appreciated! :DUPDATE: I've made some thermal calculations, If you limit the current to 0.4A (-> Max pwm output: 102) the coils will heat up to about 68°C. (I've also tested this one). If you're willing to go higher, 0.5A heats to 85°C, 0.6A to 108°C.

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    No, call it whatever you want

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    You pasted in the line numbers too, remove them.

    It's fine, don't worry

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    There's no metal plate, it's just the rotating part rendered with a different colour

    Yep, you can but both from that same link

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    Whoops, links fixed. You could buy them on ebay.co.uk if you want to avoid an international shipping or, more conveniently, go to a local electronics store and you won't pay any :) By the way, the 10uF is an electrolytic one, it's cylinder-shaped, the 0.1uF depends, the cheapest is a ceramic one, it looks like a small coin with legs.

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    Sorry man, I hadn't seen your answer. Have you solved?

    replace the spin() function with this: https://gist.github.com/SimoDax/fdf0b3b72566efea0c...It just runs twice the standard spin code, the first time is the same, the second reads the lookup vector backwards so the motor spins the other way

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    Step 1 updated, you can find the digispark code there

    Hm, i see many prefer the Arduino way >.<I'll add myself the code to be used inside the Arduino ide, so future people will find it directly in the instructable

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    Heh, that's why i went straight for avr-c instead of using libraries. You need to wait when you are sure the motor is idle, that's because if the motor is spinning and you call delay(1000) the attiny will stop doing almost anything, and that includes running the code inside the customstepper library. So no movement. You could add an if(stepper.isDone()) to check wether or not kick in the delay. I know it's counterintutive, but that's how the library was written: it allows you to do other things while spinning the motor, but you need to be sure none of those things interfere. Source: https://www.arduino.cc/en/Reference/Delay "No other reading of sensors, mathematical calculations, or pin manipulation can go on during the delay function, so in effect, it brings most other activity to...

    see more »

    Heh, that's why i went straight for avr-c instead of using libraries. You need to wait when you are sure the motor is idle, that's because if the motor is spinning and you call delay(1000) the attiny will stop doing almost anything, and that includes running the code inside the customstepper library. So no movement. You could add an if(stepper.isDone()) to check wether or not kick in the delay. I know it's counterintutive, but that's how the library was written: it allows you to do other things while spinning the motor, but you need to be sure none of those things interfere. Source: https://www.arduino.cc/en/Reference/Delay "No other reading of sensors, mathematical calculations, or pin manipulation can go on during the delay function, so in effect, it brings most other activity to a halt."

    Ok, first things first. That is Arduino code, it must be used inside the Arduino ide. Mine is Avr-C, that means I'm bypassing anything Arduino-related. It's like coding at a lower level. The reason why you don't find how to set up the timer is that Arduino doesn't support it directly. You can use a much easier way tho, there's a delay(milliseconds) function which will halt the code for the duration specified. Just write delay(3600000); to wait for an hour. You should do that when you're done spinning the motors

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    I like your willingness to learn! (There's people out there who just want to have the job done by others..)Before programming chips you should probably learn a bit of pc coding in C, so if you make a mistake the program just crashes instead of blowing up a mcu :D Anyway, I've looked up the docs on the motor, it says each steps turns the shaft by 5.625° but the gears inside have a reduction ratio of 1/64, so 360° / 5.625° * 64 = 4096 steps for a complete revolution. So here's your new spin() function: https://gist.github.com/SimoDax/dd846bac3e9113093d...replace the original and you're all set.

    Oh btw if you want some starting points there are lots of good videos on youtube, but you should always keep in mind that the code is hardware dependent, some chips have some features, others don't. The manual for the specific micocontroller saves your life in this situation, always keep it beside your code. The ATtiny85, for example, is fully documented here http://www.atmel.com/Images/Atmel-2586-AVR-8-bit-M...

    Oh boy, that's a completely different approach, the current code measures time, while yours would measure angles. That means converting motor steps to actual angles and completely rewriting the spin() function. Why is that needed, if I may?

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    Hi, This project is far from perfect, as cheapiness was the main goal, but thank you, I'm glad you like it! As for the movement well, if you need to need to reverse the spinning direction just change the line PORTB = lookup[i]; into PORTB = lookup[7-i]; this way the array containing the steps is read backwards. I don't see the need to spin both ways once you know the direction your watch uses to charge itself, it'd just make the code messier - do you want to keep the same charging time? Double it? Or reverse the direction every other cycle? There are many options. I'd stick with either cw or ccw solution

    View Instructable »
  • 3D Printed Watch Winder (ATtiny85+Stepper)

    Thank you!Well, if you are new to these things and you don't have something to program the attiny with things may get a bit more expensive as a decent programmer costs around $20, and that's the price of an arduino too. I have no experience with the cheap chinese ones, I can't tell you if they work. Anyway I'll add some ebay links for the items

    View Instructable »
  • Simo_Dax's instructable 3D Printed Watch Winder (ATtiny85+Stepper)'s weekly stats: 2 years ago
    • 3D Printed Watch Winder (ATtiny85+Stepper)
      995 views
      31 favorites
      0 comments
    • 3D printed 10th Doctor sonic screwdriver with led
      541 views
      17 favorites
      0 comments
  • Simo_Dax followed Simo_Dax2 years ago
      • 3D printed 10th Doctor sonic screwdriver with led
      • Light up Championship Thresh figure with fire-like led light
  • Light up Championship Thresh figure with fire-like led light

    Thanks man, it almost took longer to make the instructable than making it :)

    View Instructable »
  • Sonic Screwdriver TV-B-Gone Conversion

    Sorry bothering, I'd like to save as much space as possible inside the scredriver, is there a particular purpose in adding the external 8mhz oscillator? As far as i know the attiny already has an internal 8mhz one

    The "code" you download from his link is a .hex file, that means it has already been compiled to run on the attiny. As such, you do not need any code, open the arduino IDE, go to Tools > boards > boards manager, search and install the "attiny" package.Now just open your terminal and run:C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe -pattiny85 -cstk500v1 -U lfuse:w:0xfe:m -U hfuse:w:0xdf:m -U efuse:w:0xff:mto program the fuses as him, then runC:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe -C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -pattiny85 -cstk500v1 -PCOM19 -b19200 -Uflash:w:"<path to the hex file>":iNOTE: My arduino as isp is on port COM19, dunno about yours. Chec...

    see more »

    The "code" you download from his link is a .hex file, that means it has already been compiled to run on the attiny. As such, you do not need any code, open the arduino IDE, go to Tools > boards > boards manager, search and install the "attiny" package.Now just open your terminal and run:C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe -pattiny85 -cstk500v1 -U lfuse:w:0xfe:m -U hfuse:w:0xdf:m -U efuse:w:0xff:mto program the fuses as him, then runC:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe -C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -pattiny85 -cstk500v1 -PCOM19 -b19200 -Uflash:w:"<path to the hex file>":iNOTE: My arduino as isp is on port COM19, dunno about yours. Check which port it is connected to and change "-PCOM19" to "-PCOM<your port number>" in the command above!

    View Instructable »