Aller au contenu


Photo
- - - - -

arduino raspberry pi : ralentissement


  • Veuillez vous connecter pour répondre
37 réponses à ce sujet

#1 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 19 février 2016 - 09:18

Bonjour à tous

 

 

Voila j'essaye d'envoyer une serie de données de ma rasPi vers l'arduino et toutes les 1 secondes envoyer des données de mon arduino vers la rasPi (données des capteurs)

 

J'ai essayé ceci mais je constate un ralentissement sur les tâches que mon robot a à executer  !  il recoit bien l'information  ! l'arduino reçoit bien les informations mais elle excute bien aprés ...

 

 

Je fais une boucle avec Millis pour ne pas bloquer pourtant !

#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Ultrasonic.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);


#define ONE_WIRE_BUS 22
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature ds18b20(&oneWire);

#define T1  24
#define E1  26
#define T2  23
#define E2  25
#define T3  27
#define E3  28
Ultrasonic ultrasonic1(T1, E1);
Ultrasonic ultrasonic2(T2, E2);
Ultrasonic ultrasonic3(T3, E3);
// Moteur A
int dir1PinA = 13;
int dir2PinA = 12;

// Moteur B
int dir1PinB = 11;
int dir2PinB = 8;

// Vitesse Moteur
int speedPinA = 10;
int speedPinB = 9;

int speed = 0;
char incomingByte;

long timedatasend = 1000;
long previousMillis = 0;


void setup() {
  ds18b20.begin();
  lcd.begin(16, 2);
  Serial.begin(9600);
  lcd.print("KBOT");

  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
  pinMode(speedPinA, OUTPUT);
  pinMode(dir1PinB, OUTPUT);
  pinMode(dir2PinB, OUTPUT);
  pinMode(speedPinB, OUTPUT);

  speed = 100;
  delay(5000);
  
}

float temperature(){
ds18b20.requestTemperatures();
return ds18b20.getTempCByIndex(0);
}

float ultrason(){
long microsec = ultrasonic1.timing(); 
float cmMsec = ultrasonic1.convert(microsec, Ultrasonic::CM);  
}

void loop() 
{

  if (Serial.available() > 0) {
  lcd.setCursor(0, 0);
  lcd.print("KBOT CONNECTED"); 
  incomingByte = Serial.read();
  //Serial.println(incomingByte, DEC);
  analogWrite(speedPinA, speed);
  analogWrite(speedPinB, speed);
  switch (incomingByte)
    {
    case 'A':
      analogWrite(speedPinA, speed);
      analogWrite(speedPinB, speed);
      digitalWrite(dir1PinA, LOW);
      digitalWrite(dir2PinA, HIGH);
      digitalWrite(dir1PinB, HIGH);
      digitalWrite(dir2PinB, LOW);
      break;
    case 'B':
      digitalWrite(dir1PinA, LOW);
      digitalWrite(dir2PinA, LOW);
      digitalWrite(dir1PinB, LOW);
      digitalWrite(dir2PinB, LOW);
      break;
    case 'C':
      analogWrite(speedPinA, speed);
      analogWrite(speedPinB, speed);
      digitalWrite(dir1PinA, HIGH);
      digitalWrite(dir2PinA, LOW);
      digitalWrite(dir1PinB, LOW);
      digitalWrite(dir2PinB, HIGH);
      break;
    case 'D':
      analogWrite(speedPinA, speed);
      analogWrite(speedPinB, speed);
      digitalWrite(dir1PinA, LOW);
      digitalWrite(dir2PinA, HIGH);
      digitalWrite(dir1PinB, LOW);
      digitalWrite(dir2PinB, HIGH);
      break;
    case 'G':
      analogWrite(speedPinA, speed);
      analogWrite(speedPinB, speed);
      digitalWrite(dir1PinA, HIGH);
      digitalWrite(dir2PinA, LOW);
      digitalWrite(dir1PinB, HIGH);
      digitalWrite(dir2PinB, LOW);
      break;
    default:
      Serial.print("commande : ");
      Serial.print(incomingByte);
      break;
    
      }
    
 
 }

//unsigned long currentMillis = millis();
//if(currentMillis - previousMillis > timedatasend) {
//
//
//    
//
//    previousMillis = currentMillis;  
//    float sondetemperature = temperature();
//    float U1 = ultrason();
//    Serial.println(sondetemperature);
//    Serial.println(U1);
//    }
     
}

    
   


Le code qui perturbe est commenté ... et la cela marche ! c'est plus rapide !

Pr info pour l'info sur la rasPi je ne gère pas la reception juste l'émission

 

cdlt,

bypbop 

 



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 19 février 2016 - 10:57

Quelques remarque : 
1) initialise ton Baud rate plus haut, passe de 9600 à 115200 par exemple ( et adapte sur le raspberry en conséquence ) 
2) essaye de reprogrammer mais en commentant uniquement 
//float sondetemperature = temperature();
Et remplace par : float sondetemperature = 35;
Dis moi si c'est toujours aussi rapide =) . 


(visiblement ton capteur de température utilise la librairie onewire,  c'est plutôt long comme acquisition et ce sont des acquisitions "bloquante" . )

 

@+


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 21 février 2016 - 08:40

Bonjour Mike118,

 

cela vient bien de la sonde ds18b20 !! Merci !! Y a t'il un moyen de palier à cela ?

 

Sinon petite question : Est t'il possible de programmer son arduino en enregistrant son skecth dans un rep partager par exemple ?

 

Cela m'éviterait de tout débrancher !

 

cdlt,

bypbop



#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 21 février 2016 - 08:52

C'est ta sonde qui est lente... Perso j'utilise la DHT22 et j'ai exactement le même problème. La solution la plus efficace que j'ai trouvé si tu veux pouvoir toujours avoir un résultat rapide c'est d'ajouter un autre " slave " qui répondra très rapidement la valeur qu'il aura en mémoire et qui chaque seconde remettra sa valeur à jour.

Pour ce genre de slave perso j'utilise des arduino pro mini pour des questions de simplicité et de coûts mais n'importe quel attiny ou autre fera l'affaire.  

Concernant ta deuxième question j'ai pas compris ... 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#5 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 21 février 2016 - 08:58

euhh oui dslé ! 

 

dans repertoire qui est sur la Raspi ! comme j'ai la raspi connecté en usb à mon arduino !

 

Pour eviter de debrancher mon arduino et de la mettre sur le pc pour recharger un nouveau sketch ...

 

@ tte



#6 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 21 février 2016 - 09:16

hum tu veux dire faire ce genre de chose ? http://www.instructables.com/id/Program-arduino-from-raspberry-pi/ 

Si c'est bien ça, et que tu le fais ça serais super cool de faire un tuto pour robot maker  ( en français ;) ) :P ça aiderait les prochains ! :P 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#7 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 21 février 2016 - 09:36

Je pense oui ca serait cool de pas debrancher tout le temps ;-)

 

c'est surtout à partir de SSH que je chercher mais je vais voir ce que l'on peut faire et je te tiens au jus du résultat ...



#8 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 07 mars 2016 - 11:50

Salut Bypbop,

Tu as trouvé comment passer par ssh pour charger le sketch ?



#9 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 08 mars 2016 - 06:16

Salut Path,

 

Non pas encore j'ai regardé la methode de Mike118 mais c'est via l'interface graphique de la RasPi

 

cdlt,

bypbop



#10 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 16 mars 2016 - 11:09

Salut Bypbop,

J'ai trouvé un moyen simple d'upload des .ino sur le arduino depuis le PI via ssh : le Makefile. J'ai pensé à toi.

http://www.robot-maker.com/forum/topic/10234-ash-self-balancing-robot/?p=67997



#11 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 17 mars 2016 - 05:01

ahh super je vais testé ca ce soir ;-)

Tu as essayé ?

 

 

Un grand merci  :thank_you:

cdlt,

bypbop



#12 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 17 mars 2016 - 05:16

Vérifié même ;)

J'ai pas testé avec des libs mais tu me diras.



#13 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 17 mars 2016 - 07:32

alors j'ai installé comme sur le tuto !

 

ca fonctionne parfaitement avec un sketch sans librairie ;-)

 

par contre apparement avec celui de mon robot ca me donne ceci :

root@raspberrypi:/media/share/Karduino# make
/usr/bin/avr-g++ -c -mmcu=atmega1280 -DF_CPU=16000000L -DARDUINO=100 -I. -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/mega   -g -Os -w -Wall -ffunction-sections -fdata-sections -fno-exceptions build-cli/Karduino.cpp -o build-cli/Karduino.o
build-cli/Karduino.cpp:2:27: fatal error: LiquidCrystal.h: No such file or directory
compilation terminated.
/usr/share/arduino/Arduino.mk:426: recipe for target 'build-cli/Karduino.o' failed
make: *** [build-cli/Karduino.o] Error 1
root@raspberrypi:/media/share/Karduino#


#14 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 17 mars 2016 - 08:35

Je ne suis pas encore allé jusque là.

Dans le Makefile, je crois qu'il faut définir ARDUINO_LIBS avec le répertoire qui contient tes libs.

C'est ça ? Sinon, je vais relire la doc ^^



#15 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 17 mars 2016 - 09:57

oui dans le makefile j'ai vu ca par contre les libs on les mets où ?



#16 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 17 mars 2016 - 10:00

j'ai trouvé ceci :

 

 

 

Hopefully these will be self-explanatory but in case they’re not:

BOARD_TAG A tag identifying which type of Arduino you’re using. This only works in version 0.6 and later. ARDUINO_PORT The port where the Arduino can be found (only needed when uploading) If this expands to several ports, the first will be used. ARDUINO_LIBS A list of any libraries used by the sketch—we assume these are in $(ARDUINO_DIR)/hardware/libraries.

Until version 0.8 you had to specify a TARGET name which set the basename for the executables. You still can do this, but it’s not necessary: thanks to a patch from Daniele Vergini it now defaults to the name of the current directory.



#17 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 17 mars 2016 - 10:18

J'ai testé.

Il faut laisser ARDUINO_LIBS comme il est.

Pour que ça fonctionne, il faut ajouter USER_LIB_PATH.

RDUINO_DIR = /usr/share/arduino
BOARD_TAG    = uno
ARDUINO_PORT = /dev/ttyACM*
ARDUINO_LIBS =
USER_LIB_PATH = /home/pi/SBR/arduino/libs
include /usr/share/arduino/Arduino.mk



#18 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 20 mars 2016 - 01:28

ok merci Path si je comprends bien tu as mis tes librairie dans le rep libs ...

c'est quoi le fichier arduino.mk ?

 

cordialement,

bypbop



#19 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 20 mars 2016 - 01:46

Faut pas toucher à Arduino.mk. Il est inclus à la fin de ton Makefile. C'est le Makefile generic arduino. Il est installé avec arduino-core et arduino-mk.

J'ai modifié le tuto pour inclure ces librairies. Dis-moi si c'est clair pour toi. ;)

#20 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 20 mars 2016 - 11:09

Ok Path ! alors pour moi toujours pareil 

 

j'ai bien modifié mon makefile comme plus haut ...

 

cela me donne tjrs une erreur : 

fatal error: LiquidCrystal.h: No such file or direc                        tory
compilation terminated.






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users