* Ce blog de Muquan Zhu.
Bonjour à tous. Je suis Muquan Zhu, j'aime programmer des robots.
Le mois dernier, j'ai acheté le robot YahbomJetbot-mini.
Après un mois à être pleinement familiarisé avec toutes les fonctionnalités de cette voiture, j'ai envie de faire quelques améliorations. Aujourd'hui, je vais partager mes projets.
Contexte
L'angle de la caméra de la voiture Jetbotmini d'origine ne peut être ajusté que manuellement, ce qui limite l'utilisation pour les utilisateurs. La carte d'extension fournit deux ports servo, qui peuvent être utilisés efficacement. Rendez la caméra PTZ programmable.
Liste de préparation
Yaboom Jetbot 2GB Voiture Robot AI *1
Étapes
1) Assemblez le servo PTZ, initialisez le servo à 90° avant l'installation.
2) Réparez l'assemblage servo PTZ sur le châssis du chariot en vissant la colonne en cuivre.
3)Fixez la caméra Jetson NANO sur le PTZ. (seulement une vis est nécessaire, cela a l'air un peu étrange, mais à peine utilisable.
Programmation
Ici, j'utilise SDG90 servo, qui doit être contrôlé par PWM.
Puisque les broches du jetson NANO ne peuvent pas générer directement de PWM, le microcontrôleur stm8 est intégré sur la carte d'extension jetbotmini en tant que coprocesseur pour sortir du pwm et ensuite contrôler le servo.
Envoyez les données à l'IIC selon le protocole de communication. Les paramètres dans le write_i2c_block_data fonction sont (adresse du coprocesseur, adresse du registre de servo, [numéro de pignon de direction, angle de servo]), dont l'adresse du coprocesseur et l'adresse du registre de servo sont des valeurs fixes.
Le numéro 1 correspond au servo connecté au port S1 sur la carte d'extension.
Le numéro 2 correspond au servo connecté au port S2 sur la carte d'extension.
L'angle du servo est réglé entre 0-180.
Ensuite, nous pouvons commencer à utiliser le write_i2c_block_data fonction pour contrôler la rotation du servo PTZ sur Jupyter lab.
Effet vidéo
(Veuillez ignorer ma table de laboratoire en désordre, hahaha...)
Code
import smbus
importer le temps
bus = smbus.SMBus(1)
Servo_ADD = 0x1B
bus.write_i2c_block_data(Servo_ADD,3,[1,90])
time.sleep(0.1)
bus.write_i2c_block_data(Servo_ADD,3,[2,90])
time.sleep(1)
bus.write_i2c_block_data(Servo_ADD,3,[1,90])
time.sleep(0.1)
bus.write_i2c_block_data(Servo_ADD,3,[2,115])