Boom et pince bot (15 / 15 étapes)

Étape 15 : L’intégralité du Code d’application Python

#! / usr/bin/env python ## pour Linux, BSD ou Mac OS x vous pouvez chmod + x sur ce script pour rendre exécutable # ### # Rover contrôle app ## permet des commandes simples de plusieurs octets. ## Écrite par Scott Beasley - # 2015 gratuit pour utiliser ou modifier. Profitez. # ### import sys import import série temps de Tkinter import * Importer tkFont importation tkMessageBox # créer la fenêtre de la classe application App (cadre): # Make le createWidgets def de fenêtre (self): self.connected = False self.message = StringVar () # faire une police peu pour boutons de jeu de la pince. helv6 = tkFont.Font (famille = « Helvetica », taille = 6, poids = « normal ») self.frame = trame (self.master) self.frame.pack () self.f1 = trame (self.frame) self.l1 = Label (self.f1, text = "Port Comm:") self.l1.pack (côté = gauche) self.comm_entry = entrée (self.f1, bd = 5, nom = "comm_entry") self.comm_entry.pack (côté = gauche) self.connectButton = bouton (self.f1, texte = "Connecter", commande = self. SerialConnect, name = "b_connect") self.connectButton.pack (côté = gauche) self.disconnectButton = bouton (self.f1, text = "Disconnect", commande = self. SerialDisconnect, nom = "b_disconnect") self.disconnectButton.pack (côté = droit) self.f1.grid (rang = 0, colonne = 0) self.f2 = LabelFrame (self.frame, bd = 3, secours = "groove", texte = "Ground Control") self.g_vert_fm = trame (self.f2) self.grip_vert = échelle (self.g_vert_fm, from_ = 0, to = 180) # Bind souris bouton 1 sortie pour définir le boom position self.grip_vert.bind ('', libre. GripperY) self.grip_vert.grid (rang = 0, colonne = 0, rowspan = 4, collant = W) self.master.bind ("", libre. GripperY) self.g_vert_fm.grid (rang = 0, colonne = 0, rowspan = 4, collant = W) self.leftforwardButton = bouton (self.f2, text = "\\ », commande = self. TurnLeft45, name = "b_left_forward") self.leftforwardButton.grid (rang = 0, colonne = 1) self.master.bind ("< un rel =" nofollow">", libre. TurnLeft45) self.leftButton = bouton (self.f2, text = "<", command = self. Tournegauche, name = "b_left") self.leftButton.grid (rang = 1, colonne = 1) self.master.bind ("< /a >< un rel =" nofollow">", libre. Tournegauche) self.rightforwardButton = bouton (self.f2, text = "/", command = self. TurnRight45, name = "b_right_forward") self.rightforwardButton.grid (rang = 0, colonne = 3) self.master.bind ("< /a >< un rel =" nofollow">", libre. TurnRight45) self.haltButton = bouton (self.f2, text = "Halt
! ", commande = self. Halt, name = "b_halt") self.haltButton.grid (rang = 1, colonne = 2) self.master.bind ("< /a >< un rel =" nofollow">", libre. Halt) self.rightButton = bouton (self.f2, text = ">", command = self. Tournedroite, name = "b_right") self.rightButton.grid (rang = 1, colonne = 3) self.master.bind ("< /a >< un rel =" nofollow">", libre. Tournedroite) self.upButton = bouton (self.f2, text = "^", command = self. Avant, nom = "b_forward") self.upButton.grid (rang = 0, colonne = 2) self.master.bind ("< /a >< un rel =" nofollow">", libre. Self.leftdownButton avant) = bouton (self.f2, text = "/", command = self. TurnRight45, name = "b_left_down") self.leftdownButton.grid (rang = 2, colonne = 1) self.downButton = bouton (self.f2, text = "V", commande = auto. Inverser, name = "b_reverse") self.downButton.grid (ligne = 2, colonne = 2) self.master.bind ("< /a >< un rel =" nofollow">", libre. Self.f2.grid revers) (ligne = 1, colonne = 0, pady = 25) self.rightdownButton = bouton (self.f2, text = "\\ », commande = self. TurnLeft45, name = "b_right_down") self.rightdownButton.grid (ligne = 2, colonne = 3) self.g_horz_fm = trame (self.f2) self.grip_horz = échelle (self.g_horz_fm, from_ = 0, to = 180, orienter = HORIZONTAL) # Bind sur libération touche 1 souris pour définir la préhension du poste self.grip_horz.bind ('< /a >< un rel = "nofollow" >', libre. GripperX) self.grip_horz.grid (rang = 0, colonne = 0, columnspan = 7, collant = E) self.master.bind (« < u > », soi-même. GripperX) self.g_horz_fm.grid (rang = 4, colonne = 0, columnspan = 7, post-it = E) self.master.bind ("< /u >< /a >< un rel =" nofollow">< u > «, libre. Self.f_spd_dist GripperHome) = trame (self.frame) self.l_speed = Label (self.f_spd_dist, text = "vitesse:") self.l_speed.grid (rang = 0, colonne = 0) self.speed_spin = compteur (self.f_spd_dist, valeurs = (1, 2, 3), largeur = 2, commande = self. SetSpeed) self.speed_spin.grid (rang = 0, colonne = 1) self.l_dist = Label (self.f_spd_dist, text = "Distance:") self.l_dist.grid (rang = 0, colonne = 3) self.dist_spin = compteur (self.f_spd_dist, valeurs = ('Court', 'Moyen', 'Continu'), largeur = 10, commande = self. SetDistance) self.dist_spin.grid (rang = 0, colonne = 4) self.l_turns = Label (self.f_spd_dist, texte = "se transforme:") self.l_turns.grid (rang = 0, colonne = 5) self.turns_spin = compteur (self.f_spd_dist, valeurs = ('Hard', 'Soft'), largeur = 5, commande = self. SetTurns) self.turns_spin.grid (rang = 0, colonne = 6) self.f_spd_dist.grid (ligne = 2, colonne = 0) self.f3 = trame (self.frame) self.l2 = Label (self.f3, texte = "dernière action:") self.l2.pack (côté = gauche) self.l3 = Label (self.f3, texte = "", textvariable = self.message) self.l3.pack (côté = droit) self.f3.grid (rang = 5, colonne = 0, pady = 8) # définir l’état du bot boutons de commande. Activer lorsqu’il est connecté, # désactivés dans le cas contraire. def CtrlButtonsState (self, bstate): self.leftforwardButton.config (État = bstate) self.leftButton.config (État = bstate) self.rightforwardButton.config (État = bstate) self.rightButton.config (État = bstate) self.upButton.config (État = bstate) self.leftdownButton.config (État = bstate) self.downButton.config (État = bstate) self.rightdownButton.config (État = bstate) self.haltButton.config (État = bstate) self.disconnectButton.config (État = bstate) self.grip_horz.config (État = bstate) self.grip_vert.config (État = bstate) # définir l’état de l’entrée de port comm. Activer lorsqu’il est ne pas connecté, # désactivé lorsque le bot est connecté. def ConnCtrlsState (self, bstate): self.connectButton.config (État = bstate) self.comm_entry.config (État = bstate) # se connecter au port comm tapé dans le champ de saisie de comm. def SerialConnect (self): Essayez: # changer le self.ser de taux ici si différentes puis 9600 baud = serial. Série (self.comm_entry.get (), 9600) sauf IOError : tkMessageBox.showerror ("Invalid comm port", "port Comm not found.") retour à soi. ConnCtrlsState (désactivé) soi-même. CtrlButtonsState (NORMAL) self.message.set ("SerialConnect") self.connected = True time.sleep (3) # s’attarder un peu pour la connexion arrive # faire un peu après avoir parlé de bot de connexion. Si self.connected == True: (self.setbotParms) # déconnexion de la bot (ferme le port de comm). def SerialDisconnect (self): Essayez: # envoyer une commande Halt, juste au cas où le bot se déplace encore. Self.send_cmd ("h", "la halte!") Time.Sleep (1) self.ser.close () sauf IOError : imprimer "Pas pu fermer le port..." self.message.set ("SerialDisconnect") soi-même. ConnCtrlsState auto (NORMAL). CtrlButtonsState (personnes handicapées) self.connected = False time.sleep (2) # s’attarder un peu pour la déconnexion se produise # envoyer la commande à la comm ouvert port # la variable d’entrée d’action est un tuple qui permet de multy partie commandes def send_cmd (self, action, msg): si self.connected == True : pour val en action : self.ser.write (val) self.ser.flush () self.message.set (msg) # envoyer le bot une commande de tour à gauche. def tournegauche (self, événement = None): self.send_cmd (« a », "gauche") # envoyer le bot une commande turn-gauche-haut. def TurnLeft45 (self, événement = None): self.send_cmd ("q", « Left45 ») # envoyer le bot une commande de tour à droite. def tournedroite (self, événement = None): pièce self.send_cmd ","Right") # envoyer le bot une commande turn-droit-vers le haut. def TurnRight45 (self, événement = None): self.send_cmd ("e", « Right45 ») # envoyer le bot une commande vers l’avant. def vers l’avant (self, événement = None): self.send_cmd ("w", « Up ») # envoyer le bot une commande inverse. def inverse (self, événement = None): self.send_cmd (« z », « Down ») # envoyer le bot une commande Halt. def Halt (self, événement = None): self.send_cmd (« h », « Halte! ») # définir la pince (X). def GripperX (self, événement = None): # lire le contrôle slider et envoie la valeur au contrôleur bot # Remarque: 0 est complètement fermée et 180 est tous le chemin ouvert # il s’agit d’une commande de plusieurs octets. La commande + le servo set val # + un tampon clear commande (facultatif) grp_change = ('> ', chr (self.grip_horz.get ()), chr (255)) self.send_cmd (grp_change, « Pince X ») self.boomchange = None # définir la pince Y. def GripperY (self, événement = None): # lire le contrôle slider et envoie la valeur au contrôleur bot # Remarque: 0 est complètement vers le haut et 180 est tout en bas # il s’agit d’une commande de plusieurs octets. La commande + le servo set val # + un tampon clear commande (facultatif) grp_change = ('^ ', chr (self.grip_vert.get ()), chr (255)) self.send_cmd (grp_change, « Pince Y ») self.gripperchange = None # mettre la pince sur la position « maison ». def GripperHome (self, événement = None): self.send_cmd ("c", chr (255), « Pince Home ») self.grip_horz.set (90) self.grip_vert.set (90) # régler la vitesse du rover. def SetSpeed (self, événement = None): spd_str = self.speed_spin.get () if spd_str == "1": vitesse = 1 if spd_str == "2": vitesse = 2 if spd_str == "3": Vitesse = 3 # envoie une commande de plusieurs octets pour régler la vitesse. Self.send_cmd (('v', chr (vitesse)), « Définir la vitesse ») # définir la distance travled lorsqu’un pour ou rev est délivrée à # le rover. def SetDistance (self, événement = None): dist = 1 dist_str = self.dist_spin.get () if dist_str == "Court": dist = 1 if dist_str == "Medium": dist = 2 si dist_str == "Continu": dist = 3 # envoie une commande de plusieurs octets pour définir la distance. Self.send_cmd ((serait ', chr (dist)), « La valeur Distance ») # définir le style de la tour d’utiliser tournant. def SetTurns (self, événement = None): tourner = 1 turn_str = self.turns_spin.get () if turn_str == "Hard": tourner = 1 if turn_str == "Soft": tourner = 2 # envoie une commande de plusieurs octets pour définir le style de la tour. Self.send_cmd ((' t ', chr (tour)), « La valeur Turns ») def setbotParms (self): gites. Mettre un terme () soi-même. GripperHome (de) soi. SetSpeed (de) soi. SetDistance (de) soi. SetTurns () def __init__ (self, maître = None): Frame.__init__ (self, maître) self.pack () self.createWidgets () soi-même. CtrlButtonsState (désactivé) # Kick off la GUI (Tk) puis la taille et titre de la fenêtre app def de main (): racine = Tk () root.geometry ("450 x 360") root.wm_title ("Rover Control Center (RCC)") app = App (maître = racine) (app.mainloop) si __name__ == '__main__': main () < /u >< /a >

Articles Liés

Comment remplacer une botte Pipe sur un toit de métal.

Comment remplacer une botte Pipe sur un toit de métal.

Il s'agit d'un espace commun de n'importe quel toit d'où provenance la plupart des fuites, donc ses toujours bon de savoir comment le réparer si nécessaire.Tout d'abord, je conseille que si vous n'êtes pas à l'aise sur un toit ou si l'inclinaison du
Bot pince télécommande

Bot pince télécommande

A quelques mois en arrière mon fils m'a demandé de lui faire un bot contrôlé à distance. Il m'a donné une liste de ce qu'il voulait et nous réduit à une liste gérable:) C'est ce que j'ai fini par bâtiment pour lui...Répondre à pinces, un robot mobile
Bota - ballon en cuir

Bota - ballon en cuir

Regarder Pirates des Caraïbes trop de fois au comte, encouragé par mes deux plus jeunes qui entretiennent l'enthousiasme malgré la répétition, j'ai remarqué ballon cuir Gibbs gardé surfaçage. Tre des espagnol décent et le propriétaire de plusieurs pu
Bot de PS2 contrôleur moteur en soies

Bot de PS2 contrôleur moteur en soies

il s'agit d'une variante du bot à poils désormais commun. C'est un peu plus grand, à l'aide de 3 piles AA et le moteur de vibration d'un contrôleur de jeu PS2Étape 1: Matériaux et outils nécessaires Pour les matériaux, vous avez besoin :-4 brosses à
Bots simples : Wobbler

Bots simples : Wobbler

en général, vous apprendrez à osciller avant de vous apprendre à marcher. Mais dans le monde des robots, tout est possible ! C'est pourquoi le lendemain vous montrant comment faire pour marcher et deux après vous montrant comment je roule, je suis de
Bots effrayants et super creeps - vibrobots avec connecteurs, câbles et attache-câbles

Bots effrayants et super creeps - vibrobots avec connecteurs, câbles et attache-câbles

faire drôle, effrayant, stupides créatures vibrant de bot avec peu plus de connecteurs, attaches-câbles et fils électriques. Les robots dans les images et la vidéo sont quelques exemples de ce que vous pouvez faire. Votre imagination est la limite. G
Arduino 4wd robot avec capteur de ping « J-Bot »

Arduino 4wd robot avec capteur de ping « J-Bot »

niveau d'expérience : intermédiaire (requière la soudure)Temps requis: 3-5 heures selon l'expérienceJ-BOT Kit JamecoQuelqu'un a dit que Jameco avait besoin d'une mascotte de robotique. J'ai toujours été un bricoleur, surtout avec l'électronique radio
Enfant en bas âge Bot 3000 par Adam Fujita. Commande vocale outil éducatif parental!!

Enfant en bas âge Bot 3000 par Adam Fujita. Commande vocale outil éducatif parental!!

Toddler Bot 3000 des histoires pour Paloma sur Vimeo.Le Bot de bambin est un dispositif simple créé pour illustrer comment bon rôle parental pourrait être pratiquée. Ce bot est issu d'un Bot de bouclier Parralax avec un micro Electret de fruits Ada.
Utiliser une manette PS3 pour contrôler un Bot de NXT Arduino

Utiliser une manette PS3 pour contrôler un Bot de NXT Arduino

mise à jour :J'ai corrigé quelques bugs en cours d'exécution avec le paquet de données, et j'ai modifié la bibliothèque NXTI2CDevice pour être compatible avec Arduino 1.0.Le fichier zip joint a1. une nouvelle esquisse de l'Arduino2. une nouvelle esqu
Créer un Bot de fleur de lumière-qui suit Arduino contrôlée

Créer un Bot de fleur de lumière-qui suit Arduino contrôlée

Dans ce projet Arduino-basé, vous allez créer un « biomimétique », ou fleur de biologie-inspiré, qui fait suite à une source de lumière. Vous avez sans doute vu ce comportement dans vos plantes d'intérieur ! Plantes ont besoin du soleil pour croître
Construire un vélo Boom Box

Construire un vélo Boom Box

comment tout a commencé : J'ai monter mon vélo en un tour de la communauté chaque semaine, et les gens il voulaient un moyen de profiter de la musique sur le trajet. J'ai essayé une boîte ordinaire de la perche, mais il est tout simplement pas fait p
Bots simples : Rolly

Bots simples : Rolly

ce Bot Simple a été inspiré par une œuvre de l'artiste James Rouvelle, appelée colonie, où un tas de forme irrégulière ellipsoïdes autotraction autour de leur environnement. C'est ma compréhension que ses robots ont été faites en plaçant une vibrante
Insect Bot

Insect Bot

Vous voulez tester vos compétences en soudure!! Voici une facile à faire insecte robot que vous pouvez construire en environ 20 minutes.L'insecte bot utilise un moteur de vibration sa tête, qui est propulsé par un condensateur comme son abdomen, dont
Squiggle facile Bot

Squiggle facile Bot

Ne laissez pas le nombre d'étapes dans ce Instructable vous tromper. Ce Bot tilde est aussi facile qu'annoncé. Si vous avez toutes les pièces sur place ainsi que toute expérience souder les fils ensemble, vous pouvez probablement construire ce bot en