mercredi 31 juillet 2013

Enfin des pare-chocs

J'ai eu beaucoup de mal à me décider sur la meilleure façon de réaliser mes pare-chocs.
Même si le concept était clair dans ma tête, la partie pratique n'était pas évidente.

Comme d'habitude, la solution est venue par des chemins détournés. Beaucoup d'observation :
- barrette à cheveux -> trop dur, bonne mémoire de forme ;
- fil de fer de gaine électrique -> dureté moyenne, mémoire de forme moyenne ;
- plastique dur 0,5 (emballage) -> génial bonne dureté et bonne mémoire de forme.

Comme vous le voyez sur les photos j'ai remplacé mon Arduino Uno par un Arduino Nano pour un gain de place uniquement.


En plus, de mon Arduino Nano, j'ai mis en place des encodeurs sur les roues pour que le robot avance droit. J'ai eu beaucoup de mal à les mettre en place mais ils fonctionnent parfaitement maintenant.


En ce qui concerne les pare-chocs j'ai donc réussi à en faire onze sur une seule entrée analogique. Comme je l'avais annoncé dans un précédent post j'ai réalisé un pont diviseur.
Sur le châssis du robot j'ai installé un fil métallique qui est relié à la masse. Chaque contact me donnant une tension différente au niveau de l'entrée analogique.




Vue de dessous, il est plus facile de voir la répartition des contacts


Je vais finir mon code pour qu'il y ai un peut de réactivité et d'intelligence.

C'est fini pour ce projet, je vais donc pourvoir me consacrer à ma Raspberry pour un nouveau robot.

dimanche 10 février 2013

Le nouveau châssis

Cela fait un an que je cherche un châssis low-cost pour mon robot.

Alors que je noyais mon chagrin dans le sucre je suis tombé sur mon nouveau châssis.

Il répond à tous mes critères:
- circulaire avec 15 cm < diamètre < 18cm
- hauteur inférieure à 10 cm
- en plastique.

Voici donc mon nouveau châssis.





Oui le sponsor est très présent, je vais demander à mes enfants de faire une jaquette en papier.

A l'intérieur les moteurs seront protégés du chat qui prend plaisir à faire ses dents sur les câbles.





Demain je fais des courses
-plaques de connexions
-micro interrupteur
-cachette pour pile 9v

dimanche 5 février 2012

Constat : il me faudrait des pare-chocs

Les premiers tests sont concluant, mais... il y a toujours un problème qui vient gâcher le plaisir.

En effet alors que le capteur à ultrason fonctionne correctement lorsque l'obstacle massif est devant, le robot ne détecte rien lorsqu'il y a un objet de faible volume ou légèrement décaler.
La solution s'impose toute seule : il me faudrait des pare-chocs




J'ai une idée, au lieu d'utiliser une entrée par capteur, je vais essayer de réaliser une série de capteur sous la forme d'un pont diviseur ce qui me prendra qu'une entrée analogique sur la carte Arduino UNO. Ce sera le même principe que les poussoirs du shield LCD.

Il faut que je cherche un moyen de faire les capteurs. L'utilisation de ressorts pourrait me simplifier le problème.
Avec la neige je vais avoir du temps pour faire ces modifications.

Pour finir, il faut que change la structure du châssis, le chat attaque le robot et arrache les connexions.

lundi 16 janvier 2012

phase 4 : Le chassis du robot

 Ben oui, fini le code, place au bricolage.

Après une recherche dans mon stock de revue d'électronique pratique et de micro robot je suis parti sur un châssis circulaire. En effet, il semble que c’est la forme qui puisse s’échapper le plus facilement des impasses (si les roues ne dépasse pas du châssis).

Deux contre-plaqué de 3 mm d’un diamètre de 20 cm vont prendre en sandwich les deux servo-moteurs modifiés pour qu’ils assurent une rotation continue.







En ce qui concerne la modification des servos moteurs, cela m'a pris 5 minutes par appareil avec deux enfants qui veulent absolument VOIR et TOUCHER à tout.
J'ai choisi cette méthode : http://fribotte.free.fr/bdtech/pic/servoCC.html

En contre-partie, mon fils m'a donné deux roues légo diamètre 4cm largeur 3cm (bonheur suprême, le palonnier du servo moteur rentre directement dans la jante de la roue)


Petit problème, les écrous frottent parfois dans les joints du carrelage, il faut que je trouve un patin téflon pour l'arrière.
Avec une pile 9V et le code ci-après, le robot commence à avoir une certaine autonomie.

// include the library code:
#include <LiquidCrystal.h>
#include <Servo.h>
//Déclaration des servomoteurs comme une variable typée 
Servo servoD; 
Servo servoG;
//Déclaration du capteur à ultrason
const int ultrason = 11;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int capteur1 = 1; // variable identifiant un port ana. 0 de la carte
int LED1 = 13; // variable identifiant le port num. 13 de la carte
int lum1 = 0; // variable identifiant la valeur de la luminosité du capteur 1
//Initialisation du programme
void setup() 

  servoD.attach(2); // le servomoteur est sur une patte PWM
  servoG.attach(3); // le servomoteur est sur une patte PWM
  lcd.begin(16, 2);  // set up the LCD's number of columns and rows:

void loop()

  long duration, cm;
 
  pinMode(ultrason, OUTPUT);
  digitalWrite(ultrason, LOW);
  delayMicroseconds(2);
  digitalWrite(ultrason, HIGH);
  delayMicroseconds(5);
  digitalWrite(ultrason, LOW);
  pinMode(ultrason, INPUT);
  duration = pulseIn(ultrason, HIGH);

  cm = microsecondsToCentimeters(duration);

 if (cm>20)
 {
   servoD.write(95);
   servoG.write(85); 
 }
  if (cm<20)
 {
   servoD.write(95);
   servoG.write(95);
  delay(3000); 
 }
 
  delay(200);
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(cm),lcd.print(" cm");
 
}
long microsecondsToCentimeters(long microseconds)
 {
   // The speed of sound is 340 m/s or 29 microseconds per centimeter.
   // The ping travels out and back, so to find the distance of the
   // object we take half of the distance travelled.
   return microseconds / 29 / 2;
 }
J'ai trouvé sur le net comment mettre de la couleur dans le code ce sera certainement la prochaine étape
http://code18.blogspot.com/2009/01/ajouter-de-la-coloration-syntaxique-au.html

dimanche 15 janvier 2012

Phase 3 : gestion des boutons du shield LCD

Dans la continuité de la phase deux, je vais prendre en compte les boutons du shield LCD. Pour cela, je fais une lecture analogique de l'entrée A0  avec affichage de la valeur sur le LCD et une tempo de 0,5 seconde.

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int button_lcd = 0; // variable identifiant un port ana. 0 de la carte
int button_select = 0; // variable identifiant la valeur de la tension du capteur 0
void setup()
{
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("bouton du lcd !");
}

void loop()
{
button_select = analogRead(button_lcd); // lire la donnée capteur 0
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
 lcd.setCursor(0, 1);
// écriture de la valeur de la tension de A0
lcd.print(button_select);
delay(500);
}

samedi 14 janvier 2012

Phase 2 : mon premier code

Pour faire vraiment très simple, j'ai décidé de piocher dans les exemples et de faire afficher le "Hello World" sur le shield LCD http://www.robotshop.com/eu/blindage-lcd-boutons-arduino-cytron-2.html
Comme d'habitude ça ne marche pas. Se serait trop beau.
Il faut donc commencer à faire des recherches pour comprendre comment fonctionne le programme.

/*
  LiquidCrystal Library - Hello World

 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.

 This sketch prints "Hello World!" to the LCD
 and shows the time.

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>

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

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

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

mais sur le site du constructeur, en anglais (merci pour les traducteur en ligne) il y a une nouvelle 'Library' pour utiliser le shield.

Bon je suis du genre à chercher un peu et toujours sur le site du constructeur il y a le schéma de câblage de la carte. vous arriverez donc à comprendre comme moi qu'il faut replacer :
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
par
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

CA MARCHE

mercredi 11 janvier 2012

phase 1 - le déballage

Cela fait déjà 3 semaines que j'ai mon matériel, et lorsque j'ai ouvert mes boîtes, j'ai eu du mal a appréhender les petites tailles des composants.


Sinon voici d'autres photos en vrac



Si je n'avais pas de shield connexions à vis, j'aurais un léger problème d'isolement entre mes deux cartes.

Prochain post ce sera ma base de déplacement pour mon robot.