Arduino Pull-up

Arduino Pull-up

A quoi ça sert ! Comme son nom l’indique : A tirer vers le haut.

Une entrée si elle n’est reliée a rien peut prendre l’état 1 ou 0 aléatoirement c’est embêtant…

Le Pull consiste à relier l’entrée au +5 par défaut. Quand le Bp est actionné l’entrée passe à 0. Plus de problèmes ….

C’est bien mais cela oblige a ajouter une résistance….

Heureusement cette fonction est intégrée dans arduino.

pinMode(pin, INPUT_PULLUP);   (marche pas sur le pin 13)

pull-up

Si le PULL_DOWN existe en électronique il n’est a ma connaissance pas intégré dans Arduino.

 

Imprimante 3D

Imprimante 3D

Imprimante 3D Witbox.

J’ai la chance d’avoir ce joujou dans ma salle et j’avoue que je suis convaincu.

Elle m’est devenue indispensable dans mes projets Techno, EDE, TPE, EPI elle est mise à contribution à tous les niveaux !! Indispensable je vous dis, au point de penser à en acheter une 2ème….

3dwitbox

Quelques réalisations :

Un support mini-servo

img_6039

Dans le cadre des EDE des amplis passif pour téléphone.

img_6035

En TPE des profils d’ailes d’avions.

img_6034

En EPI un support solaire et LDR

helios

Arduino Yun PA WIFI

Un point d’accès avec code wpa2 tournant!

img_5006

Quoi qu’est-ce ?

C’est une carte Arduino doublée d’un Linux, d’un module Ethernet et Wifi… besoin de rien d’autre !!!

Et on peut faire quoi avec ça ? Beaucoup de choses moi j’ai créée un point accès wifi temporaire.

Branché sur le réseau Ethernet de l’établissement, le boitier génère automatiquement une nouvelle clé Wifi toute les heures la clé s’affiche sur un écran lcd.  Idéale pour le CDI ou bien en ISN ou TPE pour permettre un accès au wifi aux élèves.

La clé wifi change automatiquement toute les heures.

 

1/ LE MATOS  90€ environ en France (moins cher chez nos amis chinois).

difficile à trouver on trouve l’équivalent chez robotshop : Carte whatsnext Turquoise
2 boutons poussoirs
Prévoir l’alimentation avec un cordon USB/Micro USB  ou transformateur MicroUsb (ceux des telephones portables).
yunimg_5031

2/ CONFIGURATION

Il faut configurer la carte en mode Bridge (pont).
Pour cela brancher la carte sur un ordinateur a l’aide du cordon USB. taper http://linino.local  ou 192.168.240.1 (10s sur le bouton reset) (A vérifier selon le model de la carte)
Mot de passe doghunter.
Pour les cartes compatibles  WhatsNext TURQUOISE le mot de passe est : whatsnext
le menu de configuration est dans le menu whatsnext/ luci   root/whatsnext…..

linino

Cliquer advanced configuration panel

capture1

Puis de configurer en Bridge. PENSEZ A SAUVER

capture2

On suppose un DCHP sur le réseau sinon il faudra régler les ip.

 

3/ CABLAGE

Les 2 boutons poussoir peuvent fonctionner sans résistance pull-up,
on active celle intégré dans l’arduino grace à cette ligne de commande : digitalWrite(5,HIGH);
L’afficheur LDC est alimenté en 5v.
L’alimentation peut se faire par le cordon  micro USB
Prendre un afficheur I2C il suffit ainsi de connecter SDA et SCL.

 

SCHEMA DE CABLAGE

fritz

4/ LE CODE

Il faut le dernier IDE c’est mieux, et les 2 librairies ci-dessous à copier dans le dossier Arduino/librairies.

IDE ARDUINO :
Arduino Software
Bibliothéques :
LiquidCrystal
Process.h

Voici le code :

//————code Eric KELNER . AEFE Lycée FRANCAIS BAMAKO——————
//———-   Thomas CASTANET. AEFE Lycée FRANCAIS BAMAKO——————
#include <LiquidCrystal_I2C.h>
#include <Process.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);   // VERIFIEZ L ADRESSE DE VOTRE LCD 0X3F OU 0X27 OU AUTRE….

const int buttonChangeclef = 6;       // reinitialise la clé
const int boutonAjoutTemps=5;         // ajoute du temps

//int etatButtonChangeclef = 0;         // état des boutons/
//int etatBoutonAjoutTemps = 0;

int firstStart=1;

String uciClef= » »;
String prefixeClef= »klnr »;             // 4 lettres en prefixe de la clé wifi
String ssid= »klnrWifi »;                 // nom du wifi, a personnaliser
String clef= » »;
String xClef= » »;

uint16_t start = millis();
uint16_t previousMillis=0;
static int tempsParDefaut=61;  //  on part sur 60mn par defaut MOINS1 MN le temps de boot
long time1Hz = 0;
extern volatile unsigned long timer0_millis;

//=================================  SETUP ================
void setup() {

pinMode(buttonChangeclef, INPUT);     // bouton reinitialise la clé
digitalWrite(buttonChangeclef,HIGH);  // POUR ACTIVER PULL UP INTERNE
pinMode(boutonAjoutTemps,INPUT);      // bouton ajoute du temps
digitalWrite(boutonAjoutTemps,HIGH); // POUR ACTIVER PULL UP INTERNE

lcd.begin();lcd.blink();
lcd.setCursor(2,0); lcd.print(« DEMARRAGE »); delay(1000);
lcd.setCursor(2,1);lcd.print(« PATIENTEZ »); delay(1000);

Bridge.begin();
Serial.begin(9600);
}

//=================================  LOOP ================
void loop() {

int nbClients=0;
String test,chaine;
Process p;

p.runShellCommand(« /etc/config/testclients2.sh »);
while (p.running());
while (p.available()) {
char c = p.read();
test=c;
//  if(test.equals(« \n »)) nbClients++;
if(!test.equals( » « ))  if(c==’\n’) nbClients++;
chaine=chaine+c;
SerialUSB.print(c);      // print the number as well
}

SerialUSB.println(« AFFFICHAGE DE LA CHAINE »);
SerialUSB.print(test);
SerialUSB.print(« ————-« );

//for (int =0;chaine.lenght;i++)
//SerialUSB.print(c);      // print the number as well

// CALCUL DU TEMPS ECOULE
int m,s;
unsigned long over,elapsed,currentMillis = millis();
elapsed=(currentMillis-previousMillis)-start;
over=elapsed%3600000;
m=int(over/60000);
over=over%60000;
s=int(over/1000);

//LIGNE 1   LCD
lcd.setCursor(0,0);lcd.print(« CLEF: »); lcd.print(clef);  // ON AFFICHE LA CLE WIFI

//LIGNE 2     LCD   // TOUTES LES 2 SECONDE ON AFFICHE LE TEMPS OU LE SSID
SerialUSB.println(currentMillis – time1Hz);

if ((currentMillis – time1Hz) <3000 )  { lcd.setCursor(0,1); lcd.print(« CONNECTES: « ); lcd.print(nbClients); }
if ((currentMillis – time1Hz) >= 3000  && (currentMillis – time1Hz) < 6000 )
{
lcd.setCursor(0,1); lcd.print(« WIFI: »);lcd.print(ssid);
}

//if ((currentMillis – time1Hz) >= 4000    || digitalRead(boutonAjoutTemps)==1)
if ((currentMillis – time1Hz) >= 6000  )
{ lcd.setCursor(0,1); lcd.print(« Tps : »);
lcd.print(tempsParDefaut-m);lcd.print(« mn »);lcd.print(60-s);lcd.print(« s       « );
time1Hz = currentMillis;
SerialUSB.print(« je rentre je remets a ZERO »);
}

//lcd.scrollDisplayLeft();
// LECTURE DE L ETAT DES BOUTONS

if(digitalRead(boutonAjoutTemps)==0) {tempsParDefaut=tempsParDefaut+2;}  // On rajoute 2mn lors de l appui sur le bouton

if(tempsParDefaut-m<1)  {                   //   si le temps est eecoulé on reinitialise l horloge
firstStart=1;
noInterrupts ();
timer0_millis = 0;
interrupts ();
start = millis();
}

if (digitalRead(buttonChangeclef) == LOW || firstStart==1)   // SI LE TEMPS EST ECOULE OU APPUI SUR LE BOUTON
{
tempsParDefaut=60;   // on repart pour 60mn
firstStart=0;

lcd.clear(); lcd.noBlink(); lcd.setCursor(0,0); lcd.print(« CREATION CLE »);

randomSeed(analogRead(0));
xClef=(int)random(1000,9999);   // cle entre  1000 et 9999

uciClef= »wireless.@wifi-iface[0].key= »;
uciClef=uciClef+prefixeClef+String(xClef);  // on construit la chaine
clef=prefixeClef+String(xClef);

lcd.setCursor(0,0); lcd.print(« CONFIGURATION     « );
delay(1000);

//   command UCI  parametrage de la carte

p.runShellCommand(« uci set wireless.@wifi-iface[0].ssid=klnrWifi »);   // possible de changer
p.runShellCommand(« uci set wireless.@wifi-iface[0].mode=ap »);   // point acces
p.runShellCommand(« uci set wireless.@wifi-iface[0].encryption=psk-mixed »);   // wpa/wpa2
p.runShellCommand(« uci set wireless.@wifi-iface[0].country=FR »);

//  reglage clef;
p.begin(« uci »);
p.addParameter(« set »);
p.addParameter(uciClef);
p.run();

//  validation des parametres
p.runShellCommand(« uci commit wireless »);

// on relance le reseau
p.runShellCommand(« uci /etc/init.d/network restart »);
p.runShellCommand(« wifi »);
}
}

 

C’est terminé !.

5/ Compter le nombre de clients. (en option)

il faut copier le fichier testclients2.sh dans etc/config.

 

cela permet d’afficher sur le lcd le nombre de clients connectés au point d’accès.

 

Bugs relevés :

Lors du  téléchargement du code dans la carte arduino YUN elle ne redemarre pas ….
Il faut alors Débrancher et rebrancher son alim….

 

 

Arduino Matériel de base.

Le matériel de base :

Il faut une carte arduino UNO R3 avec gros port USB (moins fragile).

Un breadboard shield. En plus d’avoir une plaque de prototype on trouve directement 5 broches +5v et 5 broches GND.

Le shields permet de se fixer directement sur le UNO. (pas de fils qui se trimbalent)

unknown

Un afficheur lcd (bus I2C) cela permet de diminuer le nombre de fils à 4. Deux pour l’alimentation 2 pour à brancher surSDA/SCL broches A4/A5. La bibliothèque est là : liquidcrystal-i2c-library-master (à copier dans arduino/libraries).

ATTENTION l’adresse des composants I2C peut changer d’un fabriquant à l’autre. Je vous conseille le programme suivant qui permet de retrouver l’adresse du comptant branché sur le port I2C. scan_i2c

ar-afficheur-lcd-2x16-i2c-dfr0063-19309

Et des câbles de connexion

Voilà il ne vous reste qu’à choisir vos capteurs selon le projet souhaité.

Je commande mon matériel chez Gotronic, lightinthebox ou amazon…

 

Sinon, on peut commencer avec un starter kit. (Voir ça)

Arduino les bases

Pour bien commencer :

Actuellement la carte de base est la UNO R3. Mais il existe de nombreuses déclinaisons.

Pour programmer il faut l’IDE arduino: et Voici la Référence du langage Arduino en français  ici

et pour macOS les bons drivers: ch34x_install_v1

callouts

On a des entrées analogiques (A0-A5) :   val = analogRead (analogPin); (la valeur lue sera entre 0-1023) (0-5v)

avec pinMode on déclare la broche en tirée ou sortie.

On a des entrées numériques (1-13 mais aussi A0-A5) :   val = digitalRead (Pin);

Des sorties digitale (1-13) : digitalWrite(pin,état):  Etat (LOW ou HIGH);

Des sorties digitales modulables ( 3 5 6 9 10 11 ) : analogWrite(pin, val) avec val entre 0-255  (Attention vous ne devez pas appeler pinMode () pour définir la broche comme sortie avant d’appeler analogWrite ())

 

Un tableau intéressant (source)

capture-decran-2016-12-06-a-08-32-54

Les pièges :

les broches 0 et 1 qui ont une double fonction à éviter d’utiliser au début.

Les broches A4/A5 utilisables pour le bus I2C.

Les broches 3 5 6 9 10 11 qui ont la particularité d’être PWM c’est a dire il est possible de faire varier la tension moyenne.

Attention quand la carte est alimentée par le connecteur externe(9v) le port 5V de la carte arduino ne fonctionne pas !