Category Archives: Arduino

Arduino AT328p-pu et UsbAsp en C

Bonjour,

 

Je me suis demandé comment programmer directement un microcontroleur Atmel sans avoir à passer par Arduino et son bootloader. J’ai travaillé sur un AT328p-pu (vraiment celui qui se trouve sur un arduino)

Je me suis donc acheté sur ebay une petite clé usb asp pour rien avec frais de port offert. Autant dire qu’ils sont quand même balaise pour faire de l’électronique aussi peu chère…

Cette clé usb est basée sur http://www.fischl.de/usbasp/ où vous retrouverez le schéma de cablage.

En plus de cette clé vous aurez besoin de:

1x  ATMEGA328P-PU

1x  Crystal  16 MHz

2x 22pF

2x  10Kohm 1% 1/4W resistor (one for reset, one for input switch)

1x  300ohm 1% 1/4W resistor (limitation of current of LED)

1x  LED

1x  L7805CV   (+5Vdc regulator) pour l’alimentation en 5v

2x  100uF (Filter capacitor) pour l’alimentation en 5V

 

Au passage voici le pinout du microcontroleur

Pour la connection attention c’est compliqué… le MISO au MISO, le MOSI au MOSI, 5V au 5v, le GND au GND et le /RST au /RST…

 

Donc ensuite, sur votre ordinateur, sur votre os linux préféré, ici, archlinux (mais sa doit être similaire sur d’autres distributions)

Installez les applications qui vont bien

pacman -S avr-gcc avr-binutils avr-gdb avr-libc avrdude

Pour faciliter la suite vous pouvez installer « sudo »

pacman -S sudo

vous devrez modifier le fichier /etc/sudoers en décommentant %wheel ALL=(ALL) ALL

Voilà après ce sera plus simple. Donc ensuite, on va essayer avec un programme super simple blink de la led 13.

 

Voilà un exemple de code « blink.c »

#include <avr/io.h>
#include <util/delay.h>

enum {
 BLINK_DELAY_MS = 1000,
};

int main (void)
{
 /* set pin 5 of PORTB for output*/
 DDRB |= _BV(DDB5);

 while(1) {
  /* set pin 5 high to turn led on */
  PORTB |= _BV(PORTB5);
  _delay_ms(BLINK_DELAY_MS);

  /* set pin 5 low to turn led off */
  PORTB &= ~_BV(PORTB5);
  _delay_ms(BLINK_DELAY_MS);
 }

 return 0;
}

 

Pour compiler:

avr-gcc -mmcu=atmega328p -Wall -Os -o blink.elf blink.c

Ensuite:

avr-objcopy -j .text -j .data -O ihex blink.elf blink.hex

Pour uploader:

avrdude -p m328p -c usbasp -e -U flash:w:blink.hex

Voici quelques commandes supplémentaires pour le fun:
pour dumper la flash

avrdude  -c usbasp -p m328p -U flash:r:blinkdump.hex:i

pour dumper l’eeprom:

avrdude  -c usbasp -p m328p -U eeprom:r:eedump.hex:i

lire les fusibles:

avrdude  -c usbasp -p m328p -U lfuse:r:-:h -U hfuse:r:-:h

Au passage un lien pour calculer les fusibles

http://www.engbedded.com/fusecalc/

 

Maintenant que le microcontroleur est programmé il faut vérifier si notre programme fonctionne.

Pour mettez en place un oscillateur et une led comme suit:

 

Puis il n’y a plus qu’à  alimenter votre microcontroleur +5v et GND. Et voilà!!!

 

Maintenant vous pouvez développer vos propres applications en C, dumper, uploader,…

 

So enjoy!

Bluetooth Serial avec UART et arduino

Hello,

Je suis en train de travailler sur un arduino et j’aimerai pouvoir communiquer avec lui à l’aide du bluetooth. Donc je suis parti voir du côté d’ebay fournisseur de composant élec à un prix intéressant. et j’ai trouvé ça.

Et donc voilà après réception de ce petit appareil  voilà venu le temps du paramétrage.En général, par défaut, la clé est paramétrée en: 9600, N, 8, 1. Son code pin par défaut est: 1234.

Si vous voulez modifier ça, il faut la connecter à un un port série. Pour faire ça, ils font aussi des clés usb to rs232 très bien faites pour rien.

Et donc dans le terminal
screen /dev/ttyUSB0 9600
(pour quitter ctrl+A)

Mais ça ne marche pas top du coup je vous conseille la console arduino, elle est toujours bien pratique
(Attention pas de caractère de fin!!)

Attention aussi il faut que la clé bluetooth ne soit pas apairée avec un appareil.

Voici donc les commandes de bases pour le paramétrage:

  • Pour vérifier que la connexion est présente

AT     réponse:OK

  • Pour set le baudrate pour faciliter la discussion..

AT+BAUDx    réponse:OKxxxxxx
où x est un numéro indiquant le baudrate
1-1200bps
2–2400bps
3–4800bps
4–9600bps
5–19200bps
6–38400bps
7–57600bps
8–115200bps
9–230400bps
A–460800bps
B–921600bps
C–1382400bps

  • Pour changer le nom de votre device

AT+NAMExxxx   réponse: OKsetname

  • Pour changer le code pin de pairage

AT+PINxxxx   réponse:OKsetPIN

quelques infos supplémentaires
Pin definition :

* PIO8 connects with LED cathodea with 470ohm series resistor in between. LED NEGATIVE connects to ground. It is used

to indicate the module state. After powered on, flashing intervals differ in different states.
* PIO9 is used to control LED indicating paring. It will be steady on when paring is successful.
* PIO11, module state switching pin. HIGH -> response to AT command; LOW or floating -> regular work status.
* With build-in reset circuit, reset is completed automatically after powered on.
* Steps to set to MASTER:
* Set PIO11 HIGH with a 10K resistor in between.
* Power on, module comes into AT Command Response Status
* Open HyperTerminal or other serial tool, set the baud rate 38400, 8 data bits, 1 stop bit, no parity bit, no Flow

Control
* Via serial port, send characters « AT + ROLE = 1 r n »,if successful, return « OK r n », where r n is carriage return.
* Set PIO11 LOW, re-power, then in Master state, automatically search for slave module and connect.

 

et voilà maintenant vous pouvez connecter votre clé BT à un arduino et vous amuser à communiquer en Serial :)

 

So Enjoy!

Multiprise over ethernet

 

Hello,

 

Je vous partage une petite idée que j’ai réalisé il y a près de 2 ans maintenant mais que je n’ai pas eu l’occasion de la partager, alors la voilà enfin… J’ai réinventé la multiprise en la rendant commandable depuis internet. Tout en « conservant’ l’aspect d’une simple multiprise c’est à dire avec un fil électrique a brancher sur la prise murale.

Et voilà ce que ça donne:

 

Bon c’est vrai que c’est un peu gros et un peu moche mais c’est une bidouille d’un week end…Soyez indulgent :)

Et à l’oeuvre:


 

Bon ça a l’air de rien comme ça mais l’intérêt c’est que où que vous branchiez votre multiprise cela vous permettra de commander les appareils branchés dessus!!!!
Comme depuis votre smartphone favoris ou bien un server qui automatiserait le pilotage de tout ça. Imaginez tout ce qui n’était pas commandable le deviens grâce à la multiprise Nicolas..euh la multiprise over ethernet.

Pour réaliser ça c’est assez simple, il vous faut:

-2 modules courant porteur que vous ne craignez pas d’exploser (moi j’avais une dizaine de DHP 200 de chez DLink en spare qui est qq chose de vieux maintenant donc ça marchera facilement avec n’importe quel CPL)

-un arduino

-un ethernet shield

-un transfo pour alimenter un arduino

-des relais 220V/10A (ou moins d’ampérage après à vous de voir ce que vous branché dessus) j’avais trouvé des plaques toutes faites sur ebay avec les transistors et les borniers qui vont bien car je suis un peu mou du cul ;)

-un boitier prise mural. Moi j’ai pris un bloc 3 prises après à vous de voir combien de relais vous voulez câbler

 

et pour finir qq dominos, des wagos, du câble 220 et un peu d’huile de coude…

 

Si j’oubliais, très important!!!!!! Il faut une boîte en bois que l’on trouve facilement chez les cavistes! Attention je ne vous pousse pas à consommer ;)

 

La « petite » boîte Nicolas est du plus bel effet… On est DIY ou on ne l’est pas :)

 

Donc voici le principe de fonctionnement:

 

Voici quelques photos du projet:

 

 

 

Pour le code source

(!! Attention je ne sais plus si c’est la dernière version débugguée donc à tester!!!)

Le code est basé sur webduino http://code.google.com/p/webduino/

 

#include « Ethernet.h »

#include « WebServer.h »

 

 

template<class T>

inline Print &operator <<(Print &obj, T arg)

{ obj.print(arg); return obj; }

 

 

// CHANGE THIS TO YOUR OWN UNIQUE VALUE

static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

 

// CHANGE THIS TO MATCH YOUR HOST NETWORK

static uint8_t ip[] = { 192, 168, 2, 123 };

byte gateway[] = { 192, 168, 2, 123 };

byte subnet[] = { 255, 255, 255, 0 };

 

#define PREFIX «  »

 

WebServer webserver(PREFIX, 80);

 

void outputPins(WebServer &server, WebServer::ConnectionType type, bool addControls = false)

{

P(htmlHead) =

« <html> »

« <head> »

« <title>Ma multiprise web</title> »

« <style type= »text/css »> »

« BODY { font-family: sans-serif } »

« H1 { font-size: 14pt; text-decoration: underline } »

« P  { font-size: 10pt; } »

« </style> »

« </head> »

« <body> »;

 

int i;

server.httpSuccess();

server.printP(htmlHead);

 

if (addControls)

server << « <form action=' » PREFIX « /’ method=’post’> »;

 

server << « <h1>Ma multiprise web</h1><p> »;

 

 

int val = analogRead(0);

 

//prise 1

if (val >150)

{

val =1;

}else

{

val=0;

}

server << « Prise n°1 : « ;

server.radioButton(« d4″, « 1 », « On », val);

server <<  » « ;

server.radioButton(« d4″, « 0 », « Off », !val);

server << « <br/> »;

 

//prise 2

int val2 = analogRead(1);

if (val2>150)

{

val2 =1;

}else

{

val2=0;

}

server << « Prise n°2 : « ;

server.radioButton(« d2″, « 1 », « On », val2);

server <<  » « ;

server.radioButton(« d2″, « 0 », « Off », !val2);

server << « <br/> »;

 

//prise 3

int val3 = analogRead(2);

if (val3>150)

{

val3 =1;

}else

{

val3=0;

}

server << « Prise n°3 : « ;

server.radioButton(« d7″, « 1 », « On », val3);

server <<  » « ;

server.radioButton(« d7″, « 0 », « Off », !val3);

server << « <br/> »;

server << « <br/> »;

 

 

if (addControls)

server << « <input type=’submit’ value=’Submit’/></form> »;

 

server << « </body></html> »;

}

 

void formCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)

{

if (type == WebServer::POST)

{

bool repeat;

char name[16], value[16];

do

{

repeat = server.readPOSTparam(name, 16, value, 16);

if (name[0] == ‘d’)

{

int pin = strtoul(name + 1, NULL, 10);

int val = strtoul(value, NULL, 10);

digitalWrite(pin, val);

}

} while (repeat);

 

server.httpSeeOther(PREFIX « / »);

}

else

outputPins(server, type, true);

}

 

void setup()

{

// set pins 0-8 for digital input

for (int i = 0; i <= 9; ++i)

pinMode(i, INPUT);

pinMode(9, OUTPUT);

 

 

Ethernet.begin(mac, ip, gateway, subnet);

webserver.begin();

//  Serial.println(« Webserver On »);

 

webserver.setDefaultCommand(&formCmd);

}

 

void loop()

{

// process incoming connections one at a time forever

webserver.processConnection();

 

// if you wanted to do other work based on a connecton, it would go here

}

 

 

 

So enjoy !!!

Un transistor = interrupteur?

Hello,

Un transistor est un composant électronique qui peut servir de nombreuses façons.

Il peut servir essentiellement d’ampli ou d’interrupteur. C’est grâce à ce dernier mode que depuis une cinquantaine d’année les ordinateurs révolutionnent le monde… de simple interrupteurs…

 

Donc si pour vos petites bidouilles vous avez besoin de cela voici un petit lien pour mieux appréhender cela si vous ne savez pas comment faire.

Dernière chose voici un très bon tuto pour faire un intervallomètre pour votre appareil photo préféré (faites attention quand même à vérifier que cela est compatible avec votre appareil photo, moi j’ai un Canon et le schéma est différent de celui indiqué dans le tuto)

 

Enjoy

Android SDK

Hello,
Ca y est j’ai laissé tombé mon iphone pour tenter l’expérience Android… Mouais ergonomiquement parlant ça y ressemble même si c’est un peu plus fouilli. Je vous conseille d’essayer et puis Android c’est un peu « The » téléphone pour un geek ;)

Android_robot.svg

Bref, l’intérêt c’est que c’est bien ouvert on qu’on peut faire pas mal de dev.

Il un sdk aux petits oignons en plus c’est en java et ça se fait à travers Eclipse donc nickel :)

Voici un petit tuto pour commencer vos premiers devs.

Android c’est bien c’est vraiment ouvert! peut être un peu trop car il y a de vrais risques. pour vous prémunir faites attention à ce que vous téléchargez. Quand on regarde cette video d’une conf qu’il à eu à la cantine (lieu très agréable) on peut vite se faire %ù »#!

Dernière chose Google annonce un add on de type arduino… mais vous pouvez trouver d’autres choses bien sympathiques comme amarino mais aussi.

So enjoy !

Arduino le documentaire

Hello !

Donc voici une petite video sur l’histoire de l’arduino (à voir « after the break » comme on dit par chez nous). C’est excellent, ça donne envie de quitter son boulot et de se lancer dans des projets de ce style et faire avancer les hacktivistes!

Même si en ce moment, c’est un peu à la mode de faire un film sur son projet …  Qui sait? je vais peut être faire un film sur un de mes projets…

Enjoy!

Simulateur Arduino

Voici un petit lien pour télécharger Fritzing une appli open source pour schématiser ces circuits élec avec la petite touche Arduino! ^^

Enjoy!