Dispositif d’entraînement motorisé de mobilité pour les tout-petits (7 / 14 étapes)

Étape 7: Electronique : Télécharger code

Télécharger le code suivant à la carte Arduino Uno. Vous pouvez trouver des instructions sur la façon de mettre en place votre arduino ici : https://www.arduino.cc/en/Guide/HomePage

début du code

const int DIR_A = 2, //Motor goupille de bouclier A DIR

DIR_B = 4, //Motor goupille de bouclier B DIR

PWM_A = 3, //Motor goupille de bouclier A PWM

PWM_B = 5, //Motor goupille de bouclier A PWM

POT = A3, //Potentiometer broche

FORWARD = 8, //Forward broche

INVERSER = 9, //Reverse broche

GAUCHE = 11, //Left broche

DROITE = 10, //Right broche

CURRENT_A = A1, tige de sonde //Current

CURRENT_B = A0 ; NIP actuel de capteur B

int DIR, OLD_DIR ; Contrôleur d’entrée et entrée histoire

stop_all booléen = false ; Diminuer la vitesse à 0

Déclaration de variables

int MAX_SPEED = 230, MIN_SPEED = 60 ;

flotteur acc = 0 ;

float LEFT_SPEED = 0 ;

float RIGHT_SPEED = 0 ;

float COMP_A = 0 ;

float COMP_B = 0 ;

int LEFT_MOTOR_DIR = 0 ;

int RIGHT_MOTOR_DIR = 0 ;

double TIME_TO_MAX_SPEED = 5000 ;

int DELAY = 100 ;

void setup() {}

Définition des broches d’entrée et de sortie

pinMode (DIR_A, sortie) ;

pinMode (DIR_B, sortie) ;

pinMode (PWM_A, sortie) ;

pinMode (PWM_B, sortie) ;

pinMode (droit, INPUT_PULLUP) ;

pinMode (gauche, INPUT_PULLUP) ;

pinMode (avancer, INPUT_PULLUP) ;

pinMode (REVERSE, INPUT_PULLUP) ;

pinMode (entrée, POT) ;

pinMode (entrée, CURRENT_A) ;

pinMode (entrée, CURRENT_B) ;

Initialise un port série pour le suivi si nécessaire

Serial.Begin(9600) ;

DIR = (digitalRead(FORWARD) << 3)

+ (digitalRead(REVERSE) << 2)

+ (digitalRead(LEFT) << 1)

+ (digitalRead(RIGHT)) ;

OLD_DIR = DIR ;

Diminuer la fréquence PWM pour réduire pleurnicher moteur

setPwmFrequency(3,1) ;

setPwmFrequency(5,1) ;

}

void loop() {}

Lit l’entrée de contrôleur

AVANT : B0111

INVERSER : B1011

GAUCHE : B1101

DROIT : B1110

DIR = (digitalRead(FORWARD) << 3)

+ (digitalRead(REVERSE) << 2)

+ (digitalRead(LEFT) << 1)

+ (digitalRead(RIGHT)) ;

LIT LE POTENTIOMÈTRE ET MAPPE AU MINIMUM ET UNE VITESSE MAXIMALE

int vitesse = map(analogRead(POT), 0, 1023, MIN_SPEED, MAX_SPEED) ;

LIT LE CAPTEUR DE COURANT POUR ÉQUILIBRER LA CHARGE VA DANS LES DEUX MOTEURS

I_A double = (((double)analogRead(CURRENT_A)) * 5/1023.0) - 2,5) / 0,1 ;

double I_B = (((double)analogRead(CURRENT_B)) * 5/1023.0) - 2,5) / 0,1 ;

SI AUCUNE TOUCHE N’EST ENFONCÉE, ARRÊTER LES MOTEURS

Si (DIR == B1111) {}

stop_all = true ;

}

Si {(stop_all)

LEFT_SPEED = (LEFT_SPEED < = 0) ? 0: LEFT_SPEED-(SPEED/TIME_TO_MAX_SPEED*DELAY*2) ;

RIGHT_SPEED = (RIGHT_SPEED < = 0) ? 0: RIGHT_SPEED-(SPEED/TIME_TO_MAX_SPEED*DELAY*2) ;

}

Si (LEFT_SPEED == 0 & & RIGHT_SPEED == 0 & & B1111) {}

stop_all = false ;

OLD_DIR = DIR ;

}

SI LES MOTEURS SONT INACTIFS, GUETTER UN CONTRÔLEUR D’ENTRÉE

Si (stop_all == false) {}

Si (DIR! = OLD_DIR & & digitalRead(FORWARD)! = B0) {}

DIR = OLD_DIR ;

}

{Switch(dir)}

affaire B0111 : //FORWARD

rémunération actuelle de capteur

Si {(abs(I_A-I_B) > 0.1)

Si (I_A > I_B) {}

COMP_A = (I_A-I_B) * VITESSE/TIME_TO_MAX_SPEED * RETARD * 0,1 ;

COMP_B = (I_A-I_B) *-VITESSE/TIME_TO_MAX_SPEED * RETARD * 0,1 ;

}

else {}

COMP_A = (I_A-I_B) *-VITESSE/TIME_TO_MAX_SPEED * RETARD * 0,1 ;

COMP_B = (I_A-I_B) * VITESSE/TIME_TO_MAX_SPEED * RETARD * 0,1 ;

}

}

else {}

COMP_A = 0 ;

COMP_B = 0 ;

}

calculer l’accélération

ACC = (vitesse-LEFT_SPEED) * 0,1 ;

ACC = (acc > = 6) ? 6: acc ;

ACC = (acc < = 1) ? 1: acc ;

Ajouter l’accélération et l’indemnisation aux moteurs gauche et droit

LEFT_SPEED = LEFT_SPEED + acc + COMP_B ;

RIGHT_SPEED = RIGHT_SPEED + acc + COMP_A ;

LEFT_SPEED = (LEFT_SPEED > = vitesse) ? VITESSE : LEFT_SPEED ;

RIGHT_SPEED = (RIGHT_SPEED > = vitesse) ? VITESSE : RIGHT_SPEED ;

Établir les orientations moteurs, 1 = avant, -1 = marche arrière

LEFT_MOTOR_DIR = 1 ;

RIGHT_MOTOR_DIR = 1 ;

rupture ;

B0101-affaire : //steer lors du déplacement vers l’avant à gauche

LEFT_SPEED = LEFT_SPEED * 0,9 ;

RIGHT_SPEED = RIGHT_SPEED ;

rupture ;

affaire B0110 : //steer droit lors d’un déplacement vers l’avant

LEFT_SPEED = LEFT_SPEED ;

RIGHT_SPEED = RIGHT_SPEED * 0,9 ;

rupture ;

B1011-affaire : //REVERSE

rémunération actuelle de capteur

Si {(abs(I_A-I_B) > 0.1)

Si (I_A > I_B) {}

COMP_A = (I_A-I_B) * VITESSE/TIME_TO_MAX_SPEED * RETARD * 0,1 ;

COMP_B = (I_A-I_B) *-VITESSE/TIME_TO_MAX_SPEED * RETARD * 0,1 ;

}

else {}

COMP_A = (I_A-I_B) *-VITESSE/TIME_TO_MAX_SPEED * RETARD * 0,1 ;

COMP_B = (I_A-I_B) * VITESSE/TIME_TO_MAX_SPEED * RETARD * 0,1 ;

}

}

else {}

COMP_A = 0 ;

COMP_B = 0 ;

}

calculer l’accélération

ACC = (vitesse-LEFT_SPEED) * 0,1 ;

ACC = (acc > = 6) ? 6: acc ;

ACC = (acc < = 1) ? 1: acc ;

Ajouter l’accélération et l’indemnisation aux moteurs gauche et droit

LEFT_SPEED = LEFT_SPEED + acc + COMP_B ;

RIGHT_SPEED = RIGHT_SPEED + acc + COMP_A ;

LEFT_SPEED = (LEFT_SPEED > = vitesse) ? VITESSE : LEFT_SPEED ;

RIGHT_SPEED = (RIGHT_SPEED > = vitesse) ? VITESSE : RIGHT_SPEED ;

Établir les orientations moteurs, 1 = avant, -1 = marche arrière

LEFT_MOTOR_DIR = -1 ;

RIGHT_MOTOR_DIR = -1 ;

rupture ;

B1101-affaire : //LEFT

calculer l’accélération

ACC = (vitesse-LEFT_SPEED) * 0,1 ;

ACC = (acc > = 15) ? 8: acc ;

ACC = (acc < = 1) ? 1: acc ;

Ajouter l’accélération et l’indemnisation aux moteurs gauche et droit

LEFT_SPEED = LEFT_SPEED + acc ;

RIGHT_SPEED = RIGHT_SPEED + acc ;

LEFT_SPEED = (LEFT_SPEED > = vitesse) ? VITESSE : LEFT_SPEED ;

RIGHT_SPEED = (RIGHT_SPEED > = vitesse) ? VITESSE : RIGHT_SPEED ;

Établir les orientations moteurs, 1 = avant, -1 = marche arrière

LEFT_MOTOR_DIR = -1 ;

RIGHT_MOTOR_DIR = 1 ;

rupture ;

B1110 de cas : //RIGHT

calculer l’accélération

ACC = (vitesse-LEFT_SPEED) * 0,1 ;

ACC = (acc > = 15) ? 8: acc ;

ACC = (acc < = 1) ? 1: acc ;

Ajouter l’accélération et l’indemnisation aux moteurs gauche et droit

LEFT_SPEED = LEFT_SPEED + acc ;

RIGHT_SPEED = RIGHT_SPEED + acc ;

LEFT_SPEED = (LEFT_SPEED > = vitesse) ? VITESSE : LEFT_SPEED ;

RIGHT_SPEED = (RIGHT_SPEED > = vitesse) ? VITESSE : RIGHT_SPEED ;

Établir les orientations moteurs, 1 = avant, -1 = marche arrière

LEFT_MOTOR_DIR = 1 ;

RIGHT_MOTOR_DIR = -1 ;

rupture ;

}

}

Set moteurs directions

Si (RIGHT_MOTOR_DIR > 0) {}

digitalWrite (DIR_A, basse) ;

}

else {}

digitalWrite (DIR_A, élevé) ;

}

Si (LEFT_MOTOR_DIR > 0) {}

digitalWrite (DIR_B, basse) ;

}

else {}

digitalWrite (DIR_B, élevé) ;

}

régler la vitesse du moteur

LEFT_SPEED = LEFT_SPEED < = 0 ? 0: LEFT_SPEED ;

RIGHT_SPEED = RIGHT_SPEED < = 0 ? 0: RIGHT_SPEED ;

analogWrite (PWM_A, RIGHT_SPEED) ;

analogWrite (PWM_B, LEFT_SPEED) ;

OLD_DIR = DIR ;

Serial.Print(Speed) ;

Serial.Print("|") ;

Serial.Print("left:") ;

Serial.Print(LEFT_SPEED) ;

Serial.Print("|") ;

Serial.Print("right:") ;

Serial.println(RIGHT_SPEED) ;

Delay(Delay) ;

}

Définit la fréquence de la PWM

void setPwmFrequency (int pin, int diviseur) {}

mode d’octets ;

Si (broche == 5 || Broche == 6 || broche == 9 || broche == 10) {}

{Switch(Divisor)}

cas 1 :

mode = 0 x 01 ;

rupture ;

cas 8 :

mode = 0 x 02 ;

rupture ;

cas 64 :

mode = 0 x 03 ;

rupture ;

cas 256 :

mode = 0 x 04 ;

rupture ;

cas 1024 :

mode = 0 x 05 ;

rupture ;

par défaut :

retour ;

}

Si (broche == 5 || Broche == 6) {}

TCCR0B = TCCR0B & 0b11111000 | mode ;

}

else {}

TCCR1B = TCCR1B & 0b11111000 | mode ;

}

}

ElseIf (broche == 3 || broche == 11) {}

{Switch(Divisor)}

cas 1 :

mode = 0 x 01 ;

rupture ;

cas 8 :

mode = 0 x 02 ;

rupture ;

No 32 :

mode = 0 x 03 ;

rupture ;

cas 64 :

mode = 0 x 04 ;

rupture ;

cas 128 :

mode = 0 x 05 ;

rupture ;

cas 256 :

mode = 0 x 06 ;

rupture ;

cas 1024 :

mode = 0 x 7 ;

rupture ;

par défaut :

retour ;

}

TCCR2B = TCCR2B & 0b11111000 | mode ;

}

}

fin du code

Articles Liés

Dispositif de suspension pour pulvérisation nasale pour les tout-petits

Dispositif de suspension pour pulvérisation nasale pour les tout-petits

Dans ce instructable je veux vous montrer comment créer votre propre jouet aide médicale qu'il fera je l'espère plus agréable (ou au moins un peu moins traumatisante) pour vos enfants à prendre leur suspension pour pulvérisation nasale.Mon fils a réc
Mascotte de Yoshi et bébé Mario Costumes pour les tout-petits

Mascotte de Yoshi et bébé Mario Costumes pour les tout-petits

cela va être une longue instructable, mais j'espère vaut le lire.Je vais décomposer en composants majeurs :1. tête mascotte Yoshi2. de Yoshi costume et chaussures3. chapeau et costume de Mario4. les paniersMon processus de pensée s (pas nécessaire po
Disponibilité de Board pour les tout-petits

Disponibilité de Board pour les tout-petits

J'ai décidé de faire cette carte pour mon fils. Il est très actif et il adore entrer dans tout et de rien. Il doit être occupé tout le temps. Puisque nous vivons dans un petit ~ 500 Sq ft maison, je voulais quelque chose qui pourrait être utilisé à p
Easy Peasy savoureux Cheasy pâtes au Pesto (même bon pour les tout-petits de vegetariens pointilleux, sur un terrain de camping)

Easy Peasy savoureux Cheasy pâtes au Pesto (même bon pour les tout-petits de vegetariens pointilleux, sur un terrain de camping)

OK soyons Détroit : ce n'est pas exactement '' Haut-Quisine"ou la bonne cuisine italienne. Mais je suppose que vous avez compris que dehors en lisant le titre n'a pas vous ?Mais si vous recherchez une recette de pâtes très simple mais savoureuse que
Héros d’ukulélé ou un contrôleur de Guitar Hero pour les tout-petits

Héros d’ukulélé ou un contrôleur de Guitar Hero pour les tout-petits

ma fille de deux ans récemment commencé à jouer les Beatles Rock band avec moi, mais elle a eu beaucoup de mal pour atteindre les boutons sur le cou. La sangle ne serait pas ajuster haut assez non plus, alors j'ai décidé d'obtenir son propre contrôle
Russell de vers le haut de costume d’Halloween pour les tout-petits

Russell de vers le haut de costume d’Halloween pour les tout-petits

j'adore Pixar UP.  C'est aussi un grand film et cette année j'ai décidé de créer un costume d'halloween pour mon enfant qui est sur le thème de Russell.   J'aime l'idée de créer une « vraie vie » Russell.  Je voulais vraiment créer les textures des i
Sangle-pendaison pour les tout-petits

Sangle-pendaison pour les tout-petits

au cours des années, nous avons fait dans les bus et métros avec nos enfants.Ces jours-ci, ils sont plus âgés et parfaitement capables de survivre à ce voyage sans problème, mais quand ils étaient petits, les choses sont plus difficiles : avec pas d'
Allumer l’interrupteur pour les tout-petits

Allumer l’interrupteur pour les tout-petits

si vos enfants sont vieux suffit à faire confiance à allumer et éteindre la lumière mais pas encore assez grand, cette volonté mettre le commutateur d'éclairage à leur niveau, tout en laissant place où vous pouvez y arriver. Je ne me souviens pas si
Artisanat de coeur facile pour les tout-petits

Artisanat de coeur facile pour les tout-petits

Même s'il semble extrêmement simple (et c'est), nous vous garantissons que votre enfant va adorer ce joli coeur. Nous savons cause nous l'avons essayé. Les meilleures idées sont toujours les plus simples – chaque bambin sait que.Naturellement, la cho
Artisanat de flocon de neige facile pour les tout-petits

Artisanat de flocon de neige facile pour les tout-petits

Une embarcation de flocon de neige super facile pour vous et votre enfant. Vous pouvez l'accrocher sur votre mur et obtenir une décoration très agréable hiver en moins de cinq minutes. Inclure votre tout-petit autant que vous le pouvez. :)
Comment faire pour amuser les tout-petits

Comment faire pour amuser les tout-petits

j'ai fourni garderie privée pour les nourrissons et les tout-petits (3 mois - 2 ans) pour les six dernières années et Pendant ce temps je suis venu avec un large éventail d'activités que j'ai utilisé pour garder ces petites gens occupés comme ils déc
GorillaPod pour téléphone Mobile pour les utilisateurs de Triggertrap !

GorillaPod pour téléphone Mobile pour les utilisateurs de Triggertrap !

Bonjour spectateur !Maintenant, nous allons faire un support de téléphone mobile GorillaPod pour les utilisateurs de Triggertrap !Vous pouviez également monter quoi que ce soit sur votre support mobile. Un trépied par exemple.De cette façon vous pouv
Pour les plus petits

Pour les plus petits

Voici un projet rapide et facile que vous pouvez faire pour le kiddo dans votre vie. C'est un joli bandeau facile et ce projet est aussi un bon moyen d'utiliser votre fil de ferraille.Étape 1: Outil du commerceTaille G Hk ferraille de couleur différe
Faire une balançoire pour vos tout petits

Faire une balançoire pour vos tout petits

mon mari et j'ai deux enfants, Leo (4) et Nico (1), et deux d'entre eux je l'adore cette balançoire.Nous vivons au loin-grille et faire à peu près tout ce que nous avons besoin. Ensemble, nous avons construit notre maison à partir de zéro ; notre éle