start:arduino:portail
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
start:arduino:portail [2022/12/22 14:38] – créée gerardadmin | start:arduino:portail [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
[[https:// | [[https:// | ||
+ | |||
+ | |||
+ | ==== Code arduino ==== | ||
+ | |||
+ | <code c portail001.ino> | ||
+ | |||
+ | /* | ||
+ | * Ce programme controle le fonctionnement d'un petit protail domotisé. | ||
+ | * Si le badge présenté devant le lecteur RFID est bon, alors le portail s' | ||
+ | * Il se referme apres le passage de la voiture (détécté par le capteur ultrason) ou bien apres 10 secondes d' | ||
+ | * Même scénario si on appuie sur un bouton de la télécommande infrarouge. Si on souhaite sotir de l' | ||
+ | * le capteur ultrason le détecte et ouvre le portail puis le referme 3 secondes après. | ||
+ | * Le coulissement de la porte est assuré par un servomoteur à rotation continue. | ||
+ | * Des interrupteurs de fin de course permettent de stoper le coulissement du portail. | ||
+ | * Une led est allumée quand le portail est en mouvement puis clignote quand celui ci est ouvert. | ||
+ | * Enfin un lcd piloté en i2c donne des informations sur l' | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | LiquidCrystal_I2C lcd(0x27, | ||
+ | |||
+ | #include < | ||
+ | |||
+ | #define pin_recepteur_infra 10 // | ||
+ | IRrecv monRecepteur_infra(pin_recepteur_infra); | ||
+ | decode_results message_recu; | ||
+ | |||
+ | #include < | ||
+ | Servo monServo; | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | RFID monModuleRFID(9, | ||
+ | int UID[5]; | ||
+ | int badge_BLEU[5] = {54, | ||
+ | byte badge_lu = 0; //pour savoir si un badge a été lu | ||
+ | byte ouverture_porte = 0; // | ||
+ | unsigned long fermeture_defaut = 0; // | ||
+ | |||
+ | #define bouton_fin 7 //pin ou est connecté le bouton poussoir de fin de course quand le portail est fermé | ||
+ | #define bouton_debut 4 //pin ou est connecté le bouton poussoir de debut de course quand le portail est fermé | ||
+ | #define pin_servo 3 //pin sur lequel est connecté le servomoteur qui actionne le portail. | ||
+ | #define pin_ledV 6 //la led verte qui indique que le badge est bon | ||
+ | #define pin_ledR 5 //la led rouge qui indique que le badge est non valide | ||
+ | #define pin_LED_portail 2 //led qui clignote quand le portail est ouvert | ||
+ | |||
+ | //capteur ultrason | ||
+ | #define pin_TRIGGER 12 | ||
+ | #define pin_ECHO 11 | ||
+ | |||
+ | byte E_accent[8] = //création d'un tableau contenant le caractère spécial ' | ||
+ | { | ||
+ | B00001, | ||
+ | B00110, | ||
+ | B00000, | ||
+ | B01110, | ||
+ | B10001, | ||
+ | B11111, | ||
+ | B10000, | ||
+ | B01110 | ||
+ | }; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | //portail | ||
+ | monServo.attach(pin_servo); | ||
+ | monServo.write(98); | ||
+ | pinMode(bouton_debut, | ||
+ | pinMode(bouton_fin, | ||
+ | pinMode(pin_LED_portail, | ||
+ | | ||
+ | //Module RFID | ||
+ | SPI.begin(); | ||
+ | monModuleRFID.init(); | ||
+ | pinMode(pin_ledV, | ||
+ | pinMode(pin_ledR, | ||
+ | | ||
+ | //recepteur infrarouge | ||
+ | monRecepteur_infra.enableIRIn(); | ||
+ | monRecepteur_infra.blink13(true); | ||
+ | //ultrason | ||
+ | pinMode(pin_TRIGGER, | ||
+ | pinMode(pin_ECHO, | ||
+ | | ||
+ | //lcd | ||
+ | Wire.begin(); | ||
+ | lcd.init(); | ||
+ | lcd.backlight(); | ||
+ | lcd.createChar(1, | ||
+ | | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | // | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | void test_badge() | ||
+ | { | ||
+ | if(monModuleRFID.isCard()) | ||
+ | { | ||
+ | if(monModuleRFID.readCardSerial()) | ||
+ | { | ||
+ | Serial.print(" | ||
+ | for(char lecture=0; lecture< | ||
+ | { | ||
+ | UID[lecture] = monModuleRFID.serNum[lecture]; | ||
+ | Serial.print(UID[lecture]); | ||
+ | Serial.print(" | ||
+ | } | ||
+ | Serial.println("" | ||
+ | badge_lu = 1; //on note que un badge a été lu | ||
+ | } | ||
+ | monModuleRFID.halt(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void verification_badge() | ||
+ | { | ||
+ | if(UID[0] == badge_BLEU[0] && UID[1] == badge_BLEU[1] && UID[2] == badge_BLEU[2] && UID[3] == badge_BLEU[3] && UID[4] == badge_BLEU[4]) | ||
+ | { | ||
+ | lcd.clear(); | ||
+ | lcd.home(); | ||
+ | lcd.print(" | ||
+ | digitalWrite(pin_ledV, | ||
+ | delay(1000); | ||
+ | digitalWrite(pin_ledV, | ||
+ | ouverture_portail(); | ||
+ | decision_fermeture(); | ||
+ | } | ||
+ | else if(badge_lu == 1) //si on a déja lu le badge | ||
+ | { | ||
+ | lcd.clear(); | ||
+ | lcd.home(); | ||
+ | lcd.print(" | ||
+ | digitalWrite(pin_ledR, | ||
+ | delay(1000); | ||
+ | digitalWrite(pin_ledR, | ||
+ | badge_lu = 0; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void ouverture_portail() | ||
+ | { | ||
+ | lcd.clear(); | ||
+ | while(digitalRead(bouton_debut) != 1) // | ||
+ | { | ||
+ | monServo.write(80); | ||
+ | digitalWrite(pin_LED_portail, | ||
+ | lcd.setCursor(0, | ||
+ | lcd.print(" | ||
+ | lcd.setCursor(0, | ||
+ | lcd.print(" | ||
+ | fermeture_defaut = millis(); | ||
+ | } | ||
+ | monServo.write(98); | ||
+ | } | ||
+ | |||
+ | void fermeture_portail() | ||
+ | { | ||
+ | lcd.clear(); | ||
+ | while(digitalRead(bouton_fin) != 1) // | ||
+ | { | ||
+ | monServo.write(110); | ||
+ | digitalWrite(pin_LED_portail, | ||
+ | lcd.setCursor(0, | ||
+ | lcd.print(" | ||
+ | lcd.setCursor(0, | ||
+ | lcd.print(" | ||
+ | } | ||
+ | badge_lu = 0; | ||
+ | UID[0]= 0; | ||
+ | monServo.write(98); | ||
+ | digitalWrite(pin_LED_portail, | ||
+ | //affichage de la phrase : " | ||
+ | lcd.home(); | ||
+ | lcd.clear(); | ||
+ | lcd.print(" | ||
+ | lcd.write(1); | ||
+ | lcd.print(" | ||
+ | lcd.write(1); | ||
+ | lcd.print(" | ||
+ | lcd.write(1); | ||
+ | } | ||
+ | |||
+ | void test_telecommande_infra() | ||
+ | { | ||
+ | if(monRecepteur_infra.decode(& | ||
+ | { | ||
+ | monRecepteur_infra.resume(); | ||
+ | if(message_recu.value == 0xFFC23D) | ||
+ | { | ||
+ | digitalWrite(pin_ledV, | ||
+ | delay(500); | ||
+ | digitalWrite(pin_ledV, | ||
+ | ouverture_portail(); | ||
+ | decision_fermeture(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | float distance_ultrason() | ||
+ | { | ||
+ | //on génere une impultion pour le TRIGGER du capteur à ultrason | ||
+ | digitalWrite(pin_TRIGGER, | ||
+ | delayMicroseconds(2); | ||
+ | digitalWrite(pin_TRIGGER, | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(pin_TRIGGER, | ||
+ | float distance = pulseIn(pin_ECHO, | ||
+ | return distance; | ||
+ | } | ||
+ | |||
+ | void decision_fermeture() | ||
+ | { | ||
+ | while((millis() - fermeture_defaut) < 10000) | ||
+ | { | ||
+ | lcd.home(); | ||
+ | lcd.clear(); | ||
+ | lcd.print(" | ||
+ | digitalWrite(pin_LED_portail, | ||
+ | delay(500); | ||
+ | digitalWrite(pin_LED_portail, | ||
+ | delay(500); | ||
+ | if(distance_ultrason() < 10) //si une voiture passe | ||
+ | { | ||
+ | fermeture_portail(); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | fermeture_portail(); | ||
+ | } | ||
+ | |||
+ | void souhait_sortie() | ||
+ | { | ||
+ | if(distance_ultrason() < 10) //si une voiture se présente | ||
+ | { | ||
+ | ouverture_portail(); | ||
+ | delay(3000); | ||
+ | fermeture_portail(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Schema ==== | ||
+ | |||
+ | {{ : |
/home/chanteri/www/fablab37110/data/pages/start/arduino/portail.txt · Dernière modification : 2023/01/27 16:08 de 127.0.0.1