BE 2025 Groupe4: Difference between revisions

From Wiki PeiP systèmes embarqués
Jump to navigation Jump to search
 
(14 intermediate revisions by 2 users not shown)
Line 12: Line 12:
* cables
* cables
* pile et support  
* pile et support  
* (télécomande et récepteur signal)
* télécomande et récepteur signal
* NRF24
* LTC3531


[https://passionelectronique.fr/tutorial-nrf24l01 information nf24]
[https://passionelectronique.fr/tutorial-nrf24l01 information nf24]
Nous nous sommes inspiré des projets des SE3 2024 et aussi des I2L pour trouver des manières de connecter la télécommande et le robot et aussi nous aider pour le schéma Kicad


== Carte électronique ==
== Carte électronique ==
Line 21: Line 25:


Schéma électronique de la carte :
Schéma électronique de la carte :
 
[[File:2025 BE G4 schéma carte.pdf|center|thumb|400x400px|Mon schéma électronique]]
[[File:2025_BE_G4_schema.png|thumb|center|400px|Mon schéma électronique]]
 
Résultat du routage :
Résultat du routage :
 
[[File:Routage final .jpg|center|thumb|400x400px|Mon routage]]
[[File:2025_BE_G4_PCB.jpg|thumb|center|400px|Mon routage]]
 
Photo de la carte soudée :
Photo de la carte soudée :


Line 42: Line 42:
[[File:Brochage nf24.png|thumb|right|400px]]
[[File:Brochage nf24.png|thumb|right|400px]]


<div style="clear: both;">
[[File:LTC3531.png|thumb|right|400px]]Nous avons continuer notre schéma kicad tout en prenant en considération les différents composants vus à droite qui n'existait pas dans kicad.  <div style="clear: both;">
''SE3Groupe2024-2''
''SE3Groupe2024-2''


=== Séance du 23 janvier ===
=== Séance du 23 janvier ===


probleme: batterie: 3.7v alors que nrf24 max 3.6v
probleme: batterie: 3.7v alors que nrf24 max 3.6v que nous avons réglé avec le régulateur LTC3531


Modélisation sur kicad et début du routage
Modélisation sur kicad et début du routage
=== '''Séance du 29 janvier''' ===
Nous avons continué le routage de la carte.
=== Séance 30 janvier ===
De même et nous avons enfin créer le composant LTC3531 sur Kicad avec quelques soucis pour faire les empreintes.


=== Séance du 5 février ===
=== Séance du 5 février ===


Finition du routage (enlever toutes les erreurs(design rules checker) rappeler de chercher un L (aller sur projet se : se3 2024 regulateur: LTC3531)
Nous avons continuer le routage avec les dernières connexions mais nous devions attendre de trouver la bobine qui serait la plus adéquate pour le régulateur.
 
=== Séance 6 février ===
Nous avons enlever toutes les erreurs de routage et compléter notre wiki avec les photos et les fichiers
 
(aller sur projet se : se3 2024 regulateur: LTC3531)
 
ref L: B82462G4103M000seance
 
terminal: make clean
 
make
 
make upload
 
fichier pour faire bouger le servo
 
<nowiki>#</nowiki>include <avr/io.h>
 
<nowiki>#</nowiki>include <util/delay.h>
 
void servos_init(void){
 
//DDRB |= 0x20;                 // La broche 3 du port D est controlée par le minuteur 2
 
DDRD |= 0x20;                 // La broche 3 du port B est controlée par le minuteur 2
 
TCCR0A=(1<<COM0A1)|(1<<COM0B1);          // COM2A et COM2B à 10 pour signaux normaux
 
TCCR0A |= (1<<WGM01) | (1<<WGM00);       // WGM2 à 011 pour mode "fast PWM"
 
TCCR0B = (1<<CS01);// | (1<<CS22);          // CS2 à 110 pour un pré-diviseur de 256
 
// Une unité de OCR2A et OCR2B représente donc 256/16000000*1000*1000=16 us
 
// Pour un plateau de 1ms il faut alors 62 unités
 
// Pour un plateau de 2ms il faut alors 125 unités
 
}
 
int main(void){
 
int a;
 
servos_init();
 
while(1){
 
    for(a=0;a<180;a++){ OCR0B=125+a*126/180; _delay_ms(10); }
 
    for(a=180;a>0;a--){ OCR0B=125+a*126/180; _delay_ms(10); }
 
}
 
}
 
 
et fichier make
 
export CC = avr-gcc
 
export LD = avr-gcc
 
export MCU = atmega328p
 
export FCPU = 16000000
 
export TARGET_ARCH = -mmcu=$(MCU)
 
export CFLAGS = -Wall -I. -DF_CPU=$(FCPU) -Os
 
export LDFLAGS = -g $(TARGET_ARCH) -lm -Wl,--gc-sections
 
TERM = /dev/ttyACM0
 
PGMERISP = -c stk500v1 -b 115200 -P $(TERM)
 
export DUDE = /usr/bin/avrdude -F -v -p $(MCU)
 
TARGET = servo // le nom sera a changer en fonction du fichier
 
C_SRC = $(wildcard *.c)
 
OBJS = $(C_SRC:.c=.o)
 
all: $(TARGET).hex
 
clean:
 
    rm -f $(TARGET).o $(TARGET).hex $(TARGET).elf
 
$(TARGET).elf: $(OBJS)
 
    $(LD) $(LDFLAGS) -o $@ $(OBJS)
 
$(TARGET).hex: $(TARGET).elf
 
    avr-objcopy -j .text -j .data -O ihex $(TARGET).elf $(TARGET).hex
 
upload: $(TARGET).hex
 
    stty -F $(TERM) hupcl # reset
 
    $(DUDE) $(PGMERISP) -U flash:w:$(TARGET).hex
 
size: $(TARGET).elf
 
    avr-size --format=avr --mcu=$(MCU) $(TARGET).elf
 
 
 
 
programme servo qui tourne:
 
<nowiki>#</nowiki>include <avr/io.h>
 
<nowiki>#</nowiki>include <util/delay.h>
 
void servos_init(void){
 
DDRD |= (1<<PD5); // La broche 5 du port D est controlée par le minuteur 0
 
DDRD |= (1<<PD6); // La broche 6 du port D est controlée par le minuteur 0
 
TCCR0A=(1<<COM0A1)|(1<<COM0B1);      // COM0A et COM0B à 10 pour signaux normaux
 
TCCR0A |= (1<<WGM01) | (1<<WGM00);   // WGM0 à 011 pour mode "fast PWM"
 
TCCR0B = (1<<CS02);                  // CS0 à 100 pour un pré-diviseur de 256
 
// Une unité de OCR0A et OCR0B représente donc 256/16000000*1000*1000=16 us
 
// Pour un plateau de 1ms il faut alors 62 unités
 
// Pour un plateau de 2ms il faut alors 125 unités
 
}
 
int main(void){
 
DDRB |= (1<<PB2);
 
PORTB &= ~(1<<PB2);
 
int a;
 
servos_init();
 
for(a=0;a<180;a++){
 
   OCR0A=63+a*63/180;
 
   OCR0B=63+a*63/180;
 
   _delay_ms(10);
 
   PORTB ^= (1<<PB2);
 
   }
 
for(a=180;a>0;a--){
 
   OCR0A=63+a*63/180;
 
   OCR0B=63+a*63/180;
 
   _delay_ms(10);
 
   PORTB ^= (1<<PB2);
 
   }
 
}


changer le schéma et le mettre avec le ltc, changer le matériel
test du point neutre: 63 n'est pas le point neutre

Latest revision as of 16:55, 13 February 2026

Proposition d'objet

Nous avons pour idée de faire un robot télécommandé qui se déplace avant/arrière et gauche/droite.

Liste de matériel:

  • chassis (pas de taille)
  • roues
  • arbre
  • 2 moteurs
  • carte électronnique
  • cables
  • pile et support
  • télécomande et récepteur signal
  • NRF24
  • LTC3531

information nf24

Nous nous sommes inspiré des projets des SE3 2024 et aussi des I2L pour trouver des manières de connecter la télécommande et le robot et aussi nous aider pour le schéma Kicad

Carte électronique

Carte réalisée en utilisant le logiciel KiCAD : File:2025 BE G4 kicad.zip.

Schéma électronique de la carte :

Mon schéma électronique

Résultat du routage :

Mon routage

Photo de la carte soudée :

Vidéo très courte et en basse résolution de la carte en fonctionnement :

Media:2025_BE_G4_demo.mp4

Travail effectué

Séance du 22 janvier

Brochage nf24.png
LTC3531.png

Nous avons continuer notre schéma kicad tout en prenant en considération les différents composants vus à droite qui n'existait pas dans kicad.

SE3Groupe2024-2

Séance du 23 janvier

probleme: batterie: 3.7v alors que nrf24 max 3.6v que nous avons réglé avec le régulateur LTC3531

Modélisation sur kicad et début du routage

Séance du 29 janvier

Nous avons continué le routage de la carte.

Séance 30 janvier

De même et nous avons enfin créer le composant LTC3531 sur Kicad avec quelques soucis pour faire les empreintes.

Séance du 5 février

Nous avons continuer le routage avec les dernières connexions mais nous devions attendre de trouver la bobine qui serait la plus adéquate pour le régulateur.

Séance 6 février

Nous avons enlever toutes les erreurs de routage et compléter notre wiki avec les photos et les fichiers

(aller sur projet se : se3 2024 regulateur: LTC3531)

ref L: B82462G4103M000seance 

terminal: make clean

make

make upload

fichier pour faire bouger le servo

#include <avr/io.h>

#include <util/delay.h>

void servos_init(void){

//DDRB |= 0x20;                 // La broche 3 du port D est controlée par le minuteur 2

DDRD |= 0x20;                 // La broche 3 du port B est controlée par le minuteur 2

TCCR0A=(1<<COM0A1)|(1<<COM0B1);          // COM2A et COM2B à 10 pour signaux normaux

TCCR0A |= (1<<WGM01) | (1<<WGM00);       // WGM2 à 011 pour mode "fast PWM"

TCCR0B = (1<<CS01);// | (1<<CS22);          // CS2 à 110 pour un pré-diviseur de 256

// Une unité de OCR2A et OCR2B représente donc 256/16000000*1000*1000=16 us

// Pour un plateau de 1ms il faut alors 62 unités

// Pour un plateau de 2ms il faut alors 125 unités

}

int main(void){

int a;

servos_init();

while(1){

    for(a=0;a<180;a++){ OCR0B=125+a*126/180; _delay_ms(10); }

    for(a=180;a>0;a--){ OCR0B=125+a*126/180; _delay_ms(10); }

}

}


et fichier make

export CC = avr-gcc

export LD = avr-gcc

export MCU = atmega328p

export FCPU = 16000000

export TARGET_ARCH = -mmcu=$(MCU)

export CFLAGS = -Wall -I. -DF_CPU=$(FCPU) -Os

export LDFLAGS = -g $(TARGET_ARCH) -lm -Wl,--gc-sections

TERM = /dev/ttyACM0

PGMERISP = -c stk500v1 -b 115200 -P $(TERM)

export DUDE = /usr/bin/avrdude -F -v -p $(MCU)

TARGET = servo // le nom sera a changer en fonction du fichier

C_SRC = $(wildcard *.c)

OBJS = $(C_SRC:.c=.o)

all: $(TARGET).hex

clean:

    rm -f $(TARGET).o $(TARGET).hex $(TARGET).elf

$(TARGET).elf: $(OBJS)

    $(LD) $(LDFLAGS) -o $@ $(OBJS)

$(TARGET).hex: $(TARGET).elf

    avr-objcopy -j .text -j .data -O ihex $(TARGET).elf $(TARGET).hex

upload: $(TARGET).hex

    stty -F $(TERM) hupcl # reset

    $(DUDE) $(PGMERISP) -U flash:w:$(TARGET).hex

size: $(TARGET).elf

    avr-size --format=avr --mcu=$(MCU) $(TARGET).elf



programme servo qui tourne:

#include <avr/io.h>

#include <util/delay.h>

void servos_init(void){

DDRD |= (1<<PD5); // La broche 5 du port D est controlée par le minuteur 0

DDRD |= (1<<PD6); // La broche 6 du port D est controlée par le minuteur 0

TCCR0A=(1<<COM0A1)|(1<<COM0B1);      // COM0A et COM0B à 10 pour signaux normaux

TCCR0A |= (1<<WGM01) | (1<<WGM00);   // WGM0 à 011 pour mode "fast PWM"

TCCR0B = (1<<CS02);                  // CS0 à 100 pour un pré-diviseur de 256

// Une unité de OCR0A et OCR0B représente donc 256/16000000*1000*1000=16 us

// Pour un plateau de 1ms il faut alors 62 unités

// Pour un plateau de 2ms il faut alors 125 unités

}

int main(void){

DDRB |= (1<<PB2);

PORTB &= ~(1<<PB2);

int a;

servos_init();

for(a=0;a<180;a++){

   OCR0A=63+a*63/180;

   OCR0B=63+a*63/180;

   _delay_ms(10);

   PORTB ^= (1<<PB2);

   }

for(a=180;a>0;a--){

   OCR0A=63+a*63/180;

   OCR0B=63+a*63/180;

   _delay_ms(10);

   PORTB ^= (1<<PB2);

   }

}

test du point neutre: 63 n'est pas le point neutre