Bienvenue sur Multi Rotor Fans Club. Cliquer ici pour vous enregistrer
ou ici pour vous connecter


  • Annonce

Bonjour a tous.
Un petit changement sur l'adresse du forum qui a quand même son importance, surtout en terme de sécurité, c'est que nous passons en https, donc en connexion sécurisé.
Il vous suffit de modifier votre favori et/ou marque page et de regarder si tout fonctionne bien.
Si vous avez des erreurs, il vous suffit de définir le permissions.
Je vous recommande de le faire, car vous risquez de vous reconnecter a chaque session.
Voila, j’espère que cela vous conviens, j'essaye de faire le maximum pour que vous soyez en sécurité.
Dehas



Homemade Quadcopter/C++ Code sans ARDUINO/MULTIWII

Modérateur: Dehas

Re: Homemade Quadcopter/C++ Code sans ARDUINO/MULTIWII

Message non lupar sylvainmahe » Lun 6 Juin 2016 21:17

Dans la nouvelle version de ma bibliothèque j'ai inclus la gestion de 2 nouveaux composants:
le gyroscope/magnétomètre BNO055
et le baromètre BMP180

J'ai créé avec ce gyro un mode auto pilote très robuste (horizon artificiel) pour débutant pour piloter le quadri-hélicoptère, je le publierais bientôt pour ceux qui veulent une fonction débutant ! :)

Je ferais également des tests en vol avec le baromètre pour mesurer l'altitude.

J'ai d'autres composants à inclure prochainement à la bibliothèque:
le NRF24L01P pour communiquer en 2.4Ghz ;)
Avatar de l’utilisateur
sylvainmahe
Bicopter
Absent
 
Messages: 23
Enregistré le: Jeu 3 Juil 2014 18:21

Re: Homemade Quadcopter/C++ Code sans ARDUINO/MULTIWII

Message non lupar sylvainmahe » Jeu 16 Juin 2016 11:04

(toujours en pure c++)
BNO055 et BMP180 intégrés et fonctionnels :)
(j'ai fait plusieurs vols avec ce nouveau gyro)

Première communication 2.4Ghz réussie avec le NRF24L01P :)

Je vous tiendrai informés de la suite (projet de réaliser une radiocommande 2.4ghz).
Avatar de l’utilisateur
sylvainmahe
Bicopter
Absent
 
Messages: 23
Enregistré le: Jeu 3 Juil 2014 18:21

Re: Homemade Quadcopter/C++ Code sans ARDUINO/MULTIWII

Message non lupar sylvainmahe » Ven 24 Juin 2016 11:10

Exemple de radiocommande une voie avec ma bibliothèque et le composant nrf24l01p ! ^_^

Imaginons que vous voulez transmettre la valeur d'un potentiomètre à votre modèle, ça donne ceci:

Code: Tout sélectionner
#include "../module/Nrf24L01P.h"
#include "../module/AnalogRead.h"

int main()
{
   Nrf24L01P canal = Nrf24L01P (1);
   AnalogRead potar = AnalogRead (15);
   
   Nrf24L01P::start (1, 86400312, true);
   
   while (true)
   {
      potar.state();
      
      canal.transmit (potar.value);
   }
   
   return 0;
}


Et à l'autre bout, on fait bouger un servo avec la valeur du potentiomètre qu'on reçois par radio:

Code: Tout sélectionner
#include "../module/Nrf24L01P.h"
#include "../module/PwmWrite.h"

int main()
{
   Nrf24L01P canal = Nrf24L01P (1);
   PwmWrite servo = PwmWrite (1, 0, 500, 1000);
   
   Nrf24L01P::start (1, 86400312, true);
   PwmWrite::start (50);
   
   while (true)
   {
      canal.receive();
      
      servo.pulse (canal.value);
   }
   
   return 0;
}


C'est pas plus compliqué que ça, mais avec ce modeste code vous avez déjà une radiocommande 1 voie :)

A noter que "86400312" c'est un identifiant unique sur 32 bits (une clé réseau si vous voulez), que vous choisissez à votre guise pour sécuriser la communication entre les deux nrf24l01p.

Les possibilités sont vraiment grandes, vous pouvez émettre, transmettre à la suite dans n'importe quel ordre, j'ai essayé par exemple des configurations un peu délicates à savoir:
incrément d'une valeur (par exemple le temps qui passe)
transmission de cette valeur d'un module 1 à un autre module 2
réception de la valeur depuis le module 2 puis émission vers le module 1
réémission de la valeur reçue du module 1 vers le module 2
réémission de la valeur du module 2 vers le module 1
affichage de la valeur sur un afficheur à leds via le module 1

Et ça marche vraiment impec sans bugs, avec une latence de l'ordre du millième de secondes, et avec une portée d'au moins 1km bien-sûr :)

Les données utiles qui transitent sont sur 32 bits signés (+ 8 bit pour le canal ou l'adresse).

A vous de jouer :)
Avatar de l’utilisateur
sylvainmahe
Bicopter
Absent
 
Messages: 23
Enregistré le: Jeu 3 Juil 2014 18:21

Re: Homemade Quadcopter/C++ Code sans ARDUINO/MULTIWII

Message non lupar sylvainmahe » Mar 28 Juin 2016 14:47

J'ai bien avancé dans mon histoire de quadri auto-stable sur l'horizon, j'ai testé hier un nouveau code qui utilise la rapidité du mpu6050 (le mode de vol normal c'est à dire acrobaties), et la fusion gyro+magnétomètre du bno055 pour avoir un pitch/roll verrouillé (le mode de vol horizon).

On passe de l'un a l'autre avec un inter sur la radio, ça permet de voler en mode débutant (horizon), c'est vraiment très très facile à piloter pour le coup, et quand on bascule l'inter on peut faire de la voltige (le roll et le pitch ne suivent plus l'horizon et ne sont plus bloqués a des angles min/max qu'on prédéfini).
Cet inter permet aussi de sauver le modèle si jamais on est perdu dans nos manches (ca remet le quadri a plat), j'ai pas encore testé ça en vol, mettre le quadri sur le dos et basculer l'inter horizon, mais ça ne serait tarder.

J'ai fait une vidéo pour vous montrer ce mode:



Et une nouveauté sinon: à la "demande" d'un youtubeur, j'ai créé le bout de code qu'il faut pour faire fonctioner le magnétomètre Hmc5883L.
-> https://cdn-shop.adafruit.com/datasheet ... ass_IC.pdf

C'est maintenant inclus dans ma bibliothèque: http://sylvainmahe.xyz/data/module.zip
Cela retourne les valeurs en gauss (puisque le datasheet parle de gauss j'ai mi ça dans cette unité), à noter que 1 gauss = 100 micro tesla.

Voila pour l'instant (en presque 2 ans de travail en solo) tout ce qui est créé comme classes dans ma bibliothèque:
Code: Tout sélectionner
#include "../module/GpioRead.h"
#include "../module/GpioWrite.h"
#include "../module/AnalogRead.h"
#include "../module/InterruptRead.h"
#include "../module/PwmRead.h"
#include "../module/PwmWrite.h"
#include "../module/SoundWrite.h"

#include "../module/Timer.h"
#include "../module/Delay.h"

#include "../module/Math.h"
#include "../module/Iteration.h"
#include "../module/Average.h"
#include "../module/Hysteresis.h"
#include "../module/Random.h"

#include "../module/Max7219.h"
#include "../module/Mpu6050.h"
#include "../module/Bno055.h"
#include "../module/Hmc5883L.h"
#include "../module/Bmp180.h"
#include "../module/Nrf24L01P.h"

#include "../module/Network.h"

#include "../module/Memory.h"
#include "../module/Power.h"
#include "../module/Tool.h"


Vous pouvez faire beaucoup de projets avec ça et l'atmega328p-pu.
Avatar de l’utilisateur
sylvainmahe
Bicopter
Absent
 
Messages: 23
Enregistré le: Jeu 3 Juil 2014 18:21


Re: Homemade Quadcopter/C++ Code sans ARDUINO/MULTIWII

Message non lupar PEPE du59 » Dim 16 Oct 2016 14:57

Superbe travail de programmation et quelle stabilité.
Vivement que je puisse tester ce soft, ayant appris à programmer sur l'IDE Arduino, c'es pas évident...
WLToys V959, HUBSAN X4,
Quads DIY Frame X
Multiwii, APM Planner, Naza, Pixhawk 2.4.8
Chargeur WIZARD X6S
RC: Turnigy 9X flashée OpenTx, Flysky I6 flashéé 10cx, Homemade 12cx PPM
La connaissance non partagée n'a pas vraiment son utilité (Desbiens D.)
Avatar de l’utilisateur
PEPE du59
Bicopter
Absent
 
Messages: 24
Enregistré le: Sam 7 Juin 2014 15:57
    Voir la position géographique du membre

Re: Homemade Quadcopter/C++ Code sans ARDUINO/MULTIWII

Message non lupar sylvainmahe » Mer 26 Oct 2016 13:10

Merci de ton commentaire PEPE.

Module est maintenant en version finale (testé, retesté, validé, avec depuis un certain nombre d'améliorations du code) toujours téléchargeable ici: http://sylvainmahe.xyz/


Ce projet de quadri est expliqué ici: http://sylvainmahe.xyz/projectQuadcopter.html


N'hésitez pas si vous avez besoin de plus d'infos.
Avatar de l’utilisateur
sylvainmahe
Bicopter
Absent
 
Messages: 23
Enregistré le: Jeu 3 Juil 2014 18:21

Re: Homemade Quadcopter/C++ Code sans ARDUINO/MULTIWII

Message non lupar PEPE du59 » Ven 28 Oct 2016 10:30

Bonjour,

Sur ton site je lis mais sans comprendre à quels pins de l'Atméga328 correspondent ces ports:
- Port 1 sur voie des gaz (throttle)
- Port 2 sur voie de l'axe de tanguage (pitch)
- Port 3 sur voie de l'axe de rouli (roll)
- Port 4 sur voie de l'axe de lacet (yaw)
- Port 5 sur voie de l'interrupteur de coupure moteurs (throttle cut)
- Port 8 sur ESC moteur 1 (avant gauche)
- Port 9 sur ESC moteur 2 (avant droit)
- Port 10 sur ESC moteur 3 (arrière gauche)
- Port 11 sur ESC moteur 4 (arrière droit)
- Port 13 sur buzzer de signalement
- Port 19 sur gyroscope MPU6050 (SDA)
- Port 20 sur gyroscope MPU6050 (SCL)

Peux-tu préciser sur quel pin (PCINT17/D1 PCINT18/D2 PCINT19/D3 ... A1 A2 A3 A4(PCINT12/SDA) A5(PCINT13/SCL) brancher le récepteur, les ESC, etc... ?

D'après le code source je crois comprendre
- Pin D1 sur voie des gaz (throttle) : PwmRead channelThrottle = PwmRead (1, false);
- Pin D2 sur voie de l'axe de tanguage (pitch) : PwmRead channelPitch = PwmRead (2, false);
- Pin D3 sur voie de l'axe de rouli (roll) : PwmRead channelRoll = PwmRead (3, false);
- Pin D4 sur voie de l'axe de lacet (yaw) : PwmRead channelYaw = PwmRead (4, false);
- Pin D5 sur voie de l'interrupteur de coupure moteurs (throttle cut) : PwmRead channelHold = PwmRead (5, false);
- Pin D8 sur ESC moteur 1 (avant gauche) : PwmWrite motor1 = PwmWrite (8, 0, 0, 0);
- Pin D9 sur ESC moteur 2 (avant droit) : PwmWrite motor2 = PwmWrite (9, 0, 0, 0);
- Pin D10 sur ESC moteur 3 (arrière gauche) : PwmWrite motor3 = PwmWrite (10, 0, 0, 0);
- Pin D11 sur ESC moteur 4 (arrière droit) : PwmWrite motor4 = PwmWrite (11, 0, 0, 0);
- Pin D13 sur buzzer de signalement : SoundWrite::pin (13);
- Port 19 sur gyroscope MPU6050 (SDA) : JE NE COMPRENDS PAS, LE SDA ETANT LE PIN A4 SOIT 18
- Port 20 sur gyroscope MPU6050 (SCL) : JE NE COMPRENDS PAS, LE SDA ETANT LE PIN A5 SOIT 19

Merci
WLToys V959, HUBSAN X4,
Quads DIY Frame X
Multiwii, APM Planner, Naza, Pixhawk 2.4.8
Chargeur WIZARD X6S
RC: Turnigy 9X flashée OpenTx, Flysky I6 flashéé 10cx, Homemade 12cx PPM
La connaissance non partagée n'a pas vraiment son utilité (Desbiens D.)
Avatar de l’utilisateur
PEPE du59
Bicopter
Absent
 
Messages: 24
Enregistré le: Sam 7 Juin 2014 15:57
    Voir la position géographique du membre

Re: Homemade Quadcopter/C++ Code sans ARDUINO/MULTIWII

Message non lupar sylvainmahe » Mer 7 Déc 2016 17:39

Désolé de la réponse tardive.

Quand j'indique port x, c'est le port de ce que j'appel l'automate, voir phrase ici:
"Connections (automate sur les différents systèmes embarqués):"
Soit ma propre carte avec l'atmega328p dessus:
http://sylvainmahe.xyz/projectAtmega328p.html

Soit:
port 1 = pd0
port 2 = pd1
port 3 = pd2
port 4 = pd3
port 5 = pd4
port 6 = pd5
port 7 = pd6
port 8 = pd7
port 9 = pb0
port 10 = pb1
port 11 = pb2
port 12 = pb3
port 13 = pb4
port 14 = pb5
port 15 = pc0
port 16 = pc1
port 17 = pc2
port 18 = pc3
port 19 = pc4
port 20 = pc5

Voir photo:
http://sylvainmahe.xyz/photo/dsc01789.jpg
Avatar de l’utilisateur
sylvainmahe
Bicopter
Absent
 
Messages: 23
Enregistré le: Jeu 3 Juil 2014 18:21

Précédente

Retourner vers Modules et Montages DIY

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité