Robot humanoïde
Le robot humanoïde est un projet de sciences de l'ingénieur, qui dans un premier temps va permettre de diffuser des lectures de textes, en collaboration avec une professeure de français.
Le nom de ce projet est R.A.P.A.C.E. pour Robot Automatisé Programmé Avec Carte Electronique et est à but pédagogique. (uniquement pour le style :-) )
C'est un projet porté par: Maxence, Anatole et Noa (groupe MAN)
Le but premier de se projet est de pouvoir faire quelques mouvements, ainsi que de produire des sons. Mais, étant donné que le public visé est un jeune public dans le cadre scolaire, nous avons décidés de rajouter de petites fonctionnalités tels que des yeux animés (écran) et un visage pouvant être personnalisé par des enfants et facilement changé.
Nos contraintes étaient les suivantes:
Un projet pas trop coûteux (en matériaux),
simple à produire par une école ou à envoyer,
avec les composants visibles.
Nous avons donc commencés par faire des croquis en s'inspirant tout d'abord de Wall-E:
Mais, ce modèle étant trop complexe, nous avons commencés à nous orienter vers un projet un peu plus humanoïde:
Des modélisations déjà existantes nous ont ensuite étés fournies par notre professeur:
Nous avons ensuite commencés à faire un programme pour contrôler ces moteurs:
from machine import Pin, PWM
import time
PWM_Servo1 = PWM(Pin(37))# GPIO12 sur D2
PWM_Servo2 = PWM(Pin(35))# GPIO12 sur D1
PWM_Servo1.freq(50)
PWM_Servo2.freq(50)
def pgr1():
for A in range(40, 130, 10) :
PWM_Servo1.duty(A) # On commande le servomoteur avec un rapport cyclique A/1024
time.sleep_ms(500) # On attend avant de changer de position
def pgr2():
PWM_Servo1.duty(65)
time.sleep_ms(100)
def pgr3(a):
if a==1 :
PWM_Servo2.duty(65)
time.sleep_ms(1000)
PWM_Servo2.duty(50)
time.sleep_ms(1000)
PWM_Servo2.duty(80)
time.sleep_ms(1000)
Puis, nous avons modélisés le visage:
Après, nous avons fait une première version du "corps" du robot:
Ainsi qu'un programme afin de faire un affichage au niveau des yeux:
from machine import Pin, SoftI2C
from lib import ssd1306
import time
i2c = SoftI2C(scl=Pin(35), sda=Pin(33), freq=400000)
display = ssd1306.SSD1306_I2C(128, 64, i2c)
pupille_x = 105
pupille_y = 32
def dessin_oeil(pupille_x, pupille_y):
display.fill(0)
# Grand contour Oeil
display.ellipse(64, 32, 60, 30, 1)
# Pupille pleine
radius = 15
for x in range(-radius, radius + 1):
for y in range(-radius, radius + 1):
if x * x + y * y <= radius * radius:
display.pixel(pupille_x + x, pupille_y + y, 1)
display.show()
while True:
for x in range(105, 22, -1):
dessin_oeil(x, pupille_y)
time.sleep_ms(20)
for x in range(22, 105):
dessin_oeil(x, pupille_y)
time.sleep_ms(20)
A suivre...
R.A.P.A.C.E., par le groupe M.A.N.
Rédacteur: RAULT Maxence