Submitted by shutterdrone on Mon, 04/12/2010 - 14:51
Posted in
Guys, let's get started on a list of goals for a 1.0 version of the Engine.
I'll keep the list of what we agree on organized in this post, please respond with what you'd like, why you'd like it, and how you intend to use it.
1.0 Goal List:
- Support for basic UI elements to control the engine directly (non-serial)
- e.g.: A handful of buttons that can be mapped to different parameters
- e.g.: A small character LCD for displaying values/inputs
- Support for selecting ALT I/O or SoftwareSerial support
- Make it such that through #define use, one can choose whether to have an ALT I/O pin, or a software serial interface - trade-off between ALT I/O and direct control by things like Touchshield Slide

I'd like to see the
I'd like to see the following:
!c
"Tie to bulb ramping for DC
"Tie to bulb ramping for DC motor control such that when interval increases"
-Oh wow! Have I told you lately... you're the man!
Jay, one of the first things
Jay, one of the first things that jumped out at me about bulb ramping, was that it just couldn't be used with a continuous motion system unless the motion system was aware of the exposure time and adjusted accordingly. Otherwise, as night hits - not only do the clouds start speeding up, your dolly move goes rocketing off at warp speed!
!c
I still want to create
I still want to create CamBlock like boxes for my motors. A basic block can be made with two u-profiles folded from aluminium. The box will hold a battery (Lithium Ion or Lithium Polymer), charge electronics, stepper controller etc. This will make the system scalable, runtime is not effected by the amount of motors used because every motor holds its own battery. I don't want to include an on/of switch on the boxes. The Arduino should be able to power on/off the boxes. I am currently working on some simple electronics that charges the battery when external power is provided, else the battery will power the box. This electronics will also include a FET that I want to use as on/of switch. I also want to include an automatic power shutdown when the batteries are drained too much.
This setup requires at least one free pin (to power on all connected boxes) or a free pin per motor when the power should be regulated per box. I could for example use the "set motor on" command as command that powers on the box.
This is all easy to implement. The electronics is very basic, setting the power on pin to HIGH is even easier :-).
I am running out of pins. That is why I have chosen to go for the Mega board.
Could we make this functionality available in the core code for people that need it and use a Mega?
Cronix, We'll need to make
Cronix,
We'll need to make sure it still runs on the basic arduino, or have to start using #ifdef's heavily in the code. The mega, even the off-brand ones, are still quite a bit more expensive in the U.S. than the regular ones.
I highly suggest using SPI for what you're talking about. Each device could daisy-chain into the next (like Camblocks), and you can control up to 16 pins with a 3 or 4-pin SPI connection. Alternatively, i2c works very well too - but requires more difficulty and a more expensive buffer chip at each connection.
You can simply send an SPI command that toggles a particular pin on the remote device to turn it on. If that device had a simple buffer chip, it could run your FET or whathaveyou, to enable/disable power.
Many of the multiplexers also support 2-wire normal serial, so you could just use SoftwareSerial and two pins! If you look at the ADG738 from Analog, you'll note that it's a fairly inexpensive way to drive 8 pins from 2.
You would also be able to daisy-chain dozens of them, using only three-four pins =) I've been talking to Brian Schmalz (the easydriver developer) about productizing the quad driver he developed, and that's how it works: SPI + Daisy Chaining = a lot less pins. He's tested up to 64 steppers at a rate of > 1,000 steps/sec with no issues.
You should already have the three pins available though, if you're just running steppers and camera. I have six pins unused on my regular arduino.
Let me wrap back around though, and talk about how to enable you in your journey as part of the engine, without changing your hardware design.
Would you say it's worthwhile to add a feature to support individual stepper kill lines? 0.82 already has a shared line, and properly brings it low/high (configurable) before and after making moves, and works quite well. The additional feature would be to add motor-specific kill lines to the engine. Not hard at all, and there would be no issue with conflicting pin definitions on the non-mega if one doesn't choose to use it.
!c
I currently have no knowledge
I currently have no knowledge about SPI at all. I just looked at some sites in order to check what its all about. The idea sounds great and would enable me chain blocks just as the CamBlocks. I have no idea about how to work with SPI in combination with my FET. It can be done; you convinced me :-). The ADG738 doesn't look too complicated to use.
I thought about using individual kill lines too. But I thought it would be better to keep the block powered on in combination with the kill lines. For me power on/off is not the same as killing the drivers.
Are you going to SPI way? I can fit my design to go with that. I need my time for the TouchShield UI anyway :-). I am concentrating on the electronics and software for now.
Any information about Daisy Chaining and SPI would be appreciated by the way.
Input to move the unit to a
Input to move the unit to a start/home position, could use a joystick for this. A start button would be useful.
I will implement a joystick
I will implement a joystick next to my TouchShield. The basic TouchShield unit consists of only the Arduino and the TouchShield. Thats the most cost effective version which is v1.0 (when finished). My version will have a joystick and an accelorometer. Just for the fun of it :-). Just tilt the unit and move the motors anyway you like.
Another additional feature will be wireless communication between the TouchShield and the engine. I will start to experiment with that soon. This can be dirt cheap, complete units are available for around 35 euros.
OK, I think we can tie all of
OK, I think we can tie all of the human control up under 'basic UI support' - where a user can have buttons, etc. to control basic parameters. Then, we could map what controls what.
For the joystick -- I take it you guys would like asynchronous stepper control? I don't know how you could effectively control the steppers via a joystick in real-time without it. I.e., one has to both poll the 2-4 analog pins representing a joystick, and make changes to the currently-moving motor on the fly. That is, if the user presses further to the right, it should move faster, and if the user lets off the JS, it should immediately stop.
EDIT: I haven't forgotten about SPI questions btw =) I like the idea of driving steppers via SPI, but also still supporting direct step/dir controls for those who want them. Although I think it can only work as a decision at compile-time (well, and still be efficient =) -- having the option there is very important to me.
!c
Chris - asynchronous stepper
Chris - asynchronous stepper control would be great to implement this directly on the engine. But I will put my joystick on a separate Arduino next to the Slide and need support for that too.
I am starting to like the SPI way. Do you have any plans to publish SPI schematics soon from now?