Projet KAPduino : mon autoKAP

Les radios commandes, déclencheurs divers et variés. Les circuits électroniques et autres bidouillages.

Projet KAPduino : mon autoKAP

Messagede fxix le Dim 11 Octobre 2009, 17:15

voici livré à vous mon code pour l'autoKAP.

J'accepte toutes les critiques (surtout les constructives :roll: )

Code: Tout sélectionner
//Déclenchement apn avec Gentled + rotation PAN

#include <Servo.h>

//Affectation des broches de l'Arduino
#define APN_PIN 9 //le fil jaune du Gentled
#define PAN_PIN 8 //le fil jaune du servo de PAN
#define TILT_PIN  7 //le fil jaune du servo de TILT

//Paramètres du PAN
#define PAN_IDLE  1522 //valeur d'arret pour le servo PAN FUTABA S3003
#define PAN_SPEED   50 //vitesse de rotation du servo

//Paramètres du servo de TILT
#define TILT_HORIZON    128 // l'apn regarde l'horizon
#define TILT_BAS         47 // l'apn regarde en bas

#define TILT_INCLIN_1    15 //1ère inclinaison en degrés
#define TILT_INCLIN_2    35 //2ère inclinaison en degrés
#define TILT_INCLIN_3    65 //3ère inclinaison en degrés
#define TILT_INCLIN_4    90 //4ère inclinaison en degrés

//nommage des servos
Servo apn;  // create servo object to control a servo
Servo pan_servo;  // create servo object to control a servo
Servo tilt_servo;
                 
//************ --- FONCTIONS --- ******************

//declenchement
void photo(){
  apn.write(180);// simule la manette poussée à fond
  delay(200); //déclenchement actionné pendant 200ms
  apn.write(90); // simule la manette remise au repos     
}

//Fonction du servo de PAN---------------------
void pan_left(){
  pan_servo.write(PAN_IDLE - PAN_SPEED);
}

void pan_gauche(int delai){
  //le pan tourne vers la gauche 2 secondes
  pan_left();
  delay(delai);
  //le pan s'arrete
  pan_stop();
}

void pan_right(){
  pan_servo.write(PAN_IDLE + PAN_SPEED);
}

void pan_stop(){
  // Le servo s'arrete
  pan_servo.write(PAN_IDLE);
}

//Fonction du servo de TILT ---------------------

void tilt_angle(int angle = 0){
   angle = map(angle, 0, 90, TILT_HORIZON, TILT_BAS);
   tilt_servo.write(angle);   
}

//************ --- INITIALISATION --- ******************
void setup()
{
  // affectation des broches de l'ARDUINO
  apn.attach(APN_PIN);
  tilt_servo.attach(TILT_PIN);
  pan_servo.attach(PAN_PIN, 1350, 1650);
 
  apn.write(90);       // mise au neutre du "servo de declenchement"
  pan_servo.write(PAN_IDLE);
}

//************ --- BOUCLE PRINCIPALE --- ******************
void loop()
{
  tilt_angle(TILT_INCLIN_1);
  delay(1000);
  for (int i=1; i<=5; i++) {
    photo();
    delay(3000);
    pan_gauche(2000);
    delay(1000);
  }

  photo();
  delay(3000);
 
  tilt_angle(TILT_INCLIN_2);
  delay(1000);
  for (int i=1; i<=5; i++) {
    photo();
    delay(3000);
    pan_gauche(2000);
    delay(1000);
  }
 
  photo();
  delay(3000);
 
  tilt_angle(TILT_INCLIN_3);
  delay(1000);
  for (int i=1; i<=5; i++) {
    photo();
    delay(3000);
    pan_gauche(2000);
    delay(1000);
  }

  photo();
  delay(3000);
 
  tilt_angle(TILT_INCLIN_4);
  delay(1000);
  for (int i=1; i<=3; i++) {
    photo();
    delay(3000);
    pan_gauche(5000);
    delay(1000);
  }

}
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1031
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Lun 12 Octobre 2009, 12:25

Ca se précise ;)

Vite, des photos de la nacelle et de son arduino... et des photos avec la nacelle et son arduino ;)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede fxix le Lun 26 Octobre 2009, 15:05

voici enfin une photo de la nacelle équipée à l'arrache de son arduino :roll:
Image

il est bien entendu impossible de voler avec çà et j'attends donc un petit boitier pour intégrer tout çà proprement.

En attendant je me suis amusé à faire quelques vidéos de cette nacelle :
- le déroulement complet (en accéléré) de la routine autokap
- les mouvements de base d'une nacelle
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1031
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : mon autoKAP

Messagede Alonzo BISTROT le Lun 26 Octobre 2009, 16:47

Bravo, Ca marche !!

Etes vous réellement obligé de réaliser les ponts multiples des les lignes de bus d'alimentation sur votre plaque à trous ?. Sur la mienne le contact est établi sur toute la longueur de la plaque.

Vous allez donc laisser la plaque à trous ! Mais ca pèse un max....

A+
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 460
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Projet KAPduino : mon autoKAP

Messagede fxix le Lun 26 Octobre 2009, 17:11

Alonzo BISTROT a écrit:Bravo, Ca marche !!

Etes vous réellement obligé [...]A+

euh... c'est moi que tu vouvoie ? :roll:


Alonzo BISTROT a écrit:Etes vous réellement obligé de réaliser les ponts multiples des les lignes de bus d'alimentation sur votre plaque à trous ?. Sur la mienne le contact est établi sur toute la longueur de la plaque.

J'avouerai ne pas avoir fait attention il va falloir que je regarde de près

Alonzo BISTROT a écrit:Vous allez donc laisser la plaque à trous ! Mais ca pèse un max....

Non la plaque à trou c'était juste pour économiser de la soudure.
Comme je le disais je vais faire une version Proto2 avec une plaque d'epoxy toute trouyautée ou je vais mettre des fiches tulipes.

Pour la version finale (c'est pas demain la veille) je ferrais les soudures propres direct sur l'Arduino.
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1031
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Lun 26 Octobre 2009, 23:47

Pour la nano arduino, il y a un shield Roboduino pas cher sur eBay... Je l'ai mais pas encore reçu le nano arduino pour faire des tests.

Sinon, quand j'aurais passé la phase de test, je pense que je pourrai "condamner" mon nano à son rôle autokap et le souder directement sur un petit morceau de plaque trouée et pastillée pour faire un gain de place.

A+
JC toujours intéressé.
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede fxix le Mar 27 Octobre 2009, 19:19

je viens de recevoir ma dernière commande avec le boitier.
Les adaptateurs tulipes commandés ne sont pas compatibles avec les broches déjà fixées sur l'arduino -> je vais aussi souder directement sur la plaque pastillée.
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1031
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Dim 10 Janvier 2010, 21:27

Je déterre (non pas la hache de guerre mais...) le sujet car je progresse.

Je viens de tester mon Arduino-non sur son shield Roboduino, "c'est de la balle" comme diraient les D'jeuns. Pas besoin de galérer à câbler de ci de là...
Au passage, j'ai acquis 2 nanos, l'un from HongKong avec des leds vertes et rouges et l'autre (qui a du arriver à la nage) from USA avec des leds bleus et rouge. Ben pas de différence constatée de fonctionnement...

Bon passons...

Voici mon problème, je suis une brêle en programmation (mais je compte progresser). Aussi, je souhaiterais avoir une piste pour faire un programme test qui me permette de contrôler au clavier un servo afin d'afficher l'impulsion et de constater de visu l'angle de rotation du servo. Et je souhaite aussi tester un câble CHDK. Je pense que je peux partir de morceaux de code, mais pas "from scratch". Je viens aussi de tout relire, mais la lecture de codes... n'est pas si aisée...

En fait, j'ai quasiment fini ma mini-nacelle "robot" (je recommande EasyRobotics au passage, mais quand j'aurais totalement fini, j'en remettrai une couche) et, je dois piloter 2 servos (seul le pan est modifié 360°) et un câble CHDK homemade. Je pense que c'est le même genre de montage que Fabien. Je me demande d'ailleurs si je ne peux pas me passer de ce câble CHDK et déclencher directement depuis l'Arduino... (sûrement que c'est possible mais comment ?).

Le jour où je serait balèze (c'est pas demain), je compte bien coller un récepteur 2,4GHz afin de basculer de l'autoKap au contrôle RC (et inversement).

A+
JC

PS : vive l'Arduino

PS2 : question subsidiaire, est-il possible de "sortie" du 3,3V d'un Arduino alimenté en 4,8V (ou7,4V LiPo) ?
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Dim 10 Janvier 2010, 22:38

J-C a écrit:je souhaiterais avoir une piste pour faire un programme test qui me permette de contrôler au clavier un servo afin d'afficher l'impulsion et de constater de visu l'angle de rotation du servo.

Quelques infos qui peuvent t'aider: viewtopic.php?f=6&t=423&start=140#p14974

J-C a écrit:je souhaite aussi tester un câble CHDK. Je pense que je peux partir de morceaux de code, mais pas "from scratch".

Il y a quelques explications sur celui là: viewtopic.php?f=6&t=1825&p=15442

Si tu as besoin de plus de détails ou d'infos... n'hésite pas ;)

J-C a écrit:est-il possible de "sortie" du 3,3V d'un Arduino alimenté en 4,8V (ou7,4V LiPo) ?

Récupérer le 3.3V pour alimenter autre chose ? alors oui, mais 100mA max il me semble.
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Mar 12 Janvier 2010, 21:30

Bon, je progresse.
J'ai décortiqué les lignes de code publiées sur ce forum... génial et pas si compliqué que ça.
J'arrive à jouer avec mes mini-servos, mais... hélas il y a un mais... je n'arrive pas à contrôler mon Towerpro MG946R. C'est un servo digital.
Est-ce qu'il y a des subtilités dans l'utilisation de servo digitaux avec l'arduino ? Sachant que j'utilise l'environnement de programmation 0017 qui inclut la megaservo.h directement dans Servo.h. Car à ce niveau, je suis bien embêté car ma mini-nacelle devrait être animée par ces servos au couple "monstrueux".
Pour préciser le problème, quelque soit la valeur d'inpulsion (via #servo#.writeMicroseconds(uS)) ou d'angle (via #servo#.write(angle)), j'ai le servo qui part en butée. D'où peut provenir le problème ? Ou alors dois-je me résoudre à utiliser d'autres servos, analogiques mais avec des pignons métalliques.

Merci pour toute info.

A+
JC

PS : je viens de vérifier sur la servodatabase, ce servo est indiqué comme analog alors que sur l'étiquette il y a "digi"... bizarre...
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Mar 12 Janvier 2010, 22:45

J-C a écrit:(...)je n'arrive pas à contrôler mon Towerpro MG946R. C'est un servo digital.(...)quelque soit la valeur d'inpulsion (...), j'ai le servo qui part en butée.

Comment se comporte-t-il sur ta radio ? (parce que le signal qui sort de l'arduino est sensé être le même, ce que tu vérifies d'ailleurs sur tes autres servos)
Peut-être que la tension de sortie (3,3v) pose problème avec ce servo (alimenté en 4.8v)

J'ai reçu hier 2 MG996R (notés TowardPro MG996R digi hi torque). Je n'avais rien de spécial de prévu avec, mais je voulais voir ce qu'était un servo digital pignons métal (et puis avec les 2 futaba s3003 commandés en même temps pour une vingtaine d'€, ça fait 4 servos pour à peine plus cher qu'un seul Hitec acheté localement chez le marchant de modélisme du coin)

Bon, bin, j'ai plus qu'à essayer le MG996R avec l'Arduino, ce servo doit ressembler de près ou de loin au tien ;)

Edit: Je viens de l'essayer sur la nacelle (avec l'Arduino donc). Il semble se comporter pas trop mal (il ne part pas dans les coins)... par contre, il me reset l'arduino quand il remonte... possible qu'il pompe un peu dur, celui là, pour mon chargeur solaire.

Re-Edit: Est-ce que ce n'est quand tu allumes l'ensemble que le servo part en butée ? J'avais ce problème au début: quand l'arduino démarre, il met une seconde je crois pour savoir si il doit entrer en phase de programmation ou lancer son programme. Pendant cette phase, les sorties sont probablement en l'air (ni à 0, ni à 1) et le servo est perdu. j'avais réglé ce problème en ajoutant une résistance de 5,6kohms entre la masse et le fil "puls" du servo (qui est aussi bien sûr la sortie de l'arduino qui commande le servo) (viewtopic.php?f=6&t=1842&p=15754)

Re-re-edit :mrgreen:
Pourquoi as-tu choisi ce genre de servo hyper costaud pour ta mini nacelle au fait ?
A tout hasard, j'ai lu quelque part que les pattes de fixation était "fragile" sur ces servos. Je ne sais pas ce que ça vaut comme info, ni ce qui était entendu par fragile, mais c'est peut être à vérifier en cas d'entrainement direct du Picavet par le servo (si c'est le servo qui supporte toute la nacelle)

PS: pour ce que j'en ai compris, la différence entre un servo analogique et numérique est simplement l'électronique embarquée. Le signal de commande est le même, le moteur et le potentiomètre aussi. Seules les infos sont traitée numériquement (encore un microcontroleur sans aucun doute). Par contre le fonctionnement devient différent: sur un analogique, la position du servo est réajustée toutes les 20ms, 50 fois par secondes à la vitesse du train d'impulsion qu'il reçoit du récepteur. sur un numérique, la position est réajustée 300 fois par seconde même si on diminue la fréquence du train d'impulsion à l'entrée... ce qui explique précision et couple important. Les numériques peuvent aussi se programmer, angles maxi, position du neutre, vitesse de déplacement, etc. Les protocoles de programmation sont propriétaires... et j'ai pas encore trouvé le protocole towerpro (s'il existe)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede vertigo le Mer 13 Janvier 2010, 9:03

Juste un apparté sur la vitesse de déplacement qui est un des points forts de ce qu'on peut faire avec l'Arduino (mouvements beaucoup plus souples qu'avec un Aurico par exemple):

- Tom benedict a eu de bons résultats en envoyant des consignes de position selon une fonction "trapézoidale" et non pas en créneaux : http://www.flickr.com/photos/tbenedict/3396931112/

- encore plus simple, un petit bout de code récupéré appliquant un filtre passe-bas, qui marche bien avec les robots :

Code: Tout sélectionner
// filtre passe bas
// gain 0.0 - 1.0
float LowPass (float older, float newer, float gain)
{
  float x = (newer * (1.0 - gain)) + (older * gain);
  return (x);
}


A chaque boucle, l'arduino fait une sorte de moyenne pondérée entre l'ancienne et la nouvelle consigne (marche aussi avec les capteurs).
Avatar de l’utilisateur
vertigo
Plus de 1000 messages
 
Messages: 1191
Inscription: Lun 28 Janvier 2008, 21:54
Localisation: Rennes (quartier Poterie)

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Mer 13 Janvier 2010, 14:30

Je vais essayer de répondre à tout.

Pourquoi des TowerPro MG946R, pour le couple énorme, pour les pignons métalliques et pour le prix modique. J'ai dans un coin des TowerPro MG995 dans le même genre mais de moins bonne qualité. En effet, en position idle (sans toucher au manche), un coup il s'arrêtent, un coup ça frétille sans s'arrêter vraiment... bref pas fiable. Je n'ai pas ce soucis avec les MG946R. Après il y a les MG996R qui sont une évolution des MG995, mais au moment de mon achat, il y a 6 mois, ils n'étaient pas sortis. Je pense que l'électronique interne est la même et que seul le moteur change.

J'ai refait des test ce midi... et tout marche nickel. Bizarre, mais je suis content.

J'ai fait un programme simpliste pour fixer la longueur d'impulsion à 1500µs et j'ai tranquillement ajusté mon potar multi-tours pour régler le servo de Pan. Ensuite j'ai cherché les valeurs de butée pour le servo de Tilt non modifié : 800µs à 2200µs. C'est génial ! Mais du coup je balaye plus de 90° (ce que je ne peux pas faire avec ma radiocommande... voir en PS). Finalement de 2020µs à 1100µs je couvre un angle proche de 90°. Ce sont les valeurs que je garderai pour le calcul des positions du Tilt.

Pour le moment, je ne sais pas si les servos vont reseter mon Arduino, car il est alimenté par le port USB du PC (A ce propos, la version nano est géniale, reset logiciel à chaque upload, pas d'adaptateur usb à brancher/débrancher).

Pour vertigo, je suis pour intégrer une fonction trapézoïdale afin d'adoucir le mouvement de la nacelle (surtout qu'une mini-nacelle aura certainement moins d'inertie que la grande), mais je suis incapable d'intégrer (comprendre et ajouter) ce code.

Par rapport à la vidéo de Tom Benedict, j'ai toutefois une question : que vaut-il mieux envisager :
1- comme Tom, plusieurs positions de Tilt pour chaque cran de Pan ;
2- comme Fabien (fxix), plusieurs crans de Pan pour chaque position du Tilt ?

Merci de votre soutien, j'espère qu'on pourra faire un tuto à la fin...

A+
JC

PS : Par rapport à ma radiocommande, c'est une Modelcraft (autrement dit une E-Sky) 4 voies. Le débattement des joysticks, ou l'électronique interne, ou encore le récepteur ...etc. ne permet pas de faire tourner les servos à 90°, mais à seulement 60° max. Je pense que c'est une limite de ces radios bon marché, et c'est dommage. Je pense qu'avec deux résistances sur les potars de joysticks on pourrait corriger un peu la chose... Du coup, si un jour je peux brancher un récepteur sur l'Arduino, il faudra que je pense à faire un programme "d'amplification".
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede vertigo le Mer 13 Janvier 2010, 14:40

Je partirais sans hésiter pour que les crans de pan s'enchainent pour un même tilt (i.e. "2" ci dessus), pour les panos.
Avatar de l’utilisateur
vertigo
Plus de 1000 messages
 
Messages: 1191
Inscription: Lun 28 Janvier 2008, 21:54
Localisation: Rennes (quartier Poterie)

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Mer 13 Janvier 2010, 14:59

J-C a écrit:Pour le moment, je ne sais pas si les servos vont reseter mon Arduino, car il est alimenté par le port USB du PC

Normalement avec un pack de 4AA ou 4AAA, ça devrait tenir le coup. Mon chargeur solaire part d'une lipo 3,7 pour en faire du 5,5v... et comme ça doit tirer pas mal, il doit se retrouver à genou.


J-C a écrit:Par rapport à ma radiocommande(...) Le débattement des joysticks, ou l'électronique interne, ou encore le récepteur ...etc. ne permet pas de faire tourner les servos à 90°, mais à seulement 60° max. (....) Du coup, si un jour je peux brancher un récepteur sur l'Arduino, il faudra que je pense à faire un programme "d'amplification".

Bizarre ce 60°, ça fait peu !? Sinon, pas grave effectivement, on sort ce qu'on veut de l'Arduino.
PS: l'ajout des 2 résistances sur le potar du joystick de la radio va plutôt limiter encore la course. (et faut pas ;))


vertigo a écrit:Je partirais sans hésiter pour que les crans de pan s'enchainent pour un même tilt (i.e. "2" ci dessus), pour les panos.

Personnellement, je préfère le contraire (plusieurs tilt sur un pan), ce qui permet de faire des panos dans l'autre sens. Comme l'apn ne prend qu'en mode paysage, puisqu'il est monté horizontalement, ça permet de créer des pano en mode portrait dans ce style là:

Image

ou plutôt ça:
Image

Bon ceci dit, il est tout à fait possible de faire les deux en alternance ;)
c'est un peu ce que je fais (un 360° en pan mais avec un seul tilt, suivi des tilts sur un pan), mais je ne dois pas avoir assez de positions en pan parce que je n'arrive pas à assembler les photos en horizontal... à corriger (ou à supprimer de mon sketch)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede vertigo le Mer 13 Janvier 2010, 15:09

Oui c'est vrai j'ai le reflexe de l'appareil monté en portrait ... à voir donc.
Avatar de l’utilisateur
vertigo
Plus de 1000 messages
 
Messages: 1191
Inscription: Lun 28 Janvier 2008, 21:54
Localisation: Rennes (quartier Poterie)

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Mer 13 Janvier 2010, 22:19

Je viens de tester le code de déclenchement direct CHDK : c'est super ! Le câble est rapide à faire.

Et du coup je me dis de plus en plus qu'il faut que je branche un récepteur 6 voies sur l'arduino. 2 voies Pan et Tilt, 1 voie déclenchement, 1 voie auto/manuel, une voie pour le zoom (en utilisant un script CHDK) et une voie qui ne sert à rien car il n'y a pas de radio 5 voies et puis on ne sait jamais pour l'utilité d'une 6ème voie.

La mini-nacelle est quasi finie. La seule inquiétude : est-ce qu'une alimentation 4,8V est suffisante pour alimenter l'arduino (sachant que tout à l'air de tourne en 5V) ? Sinon, je mets directement une LiPo 7,4V sur le VIN.

A+
JC
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Mer 13 Janvier 2010, 22:37

J-C a écrit:est-ce qu'une alimentation 4,8V est suffisante pour alimenter l'arduino (sachant que tout à l'air de tourne en 5V) ?

Il y a deux types de cartes arduino au niveau alim, une en 3,3, l'autre en 5v. Tu as laquelle ? tu as un lien vers celui que tu as acheté ? sinon sur la carte elle-même tu dois avoir une sortie notée 3,3 ou 5v (c'est la sortie du régulateur qui alimente aussi le microcontroleur).
Et puis au pire, tu peux simplement tester... en alimentant un arduino prévu pour 5v en 4,8v, il risque juste de ne pas fonctionner, c'est tout, aucun risque de cramage ;)
L'arduino 3,3v fonctionnera lui sans problème.

J-C a écrit:Et du coup je me dis de plus en plus qu'il faut que je branche un récepteur 6 voies sur l'arduino. 2 voies Pan et Tilt, 1 voie déclenchement, 1 voie auto/manuel, une voie pour le zoom (en utilisant un script CHDK) et une voie qui ne sert à rien car il n'y a pas de radio 5 voies et puis on ne sait jamais pour l'utilité d'une 6ème voie.

Là par contre, ne te précipite pas !
Je crois que l'on peut récupérer facilement 3 voies de la télécommande avec l'arduino (en utilisant les 3 PMWs, broches 9,10,11 de mémoire). J'avais vu un script qui faisait ça, faudrait que le retrouve. A moins qu'il y ait moyen de remixer les 6 voies (ça, ça doit être simple) puis de décoder le tout sur une seule entrée (peut être moins simple).
Donc, pour ce que j'en ai vu, 3 voies, facile, 6 voies, faut regarder ça de plus près.
Je ne me suis pas trop penché sur cette question de décodage de la radio classique puisque j'ai choisi la solution d'un modem emetteur/récepteur en 433Mhz, qui en plus de l'antenne courte permettra de disposer d'autant de canaux que nécessaire (1, 4, 6, 10, ou potentiellement 100, 1000, 10000 :mrgreen: !) ça dépendra juste de la taille du message envoyé, et de sa vitesse (acceptable) de traitement.

Edit:
Ah bin non, c'est tout c*n même avec 6 canaux:
http://www.arduino.cc/cgi-bin/yabb2/YaB ... 1199165055
La clé est la commande PulseIn : http://www.arduino.cc/en/Reference/PulseIn
faut juste remixer les 6 sorties du récepteur pour n'en faire qu'une (ou récupérer ce signal dans le récepteur, mais là c'est chaud)... avec 6 diodes, ça doit être jouable ?
ou sinon, y'a ça pour recréer le signal ppm depuis les sorties du récepteur: http://www.mftech.de/catalog/product_in ... anguage=en (ça doit prendre un peu de place mais c'est propre).... correction, c'est juste le circuit intégré, y'a pas le circuit imprimé (vendu à part: http://www.mftech.de/catalog/product_in ... ucts_id=58), ni les cordons !!! faudrait trouver l'équivalent mais tout monté !

encore un edit: J'ai trouvé ça aussi comme sketch de décodage du ppm http://www.arduino.cc/cgi-bin/yabb2/YaB ... 86/156#159 qui utilise les interruptions du microcontroleur (et si jamais pulsein n'utilise pas les interruptions, cette dernière solution doit être plus futée)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede Alonzo BISTROT le Jeu 14 Janvier 2010, 9:44

Bonjour,

Je ne pense pas que l'utilisation brute des 6 diodes puisse fonctionner. Quoi que.. . Tout dépend de la methode de traitement du recepteur. Théoriquement en analogique, les 6 crénaux de commande PWM sont transmit en série, les uns derrière les autres.

Image
source : http://pagesperso-orange.fr/model38/le%20recepteur.htm

ou
http://sti.ac-dijon.fr/IMG/doc/TPradiocomm2.doc

Aprés reception, le signal série est (re)mis en forme puis passe dans un demultiplexeur TTL ou CMOS (1 entrée, 6 sorties) avec une commutation cyclique réaliée par un reseau RC. En sortie, les signaux se retrouvent sur des lignes indépendantes et décalés dans le temps. Par contre, si le traitement est numérique, il se peut que les créneaux de sortie soient tous synchrones.

La solution universelle passe par l'utilisation d'un multiplexeur (6 entrées, 1 Sortie) avec une commutation cyclique (Base du circuit allemand proposé. On retrouve le réseau RC coté soudure).

Voici la "Bible" sur le sujet, "Construction d'ensemble de radio-commande" par Francis THOBOIS:
http://home.nordnet.fr/~fthobois/
et principalement, ici pour le traitement des recepteurs analogiques
http://home.nordnet.fr/~fthobois/theorieRC.htm

A+
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 460
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Projet KAPduino : mon autoKAP

Messagede Alonzo BISTROT le Jeu 14 Janvier 2010, 9:57

Bonjour,

Je ne pense pas que l'utilisation brute des 6 diodes puisse fonctionner. Quoi que.. . Tout dépend de la methode de traitement du recepteur. Théoriquement en analogique, les 6 crénaux de commande PWM sont transmit en série, les uns derrière les autres.

Image
source : http://home.nordnet.fr/~fthobois/images/MRA-6.htm

Aprés reception, le signal série est (re)mis en forme puis passe dans un demultiplexeur TTL ou CMOS (1 entrée, 6 sorties) type 4015 ou 74C164, avec une commutation cyclique réaliée par un reseau RC. En sortie, les signaux se retrouvent sur des lignes indépendantes et décalés dans le temps.

Image
source : http://home.nordnet.fr/~fthobois/images/MRA-6.htm


Par contre, si le traitement est numérique, il se peut que les créneaux de sortie soient tous synchrones.

La solution universelle passe par l'utilisation d'un multiplexeur (6 entrées, 1 Sortie) avec une commutation cyclique (Base du circuit allemand proposé. On retrouve le réseau RC coté soudure).

Voici la "Bible" sur le sujet, "Construction d'ensemble de radio-commande" par Francis THOBOIS:
http://home.nordnet.fr/~fthobois/
et principalement, ici pour le traitement des recepteurs analogiques
http://home.nordnet.fr/~fthobois/theorieRC.htm

A+
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 460
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Projet KAPduino : mon autoKAP

Messagede vertigo le Jeu 14 Janvier 2010, 10:24

Avec un oscillo trouver le PPM dans le récepteur n'est pas forcément difficile, on l'avait fait il y a qq années pour un drône.

Sinon un lien surement utile : http://diydrones.com/profiles/blogs/705 ... Post:38393
(How to hack the PPM signal from any receiver (Futaba) with Arduino)
Avatar de l’utilisateur
vertigo
Plus de 1000 messages
 
Messages: 1191
Inscription: Lun 28 Janvier 2008, 21:54
Localisation: Rennes (quartier Poterie)

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Jeu 14 Janvier 2010, 10:54

Alonzo BISTROT a écrit: Par contre, si le traitement est numérique, il se peut que les créneaux de sortie soient tous synchrones.

ça, c'est pas impossible, effectivement. et si il n'y a plus le "trou" entre les impulsions une fois le signel recomposé, c'est cuit ! Il n'y aurait plus qu'à aller chercher le signal ppm dans le récepteur.
Si par contre les signaux des sorties du récepteurs sont bien légèrement décalés (et suivent exactement le ppm de l'entrée), les diodes doivent fonctionner. Un CMOS type 4078 (8-input NOR gate) pourrait aussi faire l'affaire.... ou pourquoi pas tout simplement utiliser 6 entrées de l'arduino ?
Il y a un autre truc qui me gène par contre, c'est l'instruction PulseIn:
"pulseIn() waits for the pin to go HIGH, starts timing, then waits for the pin to go LOW and stops timing. Returns the length of the pulse in microseconds".... la boucle du programme principal peut rester coincée la dessus pendant 6*2,5ms= 15ms, reste 5ms pour faire tout le reste. Si la routine qui commande les servos utilise les interruptions, ça le fait, sinon ça va manquer de temps... bon, encore un truc à vérifier :?

vertigo a écrit:Avec un oscillo trouver le PPM dans le récepteur n'est pas forcément difficile, on l'avait fait il y a qq années pour un drône.

J'avais ouvert mon récepteur pour voir comment c'était foutu dedans, et c'était composants "classiques" ultra tassés d'un coté du circuit imprimé et cms de l'autre, pas facile de récupérer un signal la dedans. Mais sur un récepteur un peu plus aéré, ça doit être faisable.
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede fred88 le Jeu 14 Janvier 2010, 11:06

bonjour tout le monde , je suis ce post avec attention, mais ca commence a se compliquer copieusement pour moi ! :lol:

il y aurait peut etre une aautre solution si j'ai bien compris le but de tout ca , c'est d'avoir le choix entre autokap et radiocommande ?

et si au lieu de mettre l'arduino sur la nacelle , on y mettais que le recepteur , et l'arduino branché sur la prise ecolage de la radio , programé a la maniere d'une radio " moniteur " ???

arduino eteint = RC
arduino en marche =autokap


ce n'est qu'une idée , je ne sais pas du tout si c'est réalisable ...

vous en pensez quoi ?
rokkaku 1m90,rokkaku 3.00m ,buster 4, ozone frenzy, appareil nikon coolpix L5, et nikon s200
Avatar de l’utilisateur
fred88
Plus de 100 messages
 
Messages: 318
Inscription: Lun 06 Juin 2005, 20:46
Localisation: saint dié(88)

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Jeu 14 Janvier 2010, 11:37

Bonjour Fred,

Oui, c'est faisable aussi ;)
J'y vois personnellement deux inconvénients majeurs (pour moi):
- l'émetteur doit fonctionner en permanence (incompatible avec mon trip actuel de "low power" ;)
- si la nacelle est hors de portée (ou que les batteries de l'émetteur sont hs), je veux que la nacelle fonctionne d'elle même en autokap.

Ce qu'il y a de bien avec l'arduino, c'est qu'on peut faire des tas de trucs, et suivant les besoins et désirs de chacun, on aura sans doute des tas de solutions différentes au final ;)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede Alonzo BISTROT le Jeu 14 Janvier 2010, 15:23

Deltakap a écrit:- si la nacelle est hors de portée (ou que les batteries de l'émetteur sont hs), je veux que la nacelle fonctionne d'elle même en autokap.


Ce cas peut être détecté par le µcontroleur (Absence de porteuse) et passer de lui-même dans un mode d'action pre-determiné. Je ne vois pas forcement ca comme un inconvénient.
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 460
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Jeu 14 Janvier 2010, 15:33

Alonzo BISTROT a écrit: Ce cas peut être détecté par le µcontroleur (Absence de porteuse) et passer de lui-même dans un mode d'action pre-determiné. Je ne vois pas forcement ca comme un inconvénient.

Tout à fait, j'avais fait ce type de détection "pas de signal" avec le PIC pour que la nacelle passe automatiquement en autokap, et j'avais commencé avec l'arduino (mais ma minitélécommande avait une portée inutilisable).
Mais je crois que Fred pensait à une solution avec un arduino en bas sur la prise écolage et pas d'arduino en haut (ou j'ai pas compris :? ) ... et le récepteur seul sur la nacelle sans arduino, pas question d'autokap si pas de porteuse. (et c'est dommage, si par exemple on ne veut pas trimballer la radio tout le temps)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede fred88 le Jeu 14 Janvier 2010, 16:03

Deltakap a écrit:
Alonzo BISTROT a écrit: Ce cas peut être détecté par le µcontroleur (Absence de porteuse) et passer de lui-même dans un mode d'action pre-determiné. Je ne vois pas forcement ca comme un inconvénient.

Tout à fait, j'avais fait ce type de détection "pas de signal" avec le PIC pour que la nacelle passe automatiquement en autokap, et j'avais commencé avec l'arduino (mais ma minitélécommande avait une portée inutilisable).
Mais je crois que Fred pensait à une solution avec un arduino en bas sur la prise écolage et pas d'arduino en haut (ou j'ai pas compris :? ) ... et le récepteur seul sur la nacelle sans arduino, pas question d'autokap si pas de porteuse. (et c'est dommage, si par exemple on ne veut pas trimballer la radio tout le temps)



oui, c'est bien comme ca que je voyait les choses, effectivement ,
pas de radio = pas d'autokap

mais comme dit alonzo , un arduino egalement sur la nacelle ???
rokkaku 1m90,rokkaku 3.00m ,buster 4, ozone frenzy, appareil nikon coolpix L5, et nikon s200
Avatar de l’utilisateur
fred88
Plus de 100 messages
 
Messages: 318
Inscription: Lun 06 Juin 2005, 20:46
Localisation: saint dié(88)

Re: Projet KAPduino : mon autoKAP

Messagede Gilbert Dubé le Jeu 14 Janvier 2010, 17:18

Bonjour a tous

Je suis également ce post et pour ma part dans mon code sur la nacele je verifie si "Le canal #2 a une valeur 0 (zero) ou 1482, 0 = Le transmetteur na pas été allumer ou 1482 = il a été éteint ou est hors de porter.

Si une de ces deux condition se présente alors la nacelle se place en mode Auto, mais continue quand meme de vérifier ce canal en cas de retour de signal.

Mon systeme de controle provient de Taxxas et est un 4 voies de 2.4Ghz pour auto téléguide, le Canal 2 sert pour le moteur, donc par défaut la voiture s'arrette si le transmetteur devient hors-service ou hors de porté.

Donc peut-etre verifier sur ton systeme ce qui arrive au signal quand tu eteint ton transmetteur.

Gilbert Dubé

ps: Je me suis assurer de ne pas utiliser la valeur 1482 du canal #2 comme d'une commande valide.
Avatar de l’utilisateur
Gilbert Dubé
Plus de 50 messages
 
Messages: 63
Inscription: Jeu 14 Mai 2009, 17:56
Localisation: Montréal, Québec, Canada

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Jeu 14 Janvier 2010, 19:04

Juste une question de néophyte : n'est-il pas possible de faire un "passage direct", au travers de l'arduino, du signal provenant du récepteur, sans "interprétation" ni calcul ? En gros, un genre de shunt (INPUT -> OUTPUT)... En autoKAP, c'est l'arduino et la librairie servo qui bosse, en manuel, on récupère le signal brut des voies pan et tilt et on les ressort vers les servos idoines. Pour le déclenchement, on garde un système CHDK. Parce que finalement, se sont les servos qui exigent la précision du signal, le reste... pas vraiment...

A+
JC
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Jeu 14 Janvier 2010, 19:49

J-C a écrit:n'est-il pas possible de faire un "passage direct", au travers de l'arduino, du signal provenant du récepteur, sans "interprétation" ni calcul ? En gros, un genre de shunt (INPUT -> OUTPUT)

Cette solution est à priori moins simple qu'il n'y parait: le problème, c'est que le programme de l'arduino tourne en boucle et que si le programme n'est pas en train d'attendre l'impulsion qui vient du récepteur, il risque de rater le début et de la raccourcir. (Une gestion d'interruption permettrait de lever ce problème, mais c'est plus de l'input/output).
Ceci dit, l'idée n'est pas si mauvaise, loin de là (en plus, c'est surtout le tilt qu'il faut recopier avec précision, les autres on s'en fout un peu)... idée à méditer et surtout à tester !
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Jeu 14 Janvier 2010, 21:47

Ou alors, est-ce qu'il est possible de shunter électroniquement l'arduino ? Dès qu'on passe en manuel, l'arduino arrête de contrôler le pan le tilt et le déclenchement. Et une voie de l'arduino active un "dérivateur" (désolé pour mon expression peu spécifique) qui permet de brancher le récepteur directement sur les 2 servos. L'arduino n'aurait qu'à "écouter" deux signaux : celui qui maintien le mode manuel et celui qui permet de déclencher l'APN.

Je ne suis pas calé (et c'est peu de le dire) en électronique, mais je pense qu'un petit circuit supplémentaire (simple) nous simplifierait la vie.
Si ce n'est pas clair par écrit, je peux faire un schéma.

A+
JC
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Jeu 14 Janvier 2010, 22:03

J'ai craqué...

Image

Avec un récepteur 4 voies :
1 - pan
2 - tilt
3 - déclenchement APN via arduino
4 - activation du mode manuel

Seul soucis et de taille, comment faire un "dérivateur", genre d'aiguillage électonique ?

A+
JC
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede Deltakap le Jeu 14 Janvier 2010, 22:29

J-C a écrit:Seul soucis et de taille, comment faire un "dérivateur", genre d'aiguillage électonique ?

Ça doit pouvoir se faire assez facilement en logique câblée.... mais il y a peut-être beaucoup plus simple !
J'ai regardé vite fait comment on utilise les interruptions sur l'arduino et j'ai trouvé ça:
http://www.arduino.cc/en/Reference/AttachInterrupt
Cette fonction attachInterrupt() et l'exemple donné sur cette page fait exactement la recopie sur une sortie de ce qui se passe sur l'entrée (et un bout de programme peut permettre d'autoriser ou non le transfert du signal)
Pour ce que je comprends, il y a 2 broches dispos pour ce type d'interruptions... pan et tilt, ça tombe bien!
et encore a-t-on besoin de transférer le signal pan directement, pas sûr: les commandes "tourne à gauche", "arrête toi" et "tourne à droite" sont suffisantes.


fred88 a écrit:oui, c'est bien comme ca que je voyait les choses, effectivement ,
pas de radio = pas d'autokap

mais comme dit alonzo , un arduino egalement sur la nacelle ???

La solution de l'arduino sur la nacelle permet de pouvoir aller jouer léger en autokap avec sa nacelle habituelle mais sans emmener la radio (gros avantage quand même).... Et l'arduino sur la nacelle supprime pas mal (voire totalement ?) le besoin de l'arduino sur la prise écolage.
Je crois que c'est moi qui ai parlé en premier de l'utilisation de cette prise, mais plutôt comme une possibilité (pour ne pas trop modifier un ensemble radio et nacelle existant), même si je ne trouve pas cette solution géniale.

En fait, il y a des tas de possibilités nouvelles avec un microcontroleur suivant où on le met, ce qu'il doit faire, etc...

Je crois que la phase primordiale de ce genre de développement, c'est plus d'avoir une réflexion "philosophique" sur ce que ça doit faire (et c'est pas si facile), plutôt que de se poser d'abord les questions techniques.
J'ai constaté ça avec la modif minitélécommande sur la nacelle de Michel:
Il a toujours eu 2 nacelles, une légère uniquement autokap (sans tilt) et une "normale" avec la radio modélisme.
Il m'a demandé si on pouvait ajouter la mini télécommande sur la nacelle autokap.... mais une fois en place, force est de constater que c'est dommage qu'il n'y ait pas le tilt (c'est pas faux) ! Mais en ajoutant le tilt, on alourdirait pas mal cette nacelle légère pour se retrouver avec pratiquement 2 nacelles identiques !
A l'inverse, la minitélécomande est bien plus légère et compacte que la radio modélisme, et Michel m'a aussi demandé si on pouvait faire la modif sur sa nacelle classique (avec le tilt)... techniquement pas de problème majeur (à part ma flemme) mais au final, il se retrouverait avec 2 systèmes quasiment identiques ! quel serait intérêt ? (c'est ma réflexion et ma question, mais pour Michel, c'est clair: il faut que ce soit minitélécommande et tilt sur les deux nacelles)
Voilà, c'était juste pour dire qu'il est important de définir au mieux ce que l'on veut et que l'on ne veut pas forcement tous la même chose ;)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Ven 15 Janvier 2010, 17:41

J'ai regardé vite fait sur le forum Arduino, avec les mots clé "arduino, rx, rc".
Visiblement il y a possibilité, mais je n'ai pas tout compris.

Il y aurait une façon de récupérer le signal envoyé par la radio et reçu par le récepteur avant son démultiplexage, via une librairie "ServoDecodeClass.h
" .
Du moins ,c'est ce que j'ai cru comprendre ici : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1228137503

Ou alors il y a possibilité d'utiliser un récepteur simplifié et d'utiliser une autre librairie "Virtualwire.h " , du moins c'est ce que j'ai vu là : http://letsmakerobots.com/node/12336 sauf que la communication TX-RX se fait sur une fréquence bizarre... tout dépend du module RF Link Receiver qu'on peut trouver...

Finalement on se pose la même question que là : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1260982605 et la réponse est au dessus...
Le mieux est d'accéder directement à l'électronique du récepteur.

A+
JC
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Sam 16 Janvier 2010, 19:06

Salut à tous, je reviens sur ce code (ou une fonction trapézoïdale...)

Code: Tout sélectionner
// filtre passe bas
// gain 0.0 - 1.0
float LowPass (float older, float newer, float gain)
{
  float x = (newer * (1.0 - gain)) + (older * gain);
  return (x);
}


Comment je peux l'intégrer à mon sketch ? Je voudrais "adoucir" le déplacement du TILT (pour le PAN, je ne pense pas que ça soit indispensable).
J'utilise la code de Fabien :
Code: Tout sélectionner
//Inclinaison TILT*************************************************************************

void tilt_angle(int angle = 0){
   angle = map(angle, 0, 90, TILT_HORIZON, TILT_BAS);
   tilt_servo.write(angle);   
}


C'est simple, mais il est vrai que le déplacement est brusque.

Merci d'avance pour tout éclaircissement. Une fois ceci réglé, je pense que je pourrai publier la version 1.0 de mon code.

A+
JC

PS : pourquoi utiliser "void tilt_angle(int angle = 0){}" plutôt que "void tilt_angle(int angle){}" ? A quoi ça sert de mettre angle à zero ?

PS 2 : le cosinus est bien pratique...
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede vertigo le Sam 16 Janvier 2010, 19:57

L'idée est de remplacer dans la boucle principale :

tilt_angle (angle)

par

tilt_angle ( Lowpass (old_angle, new_angle) )

Mais ça ne marchera que si la boucle principale tourne assez rapidement.

Si au contraire ta boucle principale contient toute la séquence d'autokap, avec des delay() un peu partout, il vaut mieux se tourner vers une fonction trapézoïdale du genre :

Code: Tout sélectionner
void tilt_angle(int new_angle, old_angle){
   int angle;
   for (angle = old_angle, angle < new_angle, angle += 1){
      tilt_servo.write(angle);
      delay(x);
   }
}


x gérant la vitesse.
(à débugger pour les rampes décroissantes, etc ...)
Avatar de l’utilisateur
vertigo
Plus de 1000 messages
 
Messages: 1191
Inscription: Lun 28 Janvier 2008, 21:54
Localisation: Rennes (quartier Poterie)

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Sam 16 Janvier 2010, 21:13

J'utilise le code du tilt de Fabien, mais pas tout le reste...

Merci pour la piste de code.

Sinon, je suis tombé sur ceci :
http://www.arduino.cc/playground/Main/Smoothstep
et donc ceci : http://sol.gfxile.net/interpolation/index.html
et je dois avouer que ça me plait bien. C'est en cherchant easing servo que je suis tombé sur smoothstep. Ce qui me plais c'est que ça fonctionne en incrémentant mais aussi pour l'inverse. Le tout est de voir si ça passe sur un servo (je suis confiant). Car, contrairement au code de Fabien, une fois arrivé au nadir, je ne repars pas directement à l'horizontale, je remonte la spirale, mais en faisant tourner le pan toujours dans le même sens.

En tous les cas merci.

A+
JC


------------------------------------------------------


Cool, je viens d'essayer ceci :
Code: Tout sélectionner
#include <Servo.h>

#define INCR 1

#define SMOOTHSTEP(x) ((x) * (x) * (3 - 2 * (x))) //SMOOTHSTEP expression.

int j = 0;             //Just an Iterator.
int i = 0;             //Just another Iterator.
float A = 1000.0;       //Input Min Value
float B = 2000.0;       //Input Max Value
float N = 100.0;       //Input number of steps for transition
float X;               //final smoothstepped value
float v;               //smoothstep expression variable



// on déclare le servomoteur
Servo servo1;

void setup()
{
  servo1.attach(2,1000,2000); // le servomoteur est sur D2
}


void loop()
{
  for (j = 0; j < N; j++)                      // Keep looping until we hit the pre-defined max number
                                  // of steps
  {
    v = j / N;                    // Iteration divided by the number of steps.
    v = SMOOTHSTEP(v);            // Run the smoothstep expression on v.
    X = (B * v) + (A * (1 - v));  // Run the linear interpolation expression using the current
    servo1.writeMicroseconds(X);
    delay(20);
    j++;                          // Increments j by 1.
  }
for (j = 0; j < N; j++)                      // Keep looping until we hit the pre-defined max number
                                  // of steps
  {
    v = j / N;                    // Iteration divided by the number of steps.
    v = SMOOTHSTEP(v);            // Run the smoothstep expression on v.
    X = (A * v) + (B * (1 - v));  // Run the linear interpolation expression using the current
    servo1.writeMicroseconds(X);
    delay(20);
    j++;                          // Increments j by 1.
  }
}

J'ai adapté le code pour un servo, et ajouté un délai (20ms) sinon le servo devient fou. Et youpi, on a un mouvement aller puis retour avec amorti au départ et à l'arrivée. Je suis bluffé. Maintenant YAPLUKA en vérifiant le sens (c'est cool, il n'y a juste qu'à inverser A et B).

Re A+
JC
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Sam 16 Janvier 2010, 22:43

Voici mon code Autokap pour ma mini_nacelle avec son Arduino nano V3 :

Code: Tout sélectionner
#include <Servo.h>

// Paramètres PAN
#define PAN_IDLE 1500
#define SPEED 10
#define CYCLE 7750 // durée de rotation PAN pour 360° à la vitesse fixée
#define PAN_PIN 2 // pin PAN

//Paramètres Prise de vue
#define CRANS 8 // nb de prises à l'horizontale
#define BASE 15 // inclinaison de départ
#define APN_PIN 13 //pin CHDK

//Paramètres TILT
#define TILT_PIN 3 // pin TILT
#define TILT_HORIZON 2020 // l'apn regarde l'horizon
#define TILT_BAS 1100 // l'apn regarde en bas

#define SMOOTHSTEP(x) ((x) * (x) * (3 - 2 * (x))) //SMOOTHSTEP expression.

int m = 0;             
int n = 0;           
float N = 100.0;     
float X;             
float v;
float old_angle = 2020.0;
float new_angle;



//Déclaration des servos
Servo pan_servo;
Servo tilt_servo;

//Rotation crantée du PAN
void rotation_pan(int nb){  //la rotation 360° est découpée en crans
  for (int i = 0 ; i < nb ; i ++){
    if (nb != 1){
      pan_servo.writeMicroseconds(PAN_IDLE + SPEED);
      delay (CYCLE / nb);
      pan_servo.writeMicroseconds(PAN_IDLE);
      delay (200);
      clic();
    }
    else {
      delay(500);
      clic();
    }
  }
}

//declenchement direct CHDK
void clic(){
  digitalWrite(APN_PIN, HIGH);   // pin APN ON
  delay(400);                  // durée 400ms (a régler)
  digitalWrite(APN_PIN, LOW);    // pin APN OFF
  delay(500);                  // delai après photo 500ms (a régler)
}
 
//Inclinaison TILT*************************************************************************

void tilt_angle(float angle){
   angle = map(angle, 0, 90, TILT_HORIZON, TILT_BAS);
   new_angle = angle;
   for (m = 0; m < N; m++)                   
   {
    v = m / N;                   
    v = SMOOTHSTEP(v);           
    X = (new_angle * v) + (old_angle * (1 - v));
    tilt_servo.writeMicroseconds(X);
    delay(20);
    m++;                          // Increments j by 1.
  }
   old_angle = angle;   
}

void setup() {
  pan_servo.attach(PAN_PIN);
  tilt_servo.attach(TILT_PIN);
  pinMode(APN_PIN, OUTPUT);
}


void loop() {
  for (int i = 0 ; i < 4; i ++){
    const float pi = 3.14;
    int j = BASE + 25 * i ;
    float a = pi * (j) / 180;
    float b = cos(a);
    int c = int(b * CRANS + 1);
    tilt_angle(j);
    int k = j;
    rotation_pan(c);
    delay (1000);
  }
  for (int i = 1 ; i < 3; i ++){
    const float pi = 3.14;
    int j = BASE + 25 * (3 - i)  ;
    float a = pi * (j) / 180;
    float b = cos(a);
    int c = int(b * CRANS + 1);
    tilt_angle(j);
    rotation_pan(c);
    delay (1000);
  }
}


Je suis désolé de ne pas tout avoir commenté. Apparemment, ça à l'air de tourner pas mal (sur une nacelle sans APN). Je sais que le déclenchement CHDK fonctionne. Il y aura peut-être un délai à ajouter durant une prise... mais pas sûr.
L'amorti de tilt fonctionne (mais ça donne une "fausse" impression de ralenti compte tenu du faible débattement à amortir).

J'ai essayé de sortir les paramètres essentiels pour éventuellement les modifier sur le terrain avec un module LCD_clavier. Quoiqu'il faudrait que je sorte aussi les 25° d'angle entre chaque niveau de tilt...

Bref, vous en pensez quoi ? J'essaye de coder ce que je peux comprendre...

Vivement que je reçoive le reste du matos pour finir ma mini_nacelle.

A+
JC
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Lun 18 Janvier 2010, 10:06

Voici la version 1.2 du code avec les commentaires :

1ère partie

Code: Tout sélectionner
#include <Servo.h>

// (¯`·.¸¸.-Paramètres Nacelle à étalonner au préalable-.¸¸.·´¯)

// Paramètres PAN
#define PAN_IDLE 1500 //signal d'arret du servo PAN
#define SPEED 10   // incrémentation du signal pour que PAN tourne à vitesse choisie
#define CYCLE 7750 // durée de rotation PAN pour 360° à la vitesse fixée
#define PAN_PIN 2 // pin PAN

//Paramètres TILT
#define TILT_PIN 3 // pin TILT
#define TILT_HORIZON 2020 // signal pour que l'apn regarde l'horizon
#define TILT_BAS 1100 // signal pour que l'apn regarde en bas


//(¯`·.¸¸.-Paramètres Prise de Vue-.¸¸.·´¯)

#define FORMAT 2 // format du capteur 1=4/3 2=3/2
#define FOCALE 35 // focale équivalent 24/36 en mm
#define APN_PIN 13 //pin de l'APN (pour moi fonctionne CHDK)
#define TILT_ZERO 10 // angle initial approximatif TILT par rapport à l'horizontale

// Fonction d'amortissement pour le TILT
#define SMOOTHSTEP(x) ((x) * (x) * (3 - 2 * (x))) //SMOOTHSTEP expression.

// (¯`·.¸¸.-Variables valables pour tout le programme-.¸¸.·´¯)
int CHAMP_HORIZ;  // angle de champ horizontal
int CHAMP_VERTI;  // angle de champ vertical
int supperpo = 20; //pourcentage de supperposition de 2 photos voisines

int CRAN_PAN;     // nombre de crans du PAN pour une rotation 360°
int BASE;         // angle d'inclinaison initiale du TILT
int CRAN_TILT;    // nombres d'inclinaisons du TILT
int ANGLE_TILT;   // angle du mouvement d'inclinaison du TILT

int m = 0;                 // une variable pour SMOOTHSTEP
int n = 0;                 // une autre variable pour SOOMTHSTEP
float N = 100.0;           // nombre de segments de la courbe d'amortissement
float X;                   // Valeur amortie finale
float v;                   // Variable modifiée par la fonction SMOOTHSTEP
float old_angle = 2020.0;  // Position de départ
float new_angle;           // Position d'arrivée



//(¯`·.¸¸.-Déclaration des Servos-.¸¸.·´¯)
Servo pan_servo;  // le servo PAN
Servo tilt_servo; //le servo TILT



//(¯`·.¸¸.-Routine de Rotation crantée du PAN-.¸¸.·´¯)
void rotation_pan(int nb){                             //la rotation 360° est découpée en crans
  for (int i = 0 ; i < nb ; i ++){                     //boucle pour réaliser i crans pour 360°
    if (nb != 1){                                      //TEST pour éviter une rotation complète 360° avec un cran au nadir
      pan_servo.writeMicroseconds(PAN_IDLE + SPEED);   //mise en rotation du PAN
      delay (CYCLE / nb);                              //durée de rotation qui dépend du nombre de cran et de la durée totale d'un 360°
      pan_servo.writeMicroseconds(PAN_IDLE);           //arret du PAN
      delay (200);                                     //petite temporisation à régler
      clic();                                          //prise du cliché
    }
    else {                                             // SI la nacelle est au nadir
      delay(500);                                      // temporisation à régler
      clic();                                          // cliché !
      pan_servo.writeMicroseconds(PAN_IDLE + SPEED);   // rotation d'un quart de tour
      delay (CYCLE / 4);
      pan_servo.writeMicroseconds(PAN_IDLE);
      delay (200);                                     // second cliché à 90° du premier
      clic();
    }
  }
}



//(¯`·.¸¸.-Déclenchement direct de l'APN par CHDK-.¸¸.·´¯)
// Cette routine doit changer si on utilise un gentled ou autre...
void clic(){
  digitalWrite(APN_PIN, HIGH);   // pin APN ON
  delay(400);                    // durée 400ms (a régler)
  digitalWrite(APN_PIN, LOW);    // pin APN OFF
  delay(500);                    // delai après photo 500ms (a régler)
}
 


//(¯`·.¸¸.-Routine d'inclinaison du TILT-.¸¸.·´¯)

void tilt_angle(float angle){                          // La fonction permet une inclinaison de tout angle
   angle = map(angle, 0, 90, TILT_HORIZON, TILT_BAS);  // Conversion de l'angle (degré) en signal pour le servo TILT
   new_angle = angle;                                  // Définition du point d'arrivée pour SMOOTHSTEP
   for (m = 0; m < N; m++)                             // Fonction de déplacement amorti du servo
   {
    v = m / N;                   
    v = SMOOTHSTEP(v);           
    X = (new_angle * v) + (old_angle * (1 - v));
    tilt_servo.writeMicroseconds(X);
    delay(20);                                         // temporisation indispensable à régler éventuellement sinon le servo devient "fou"
    m++;                         
  }
   old_angle = angle;                                  // Le nouvel devient l'ancien pour la prochaine inclinaison
}
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Re: Projet KAPduino : mon autoKAP

Messagede J-C le Lun 18 Janvier 2010, 10:08

suite et fin :

Code: Tout sélectionner
//(¯`·.¸¸.-LE SETUP-.¸¸.·´¯)
void setup() {
  pan_servo.attach(PAN_PIN);                          // Affectation du servo PAN à son pin
  tilt_servo.attach(TILT_PIN);                        // Affectation du servo TILT à son pin
  pinMode(APN_PIN, OUTPUT);                           // Affectation de l'APN à son et définition du mode de fonctionnement du pin
                                                      // TEST du format du capteur de l'APN pour le calcul des angles des champ
  if (FORMAT == 1){                                   // si c'est un 4/3
    CHAMP_HORIZ = int(57.3 * 36 / FOCALE);            // calcul approché du champ horizontal en fonction de la focale
    CHAMP_VERTI = int(57.3 * 36 * 3 / (FOCALE * 4));  // calcul approché du champ vertical en fonction de la focale
  }
  else {                                              // sinon c'est un 3/2 (genre 24/36)
    CHAMP_HORIZ = int(57.3 * 36 / FOCALE);            // calcul champ horizontal
    CHAMP_VERTI = int(57.3 * 36 * 2 / (FOCALE * 3));  // calcul champ vertical
  }
  CRAN_PAN = int(360 / (CHAMP_HORIZ - (supperpo * CHAMP_HORIZ / 100))) + 1;                 // calcul (à l'entier supérieur) du nombre de crans du PAN à l'horizontale
  CRAN_TILT = int((90 - TILT_ZERO) / (CHAMP_VERTI - (supperpo * CHAMP_VERTI / 100))) + 1;   // calcul (à l'entier supérieur du nombre d'inclinaisons TILT hors nadir
  ANGLE_TILT= int((90 - TILT_ZERO) / CRAN_TILT);                                            // calcul de l'angle d'inclinaison
  BASE = 90 - (CRAN_TILT * ANGLE_TILT);                                                     // calcul de l'angle initial exact(proche de celui défini)
}

//(¯`·.¸¸.-LA BOUCLE-.¸¸.·´¯)
void loop() {
  for (int i = 0 ; i < (CRAN_TILT + 1); i ++){   // boucle d'inclinaison descendante du TILT nb de crans + 1 (nadir)
    const float pi = 3.14;                       // définition de pi car non présent dans l'arduino
    int j = BASE + ANGLE_TILT * i ;              // j angle de TILT à appliquer
    float a = pi * (j) / 180;                    // conversion de l'angle de tilt en radian
    float b = cos(a);                            // calcul du cosinus de l'angle de TILT (cos utilise les radians)
    int c = int(b * CRAN_PAN + 1);               // c'est le nombre de crans du PAN en fonction de l'angle du TILT
    tilt_angle(j);                               // déplacement du TILT
   
    rotation_pan(c);                             // Appel à la boucle de rotation PAN pour un tour 360°
    delay (1000);                                // temporisation à régler
  }
  for (int i = 1 ; i < CRAN_TILT; i ++){           //boucle d'inclinaison ascendante du TILT
    const float pi = 3.14;
    int j = BASE + ANGLE_TILT * (CRAN_TILT - i)  ;
    float a = pi * (j) / 180;
    float b = cos(a);
    int c = int(b * CRAN_PAN + 1);
    tilt_angle(j);
    rotation_pan(c);
    delay (1000);
  }
}


J'ai voulu cette fois-ci, faciliter son utilisation à n'importe quel appareil sur n'importe quelle nacelle ou presque (PAN modifié 360° et TILT non modifié).
Il faut pour cela donner les paramètres de la nacelle :
- durée de rotation 360° du PAN
- signaux du TILT pour qu'il soit à l'horizontale puis à la vericale
(Je pense qu'on peut automatiser ce test avec un programme arduino et afficher le résultat dans le monitor, mais je ne sais pas comment...)

Ensuite il faut définir les paramètres de prise de vue.
- le type de format de capteur 4/3 ou 3/2
- la focale en équivalent 24mm/36mm
- une approximation de l'inclinaison initiale

Tout le reste est calculé... On peut ajuster quelques réglages, mais ce n'est pas obligatoire.

Sinon, le gros "truc" à adapter est la méthode de déclenchement de l'APN. Dans mon cas c'est un Direct CHDK, mais on doit changer le code de la routine pour l'utilisation d'un Gentled.
A ce propos, il est possible de "mimer" un déclencheur infra-rouge, si on connait la séquence de clignotement de la LED IR. A ce moment là, il faut réaliser un câble simple avec une LED IR (faut se renseigner sur la longueur d'onde à choisir) et utiliser le déclenchement direct. On peut (à la microseconde près) faire émettre une séquence assez simplement (mais le tout reste de la connaître. Ceci étant, il existe des logiciels sur le net qui peuvent "scanner" un signal de télécommande IR en utilisant le port IRDA d'un PC (souvent présent sur les ordinateurs protables de la génération précédente. Pour en citer 2 : Girder (dans sa version 3 gratuite devrait le faire) et Monsterclick 2 (si je me souviens bien).

Voili voilou, j'espère avoir des retours d'expérience. Je remercie Fabien (fxix) pour son code qui m'a fait comprendre le langage arduino et qui m'a servi de base. Je remercie Deltakap et Vertigo pour leur expérience et les morceaux de code qui m'ont été bien utile.

J'espère aussi que ça vous sera utile comme à moi.

A+
JC
Avatar de l’utilisateur
J-C
Plus de 1000 messages
 
Messages: 1770
Inscription: Jeu 15 Mai 2008, 9:14
Localisation: Sud des Landes

Suivante

Retourner vers L'électronique embarquée et au sol

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités