BE 2025 Groupe4: Difference between revisions
No edit summary |
|||
| (15 intermediate revisions by 3 users not shown) | |||
| Line 12: | Line 12: | ||
* cables | * cables | ||
* pile et support | * pile et support | ||
* | * 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: | |||
Résultat du routage : | Résultat du routage : | ||
[[File:Routage final .jpg|center|thumb|400x400px|Mon routage]] | |||
[[File: | |||
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 | [[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 === | ||
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); | |||
} | |||
} | |||
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
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 :
Résultat du routage :
Photo de la carte soudée :
Vidéo très courte et en basse résolution de la carte en fonctionnement :
Travail effectué
Séance du 22 janvier
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