The fixed Arduino board is connected to a PC and sends serially the time-of-flight values of the ultrasonic pulses. A Processing code uses these tof values to display on a screen the trajectory of rectangles which is a bijection of the red box movements inside the white circle. There is a main PDE that calculates from the two TOFs avta and avtb the mobile coordinates xo and yo using simple geometry. The two US receivers being placed respectively at the (0,0) and (0, L) corners. The more critical part of the computation is the Moving Average Filter or MAF which allows to get mean values using always the "nu" (in our case: 20), more recent data.
import fullscreen.*;
FullScreen fs;
import krister.Ess.*;
AudioStream myStream;
SineWave myWave1;
TriangleWave myWave2;
PinkNoise myWave3;
FadeOut myFadeOut;
FadeIn myFadeIn;
Reverb myReverb;
int oldFrequency=0;
boolean doFadeIn=false;
AudioChannel myChannel;
AudioFile myFile=new AudioFile();
PImage a;
float r, x, y, xo, yo, xp, yp;
int taille = 10;
// importing the processing serial class
import processing.serial.*;
int num = 100;
int nu = 20;
int nus = 10;
float mx[] = new float[num];
float my[] = new float[num];
// variables for serial connection, portname and baudrate have to be set
Serial port;
int value = 0;
// buffer and value variable for each value and boolean to switch between values
String bufA="", bufB="", bufC="", bufD="";
boolean buf, buff; // boolean switch to distinguish values
int value1, value2, value3, value4, n;
// variables for drawing function
// lets user control DisplayItems properties, value output and drawing attributes
float c = 0.34;
float L = 1280;
float x1, x2,avta,avtb, avstop, stop, stopp, d1, d2, x1p, x2p;;
import processing.video.*;
Movie myMovie;
void setup(){
// start up Ess
Ess.start(this);
myChannel=new AudioChannel("son_folle1.wav");
// create a new AudioStream
myStream=new AudioStream();
myStream.smoothPan=true;
// our waves
myWave1=new SineWave(0,.33);
myWave2=new TriangleWave(0,.66);
myWave3=new PinkNoise(.50);
// our effects
myFadeOut=new FadeOut();
myFadeIn=new FadeIn();
myReverb=new Reverb();
// start
myStream.start();
frameRate(30);
// establish serial port connection
port = new Serial(this, Serial.list()[1], 9600);
smooth();
noStroke();
size(800, 800);
noCursor();
background(255);
a = loadImage("tableau1 rond1.bmp");
myMovie = new Movie(this, "folle_entier.mov");
myMovie.loop();
// Create the fullscreen object
fs = new FullScreen(this);
// enter fullscreen mode
fs.enter();
}
void movieEvent(Movie myMovie) {
myMovie.read();
}
void draw(){
while(port.available() > 0){
value = port.read();
serialEvent(value);
}
if(value2 < 0)
{
background(0);
image(myMovie, 0,0,width,height);
myChannel.play(Ess.FOREVER);
myChannel.volume(1.);
}
else if(value2 > 0)
{
background(255);
myChannel.stop();
// adjust the pan
myStream.pan((2*x-width)/width);
fill(0);
ellipse(width/2+5, width/2, width-90, width-40);
// listen to serial port and trigger serial event
if(value1 < 17000 && value1 > 8000){
avta = value1;
}
if(value3 < 17000 && value3 > 8000){
avtb = value3;
}
d1 = c * (avta-9550);
d2 = c * (avtb-9550);
x1 = (d1 + nu * x1p) / (nu + 1);
x2 = (d2 + nu * x2p) / (nu + 1);
x1p = x1;
x2p = x2;
xo = (sq(x1) - sq(x2) + sq(L))/(2*L);
yo = sqrt(abs(sq(x1) - sq(xo)));
x = map(xo, 0, 1170, 50, width);
y = map(yo, 0, 1050, 50, height);
n++;
// draw the curve
stroke(255);
strokeWeight(10);
// draw waveform
int interp=(int)(((millis()-myStream.bufferStartTime)/(float)myStream.duration)*myStream.size);
for (int i=0;i<width;i++) {
float left=y;
float right=y;
if (i+interp+1<myStream.buffer2.length) {
left-=myStream.buffer2[i+interp]*150.0;
right-=myStream.buffer2[i+1+interp]*150.0;
}
line(i,left,i+1,right);
}
if(n > (num )){
for(int i=1; i<num; i++) {
mx[i-1] = mx[i];
my[i-1] = my[i];
}
r = sqrt(sq(x - width/2) + sq(y - width/2));
println(r);
if(r < width/2)
{
// Add the new values to the end of the array
mx[num-1] = x;
my[num-1] = y;
}else{
mx[num-1] = mx[num-2];
my[num-1] = my[num-2];
}
fill(255);
for(int i=0; i<num; i++) {
rect(mx[i]-i, my[i]-i, i, i);
}
blend(a,0,0,800,800,0,0,800,800,DARKEST);
}
println(n);
}
println("value2: "+ value2+" - value4: "+ value4);
println("value1: "+ value1+" - value3: "+ value3);
println("x1: "+ int(x1)+" - x2: "+ int(x2)+" - x: "+ int(x)+" - y: "+ int(y));
println("xo: "+ int(xo)+" - yo: "+ int(yo));
}
A serial subroutine added as a tab to the main PDE monitor the serial communication between Arduino and Processing:
void serialEvent(int serial){
if(serial!=10) {
if (serial=='A') buf = true;
if (serial=='B') buf = false;
if (serial=='C') buff = true;
if (serial=='D') buff = false;
if (buf == true){ if (serial!='A') bufA += char(serial);
}else if (buf == false) {
if (serial!='B') bufB += char(serial);
}
if (buff == true){ if (serial!='C') bufC += char(serial);
}else if (buff == false) {
if (serial!='D') bufD += char(serial);
}
} else {
if (buf){ value1 = int(bufA); bufA="";
} else { value2 = int(bufB); bufB="";
}
if (buff){ value3 = int(bufC); bufC="";
} else { value4 = int(bufD); bufD="";
}
}
}
The "value2" linked to 'B' is indicative of the state of motion of the automata, if it is moving the value of "value2" is the +1 corresponding to the value of "frontiere" of the previous code. Depending on "value2" value either a movie is playing on the screen or transparent squares discover a picture hidden behind a black circle while the synthesizer sound is both played and represented by its amplitude waveform.
There is another tab for the sound subroutine:
void audioStreamWrite(AudioStream theStream) {
if(value2 < 0)
{
myStream.start();
myStream.fadeTo(0,500);
}
else if(value2 > 0)
{
myStream.start();
myStream.fadeTo(1,500);
}
int frequency=int(y) / 3;
myWave1.generate(myStream);
myWave2.generate(myStream,Ess.ADD);
// adjust our phases
myWave1.phase+=myStream.size;
myWave1.phase%=myStream.sampleRate;
myWave2.phase=myWave1.phase;
if (doFadeIn) {
myFadeIn.filter(myStream);
doFadeIn=false;
}
if (frequency!=oldFrequency) {
// we have a new frequency
myWave1.frequency=frequency;
// non integer frequencies can cause timing issues with our simple timing code
myWave2.frequency=(int)(frequency*2.33);
myWave1.phase=myWave2.phase=0;
// out with the old
// fade out the old sound to create a
myFadeOut.filter(myStream);
doFadeIn=true;
oldFrequency=frequency;
}
// reverb
myReverb.filter(myStream,.5);
xp = x;
yp = y;
}
// we are done, clean up Ess
public void stop() {
Ess.stop();
super.stop();
}
mardi 22 février 2011
Codes - 2
An XBee module attached to an Arduino board is also embarked on the mobile.
The orange wire is connected to pin 12 of the board and turns on and off the ultrasonic emission according to the following code:
int inPin9 = 9;
int inPin10 = 10;
int outputPin = 12;
int valUS, valMoteur1, valMoteur2;
void setup()
{
Serial.begin(9600);
pinMode(outputPin, OUTPUT);
pinMode(inPin9, INPUT);
pinMode(inPin10, INPUT);
}
void loop()
{
valMoteur1 = digitalRead(inPin9);
valMoteur2 = digitalRead(inPin10);
if(valMoteur1 == HIGH || valMoteur2 == HIGH) {
digitalWrite(outputPin, LOW);
}
if (Serial.available()) {
valUS = Serial.read();
if (valUS == 'A' || valUS == 'C') {
digitalWrite(outputPin, HIGH);
}
if (valUS == 'B' || valUS == 'D') {
digitalWrite(outputPin, LOW);
}
}
}
The gray wire is turning pin 10 HIGH or LOW according to the state of the motors (see previous post Codes - 1). The letters 'A', 'B', 'C', and 'D' are sent wireless from another, fixed, XBee attached to another Arduino board connected to a PC according to the following code:
int inUS1 = 5;
int inUS2 = 6;
int val1, val2;
unsigned long t, th1, th2;
int n = 1;
int frontiere = 1;
void setup()
{
Serial.begin(9600);
pinMode(inUS1, INPUT);
pinMode(inUS2, INPUT);
}
void loop()
{
frontiere = 1;
val1 = digitalRead(inUS1);
val2 = digitalRead(inUS2);
if (n < 0){
Serial.print('A');
t = micros();
while (val1 == LOW){
val1 = digitalRead(inUS1);
th1 = micros() - t;
if(th1 > 17000)
{
val1 = HIGH;
frontiere = -1;
}
}
Serial.print(th1);
Serial.print(10, BYTE);
Serial.print('B');
Serial.print(10, BYTE);
}else{
Serial.print('C');
t = micros();
while (val2 == LOW){
val2 = digitalRead(inUS2);
th2 = micros() - t;
if(th2 > 17000)
{
val2 = HIGH;
frontiere = -1;
}
}
Serial.print(th2);
Serial.print(10, BYTE);
Serial.print('D');
Serial.print(10, BYTE);
}
n = n * (-1);
Serial.print('E');
Serial.print(frontiere);
Serial.print(10, BYTE);
delay(100);
}
The two ultrasonic receivers are connected to pin 5 and 6, they turn HIGH anytime a 40 kHz ultrasonic pulse is received the "while()" functions measure the time it takes for the US pulse to get from the transmitter to the receiver (we suppose obviously that the radio order 'A' or 'C' to turn on the emitter travels at infinite at infinite speed). "frontiere" is +1 when the mobile is moving and -1 when it is stopped.
The orange wire is connected to pin 12 of the board and turns on and off the ultrasonic emission according to the following code:
int inPin9 = 9;
int inPin10 = 10;
int outputPin = 12;
int valUS, valMoteur1, valMoteur2;
void setup()
{
Serial.begin(9600);
pinMode(outputPin, OUTPUT);
pinMode(inPin9, INPUT);
pinMode(inPin10, INPUT);
}
void loop()
{
valMoteur1 = digitalRead(inPin9);
valMoteur2 = digitalRead(inPin10);
if(valMoteur1 == HIGH || valMoteur2 == HIGH) {
digitalWrite(outputPin, LOW);
}
if (Serial.available()) {
valUS = Serial.read();
if (valUS == 'A' || valUS == 'C') {
digitalWrite(outputPin, HIGH);
}
if (valUS == 'B' || valUS == 'D') {
digitalWrite(outputPin, LOW);
}
}
}
The gray wire is turning pin 10 HIGH or LOW according to the state of the motors (see previous post Codes - 1). The letters 'A', 'B', 'C', and 'D' are sent wireless from another, fixed, XBee attached to another Arduino board connected to a PC according to the following code:
int inUS1 = 5;
int inUS2 = 6;
int val1, val2;
unsigned long t, th1, th2;
int n = 1;
int frontiere = 1;
void setup()
{
Serial.begin(9600);
pinMode(inUS1, INPUT);
pinMode(inUS2, INPUT);
}
void loop()
{
frontiere = 1;
val1 = digitalRead(inUS1);
val2 = digitalRead(inUS2);
if (n < 0){
Serial.print('A');
t = micros();
while (val1 == LOW){
val1 = digitalRead(inUS1);
th1 = micros() - t;
if(th1 > 17000)
{
val1 = HIGH;
frontiere = -1;
}
}
Serial.print(th1);
Serial.print(10, BYTE);
Serial.print('B');
Serial.print(10, BYTE);
}else{
Serial.print('C');
t = micros();
while (val2 == LOW){
val2 = digitalRead(inUS2);
th2 = micros() - t;
if(th2 > 17000)
{
val2 = HIGH;
frontiere = -1;
}
}
Serial.print(th2);
Serial.print(10, BYTE);
Serial.print('D');
Serial.print(10, BYTE);
}
n = n * (-1);
Serial.print('E');
Serial.print(frontiere);
Serial.print(10, BYTE);
delay(100);
}
The two ultrasonic receivers are connected to pin 5 and 6, they turn HIGH anytime a 40 kHz ultrasonic pulse is received the "while()" functions measure the time it takes for the US pulse to get from the transmitter to the receiver (we suppose obviously that the radio order 'A' or 'C' to turn on the emitter travels at infinite at infinite speed). "frontiere" is +1 when the mobile is moving and -1 when it is stopped.
Codes - 1
The brain of the automata is an Atmega microcontroller, either Atmega8 or Atmega368. It is programed with Arduino in order to drive the two DC motors which move the mobile under the control of infrared detectors.
Here is the code:
int inPin5 = 0;
int val5 = 0;
int inPin0 = 5;
int val0 = 0;
int seuil = 500;
int outPin7= 2;
int outPin8= 3;
long randNumber;
long randStop;
unsigned long n;
int motorPin1 = 9;
int motorPin2 = 10;
int motorPin3 = 11;
int motorPin4 = 12;
int delayTime = 500;
int tourned = 80;
int tourneg = 80;
void setup() {
randomSeed(analogRead(3));
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(outPin7, OUTPUT);
pinMode(outPin8, OUTPUT);
}
void moteuravance(int mot1, boolean mot2, int mot3, boolean mot4);
void moteur(int mot1, boolean mot2, int mot3, boolean mot4, int duree);
void loop() {
if(millis() < 20000){
moteuravance(0, false, 0, false);
}else{
randStop = random(10000, 60000);
n = millis() % randStop;
val5 = analogRead(inPin5);
val0 = analogRead(inPin0);
if (val0 > seuil && val5 < seuil)
{
delayTime = random(1000,2000);
randNumber = random(5, 20);
digitalWrite(outPin7, true);
moteur(0, false, tourned, true, delayTime);
tourned = tourned - randNumber;
tourneg = 80;
}if (val0 < seuil && val5 > seuil)
{
delayTime = random(1000,2000);
randNumber = random(5, 20);
digitalWrite(outPin7, true);
moteur(tourneg, true, 0, false, delayTime);
tourneg = tourneg - randNumber;
tourned = 80;
}if (val0 > seuil && val5 > seuil)
{
digitalWrite(outPin7, false);
digitalWrite(outPin8, false);
moteur(80, false, 80, false, 2000);
tourned = 80;
tourneg = 80;
}if (val0 < seuil && val5 < seuil)
{
digitalWrite(outPin7, false);
digitalWrite(outPin8, false);
moteuravance(160, true, 160, true);
}
while(n < randStop/2 && n > randStop/4)
{
n = millis() % randStop;
moteuravance(0, false, 0, false);
}
}
}
void moteuravance(int mot1, boolean mot2, int mot3, boolean mot4)
{
analogWrite(motorPin1, mot1);
digitalWrite(motorPin2, mot2);
analogWrite(motorPin3, mot3);
digitalWrite(motorPin4, mot4);
}
void moteur(int mot1, boolean mot2, int mot3, boolean mot4, int duree)
{
analogWrite(motorPin1, mot1);
digitalWrite(motorPin2, mot2);
analogWrite(motorPin3, mot3);
digitalWrite(motorPin4, mot4);
delay(duree);
}
While the automata is inside the white circle the IR detectors send a signal greater than a threshold "seuil" on both pin 0 and 5 and both motors turn in the forward direction with the "moteuravance" function. When one of the IR detector goes above the black color surrounding the white circle it goes below the threshold and the mobile turns away from the boundary to remain inside the circle. outPin 7 and outPin 8 are used to trigger specific actions through an XBee module embarked on an Arduino board.
Here is the code:
int inPin5 = 0;
int val5 = 0;
int inPin0 = 5;
int val0 = 0;
int seuil = 500;
int outPin7= 2;
int outPin8= 3;
long randNumber;
long randStop;
unsigned long n;
int motorPin1 = 9;
int motorPin2 = 10;
int motorPin3 = 11;
int motorPin4 = 12;
int delayTime = 500;
int tourned = 80;
int tourneg = 80;
void setup() {
randomSeed(analogRead(3));
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(outPin7, OUTPUT);
pinMode(outPin8, OUTPUT);
}
void moteuravance(int mot1, boolean mot2, int mot3, boolean mot4);
void moteur(int mot1, boolean mot2, int mot3, boolean mot4, int duree);
void loop() {
if(millis() < 20000){
moteuravance(0, false, 0, false);
}else{
randStop = random(10000, 60000);
n = millis() % randStop;
val5 = analogRead(inPin5);
val0 = analogRead(inPin0);
if (val0 > seuil && val5 < seuil)
{
delayTime = random(1000,2000);
randNumber = random(5, 20);
digitalWrite(outPin7, true);
moteur(0, false, tourned, true, delayTime);
tourned = tourned - randNumber;
tourneg = 80;
}if (val0 < seuil && val5 > seuil)
{
delayTime = random(1000,2000);
randNumber = random(5, 20);
digitalWrite(outPin7, true);
moteur(tourneg, true, 0, false, delayTime);
tourneg = tourneg - randNumber;
tourned = 80;
}if (val0 > seuil && val5 > seuil)
{
digitalWrite(outPin7, false);
digitalWrite(outPin8, false);
moteur(80, false, 80, false, 2000);
tourned = 80;
tourneg = 80;
}if (val0 < seuil && val5 < seuil)
{
digitalWrite(outPin7, false);
digitalWrite(outPin8, false);
moteuravance(160, true, 160, true);
}
while(n < randStop/2 && n > randStop/4)
{
n = millis() % randStop;
moteuravance(0, false, 0, false);
}
}
}
void moteuravance(int mot1, boolean mot2, int mot3, boolean mot4)
{
analogWrite(motorPin1, mot1);
digitalWrite(motorPin2, mot2);
analogWrite(motorPin3, mot3);
digitalWrite(motorPin4, mot4);
}
void moteur(int mot1, boolean mot2, int mot3, boolean mot4, int duree)
{
analogWrite(motorPin1, mot1);
digitalWrite(motorPin2, mot2);
analogWrite(motorPin3, mot3);
digitalWrite(motorPin4, mot4);
delay(duree);
}
While the automata is inside the white circle the IR detectors send a signal greater than a threshold "seuil" on both pin 0 and 5 and both motors turn in the forward direction with the "moteuravance" function. When one of the IR detector goes above the black color surrounding the white circle it goes below the threshold and the mobile turns away from the boundary to remain inside the circle. outPin 7 and outPin 8 are used to trigger specific actions through an XBee module embarked on an Arduino board.
lundi 21 février 2011
Rationalité
Au Vème siècle avant JC les Grecs ont découvert avec la rationalité une manière unique de penser le monde. Une découverte comme celle d'Amerigo: ils l'ont nommée. L'Homme paléolithique raisonnait déjà, sinon comment aurait-il pu chasser ou tailler une feuille de laurier en pierre ? Ce que les Grecs ont apporté c’est une méthode, un outil : voilà comment notre agitation psychique peut devenir capable d’opérer sur la réalité qui nous entoure. C’est bien là que réside l’inouï de la pensée rationnelle, elle est le reflet de la réalité objective. Les règles, les contraintes et les critères qui définissent l’espace logico-mathématique de la rationalité ont été définis au cours de ces 26 siècles dans une confrontation intense entre l’incroyable légèreté de l’esprit humain et les faits têtus. La réalité ne se laisse pas tordre le coup si facilement, heureusement car l’envie de l’homme de confondre le monde avec ses rêves est inépuisable. Sans cesse il va préférer son délire à la réalité, et pourtant, s’il veut la maîtriser cette réalité, il faut bien qu’il en accepte les règles. Il doit accepter que son cerveau de chasseur cueilleur est limité et ne peut pas saisir de façon intuitive, sensible, une réalité qui le dépasse. Le monde est plus grand que lui.
Athènes a fourni à l’humanité un outil, avec la pensée rationnelle, qui permet d’aller bien au-delà de l’intuition sensible. La rationalité n’est pas seulement la formalisation du fonctionnement de la psyché humaine mais d’abord, et c’est là un miracle, le reflet de la structure du monde matériel, extérieur et objectif par rapport à l’homme. L’ébahissement naît de la distance qui sépare l’esprit de la matière. Un esprit construit pour gérer efficacement tout un ensemble de perceptions subtiles - le gibier qui s’échappe, le partenaire à séduire ou les rapport de force à l’intérieur du clan – ne parait en aucune manière préparé à penser une matière faite de particules, de champs, de molécules et d’ADN.
Les Grecs les premiers, puis des milliers de héros de la pensée dans les siècles qui ont suivi, se sont dressés pour dire à l’homme que le discours sur le monde avait un prix, parler vrai avait une exigence. L’ensemble des règles qui a donné à l’homme occidental le contrôle de la matière sont encore aujourd’hui fragiles et balbutiantes, la pensée rationnelle est toujours un combat. Le risque de lapidation ne guette plus trop les Hypatie modernes, pas plus que le bûcher ne menace les chercheurs scientifiques. Mais l’injonction « Raisonne ! », aujourd’hui comme hier, est ressentie comme une incongruité ou pire comme une menace. Il est plus facile de parler en l’air que d’argumenter de façon rationnelle. Pour séduire, « le n’importe quoi » peut être efficace, mais certainement pas pour saisir le monde réel.
Il y a un émerveillement inépuisable à considérer la puissance que la rationalité a donné au cerveau humain. Des réalités aussi inimaginables – au sens propre de l’impossibilité d’en former une image – que la dualité onde-corpuscule peuvent être appréhendées par l’intelligence et par conséquent utilisées. Qui peut saisir intuitivement, sauf peut-être dans un délire ou un trip à l’acide, cette réalité : une particule projetée sur un écran muni de deux trous traverse nécessairement par l’un des deux trous mais néanmoins une partie essentielle de ce qui la constitue – l’onde – passe par l’autre trou. Réalité incontournable puisque des franges d’interférence se forment a l’arrière, phénomène qui signe la présence de la superposition de deux sources ondulatoires. L’expérience peut être réalisée avec de la lumière, des photons, mais aussi avec de plus grosses particules comme les électrons, elle peut aussi être faite très lentement en envoyant seulement un électron après l’autre, c'est-à-dire en s’assurant que ce ne sont pas les paquets d’électrons passant par le trou n° 1 qui interagissent avec ceux passant par le trou n° 2. Non, c’est bien chacun des électrons qui interagit avec une information obtenu par lui-même sur l’existence d’un deuxième trou pour former les franges d’interférence. L’électron « sait » qu’il y a deux trous ! Encore plus fort : si par un moyen quelconque on s’assure de savoir pour chaque électron émis par quel trou il est passé, alors les franges disparaissent. Il n’y a plus de franges d’interférence. C’est le principe d’incertitude d’Heisenberg qui interdit à l’observateur de connaître la position exacte de la particule.
La logique d’Aristote est peut-être mis à mal par toute cette physique quantique, mais pas la pensée rationnelle dont les mathématiques, qui fournissent les outils pour appréhender cette réalité quantique de notre monde, sont les plus parfaits rejetons. Athènes a ouvert une porte pour sortir de l’obscurantisme, c'est-à-dire du « n’importe quoi » qui a permis aux prêtres et aux charlatans de voler les rêves de l’homme pour l’asservir. La rationalité est un outil de liberté qui donne à l’homme un accès d’une puissance inégalable au monde réel. Ce n’est pas une vérité révélée une fois pour toute. Elle s’est construite au cours des siècles, en un combat incessant contre la pensée dogmatique ou simplement paresseuse, en établissant les règles du raisonnement démonstratif et en définissant les conditions de l’expérimentation scientifique. La forme la plus avancée du raisonnement est le langage mathématique, celle de l’expérimentation est la physique qui construit un modèle de la matière en termes mathématiques.
Le monde vivant est décrit par une biologie moléculaire qui, si elle n’a pas (encore ?) établi la même proximité avec les mathématiques que ne l’a fait la physique, utilise chaque jour une méthodologie de plus en plus rigoureuse. Dans ce domaine aussi le cerveau de l’homo sapiens, développé au cours des millions d’années du paléolithique, livré à lui-même n’a que de pitoyables intuitions. Sans la démarche rationnelle, systématique et courageuse, d’un Darwin quel homme du passé dans ses plus fous phantasmes aurait pu imaginer que nous n’étions que des avatars des chordées marins, visqueux et minuscules, réchappés de l’extinction permien-trias d’il y a 250 millions d’années ? Alors que la religion et l’orgueil n’ont cessé de clamer que l’homme est hors de la nature, la biologie moléculaire a démontré que le chimpanzé a 99 % de ses gènes en commun avec nous, que les vingt acides aminés qui sont les éléments de construction des 25000 protéines qui constituent le corps humain sont les mêmes à travers toutes les espèces vivantes. Ces acides aminés étant codés à travers tout le monde vivant à l’aide d’un même code génétique qui utilise des mots de trois lettres construit à partir des quatre bases universelles de l’ADN : A, T, C, et G. Quel fou aurait pu imaginer cela!
Les Alacalufes sur la Terre de feu ou les indiens Yaqui du nord du Mexique peuvent être indifférents au projet occidental de prendre le pouvoir sur la nature. La rationalité les laisse froid de même que sa quintessence que sont les mathématiques. Ils préfèrent les visions que leur donnent le peyotl ou les chants d’extase à la maîtrise scientifique du monde. C’est une approche du monde pleine de richesses et donc parfaitement respectable. Mais cela ne leur a pas permis de maîtriser l’électricité ou le moteur à explosion, ni de décrypter l’universalité du code génétique. On peut vivre pleinement son humanité sans la rationalité, ou peut-être avec juste le minimum de rationalité qui assure le caractère opératoire des fonctions de base dans le monde réel. Mais pour dominer la nature, l’humanité a développé un outil unique, unique au double sens d’inégalable et de seul: la pensée rationnelle. Essayer de construire un modèle du monde en négligeant le corpus des principes rationnels ne fait qu’ouvrir la porte « au n’importe quoi » de la pensée religieuse. Si je n’ai plus de critères pour trier le vrai du faux alors tout peut être dit avec la même force: l’immaculée conception, la réincarnation, les tables tournantes, la position des astres à la naissance détermine le caractère, dieu a une tête d’éléphant.
Les OVNI et la télépathie s’apparentent à une proposition sur le monde réel qui se dispense des règles de la Science. Que l’Univers contienne ou pas d’autres formes de vie et d’intelligence que les nôtres n’est pas du tout anodin. De même, s’il existe un moyen entre deux cerveaux humains de s’échanger des informations à l’aide de « vibrations » inconnues de la physique, cela ne manquerait pas de bouleverser complètement la représentation que nous avons de la réalité. Ce ne sont pas des détails que l’on peut donc traiter à la légère et surtout hors du cadre de cette méthode rationnelle qui jusque là a justement a permis à l’humanité de sortir de l’obscurantisme et de maîtriser la nature d’une façon magistrale. Si ces sujets apparaissent dignes d’intérêt, alors appliquons leur la méthode scientifique qui a si bien marché par ailleurs. Sinon, laissons leur le statut poétique que leur donne le rêve ou l’art. Il y a un grand nombre de choses que notre intuition sensible ne peut même pas concevoir, la pensée rationnelle a permis d’en comprendre quelques unes, il reste beaucoup de points obscurs peut-être à jamais impénétrables. Comment peut-on penser l’infini de l’Univers et encore moins sa finitude - qu’y a-t-il au-delà du bord ? – avec notre cerveau de chasseurs-cueilleurs ? La théorie des cordes a peut-être une réponse simple: l’espace n’a pas trois dimensions, ni quatre avec le temps, mais dix. Notre intuition est impuissante face à ce défi.
Marx disait : « l'humanité ne se pose jamais que des problèmes qu'elle peut résoudre ». Alors laissons les OVNI et la télépathie avec la métempsychose et le spiritisme, pas parce qu’ils ébranleraient notre modèle du monde – la découverte d’une nouvelle interaction ou d’une autre vie ne pourrait que réjouir ceux qui aiment le savoir – mais parce que la rareté du phénomène le rend inabordable par la seule méthode à notre disposition : la méthode scientifique. Pourquoi vouloir tenter des choses impossibles alors qu’il y a tant à faire ? Le modèle du monde fourni par 26 siècles de science est plein de trou, de zone obscure, de terra incognita, comblons-les.
Une araignée dévide un fil plus solide que l’acier pour faire un piège à insecte d’une efficacité absolue et surtout d’une forme complexe faite de rayon et d’une spirale, certains fils étant collant d’autres secs. Cet objet parfait est fabriqué par un être vivant dont les mouvements sont contrôlés par un système nerveux constitué de neurones. Bien sûr, il n’y a aucun apprentissage, les gestes requis pour la construction de la toile sont codés génétiquement, c'est-à-dire qu’ils sont inscrit dans l’ADN de l’araignée. La transformation d’une information génétique en impulsions nerveuses est un processus fondamental incompris aujourd’hui, sa description serait un progrès majeur de la neurobiologie. Attelons nous à ce genre de tâches ! A la fois passionnantes et accessibles. Difficiles sans doute, mais accessibles car une approche rationnelle peut s’y appliquer. Laissons aux poètes ce qui ne peut pas (encore ?) entrer dans la construction tâtonnante d’un modèle rationnel du monde. Faisons-en des œuvres d’art !
Athènes a fourni à l’humanité un outil, avec la pensée rationnelle, qui permet d’aller bien au-delà de l’intuition sensible. La rationalité n’est pas seulement la formalisation du fonctionnement de la psyché humaine mais d’abord, et c’est là un miracle, le reflet de la structure du monde matériel, extérieur et objectif par rapport à l’homme. L’ébahissement naît de la distance qui sépare l’esprit de la matière. Un esprit construit pour gérer efficacement tout un ensemble de perceptions subtiles - le gibier qui s’échappe, le partenaire à séduire ou les rapport de force à l’intérieur du clan – ne parait en aucune manière préparé à penser une matière faite de particules, de champs, de molécules et d’ADN.
Les Grecs les premiers, puis des milliers de héros de la pensée dans les siècles qui ont suivi, se sont dressés pour dire à l’homme que le discours sur le monde avait un prix, parler vrai avait une exigence. L’ensemble des règles qui a donné à l’homme occidental le contrôle de la matière sont encore aujourd’hui fragiles et balbutiantes, la pensée rationnelle est toujours un combat. Le risque de lapidation ne guette plus trop les Hypatie modernes, pas plus que le bûcher ne menace les chercheurs scientifiques. Mais l’injonction « Raisonne ! », aujourd’hui comme hier, est ressentie comme une incongruité ou pire comme une menace. Il est plus facile de parler en l’air que d’argumenter de façon rationnelle. Pour séduire, « le n’importe quoi » peut être efficace, mais certainement pas pour saisir le monde réel.
Il y a un émerveillement inépuisable à considérer la puissance que la rationalité a donné au cerveau humain. Des réalités aussi inimaginables – au sens propre de l’impossibilité d’en former une image – que la dualité onde-corpuscule peuvent être appréhendées par l’intelligence et par conséquent utilisées. Qui peut saisir intuitivement, sauf peut-être dans un délire ou un trip à l’acide, cette réalité : une particule projetée sur un écran muni de deux trous traverse nécessairement par l’un des deux trous mais néanmoins une partie essentielle de ce qui la constitue – l’onde – passe par l’autre trou. Réalité incontournable puisque des franges d’interférence se forment a l’arrière, phénomène qui signe la présence de la superposition de deux sources ondulatoires. L’expérience peut être réalisée avec de la lumière, des photons, mais aussi avec de plus grosses particules comme les électrons, elle peut aussi être faite très lentement en envoyant seulement un électron après l’autre, c'est-à-dire en s’assurant que ce ne sont pas les paquets d’électrons passant par le trou n° 1 qui interagissent avec ceux passant par le trou n° 2. Non, c’est bien chacun des électrons qui interagit avec une information obtenu par lui-même sur l’existence d’un deuxième trou pour former les franges d’interférence. L’électron « sait » qu’il y a deux trous ! Encore plus fort : si par un moyen quelconque on s’assure de savoir pour chaque électron émis par quel trou il est passé, alors les franges disparaissent. Il n’y a plus de franges d’interférence. C’est le principe d’incertitude d’Heisenberg qui interdit à l’observateur de connaître la position exacte de la particule.
La logique d’Aristote est peut-être mis à mal par toute cette physique quantique, mais pas la pensée rationnelle dont les mathématiques, qui fournissent les outils pour appréhender cette réalité quantique de notre monde, sont les plus parfaits rejetons. Athènes a ouvert une porte pour sortir de l’obscurantisme, c'est-à-dire du « n’importe quoi » qui a permis aux prêtres et aux charlatans de voler les rêves de l’homme pour l’asservir. La rationalité est un outil de liberté qui donne à l’homme un accès d’une puissance inégalable au monde réel. Ce n’est pas une vérité révélée une fois pour toute. Elle s’est construite au cours des siècles, en un combat incessant contre la pensée dogmatique ou simplement paresseuse, en établissant les règles du raisonnement démonstratif et en définissant les conditions de l’expérimentation scientifique. La forme la plus avancée du raisonnement est le langage mathématique, celle de l’expérimentation est la physique qui construit un modèle de la matière en termes mathématiques.
Le monde vivant est décrit par une biologie moléculaire qui, si elle n’a pas (encore ?) établi la même proximité avec les mathématiques que ne l’a fait la physique, utilise chaque jour une méthodologie de plus en plus rigoureuse. Dans ce domaine aussi le cerveau de l’homo sapiens, développé au cours des millions d’années du paléolithique, livré à lui-même n’a que de pitoyables intuitions. Sans la démarche rationnelle, systématique et courageuse, d’un Darwin quel homme du passé dans ses plus fous phantasmes aurait pu imaginer que nous n’étions que des avatars des chordées marins, visqueux et minuscules, réchappés de l’extinction permien-trias d’il y a 250 millions d’années ? Alors que la religion et l’orgueil n’ont cessé de clamer que l’homme est hors de la nature, la biologie moléculaire a démontré que le chimpanzé a 99 % de ses gènes en commun avec nous, que les vingt acides aminés qui sont les éléments de construction des 25000 protéines qui constituent le corps humain sont les mêmes à travers toutes les espèces vivantes. Ces acides aminés étant codés à travers tout le monde vivant à l’aide d’un même code génétique qui utilise des mots de trois lettres construit à partir des quatre bases universelles de l’ADN : A, T, C, et G. Quel fou aurait pu imaginer cela!
Les Alacalufes sur la Terre de feu ou les indiens Yaqui du nord du Mexique peuvent être indifférents au projet occidental de prendre le pouvoir sur la nature. La rationalité les laisse froid de même que sa quintessence que sont les mathématiques. Ils préfèrent les visions que leur donnent le peyotl ou les chants d’extase à la maîtrise scientifique du monde. C’est une approche du monde pleine de richesses et donc parfaitement respectable. Mais cela ne leur a pas permis de maîtriser l’électricité ou le moteur à explosion, ni de décrypter l’universalité du code génétique. On peut vivre pleinement son humanité sans la rationalité, ou peut-être avec juste le minimum de rationalité qui assure le caractère opératoire des fonctions de base dans le monde réel. Mais pour dominer la nature, l’humanité a développé un outil unique, unique au double sens d’inégalable et de seul: la pensée rationnelle. Essayer de construire un modèle du monde en négligeant le corpus des principes rationnels ne fait qu’ouvrir la porte « au n’importe quoi » de la pensée religieuse. Si je n’ai plus de critères pour trier le vrai du faux alors tout peut être dit avec la même force: l’immaculée conception, la réincarnation, les tables tournantes, la position des astres à la naissance détermine le caractère, dieu a une tête d’éléphant.
Les OVNI et la télépathie s’apparentent à une proposition sur le monde réel qui se dispense des règles de la Science. Que l’Univers contienne ou pas d’autres formes de vie et d’intelligence que les nôtres n’est pas du tout anodin. De même, s’il existe un moyen entre deux cerveaux humains de s’échanger des informations à l’aide de « vibrations » inconnues de la physique, cela ne manquerait pas de bouleverser complètement la représentation que nous avons de la réalité. Ce ne sont pas des détails que l’on peut donc traiter à la légère et surtout hors du cadre de cette méthode rationnelle qui jusque là a justement a permis à l’humanité de sortir de l’obscurantisme et de maîtriser la nature d’une façon magistrale. Si ces sujets apparaissent dignes d’intérêt, alors appliquons leur la méthode scientifique qui a si bien marché par ailleurs. Sinon, laissons leur le statut poétique que leur donne le rêve ou l’art. Il y a un grand nombre de choses que notre intuition sensible ne peut même pas concevoir, la pensée rationnelle a permis d’en comprendre quelques unes, il reste beaucoup de points obscurs peut-être à jamais impénétrables. Comment peut-on penser l’infini de l’Univers et encore moins sa finitude - qu’y a-t-il au-delà du bord ? – avec notre cerveau de chasseurs-cueilleurs ? La théorie des cordes a peut-être une réponse simple: l’espace n’a pas trois dimensions, ni quatre avec le temps, mais dix. Notre intuition est impuissante face à ce défi.
Marx disait : « l'humanité ne se pose jamais que des problèmes qu'elle peut résoudre ». Alors laissons les OVNI et la télépathie avec la métempsychose et le spiritisme, pas parce qu’ils ébranleraient notre modèle du monde – la découverte d’une nouvelle interaction ou d’une autre vie ne pourrait que réjouir ceux qui aiment le savoir – mais parce que la rareté du phénomène le rend inabordable par la seule méthode à notre disposition : la méthode scientifique. Pourquoi vouloir tenter des choses impossibles alors qu’il y a tant à faire ? Le modèle du monde fourni par 26 siècles de science est plein de trou, de zone obscure, de terra incognita, comblons-les.
Une araignée dévide un fil plus solide que l’acier pour faire un piège à insecte d’une efficacité absolue et surtout d’une forme complexe faite de rayon et d’une spirale, certains fils étant collant d’autres secs. Cet objet parfait est fabriqué par un être vivant dont les mouvements sont contrôlés par un système nerveux constitué de neurones. Bien sûr, il n’y a aucun apprentissage, les gestes requis pour la construction de la toile sont codés génétiquement, c'est-à-dire qu’ils sont inscrit dans l’ADN de l’araignée. La transformation d’une information génétique en impulsions nerveuses est un processus fondamental incompris aujourd’hui, sa description serait un progrès majeur de la neurobiologie. Attelons nous à ce genre de tâches ! A la fois passionnantes et accessibles. Difficiles sans doute, mais accessibles car une approche rationnelle peut s’y appliquer. Laissons aux poètes ce qui ne peut pas (encore ?) entrer dans la construction tâtonnante d’un modèle rationnel du monde. Faisons-en des œuvres d’art !
dimanche 20 février 2011
Circuits
Here are some pictures of the different circuits used in my automata.
This one has on the right the infrared detection part, the 28-pin chip at the bottom center is the Atmega microcontroller, the two 8-pin chips are UCC27424 MOSFET drivers used to drive the DC motors. The left part provides a 40 kHz square signal to the ultrasonic transmitter, it is made of NE556 double timer and a CD4049 hex inverter. The idea was to turn on and off every 50 to 500 msec with the second timer of NE556 the 40 kHz signal provided by the first timer to use pseudorange. This turned out not to give a satisfying accuracy and I finally relied on an extra RF signal to synchronize US transmitter an receiver.
There is two power supplies, the first one at 6 V for the IR and the motors, the second one at 12 V to be added to the previous 6 V to get the required 18 V for driving the US piezoelectric crystal. The PCB below is slightly different, only one 5 V regulator is used both for the Atmega and for the IR. Also the secondary circuit of the NE556 has been removed. Ultimately I replaced NE556 by NE555.
The IR detector are made of an IR led and a phototransistor
The US transmitter is just below a 45° cone
US receivers use an operational amplifier as proposed by Texas Instruments: http://msl.gaw.ru/pdf/TI/app/msp430/slaa136a.pdf
This one has on the right the infrared detection part, the 28-pin chip at the bottom center is the Atmega microcontroller, the two 8-pin chips are UCC27424 MOSFET drivers used to drive the DC motors. The left part provides a 40 kHz square signal to the ultrasonic transmitter, it is made of NE556 double timer and a CD4049 hex inverter. The idea was to turn on and off every 50 to 500 msec with the second timer of NE556 the 40 kHz signal provided by the first timer to use pseudorange. This turned out not to give a satisfying accuracy and I finally relied on an extra RF signal to synchronize US transmitter an receiver.
There is two power supplies, the first one at 6 V for the IR and the motors, the second one at 12 V to be added to the previous 6 V to get the required 18 V for driving the US piezoelectric crystal. The PCB below is slightly different, only one 5 V regulator is used both for the Atmega and for the IR. Also the secondary circuit of the NE556 has been removed. Ultimately I replaced NE556 by NE555.
The IR detector are made of an IR led and a phototransistor
The US transmitter is just below a 45° cone
US receivers use an operational amplifier as proposed by Texas Instruments: http://msl.gaw.ru/pdf/TI/app/msp430/slaa136a.pdf
mardi 25 janvier 2011
Inscription à :
Articles (Atom)