Archives par étiquette : arduino

NoNoseOnTV, un projet animé par Arduino

Ce projet est né du constat que nos enfants sont bien souvent le nez collé sur l’écran.
Afin de corriger ce comportement j’ai pris l’habitude d’éteindre la télé avec la télécommande.
C’est rapidement fatiguant de faire le surveillant. Même si j’ai obtenu quelques succès.

Et la je me dis que si le truc pourrait être fait par un petit montage électronique.
Problème, mes notions d’électronique sont proche de zéro.
Par contre il y a les cartes Arduino qui peuvent être programmées et vous donnent accès à tout un tas de capteurs de l’environnement extérieur.

Armé d’une bonne dose de motivation j’achète le Arduino Starter Kit et quelques composants non inclus chez Arobose.

Voici la première version, les composants sont les suivants :

  • Arduino Uno rev 3
  • Capteur de distance par ultrasons URM 37 V3.2
  • 3 LEDs rouge, jaune, verte, avec des résistances 1kOhm pour pas les cramer
  • Platine de montage


Sensor_bb

 
 

Le fonctionnement de cette version 0.1 est simple.
Si une présence est détectée à plus de 1.5 m la LED verte s’allume.
Si une présence est détectée à moins de 1.5 m la LED jaune s’allume.
Si une présence est détectée à moins de 1 m la LED rouge s’allume.

Pour le code le voici :

// # Author  : Hugues Lepesant
// # Date    : 11/04/2013
// # Version : 0.1

// # URM Code based on Jiang's work from DFRobot
// # Product name:ultrasonic scanner Kit
// # Product SKU:SEN0001
 
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
 
// # Connection:
// #       Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// #       Pin 2 GND (URM V3.2) -> GND (Arduino)
// #       Pin 4 PWM (URM V3.2) -> Pin 3 (Arduino)
// #       Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// # Pin mode: PWM
// # Working Mode: PWM passive control mode.
// # If it is your first time to use it,please make sure the two jumpers to the right hand
// # side of the device are set to TTL mode. You'll also find a secondary jumper on
// # the left hand side, you must break this connection or you may damage your device.
 
int URPWM=3;        // PWM Output 0-25000us,every 50us represent 1cm
int URTRIG=5;       // PWM trigger pin

int pinGreen = 2;
int pinYellow = 6;
int pinRed = 7;

int distMinimum = 100; // 100 cm
int distMedium = 150;  // 150 cm

boolean up=true;       // create a boolean variable
unsigned long time;    // create a time variable
unsigned long urmTimer = 0; // timer for managing the sensor reading flash rate
 
unsigned int Distance=0;

uint8_t EnPwmCmd[4]={0x44,0x22,0xbb,0x01}; // distance measure command
 
void setup() {             // Serial initialization
    Serial.begin(9600);    // Sets the baud rate to 9600

    pinMode(pinGreen, OUTPUT);
    digitalWrite(pinGreen, LOW);
    
    pinMode(pinYellow, OUTPUT);
    digitalWrite(pinYellow, LOW);
    
    pinMode(pinRed, OUTPUT);
    digitalWrite(pinRed, LOW);

    PWM_Mode_Setup();
}
 
void loop() {
  Distance = PWM_Mode();
  Serial.print("Distance = ");
  Serial.print(Distance);
  Serial.println(" cm");
  
  if ( Distance > distMedium ) {
    digitalWrite(pinGreen, HIGH);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, LOW);
  }

  if ( Distance > distMinimum && Distance < distMedium ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, HIGH);
    digitalWrite(pinRed, LOW);
  }

  if ( Distance < distMinimum ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, HIGH);
  }
  
  delay(2000);
}

 
void PWM_Mode_Setup(){
    pinMode(URTRIG,OUTPUT);       // A low pull on pin COMP/TRIG
    digitalWrite(URTRIG,HIGH);    // Set to HIGH
 
    pinMode(URPWM, INPUT);        // Sending Enable PWM mode command
    
    for (int i=0;i<4;i++) {
        Serial.write(EnPwmCmd[i]);
    }
}
 
int PWM_Mode(){                   // a low pull on pin COMP/TRIG  triggering a sensor reading
    digitalWrite(URTRIG, LOW);
    digitalWrite(URTRIG, HIGH);   // reading Pin PWM will output pulses
     
    unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
     
    if (DistanceMeasured==50000) { // the reading is invalid.
      return 0;
    } else {
        return DistanceMeasured/50; // every 50us low level stands for 1cm
    }
}

La roadmap du projet est la suivante :

Version 0.2 :
Un signal sonore (façon « dernière sommation ») est joué.

Version 0.3 :
Après la sommation, la télé est éteinte.

Version 0.4 :
Si aucune présence n’est détectée à moins de 1.5 m pendant 10 secondes la télé est rallumée.

Version 0.5 :
Pouvoir programmer le code d’extinction de la télé avec la télécommande de celle-ci.

Version 0.6 :
Réalisation d’un boitier pour placer le NoNoseOnTV sous la télé.

Version 0.7 :
Réalisation d’un PCB.

Version 0.8 :
Réalisation d’un boitier pour une diffusion en masse.

Version 0.9 :
Vendre le truc à Sony, Samsung, Toshiba, Philips,

Version 1.0 :
Aller se coucher ou partir en vacances.