Session du lundi 13 janvier 2020 18h

 

Quand ça ne marche pas, que faire ? debug

Faire marcher le composant / shield DHT11 (capteur de température et d’humidité)

Comparison of three pin DHT11 vs four pin DHT11

How to Set Up the DHT11 Humidity Sensor on an Arduino

Installer la librairie ci-dessous :

DHTLib

Faire le montage :

http://www.circuitbasics.com/wp-content/uploads/2015/10/Arduino-DHT11-Tutorial-3-Pin-DHT11-Wiring-Diagram.png

Code :

#include <dht.h>

dht DHT;

int DHT11_PIN=7;

void setup(){
  Serial.begin(9600);
}

void loop()
{
  int chk = DHT.read11(DHT11_PIN);
  Serial.print(chk);
  Serial.print(",Temperature = ");
  Serial.print(DHT.temperature);
  Serial.print(",Humidity = ");
  Serial.println(DHT.humidity);
  delay(2000);
}

 

Les valeurs de la température et de l’humidité doivent s’afficher sur la console.

0,Temperature = 21.00,Humidity = 52.00
0,Temperature = 21.00,Humidity = 52.00
0,Temperature = 21.00,Humidity = 52.00
0,Temperature = 21.00,Humidity = 52.00
0,Temperature = 21.00,Humidity = 51.00
0,Temperature = 21.00,Humidity = 51.00
0,Temperature = 21.00,Humidity = 51.00
0,Temperature = 21.00,Humidity = 51.00
-1,Temperature = 21.00,Humidity = 51.00

Laser + LDR

Objectif : quand on coupe le faisceau laser, une note est jouée.

Composants :

  • 1 plaque à insertion avec des fils
  • 1 carte Arduino nano
  • 1 diode laser de faible puissance alimentée en 5 V  (ATTENTION aux yeux)
  • 1 photo résistance
  • 1 haut parleur
  • 1 résistance ~ 100 Ohms
  • 1 résistance ~ 10 kOhms

Schéma :

laserldr_bb

 Code :

#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978

int LDR_pin=1;
int buzzer_pin=8;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(buzzer_pin,OUTPUT);
digitalWrite(buzzer_pin,LOW);
}

void loop() {
// put your main code here, to run repeatedly:
int r=analogRead(LDR_pin);
Serial.println(r);

if (r < 900)
{
tone(buzzer_pin, NOTE_C4,10);
Serial.println(“BUZZ”);
}
else
{
digitalWrite(buzzer_pin,LOW);
}
}

Ci-dessous la version avec 4 lasers (avec alimentation indépendante)

20161228_155930

Affichage de la température sur un afficheur LCD et sur un appareil Android

Composants

  • Une carte Arduino Nano
  • Un module bluetooth HC-06
  • Un afficheur LCD 2 lignes de 16 caractères chacune
  • Un capteur de température ds18b20
  • Un potentiomètre 10 kO
  • Une résistance 4.7 kO
  • Une plaque à insertion rapide
  • Des fils
  • Un ordinateur avec l’environnement de développement Arduino

Schéma de câblage

temp_america_bb

Enlever le module bluetooth avant de charger le programme dans la carte Arduino et le remettre juste après sinon il y a des problèmes de communication entre l’ordinateur et la carte arduino.

Pour récupérer la température sur son portable Android, installer l’application Bluetooth Terminal (de Qwerty il me semble). Une fois connecté, l’envoi de la lettre A permet de récupérer la température sur le téléphone.

Code

#include <LiquidCrystal.h>
#include <OneWire.h> // Inclusion de la librairie OneWire

#define DS18B20 0x28     // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 10 // Broche utilisée pour le bus 1-Wire

OneWire ds(BROCHE_ONEWIRE); // Création de l’objet OneWire ds

// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d’erreur
boolean getTemperature(float *temp){
byte data[9], addr[8];
// data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire détecté

if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search();    // Réinitialise la recherche de module
return false;         // Retourne une erreur
}

if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l’adresse a été correctement reçue
return false;                        // Si le message est corrompu on retourne une erreur

if (addr[0] != DS18B20) // Vérifie qu’il s’agit bien d’un DS18B20
return false;         // Si ce n’est pas le cas on retourne une erreur

ds.reset();             // On reset le bus 1-Wire
ds.select(addr);        // On sélectionne le DS18B20

ds.write(0x44, 1);      // On lance une prise de mesure de température
delay(800);             // Et on attend la fin de la mesure

ds.reset();             // On reset le bus 1-Wire
ds.select(addr);        // On sélectionne le DS18B20
ds.write(0xBE);         // On envoie une demande de lecture du scratchpad

for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds.read();       // Et on stock les octets reçus

// Calcul de la température en degré Celsius
*temp = ((data[1] << 8) | data[0]) * 0.0625;

// Pas d’erreur
return true;
}

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
Serial.begin(9600); // Initialisation du port série
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print(“Temperature :”);
}

void loop()
{
float temp;
char c;
lcd.setCursor(0, 1);

if(getTemperature(&temp)) {
lcd.print(temp);
}

if(Serial.available()){
c = Serial.read();
}

if(c ==’A’) {
Serial.print(temp);
}
delay(500);

}

Arduino + LCD (2 lines 16 chars)

Parts :

– 1 x Arduino nano

– 1 x LCD

– 1 x Pot 10 kΩ

20151217_150451

// include the library code:
#include

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup() {
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
lcd.setCursor(0, 1);
// Print a message to the LCD.
lcd.print(“hello, world!”);
}

void loop() {
lcd.setCursor(0, 1);

lcd.print(“hello, world!”);
}

 

Arduino + SR-HC04

Parts :

– 1 x Arduino nano

– 1 x led

– 1 x buzzer

– 1x R 220 Ω

– 1 x SR-HC04 module

int trig = 12;
int echo = 11;
long lecture_echo;
long cm;
int LED = 6;

void setup()
{
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
Serial.begin(9600);
pinMode(9, OUTPUT);
}

void loop()
{
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo, HIGH);
cm = lecture_echo / 58;
Serial.print(“Distancem : “);
Serial.println(cm);
delay(1000);

if(cm<125)
{
digitalWrite(LED, HIGH);
beep(200);
}
else
{
digitalWrite(LED,LOW);
}
}

void beep(unsigned char delayms){
analogWrite(9, 20); // Almost any value can be used except 0 and 255
// experiment to get the best tone
delay(delayms); // wait for a delayms ms
analogWrite(9, 0); // 0 turns it off
delay(delayms); // wait for a delayms ms
}

 

Find the north

boussole_bb

Parts :

– 1 x Arduino nano

– 1 x led

– 1x R 220 Ω

– 1 x HMC5883L module


#include //I2C Arduino Library

#define address 0x1E //0011110b, I2C 7bit address of HMC5883
int LED = 6;
float direction;

void setup(){
//Initialize Serial and I2C communications
Serial.begin(9600);
Wire.begin();

//Put the HMC5883 IC into the correct operating mode
Wire.beginTransmission(address); //open communication with HMC5883
Wire.write(0x02); //select mode register
Wire.write(0x00); //continuous measurement mode
Wire.endTransmission();
pinMode(LED,OUTPUT);
}

void loop(){

int x,y,z; //triple axis data

//Tell the HMC5883L where to begin reading data
Wire.beginTransmission(address);
Wire.write(0x03); //select register 3, X MSB register
Wire.endTransmission();

//Read data from each axis, 2 registers per axis
Wire.requestFrom(address, 6);
if(6<=Wire.available()){ x = Wire.read()<<8; //X msb x |= Wire.read(); //X lsb z = Wire.read()<<8; //Z msb z |= Wire.read(); //Z lsb y = Wire.read()<<8; //Y msb y |= Wire.read(); //Y lsb } //Print out values of each axis Serial.print("x: "); Serial.print(x); Serial.print(" y: "); Serial.print(y); Serial.print(" z: "); Serial.println(z); if ( y > 0 )
{
direction= 90 - atan2(y,x)*180.0/PI;
}
else
{
direction= 270 - atan2(y,x)*180.0/PI;
}
Serial.print("direction: ");
Serial.print(direction);
delay(250);

if (abs(direction)<20) { digitalWrite(LED, HIGH); Serial.print("Switch on led"); } else { digitalWrite(LED, LOW); } }

Arduino + motion detector + led

Parts :

– 1 x Arduino nano

– 1 x led high lumi

– 1x R 330 Ω

-1 x R 1kΩ

– 1 x Transistor NPN 2N2222

– 1 x HC SR501 PIR motion detector

ledinfra_bb


#include
#include

void setup()
{
Serial.begin(9600);
pinMode(2,INPUT);
digitalWrite(2, LOW);
pinMode(5,OUTPUT);

digitalWrite(5,HIGH);
delay(5000);
digitalWrite(5,LOW);
delay(200);
}

void loop()
{
//Come out of sleep and read state of PIR pin
bool flag = digitalRead(2);
if (flag == true)
{
Serial.println("tripped");
digitalWrite(5,HIGH);
}
else
{
Serial.println("not tripped");
digitalWrite(5,LOW);
}
delay(100);
sleepNow();
}

void sleepNow()
{
Serial.println("Entering Sleep");
// Set pin 2 as interrupt and attach handler:
attachInterrupt(digitalPinToInterrupt(2), wakeUp, CHANGE);
delay(100);
// Choose our preferred sleep mode:
set_sleep_mode(SLEEP_MODE_PWR_DOWN);

// Set sleep enable (SE) bit:
sleep_enable();

// Put the device to sleep:
sleep_mode();

// Upon waking up, sketch continues from this point.
sleep_disable();
}

void wakeUp(void)
{
Serial.println("wake up");
detachInterrupt(digitalPinToInterrupt(2));
}