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()
// {
// }
//###################################################################################################################################
