- Robot Maker
- → Contenu de Vinchator
Contenu de Vinchator
Il y a 205 élément(s) pour Vinchator (recherche limitée depuis 22-juin 13)
Par type de contenu
Voir pour ce membre
#107525 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 29 janvier 2020 - 08:09 dans Vigibot
Ci-dessus le code televersé dans l'arduino
Avec l'aide de Mike j'ai intégré la fonction qui récupère une valeur sur 8 bits ( 0 à 255) proportionnel à la tension de l'accu dans le code exemple pour communiquer avec Vigibot via le Pi en liaison série. Du coté de Vigibot le barre graphe voltage à été adapté à ma plage de tension. Il y a également une moyenne qui est faite sur 100 mesures pour avoir un affichage moins oscillant dans le barre graphe
Ci dessous des photos du nano et de la case ou il sera monté. Il me manque encore un convertisseur de logique 3.3-5 pour les pins RX/TX pour finaliser et faire le test final
#107653 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 07 février 2020 - 11:42 dans Vigibot
- Terminer la station de charge avec le câble magnétique
- Finir le montage de l'arduino avec le convertisseur logique pour recevoir la tension de l'accu sur Vigibot
- Monter la nouvelle case pour le Pi avec le ventilateur piloté par une GPIO pour qu'il se coupe quand le robot est en veille
- Faire un accu 3S avec un BMS et des cellules de qualité avec une capacité de 3400mAh
-Remplacer les moteurs 370rpm par des 200rpm pour plus de couple et de précision
#109072 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 24 avril 2020 - 03:40 dans Vigibot
En passant la led du câble de charge à finalement rendu l'âme ( 12v à la place de 5v prévu) mais cela n'affecte pas la charge
#107768 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 17 février 2020 - 10:51 dans Vigibot
#107522 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 29 janvier 2020 - 05:26 dans Vigibot
/* * Vigibot Pi to Arduino Uart default remote configuration example by Mike118 * Exemple pour récupérer la tension de la batterie réalisé par vinchator */ // Meta Type : typedef struct { union { struct { uint16_t x; uint16_t y; }; uint16_t coordonnees[2]; uint8_t bytes[4]; }; } Point; typedef struct { union { struct { int8_t x; int8_t y; int8_t z; }; uint8_t bytes[3]; }; } Vitesses; // CONFIG #define PISERIAL Serial #define NBPOSITIONS 2 #define FAILSAFE 250 // ms // TTS #define TTSBUFFERSIZE 255 uint8_t ttsBuffer[TTSBUFFERSIZE]; uint8_t ttsCurseur = 0; // TX #define TXFRAMESIZE (NBPOSITIONS * 4 + 18) typedef struct { union { struct { uint8_t sync[4]; // 4 Point positions[NBPOSITIONS]; // NBPOSITIONS * 4 uint16_t val16[2]; // 2 * 2 uint8_t choixCameras; // 1 Vitesses vitesses; // 3 uint8_t interrupteurs; // 1 uint8_t val8[5]; // 5 }; uint8_t bytes[TXFRAMESIZE]; }; } TrameTx; // RX #define RXFRAMESIZE (NBPOSITIONS * 4 + 9) typedef struct { union { struct { // Sizes uint8_t sync[4]; // 4 Point positions[NBPOSITIONS]; // NBPOSITIONS * 4 uint8_t choixCameras; // 1 Vitesses vitesses; // 3 uint8_t interrupteurs; // 1 }; uint8_t bytes[RXFRAMESIZE]; }; } TrameRx; TrameTx trameTx; TrameRx trameRx; uint32_t lastTrameTimestamp = millis(); const int nEchantillons = 100; //nombre d'échantillons int moyenne = 0; //moyenne des échantillons int total = 0; //somme des échantillons int indice = 0; //indice de l'échantillon courant int echantillon[nEchantillons]; //tableau de stockage des échantillons void setup() { PISERIAL.begin(115200); pinMode(A0, INPUT); for (int i =0; i< nEchantillons; i++) //remplissage du tableau avec des 0 {echantillon[i] = 0;} } void loop() { total = total - echantillon[indice]; // soustraction de l'échantillon précédent echantillon[indice] = constrain(map(analogRead(A0), 680, 820, 0, 255), 0, 255); //lecture de A0 total = total + echantillon[indice]; //ajout du dernier échantillon indice++; // incrémentation de l'indice if (indice >= nEchantillons) { indice = 0; // retour au début si on est à la fin du tableau } moyenne = total / nEchantillons; if(readPiSerial()) { // each time we receive a full trame run repeatedly: // use values inside trameRx to tell your robot how to move ... // trameRx.vitesses.x , trameRx.vitesses.y, trameRx.vitesses.z // trameRx.positions[i].x trameRx.positions[i].y etc.... writePiSerial(); lastTrameTimestamp = millis(); } if( millis() - lastTrameTimestamp > FAILSAFE ) { // Stop the robot in case the robot lost connection with the Pi } else { // put your main code here, to run repeatedly: // avoid abstacle, run speed ... } } bool readPiSerial() { uint8_t current; static uint8_t lastType = 0; static uint8_t n = 0; static uint8_t frame[RXFRAMESIZE]; while(PISERIAL.available()) { current = PISERIAL.read(); switch(n) { case 0: if(current == '$') n = 1; break; case 1: if(current != 'T' && lastType == 'T') writeTtsBuffer('\0'); if(current == 'S' || current == 'T') { lastType = current; n = 2; } else n = 0; break; default: frame[n++] = current; if(n == RXFRAMESIZE) { if(lastType == 'T') { for(uint8_t i = 4; i < RXFRAMESIZE; i++) // Do not send the 4 sync data in the tts buffer writeTtsBuffer(frame[i]); } else if(lastType == 'S') { for(uint8_t p = 0; p < RXFRAMESIZE; p++) trameRx.bytes[p] = frame[p]; } n = 0; return true; } } } return false; } void writePiSerial() { // Header, do not modify trameTx.sync[0] = '$'; trameTx.sync[1] = 'R'; trameTx.sync[2] = ' '; trameTx.sync[3] = ' '; // modify the feedback according your need. By default we copy the trameRx content ... for(uint8_t i = 0; i < NBPOSITIONS; i++) { trameTx.positions[i].x = trameRx.positions[i].x; trameTx.positions[i].y = trameRx.positions[i].y; } trameTx.val16[0] = 0; // Voltage trameTx.val16[1] = 0; // Percent trameTx.choixCameras = trameRx.choixCameras; trameTx.vitesses.x = trameRx.vitesses.x; trameTx.vitesses.y = trameRx.vitesses.y; trameTx.vitesses.z = trameRx.vitesses.z; trameTx.interrupteurs = trameRx.interrupteurs; trameTx.val8[0] = 0; // CPU load trameTx.val8[1] = 0; // Soc temp trameTx.val8[2] = 0; // Link trameTx.val8[3] = 0; // RSSI trameTx.val8[4] = getVoltage255(); for( uint8_t i = 0; i < TXFRAMESIZE; i++) PISERIAL.write(trameTx.bytes[i]); } void displayTtsBuffer (uint8_t * ttsBuffer, uint8_t bufferSize) { // you can modify this function to display text on a screen depending on your hardware... for( uint8_t i = 0; i < bufferSize; i++) Serial.write(ttsBuffer[i]); Serial.println(""); } void writeTtsBuffer( uint8_t ttsChar) { static uint8_t ttsCurseur = 0; if( ttsCurseur < TTSBUFFERSIZE && ttsChar != '\0') { ttsBuffer[ttsCurseur] = ttsChar; ttsCurseur ++; } if( ttsCurseur == TTSBUFFERSIZE || ttsChar == '\0') { displayTtsBuffer (ttsBuffer, ttsCurseur); ttsCurseur = 0; } } uint8_t getVoltage255 () { return moyenne; }
#107512 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 27 janvier 2020 - 06:13 dans Vigibot
#107459 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 24 janvier 2020 - 04:01 dans Vigibot
J'ai fait un pont diviseur de tension avec des résistance de 9K et 18K pour etre au plus proche des 5V admissible sur les broches du nano quand mon accu est à 12.8V qui est la tension maximum que j'ai observée lors de la charge.
J'ai finalement choisi une tension de 12V à 100% et 10.5 à 0% cela devrait me laisser une autonomie de 2 bonnes heures avec utilisation modérée sans passer par la station de charge et faire durer mon accu un bon bout de temps
Au niveau du code j'ai juste ceci au final
const int pinVoltage = A0; int value = 0; int valuePi = 0; void setup() { pinMode(pinVoltage,INPUT); } void loop() { value = analogRead(pinVoltage); value = constrain(value, 685, 790); valuePi = map(value, 685, 790, 0, 255); }
#107456 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 24 janvier 2020 - 03:30 dans Vigibot
ya un delay c'est pour voir plus clair dans le moniteur série après on le gicle.
Maintenant comment intégrer mon petit code dans ton code exemple serial arduino je suis pas sur du tout
#107457 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 24 janvier 2020 - 03:32 dans Vigibot
const int pinVoltage = A0; float voltageNano = 0.0; float voltageAccu = 0.0; float R1 = 22000.0; float R2 = 5600.0; int value = 0; int Pi = 0; void setup() { Serial.begin(9600); } void loop() { value = analogRead(pinVoltage); voltageNano = (value * 5.0) / 1024; voltageAccu = (voltageNano / (R2/(R1+R2)))+0.5; value = constrain(value, 410, 494); Pi = map(value, 410, 494, 0, 255); Serial.print(value); Serial.print(" "); Serial.print(voltageAccu); Serial.print(" "); Serial.println(Pi); delay(1000); }
#107447 Robot mobile de suveillance via Vigibot
Posté par Vinchator sur 24 janvier 2020 - 03:46 dans Vigibot
J'ai déjà récupéré des tensions dans un arduino avec un pont resistif et une petite transformation de valeures avec un bout de code mais je me demande au final pour vigibot il faut quoi ? Un pourcentage ? Une valeure de tension en volt directement ? Une valeure entre 0 et 1024 ?
#104766 Robot explorateur
Posté par Vinchator sur 15 août 2019 - 01:51 dans Robots roulants, chars à chenilles et autres machines sur roues
Je compte piloter le robot à distance avec une télécommande basée sur un hc12, arduino, ecran lcd et récepteur pour la vidéo et écran tactile nextion pour les commandes
#104767 Robot explorateur
Posté par Vinchator sur 15 août 2019 - 01:55 dans Robots roulants, chars à chenilles et autres machines sur roues
Serait il plus judicieux d'utiliser des joysticks et des slicers hard plutôt que de les faire en soft sur le nextion ?
#106831 Mettre un bras BNC 3D sur Vigibot
Posté par Vinchator sur 09 décembre 2019 - 09:00 dans Bras 6 axes BCN3D Moveo
- Robot Maker
- → Contenu de Vinchator
- Privacy Policy