Le réveil mobile : Différence entre versions
(→Plans du boitier) |
|||
Ligne 25 : | Ligne 25 : | ||
[[Image:capture.PNG]] | [[Image:capture.PNG]] | ||
+ | |||
+ | |||
+ | ==Code== | ||
+ | |||
+ | //################################################################################################################################### | ||
+ | //Calcul de distance du capteur à ultrason | ||
+ | float Calc_distance_US() ; | ||
+ | void Impulsion () ; | ||
+ | float Recup_Temps (float temps, const unsigned long MEASURE_TIMEOUT) ; | ||
+ | float Calc_Distance (float temps ,const float vitesse_son, float distance) ; | ||
+ | //################################################################################################################################### | ||
+ | //servo | ||
+ | #include <Servo.h> | ||
+ | Servo myservo; | ||
+ | //################################################################################################################################### | ||
+ | //Moteur | ||
+ | void Moteur () ; | ||
+ | //################################################################################################################################### | ||
+ | // ################################################################################################################################### | ||
+ | //Affichage de l'heure | ||
+ | #include "LedControl.h" | ||
+ | LedControl lc=LedControl(7,13,12,2); // Pins: DIN,CLK,CS, # of Display connected | ||
+ | unsigned long delayTime=200; // Delay between Frames | ||
+ | // Put values in arrays | ||
+ | byte invader1a[] = | ||
+ | { | ||
+ | B00011000, // First frame of invader #1 | ||
+ | B00111100, | ||
+ | B01111110, | ||
+ | B11011011, | ||
+ | B11111111, | ||
+ | B00100100, | ||
+ | B01011010, | ||
+ | B10100101 | ||
+ | }; | ||
+ | byte invader1b[] = | ||
+ | { | ||
+ | B00011000, // Second frame of invader #1 | ||
+ | B00111100, | ||
+ | B01111110, | ||
+ | B11011011, | ||
+ | B11111111, | ||
+ | B00100100, | ||
+ | B01011010, | ||
+ | B01000010 | ||
+ | }; | ||
+ | byte invader2a[] = | ||
+ | { | ||
+ | B00100100, // First frame of invader #2 | ||
+ | B00100100, | ||
+ | B01111110, | ||
+ | B11011011, | ||
+ | B11111111, | ||
+ | B11111111, | ||
+ | B10100101, | ||
+ | B00100100 | ||
+ | }; | ||
+ | byte invader2b[] = | ||
+ | { | ||
+ | B00100100, // Second frame of invader #2 | ||
+ | B10100101, | ||
+ | B11111111, | ||
+ | B11011011, | ||
+ | B11111111, | ||
+ | B01111110, | ||
+ | B00100100, | ||
+ | B01000010 | ||
+ | }; | ||
+ | //#######################SETUP################# | ||
+ | void setup() | ||
+ | { | ||
+ | // put your setup code here, to run once: | ||
+ | //################################################################################################################################### | ||
+ | //Calcul de distance du capteur à ultrason | ||
+ | #define V2 2 //A renommer | ||
+ | #define V3 3 //A renomme | ||
+ | //### ################################################################################################################################ | ||
+ | //Moteur | ||
+ | //################################################################################################################################### | ||
+ | //Servo | ||
+ | Serial.begin(9600); | ||
+ | myservo.attach(6); | ||
+ | //################################################################################################################################### | ||
+ | //Affichage de l'heure | ||
+ | lc.shutdown(0,false); // Wake up displays | ||
+ | lc.shutdown(1,false); | ||
+ | lc.setIntensity(0,5); // Set intensity levels | ||
+ | lc.setIntensity(1,5); | ||
+ | lc.clearDisplay(0); // Clear Displays | ||
+ | lc.clearDisplay(1); | ||
+ | //################################################################################################################################### | ||
+ | } | ||
+ | // Take values in Arrays and Display them | ||
+ | void sinvader1a() | ||
+ | { | ||
+ | for (int i = 0; i < 8; i++) | ||
+ | { | ||
+ | lc.setRow(0,i,invader1a[i]); | ||
+ | } | ||
+ | } | ||
+ | void sinvader1b() | ||
+ | { | ||
+ | for (int i = 0; i < 8; i++) | ||
+ | { | ||
+ | lc.setRow(0,i,invader1b[i]); | ||
+ | } | ||
+ | } | ||
+ | void sinvader2a() | ||
+ | { | ||
+ | for (int i = 0; i < 8; i++) | ||
+ | { | ||
+ | lc.setRow(1,i,invader2a[i]); | ||
+ | } | ||
+ | } | ||
+ | void sinvader2b() | ||
+ | { | ||
+ | for (int i = 0; i < 8; i++) | ||
+ | { | ||
+ | lc.setRow(1,i,invader2b[i]); | ||
+ | } | ||
+ | } | ||
+ | //###########################LOOP########################### | ||
+ | void loop() | ||
+ | { | ||
+ | // Put #1 frame on both Display | ||
+ | sinvader1a(); | ||
+ | delay(delayTime); | ||
+ | sinvader2a(); | ||
+ | delay(delayTime); | ||
+ | // Put #2 frame on both Display | ||
+ | sinvader1b(); | ||
+ | delay(delayTime); | ||
+ | sinvader2b(); | ||
+ | delay(delayTime); | ||
+ | float distance_US = 0 ; | ||
+ | // Affiche_Heure() ; | ||
+ | distance_US = Calc_distance_US() ; | ||
+ | if (distance_US <= 50) | ||
+ | { | ||
+ | Moteur() ; | ||
+ | } | ||
+ | int value=analogRead(A0); | ||
+ | Serial.println(value); | ||
+ | if(value<600){ | ||
+ | myservo.write(40); | ||
+ | } else{ | ||
+ | myservo.write(90); | ||
+ | } | ||
+ | delay(10); | ||
+ | } | ||
+ | //void Affiche_Heure() ; | ||
+ | //################################################################################################################################## | ||
+ | //################################################################################################################################### | ||
+ | //Calcul de distance du capteur à ultrason | ||
+ | float Calc_distance_US() | ||
+ | { | ||
+ | float distance = 0 ; | ||
+ | const float vitesse_son = 340.0 / 1000; | ||
+ | float temps = 0 ; | ||
+ | const unsigned long MEASURE_TIMEOUT = 25000UL; // 25 ms = ~8m à 340 m/s | ||
+ | Impulsion() ; | ||
+ | temps = Recup_Temps(temps, MEASURE_TIMEOUT) ; | ||
+ | distance = Calc_Distance(temps, vitesse_son, distance) ; | ||
+ | Serial.print("Distance : " ) ; | ||
+ | Serial.println (distance) ; | ||
+ | return distance ; | ||
+ | } | ||
+ | void Impulsion () | ||
+ | { | ||
+ | digitalWrite (V3, HIGH) ; | ||
+ | delayMicroseconds (10) ; //Capteur ultrason envoie une impulsion de 10µs | ||
+ | digitalWrite (V3, LOW) ; | ||
+ | } | ||
+ | float Recup_Temps (float temps, const unsigned long MEASURE_TIMEOUT) | ||
+ | { | ||
+ | temps = pulseIn (V2, HIGH, MEASURE_TIMEOUT) ; | ||
+ | return temps ; | ||
+ | } | ||
+ | float Calc_Distance (float temps ,const float vitesse_son, float distance) | ||
+ | { | ||
+ | distance = (temps/2)*vitesse_son ; | ||
+ | return distance ; | ||
+ | } | ||
+ | //################################################################################################################################### | ||
+ | //################################################################################################################################### | ||
+ | //Moteur | ||
+ | void Moteur() | ||
+ | { | ||
+ | Cerveau_moteur() ; | ||
+ | } | ||
+ | void Cerveau_moteur() | ||
+ | { | ||
+ | } | ||
+ | //################################################################################################################################### | ||
+ | //################################################################################################################################### | ||
+ | //Affichage de l'heure | ||
+ | //void Affiche_Heure() | ||
+ | // { | ||
+ | // } | ||
+ | //################################################################################################################################### | ||
==Plans du boitier== | ==Plans du boitier== |
Version du 21 janvier 2019 à 15:18
Le projet
Le but de ce projet est de réaliser un réveil qui se déplace pour éviter que vous l'éteignez afin de vous forcez à vous lever.
Matériel
Capteur:
- 3 Capteur ultrason
- 1 Capteur infrarouge
- 1 Bouton poussoir
Moteur:
- 1 Moteur CC
- 1 Servo moteur
Alimentation:
- 1 Pile 9V
Carte de contrôle:
- 1 Arduino
- 1 Carte de contrôle du moteur CC
Câblage
Code
//################################################################################################################################### //Calcul de distance du capteur à ultrason float Calc_distance_US() ; void Impulsion () ; float Recup_Temps (float temps, const unsigned long MEASURE_TIMEOUT) ; float Calc_Distance (float temps ,const float vitesse_son, float distance) ; //################################################################################################################################### //servo #include <Servo.h> Servo myservo; //################################################################################################################################### //Moteur void Moteur () ; //################################################################################################################################### // ################################################################################################################################### //Affichage de l'heure #include "LedControl.h" LedControl lc=LedControl(7,13,12,2); // Pins: DIN,CLK,CS, # of Display connected unsigned long delayTime=200; // Delay between Frames // Put values in arrays byte invader1a[] = { B00011000, // First frame of invader #1 B00111100, B01111110, B11011011, B11111111, B00100100, B01011010, B10100101 }; byte invader1b[] = { B00011000, // Second frame of invader #1 B00111100, B01111110, B11011011, B11111111, B00100100, B01011010, B01000010 }; byte invader2a[] = { B00100100, // First frame of invader #2 B00100100, B01111110, B11011011, B11111111, B11111111, B10100101, B00100100 }; byte invader2b[] = { B00100100, // Second frame of invader #2 B10100101, B11111111, B11011011, B11111111, B01111110, B00100100, B01000010 }; //#######################SETUP################# void setup() { // put your setup code here, to run once: //################################################################################################################################### //Calcul de distance du capteur à ultrason #define V2 2 //A renommer #define V3 3 //A renomme //### ################################################################################################################################ //Moteur //################################################################################################################################### //Servo Serial.begin(9600); myservo.attach(6); //################################################################################################################################### //Affichage de l'heure lc.shutdown(0,false); // Wake up displays lc.shutdown(1,false); lc.setIntensity(0,5); // Set intensity levels lc.setIntensity(1,5); lc.clearDisplay(0); // Clear Displays lc.clearDisplay(1); //################################################################################################################################### } // Take values in Arrays and Display them void sinvader1a() { for (int i = 0; i < 8; i++) { lc.setRow(0,i,invader1a[i]); } } void sinvader1b() { for (int i = 0; i < 8; i++) { lc.setRow(0,i,invader1b[i]); } } void sinvader2a() { for (int i = 0; i < 8; i++) { lc.setRow(1,i,invader2a[i]); } } void sinvader2b() { for (int i = 0; i < 8; i++) { lc.setRow(1,i,invader2b[i]); } } //###########################LOOP########################### void loop() { // Put #1 frame on both Display sinvader1a(); delay(delayTime); sinvader2a(); delay(delayTime); // Put #2 frame on both Display sinvader1b(); delay(delayTime); sinvader2b(); delay(delayTime); float distance_US = 0 ; // Affiche_Heure() ; distance_US = Calc_distance_US() ; if (distance_US <= 50) { Moteur() ; } int value=analogRead(A0); Serial.println(value); if(value<600){ myservo.write(40); } else{ myservo.write(90); } delay(10); } //void Affiche_Heure() ; //################################################################################################################################## //################################################################################################################################### //Calcul de distance du capteur à ultrason float Calc_distance_US() { float distance = 0 ; const float vitesse_son = 340.0 / 1000; float temps = 0 ; const unsigned long MEASURE_TIMEOUT = 25000UL; // 25 ms = ~8m à 340 m/s Impulsion() ; temps = Recup_Temps(temps, MEASURE_TIMEOUT) ; distance = Calc_Distance(temps, vitesse_son, distance) ; Serial.print("Distance : " ) ; Serial.println (distance) ; return distance ; } void Impulsion () { digitalWrite (V3, HIGH) ; delayMicroseconds (10) ; //Capteur ultrason envoie une impulsion de 10µs digitalWrite (V3, LOW) ; } float Recup_Temps (float temps, const unsigned long MEASURE_TIMEOUT) { temps = pulseIn (V2, HIGH, MEASURE_TIMEOUT) ; return temps ; } float Calc_Distance (float temps ,const float vitesse_son, float distance) { distance = (temps/2)*vitesse_son ; return distance ; } //################################################################################################################################### //################################################################################################################################### //Moteur void Moteur() { Cerveau_moteur() ; } void Cerveau_moteur() { } //################################################################################################################################### //################################################################################################################################### //Affichage de l'heure //void Affiche_Heure() // { // } //###################################################################################################################################