Servo Endschaltermodul
hallo zusammen,
ich bin zur zeit leider völlig überfordert. für ein projekt benötige ich eine elektronik, welche mir erlaubt ein servosignal eines rc-empfängers (ppm ca.50 hz, 900-2100us, mittelstellung 1520us) auszulesen und dieses unverändert ein servo weiterzugeben, es sei denn einer der zwei endschalter wäre aktiviert. in diesem fall sollte das modul nur die jeweils andere richtung (d.h. nur noch ppm signale, welche grösser resp. kleiner als 1520us) den ausgang weitergeben. diese module gib es bereits günstig fertig zu kaufen (cti endschaltermodul 2). leider ist dieses modul jedoch für eine mittelstellung von 1500us vorgesehen, es in zusammenhang mit einem endlos drehenden servo leider nutzlos macht. konkret dreht ein servo einen zahnriemen stark untersetzt an. beim erreichen der endpunkt werden endschalter ausgelöst. das ganz problem dürfte mit einem arduino relativ leicht zu beheben sein, sofern man denn programmieren könnte:) - ich leider nicht kann. darf ich euch bitten mich bei diesem nicht kommerziellen, privaten projekt zu unterstützen?
für eure hilfe wäre ich extrem dankbar.
freundliche grüsse aus der schweiz,
florian
ich bin zur zeit leider völlig überfordert. für ein projekt benötige ich eine elektronik, welche mir erlaubt ein servosignal eines rc-empfängers (ppm ca.50 hz, 900-2100us, mittelstellung 1520us) auszulesen und dieses unverändert ein servo weiterzugeben, es sei denn einer der zwei endschalter wäre aktiviert. in diesem fall sollte das modul nur die jeweils andere richtung (d.h. nur noch ppm signale, welche grösser resp. kleiner als 1520us) den ausgang weitergeben. diese module gib es bereits günstig fertig zu kaufen (cti endschaltermodul 2). leider ist dieses modul jedoch für eine mittelstellung von 1500us vorgesehen, es in zusammenhang mit einem endlos drehenden servo leider nutzlos macht. konkret dreht ein servo einen zahnriemen stark untersetzt an. beim erreichen der endpunkt werden endschalter ausgelöst. das ganz problem dürfte mit einem arduino relativ leicht zu beheben sein, sofern man denn programmieren könnte:) - ich leider nicht kann. darf ich euch bitten mich bei diesem nicht kommerziellen, privaten projekt zu unterstützen?
für eure hilfe wäre ich extrem dankbar.
freundliche grüsse aus der schweiz,
florian
spezifisch für alle rc anwendungen wurde die arduino rc lib entwickelt. http://sourceforge.net/projects/arduinorclib/
so wie ich das verstehe würde mir dieser beispielcode:
nun schon das ein-/ und auslesen der ppm werte übernehmen. ppm input ain0 pp servooutput digout2. ist dies richtig oder bin ich total auf dem holzweg?
wie baue ich nun einfachsten die "endschaltergeschichte" ein?
grüsse
florian
so wie ich das verstehe würde mir dieser beispielcode:
code: [select]
/* ---------------------------------------------------------------------------
** software in public domain, furnished "as is", without technical
** support, , no warranty, express or implied, usefulness for
** purpose.
**
** servoout_example.pde
** demonstrate servo signal output functionality
**
** author: daniel van den ouden
** project: arduinorclib
** website: http://sourceforge.net/p/arduinorclib/
** -------------------------------------------------------------------------*/
#include <outputchannel.h>
#include <servoout.h>
#include <timer1.h>
#define servos 1
uint8_t g_pinsin[servos] = {a0}; // input pins
uint8_t g_pinsout[rc_max_channels] = {2}; // output pins, needs rc_max_channels in size, other values 0
// servoout requires single buffer of rc_max_channels size output pins
rc::servoout g_servoout(g_pinsout);
void setup()
{
// initialize timer1, required features use timer1
// (ppmin/ppmout/servoin/servoout)
rc::timer1::init();
for (uint8_t = 0; < servos; ++i)
{
// set input pins
pinmode(g_pinsin[i], input);
// set output pins
pinmode(g_pinsout[i], output);
// put them low
digitalwrite(g_pinsout[i], low);
// fill input buffer, convert raw values normalized ones
// we'll need cast our iterator outputchannel, ugly safe
rc::setoutputchannel(static_cast<rc::outputchannel>(i), map(analogread(g_pinsin[i]), 0, 1024, 1000, 2000));
}
g_servoout.start();
}
void loop()
{
// update input buffer
for (uint8_t = 0; < servos; ++i)
{
// fill input buffer, convert raw values normalized ones
rc::setoutputchannel(static_cast<rc::outputchannel>(i), map(analogread(g_pinsin[i]), 0, 1024, 1000, 2000));
}
// tell servoout there new values available in input buffer
g_servoout.update();
nun schon das ein-/ und auslesen der ppm werte übernehmen. ppm input ain0 pp servooutput digout2. ist dies richtig oder bin ich total auf dem holzweg?
wie baue ich nun einfachsten die "endschaltergeschichte" ein?
grüsse
florian
Arduino Forum > International > Deutsch (Moderator: uwefed) > Servo Endschaltermodul
arduino
Comments
Post a Comment