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

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:

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

Popular posts from this blog

opencv3, tbb and rasp pi 2 - Raspberry Pi Forums

small ethernet problem - Raspberry Pi Forums

Multithumb configuration params not working? - Joomla! Forum - community, help and support