Open smart car IR

Bonjouir,
J'ai acheté pour mes petits fils une voiture smart open car

Mais voila, ils ne m'ont pas donné de logiciel

Je cherche comment faire rouler cette p de voiture car les gosses me tannes le luc .

Je pense qu'il faut des bibilloteque .....je ne sais pas trop....

2022-02-19-230304_1

je n'ai droit qu'a une seule et unique photos

Salutations du soir

Avez-vous vérifié la messagerie interne d'aliexpress ?

J'ai la version bluetooth à la fin je vous laisse un zip avec ses librairies, vous aurez tout sauf la partie IR.
Un conseil, envoyez leur ce même message photo inclus à Open-smart via aliexpress, Ce sont des gens sérieux, ils m'ont envoyé des codes complets à évaluer avant d'acheter. Si vous ne l'obtenez pas de cette façon (ce dont je doute), il serait très facile d'apporter de petites modifications.
Salutations.
Auto.zip (660.8 KB)

bonjour et tout d'abord : merci

Alors j'ai obtenu ceci (voir le zip) ...ha bin non ...nouveau utilisateur je peux pas ...
c'est 4WD Smart Car 06
mais je ne sais pas par quel bout empoigner ça.
j'ai copier les librairie dans le dossier ou y'a les autres librairies d'origine IDE .
Mais je ne trouve pas le programme qui fait fonctionner tout ça.
j'ai essayé ircarremot mais erreur trouve pas string.h
et je ne trouve pas ce fichier sur googlx

Eh bien, comme je vous l'ai dit, ce zip était pour ma version bluetoot, il ne convient pas à 100% à la vôtre.
Mais maintenant que vous avez donné le nom exact de votre voiture, "4WD Smart Car 06", J'ai trouvé les bons codes et bibliothèques. Donc, tout d'abord, annulez tout ce qui a été fait et supprimez ce fichier zip.
Dans ce ENLACEvous avez la vidéo explicative officielle et ils vous donnent cette autre ADRESSE où vous pouvez télécharger tout le code et les bibliothèques pour votre voiture.
Télécharger tout, (c'est toute la documentation officielle). Décompressez le .zip et dans le dossier ArduinoLib, vous aurez quatre autres dossiers.
L'IrCarControl est celui qui contient le programme qui pilote la voiture, copiez-le là où votre ide enregistre vos projets .Les trois autres sont les bibliothèques, copiez-les dans votre dossier de bibliothèque.
Eh bien, c'est tout, avec l'ide que vous compilez et chargez le programme IRcarControl.ino dans la voiture devrait fonctionner . Lors de la compilation, l'erreur de ne pas trouver la bibliothèque String.h peut se reproduire, si cela se produit, supprimez cette ligne du programme,Je pense que votre code ne l'utilise pas, mon modèle ne l'utilise pas et je l'ai supprimé, tout fonctionnait bien sans.
Salutations et bonne chance

Merci gonpezzi, comme vous m'aviez conseillé, alliexpress m'a répondu
Vraiment merci
c'est sympa
il faut me tutoyer
Voici mon code qui marche (que c'est pas moi l'auteur hein)
Mes petits fils sont aux anges !

Si vous voulez, je serait heureux d'avoir des retours avec des annotations du genre // allume le faisceau intergalactique
afin que je comprenne avec mes petits fils mieux ce scripte que je n,'ai pas écris
Programme 4WD Smart Car 02
Attention avec String.h qui m'a posé des soucis.
Avec une version récente de l'IDE Arduino ça marche mais pas avec une ancienne version

Important:
J'ai linux bien sur, hors de question de redonner des sous à MS, ils m'ont arnaqué, un beau matin après une MAJ, mon win7 (que j'ai acheté 100 euros quand même) était désactivé et on me traitait de pirate
Et avec linux je dois à chaque session entrer

sudo chmod a+rw /dev/ttyUSB0 

bon, voici le code

/*
Programme 4WD Smart Car 02
Attention avec String.h qui m'a posé des soucis. 
Avec une version récante de l'ide ça marche mais pas avec une encienne version 
*/

#include <String.h>
#include "MotorDriver.h"

#include <IRremote.h>
#include <OS_Buzzer.h>

#define BUZZER_PIN A0          //buzzer connecté sur A0 de l'Arduino
Buzzer buzzer(BUZZER_PIN);


#define CTRL_INVALID     0XFF
#define CMD_FORWARD     'F'
#define CMD_RIGHT_FRONT 'R'

#define CMD_BACKWARD    'B'

#define CMD_LEFT_FRONT  'L'
#define CMD_STOP        'S'

#define RECV_PIN 2
IRrecv IR(RECV_PIN);

#define SPEED_STEPS 20
uint8_t speed0 = 100;
void setup(){

  motordriver.init();
  motordriver.setSpeed(100,MOTORA);
  motordriver.setSpeed(100,MOTORB);

  IR.enableIRIn(); // Démarage réception
}
uint8_t bt_command;

#define CAR_STOP 0
#define CAR_FORWARD 1
#define CAR_BACK 2
uint8_t car_status = CAR_STOP;
uint8_t new_status = car_status;

void loop(){
  
  
  
  if (IR.decode()) {//Si decode est valide 

    if(IR.isReleased())//
	{
	  buzzer.on();//chaque fois que vous appuyez sur la touche, le buzzer émet un bip
      delay(100);   //durée du bip 100ms
	  switch(IR.keycode)
	  {
	    case KEY_ZERO:  bt_command = '0';break;
		case KEY_ONE:   bt_command = '1';break;
		case KEY_TWO:   bt_command = '2';break;
		case KEY_THREE: bt_command = '3';break;
		case KEY_FOUR:  bt_command = '4';break;
		case KEY_FIVE:  bt_command = '5';break;
		case KEY_SIX:   bt_command = '6';break;
		case KEY_SEVEN: bt_command = '7';break;
		case KEY_EIGHT: bt_command = '8';break;
		case KEY_NINE:  bt_command = '9';break;
		case KEY_PLUS:  bt_command = CMD_FORWARD;break;
		case KEY_MINUS: bt_command = CMD_BACKWARD;break;
		case KEY_PREV:  bt_command = CMD_LEFT_FRONT;break;
		case KEY_NEXT:  bt_command = CMD_RIGHT_FRONT;break;
		case KEY_PLAY:  bt_command = CMD_STOP;break;
		default: break;
	  }
	  buzzer.off(); //coupe le buzzer
    }
    IR.resume(); // Recevoir la valeur suivante
  	}
    controlCar(bt_command);
	bt_command = 0XFF;
}


void controlCar(uint8_t cmd){
   
   switch(cmd)
  {
    case CMD_FORWARD:     new_status = CAR_FORWARD; break;
	case CMD_RIGHT_FRONT: 
		if(car_status != CAR_STOP)new_status = CAR_FORWARD;
		motordriver.goRight();
		delay(600); /*valeur d'origine 200 trop faible
    en angmentant, l'angle du virage est plus grand*/
		break;
	case CMD_BACKWARD:    new_status = CAR_BACK; break;
	case CMD_LEFT_FRONT:  
		if(car_status != CAR_STOP)new_status = CAR_FORWARD;
		motordriver.goLeft();
		delay(600);/*valeur d'origine 200 trop faible
    en angmentant, l'angle du virage est plus grand*/
		break;
	case CMD_STOP:        new_status = CAR_STOP;break;
	default: break;
  }
  switch(new_status)
  {
    case CAR_STOP: motordriver.stop();break;
	case CAR_FORWARD: motordriver.goForward();break;
	case CAR_BACK: motordriver.goBackward();break;
	default: break;
  }
  car_status = new_status;
  if((cmd>='0')&&(cmd<='9'))
  {
  	speed0 = cmd-0x30;
	speed0 = map(speed0, 0, 9, 0, 255);
	motordriver.setSpeed(speed0,MOTORA);
    motordriver.setSpeed(speed0,MOTORB);
  }
}

void speedUp(){
  if(speed0 < 236)speed0 += SPEED_STEPS;
  else speed0 = 255;
  motordriver.setSpeed(speed0,MOTORA);
  motordriver.setSpeed(speed0,MOTORB);
}

void speedDown(){
  if(speed0 > 70)speed0 -= SPEED_STEPS;
  else speed0 = 50;
   motordriver.setSpeed(speed0,MOTORA);
  motordriver.setSpeed(speed0,MOTORB);
}

Il y a peu de commentaires à faire car la plupart du code est constitué de variables et de directives nécessaires au bon fonctionnement des trois modules de la voiture (IR, moteurs et buzzer). Les toucher pourrait entraîner un fonctionnement chaotique de la voiture.

Mais vous pouvez ajouter d'autres fonctions et modules, (lumières, détecteur d'obstacles, pour ne citer que quelques exemples). Le "cœur" du programme est le "switch-case" suivant.

 switch(IR.keycode)
	  {
	    case KEY_ZERO:  bt_command = '0';break;
		case KEY_ONE:   bt_command = '1';break;
		case KEY_TWO:   bt_command = '2';break;
		case KEY_THREE: bt_command = '3';break;
		case KEY_FOUR:  bt_command = '4';break;
		case KEY_FIVE:  bt_command = '5';break;
		case KEY_SIX:   bt_command = '6';break;
		case KEY_SEVEN: bt_command = '7';break;
		case KEY_EIGHT: bt_command = '8';break;
		case KEY_NINE:  bt_command = '9';break;
		case KEY_PLUS:  bt_command = CMD_FORWARD;break;
		case KEY_MINUS: bt_command = CMD_BACKWARD;break;
		case KEY_PREV:  bt_command = CMD_LEFT_FRONT;break;
		case KEY_NEXT:  bt_command = CMD_RIGHT_FRONT;break;
		case KEY_PLAY:  bt_command = CMD_STOP;break;
		default: break;
	  }

C'est lui qui décode la touche pressée sur la télécommande et l'assigne à la variable "bt_command". Comme nous allons le voir ci-dessous, les touches de 0 à 9 sont libres, les 5 autres étant utilisées pour commander les moteurs, avant, arrière, direction et arrêt. Rien ne doit être touché ici, nous le ferons plus tard. Une fois le décodage terminé, la fonction qui exécute l'action correspondante est appelée en lui passant la valeur contenue dans "bt_command" :

  controlCar(bt_command);

C'est dans cette fonction " void controlCar(uint8_t cmd) " que nous devons ajouter les nouvelles actions à effectuer lorsque nous appuyons sur les touches de 0 à 9. Comme vous pouvez le voir, il n'a actuellement que les " case " définis dans le "if" ci-dessus pour les mouvements du moteur. Ici, nous créons les nouveaux appels de fonction à effectuer et nous créons ces fonctions à la fin de tout le code que vous avez maintenant, et tout ressemblera à ça :

/*
  Programme 4WD Smart Car 02
  Attention avec String.h qui m'a posé des soucis.
  Avec une version récante de l'ide ça marche mais pas avec une encienne version
*/

#include <String.h>
#include "MotorDriver.h"

#include <IRremote.h>
#include <OS_Buzzer.h>

#define BUZZER_PIN A0          //buzzer connecté sur A0 de l'Arduino
Buzzer buzzer(BUZZER_PIN);


#define CTRL_INVALID     0XFF
#define CMD_FORWARD     'F'
#define CMD_RIGHT_FRONT 'R'

#define CMD_BACKWARD    'B'

#define CMD_LEFT_FRONT  'L'
#define CMD_STOP        'S'

#define RECV_PIN 2
IRrecv IR(RECV_PIN);

#define SPEED_STEPS 20
uint8_t speed0 = 100;
void setup() {

  motordriver.init();
  motordriver.setSpeed(100, MOTORA);
  motordriver.setSpeed(100, MOTORB);

  IR.enableIRIn(); // Démarage réception
}
uint8_t bt_command;

#define CAR_STOP 0
#define CAR_FORWARD 1
#define CAR_BACK 2
uint8_t car_status = CAR_STOP;
uint8_t new_status = car_status;

void loop() {



  if (IR.decode()) {//Si decode est valide

    if (IR.isReleased()) //
    {
      buzzer.on();//chaque fois que vous appuyez sur la touche, le buzzer émet un bip
      delay(100);   //durée du bip 100ms
      switch (IR.keycode)
      {
        case KEY_ZERO:  bt_command = '0'; break;
        case KEY_ONE:   bt_command = '1'; break;
        case KEY_TWO:   bt_command = '2'; break;
        case KEY_THREE: bt_command = '3'; break;
        case KEY_FOUR:  bt_command = '4'; break;
        case KEY_FIVE:  bt_command = '5'; break;
        case KEY_SIX:   bt_command = '6'; break;
        case KEY_SEVEN: bt_command = '7'; break;
        case KEY_EIGHT: bt_command = '8'; break;
        case KEY_NINE:  bt_command = '9'; break;
        case KEY_PLUS:  bt_command = CMD_FORWARD; break;
        case KEY_MINUS: bt_command = CMD_BACKWARD; break;
        case KEY_PREV:  bt_command = CMD_LEFT_FRONT; break;
        case KEY_NEXT:  bt_command = CMD_RIGHT_FRONT; break;
        case KEY_PLAY:  bt_command = CMD_STOP; break;
        default: break;
      }
      buzzer.off(); //coupe le buzzer
    }
    IR.resume(); // Recevoir la valeur suivante
  }
  controlCar(bt_command);
  bt_command = 0XFF;
}


void controlCar(uint8_t cmd) {

  switch (cmd)
  {
    case '0': Cle_0 (); break;
    case '1': Cle_1 (); break;
    case '2': Cle_2 (); break;
    case '3': Cle_3 (); break;
    case '4': Cle_4 (); break;
    case '5': Cle_5 (); break;
    case '6': Cle_6 (); break;
    case '7': Cle_7 (); break;
    case '8': Cle_8 (); break;
    case '9': Cle_9 (); break;
    case CMD_FORWARD:     new_status = CAR_FORWARD; break;
    case CMD_RIGHT_FRONT:
      if (car_status != CAR_STOP)new_status = CAR_FORWARD;
      motordriver.goRight();
      delay(600); /*valeur d'origine 200 trop faible
    en angmentant, l'angle du virage est plus grand*/
      break;
    case CMD_BACKWARD:    new_status = CAR_BACK; break;
    case CMD_LEFT_FRONT:
      if (car_status != CAR_STOP)new_status = CAR_FORWARD;
      motordriver.goLeft();
      delay(600);/*valeur d'origine 200 trop faible
    en angmentant, l'angle du virage est plus grand*/
      break;
    case CMD_STOP:        new_status = CAR_STOP; break;
    default: break;
  }
  switch (new_status)
  {
    case CAR_STOP: motordriver.stop(); break;
    case CAR_FORWARD: motordriver.goForward(); break;
    case CAR_BACK: motordriver.goBackward(); break;
    default: break;
  }
  car_status = new_status;
  if ((cmd >= '0') && (cmd <= '9'))
  {
    speed0 = cmd - 0x30;
    speed0 = map(speed0, 0, 9, 0, 255);
    motordriver.setSpeed(speed0, MOTORA);
    motordriver.setSpeed(speed0, MOTORB);
  }
}

void speedUp() {
  if (speed0 < 236)speed0 += SPEED_STEPS;
  else speed0 = 255;
  motordriver.setSpeed(speed0, MOTORA);
  motordriver.setSpeed(speed0, MOTORB);
}

void speedDown() {
  if (speed0 > 70)speed0 -= SPEED_STEPS;
  else speed0 = 50;
  motordriver.setSpeed(speed0, MOTORA);
  motordriver.setSpeed(speed0, MOTORB);
}

void Cle_0 (){
// ici nous définissons les actions à effectuer lorsque la touche 0 est pressée  
}

void Cle_1 (){
// ici nous définissons les actions à effectuer lorsque la touche 1 est pressée  
}

void Cle_2 (){
// ici nous définissons les actions à effectuer lorsque la touche 2 est pressée  
}

void Cle_3 (){
// ici nous définissons les actions à effectuer lorsque la touche 3 est pressée  
}

void Cle_4 (){
// ici nous définissons les actions à effectuer lorsque la touche 4 est pressée  
}

void Cle_5 (){
// ici nous définissons les actions à effectuer lorsque la touche 5 est pressée  
}

void Cle_6 (){
// ici nous définissons les actions à effectuer lorsque la touche 6 est pressée  
}

void Cle_7 (){
// ici nous définissons les actions à effectuer lorsque la touche 7 est pressée  
}

void Cle_8 (){
// ici nous définissons les actions à effectuer lorsque la touche 8 est pressée  
}

void Cle_9 (){
// ici nous définissons les actions à effectuer lorsque la touche 9 est pressée  
}

Bien sûr, il existe d'autres moyens, mais à mon avis c'est le plus confortable.
Salutations.

Edité le code : dans les noms et les appels aux nouvelles fonctions, il y avait un accent et cela donnait une erreur lors de la compilation.

je vous remercie beaucoup.
et oui les accents ha lalalala !!

merci

je suis ravi de votre contribution
j'ai plus qu'à jouer pour ne pas avoir l'air trop con quand mes petits fils vont venir.

reste cette histoire de lib string.h qui me pose souci.
je comprend pas ce truc.
bref voila,
alors pour que ça marche j'ai ajouté ça :


#ifndef _STRING_H
#define _STRING_H
 
#include <stddef.h>
 
#ifdef __cplusplus
extern "C" {
#endif

extern void* memset (void * p, int val, size_t len);
extern void* memcpy (void* to, const void* from, size_t len);
 
#ifdef __cplusplus
}
#endif
 
#endif


que l'ai collé dans un fichier string.h que j'ai flanqué dans la librairie

edit, les touche 1 à 9 sont utilisées pour la vitesse. mais le 1 et 2 ne servent à rien puisque la vitesse est trop faible. mais il faut que je m'en débarasse avant de m'en servir pour autre chose

edit 2 je vois pas comment z'ont fait pour faire varier la vitesse avec les touches de 1 à 9 ?

ha encore une chose

voila, donc ma 4wd open car fonctionne mais je voudrai remplacer la télécommande IR par une dent bleue. Donc un module sur le robot et une apli sur androïd .
Je me demande quel module utiliser, je pensait à un hc05 ? mais comme je suis nul, je vous demande avant de commander cette chose
après, une fois installé, je vais surement vous demander pourquoi ça marche pas.

salutations
et merci

Eh bien, je ne sais pas comment cela fonctionne pour vous. Je n'ai pas pu le faire avec ma télécommande IR, peut-être que les bibliothèques que j'ai obtenues de la page dont je vous ai parlé ne sont pas les bonnes ou sont incomplètes.
Pourriez-vous me passer le lien qu'aliexpress vous a donné pour les comparer et voir si je peux faire quelque chose avec eux ?

J'utilise l'application " Bluetooth RC Controller ", installez-la sur votre téléphone portable et vérifiez ses fonctions.
Quant à l'utilisation du HC05, c'est le plus populaire et il ne serait pas difficile de l'adapter à mes bibliothèques et à mes codes (n'oubliez pas que j'utilise leur modèle basé sur Bluetooth). A ce stade, vous pouvez acheter leur module, bien qu'il soit un peu plus cher, il fonctionne bien avec cette application et tout le travail de codage est déjà fait, enfin ils l'ont fait.
https://fr.aliexpress.com/item/32920789279.html
Et quant au contrôle de la voiture. peut-être que vos petits-enfants aimeront cet autre modèle de contrôle
https://fr.aliexpress.com/item/4001044394450.html
C'est mon prochain projet pour cette voiture.

bonjour,

Il faut me tutoyer, en moto, en avion, en planeur, en ulm, on se dit tu, alors je suis habitué et ça me met mal à l'aise quand on me vouvoie ( tien je sais même pas comment cela s'écrit !)

bref
alors voici ce que aliexpress m'a envoyé. le carir zip
carir.zip (356,3 Ko)

ulta bonne idée cette télécomande ! j'y avais pensé mais je n'était pas sur que ça marche !
mais si vous m'aidez, plus de souci.

il va falloir un autre script car pour utiliser judicieusement les sticks de façon proportionnelle c'est une autre histoire.
il est en revanche certain que les gosses vont adorer !
il me faudra peu etre ça ,
https://fr.aliexpress.com/item/4000761604334.html?gatewayAdapt=glo2fra&spm=a2g0o.detail.1000060.1.41ac131bVAg9nl&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.169870.0&scm_id=1007.13339.169870.0&scm-url=1007.13339.169870.0&pvid=36b65dc2-7c86-4685-975a-1241091fcd71&_t=gps-id:pcDetailBottomMoreThisSeller,scm-url:1007.13339.169870.0,pvid:36b65dc2-7c86-4685-975a-1241091fcd71,tpp_buckets:668%232846%238115%232000&pdp_ext_f=%257B%2522sku_id%2522%253A%252210000007564314458%2522%252C%2522sceneId%2522%253A%25223339%2522%257D&pdp_pi=-1%253B6.95%253B-1%253B-1%2540salePrice%253BEUR%253Brecommend-recommend
J'ai utilisé votre code avec les void cle_x et il fonctionne bien ( ça y est je me souviens comment ça marche)
sauf cette histoire de vitesse proportionnel au chiffre tapé sur la télécommande
et cet histoire de string.h

j'ai commandé ça car votre lien me demande 9€ de port ce qui fait 19 € en tout. Tant qu'à faire j'ai commandé ça
https://fr.aliexpress.com/item/33043494638.html?gatewayAdapt=glo2fra&spm=a2g0o.detail.1000060.2.226d5f38yl0ywJ&gps-id=pcDetailBottomMoreThisSeller&scm=1007.13339.169870.0&scm_id=1007.13339.169870.0&scm-url=1007.13339.169870.0&pvid=4f14cd96-b25a-41fa-a1f4-12314464d772&_t=gps-id:pcDetailBottomMoreThisSeller,scm-url:1007.13339.169870.0,pvid:4f14cd96-b25a-41fa-a1f4-12314464d772,tpp_buckets:668%232846%238115%232000&pdp_ext_f=%257B%2522sku_id%2522%253A%252267362949261%2522%252C%2522sceneId%2522%253A%25223339%2522%257D&pdp_pi=-1%253B23.65%253B-1%253B-1%2540salePrice%253BEUR%253Brecommend-recommend

on va s'amuser !
Les gosses me demandent déjà pour faire une coque, j'ai une anycubic I3 méga et une geeetech a20m
Et ton projet de car bluetooth vous en êtes ou ? c'était pour vos enfants?

Bonjour,

Ce post n'est pas un projet fini.
Je l'ai déplacé dans la racine du forum Français.

Autrement, concernant ce point:

Il faut faire

sudo usermod -a -G dialout <username>

Pour donner les droits d'utilisation des liens série.

Comme expliqué ici, dans la partie Please Read

et je t'en remercie.
si d'autre assembleur de 4wd smart car sont dans les parages, venez nous en parler. Je trouve ce truc amusant pour les gamins.
Mes petits fils de 9 et 11 ans sont ravi et ils apprennent très vite. Et puis on va dériver sur d'autres montages.

Grand merci aux intervenant,
merci bcp Mr gonpezzi

Voulez-tu déjà monter un autre 4x4 ? Tu devez encore monter l'éclairage sur celui-ci. et le détecteur d'obstacles à ultrasons typique.

Tu pouvez également mettre un bras de robot dessus. Le plus courant et le moins cher est celui-ci :
https://fr.aliexpress.com/item/33029547551.html
Si tu le faites, n'achetez que l'acrylique, l'électronique est déjà achetée
avec le poste #11 seuls 4 servos sg90 sont nécessaires,
https://fr.aliexpress.com/item/614357328.html
Ce serait 5 servos plus un support
https://fr.aliexpress.com/item/4001363495508.html
Si tu décidez de mettre le détecteur d'obstacle et de le faire tourner vers balayer un champ de vision et pas seulement un vers l'avant.

Non mes fils de 35 et 30 ans ne veulent rien savoir des bêtises de leur père. C'est grâce à moi que je suis adepte des modèles radiocommandés depuis plus de 45 ans.

J'essaie d'inventer quelque chose pour empêcher ces chenilles de glisser, (les arbres des moteurs sont courts et ne s'adaptent pas correctement), et je cherche quelque chose pour rendre la fusée verticale afin que je puisse la lancer.

Salutations.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.