Go Down

Topic: [Besoin d'aide]Arduino pour piloter un portail à partir d'un téléphone portable (Read 7 times) previous topic - next topic

jihelbi

Parfois il ne faut pas s'obstiner et laisser murir. On débouche parfois ainsi sur des solutions étonnement simples.

A t-on vraiment besoin du spectre intégral dans le cas de tonalité précise. On doit pouvoir dérivé une mesure beaucoup plus simple ?..

Je suis étonné que personne n'ai travaillé la dessus.

JLB

skywodd


A t-on vraiment besoin du spectre intégral dans le cas de tonalité précise. On doit pouvoir dérivé une mesure beaucoup plus simple ?..
Je suis étonné que personne n'ai travaillé la dessus.

L'algorithme "Goerztel" est justement une variante trés pratique de la FFT (transformation rapide de fourrier) à ne pas confondre avec la DFT (transformation discrète de fourrier).

Dans la première (FFT) tu calcul des bandes de fréquences sur un spectre trés large, ce qui prend beaucoup de temps.
Dans la seconde (DFT/Goertzel) tu calcul seulement un coefficient (correspondant à une fréquence cible précise) et l'algo "Goertzel" calcul l'amplitude de cette fréquence uniquement et non pas sur un spectre complet.
Ce qui est beaucoup plus rapide qu'une FFT sur un petit nombre de fréquences cibles (ex type: codage DTMF).

Par contre l'algo goertzel à deux gros inconvénient :
- les calculs en flottant qui doivent être le plus précis possible (-> calcul trés gourmand en ressource sur un AVR 8 bits)
- la fréquence d'échantillonnage qui doit être parfaitement respecter (-> timer) et dans l'idéal un multiple de la fréquence cible
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

xav01

Salut,

Effectivement la solution "téléphone portable obsolète" ne me semble pas la plus adaptée : l'interface me paraît compliquée pour un non-bidouilleur (même si on peut développer des logiciels qui décrivent un peu mieux les fonctionnalités).

Mon système doit pouvoir être piloté par des gens qui n'ont pour l'instant aucune idée de la différence entre wifi et bluetooth.
L'interface web me permet de rendre les choses plus compréhensibles et plus conviviales.

Pour l'instant mon site web devrait ressembler à ça (code réalisé à partir de plusieurs codes trouvés sur le forum):

Code: [Select]

<html>
<!--précise que le code qui suit doit être compris comme du html -->
 
  <!-- Essai pour adapter le projet trouvé ici: http://arduino.cc/forum/index.php/topic,97750.0.html
au pilotage d'un portail -->

  <head>
<!-- description préliminaire de tout ce qui touche au fichier actuel: rapport avec d'autres fichiers, possibilités de redimensionner l'affichage, appareils particuliers acceptés, titre de la page -->
 
    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
<!-- Je ne sais pas ce que veut dire viewport, mais ensuite les paramêtres sont: largeur=largeur de l'appareil ; échelle initiale =1 ; échelle maximale =1 ; échelle modifiable par l'utilisateur? non -->

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- rajouté en se calquant sur le index.html de l'ardugate -->

<meta name="HandheldFriendly" content="True" />
<!-- ça veut probablement dire: site convivial pour les appareils mobiles? oui -->

    <link rel="stylesheet" type="text/css" href="style.css" media="screen"/>
<!-- ça veut dire que les styles utilisés par la suite (ici H1, h2, light, roundrect, light p, body,... bref les styles de texte mais aussi les styles d'images) sont dfinis dans le document "style.css"  -->

    <script type="text/perl" src="bonjour.pl"></script>
<!--  déclare le fichier bonjour.pl , présent dans le même répertoire que le fichier actuel, comme un script perl
Ce script ne sert qu'à vérifier mes capacités à écrire un script perl-->

<script language="javascript" src="common.js"></script>
<script language="javascript" src="serial.js"></script>
<script language="javascript" src="arduino.js"></script>
<script language="javascript" src="app.js"></script>
<!-- les 4 scripts ci-dessus sont utiliss par l'ardugate, donc je les ai rajoutés, en attendant de savoir s'ils seront nécessaires dans mon projet final -->

    <title>Pilotage du portail par site web</title>
<!-- ça c'est le titre qui apparait en haut de la page web -->

  </head>
<!-- fin de la zone de déclaration préliminaire -->
 
<body>
<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v" />
<!-- ??? -->

<text-align: center>
<!--? alignement des textes : centré par défaut ? -->

<table width="device-width">
<tr valign="center">
<td>
Actions simples : <br/>
Cycles : <br/>
R&eacute;initialisation : <br/>
</td>
<td>
<input type="button" id="btnouvport" value="Ouvrir" onclick="Ouvrir() " style="width:90px" /> <br/>
<!-- appelle la fonction Ouvrir() si on clique sur le bouton nommé btnouvport, dans lequel il est écrit "Ouvrir" -->
<!-- la fonction Ouvrir() sera définie dans un script perl ou javascript -->
<input type="button" id="btnvoiture" value="Cycle voiture" onclick="Voiture()" style="width:90px"/> <br/>
<input type="button" id="btninitouv" value="en ouvrant" onclick="Initouv()" style="width:90px"/> <br/>
</td>
<td>
<input type="button" id="btnferport" value="Fermer" onclick="Fermer() " style="width:90px"/> <br/>
<input type="button" id="btnpieton" value="Cycle pi&eacute;ton" onclick="Pieton()" style="width:90px"/> <br/>
<input type="button" id="btninitfer" value="en fermant" onclick="Initfer()" style="width:90px"/> <br/>
</td>
</tr>
</table>

<div id="ouverture" style="text-align:center; width:100%" >Portail ouvert à ??? % </div>
<!-- appelle la classe "ouverture" à définir dans un script, qui affichera le taux d'ouverture du portail, dont la valeur sera envoyée en continu par l'Arduino -->

<div id="actionencours" style="text-align:center; width:100%" >Action en cours : ??? </div>
<!-- appelle la classe "actionencours" à définir dans un script, qui affichera l'action en cours, envoyée par l'Arduino -->

</body>
 
</html>


(voir image attachée pour le résultat graphique dans un navigateur).

Comme vous le voyez, j'ai annoté énormément ce bout de code, mais ça m'aide beaucoup à comprendre les significations de chaque ligne de code.
Il est encore très inachevé et très imparfait, mais le rendu est plus ou moins ce que je cherche (faudra que je travaille le rendu, mais quand ce sera mon seul souci, je m'en sortirai).

J'ai aussi commencé à rédiger mon code pour l'arduino, mais là c'est plus long, surtout parce que je n'ai aucun capteur sur la position réelle du portail.

Je suis obligé de la déduire du temps écoulé depuis le début de chaque déplacement, et comme :
- dans un cycle normal, j'ai des phases d'accélération, à vitesse constante haute, de décélération, et à vitesse constante basse (pour faire une rampe puis une phase de recherche de butée),
- je veux prendre en compte les cas où le portail s'est arrêté sans être sur une des butées
il faut que je calcule précisément sa position, et ça m'occupe un peu (mais j'aime ça :) ).

Du coup ça fait un programme un peu lourd (environ 3, 5 Ko pour l'instant, et il lui manque encore plein de fonctions).

Reste la partie script, pour laquelle je n'ai pas du tout commencé.
Dès que j'aurai débuté le script, je viendrai appeler au secours, ne vous en faites pas :) .

jihelbi

Ma solution était une proposition avec de la recup. Elle est effectivement compliquée sur le plan soft.

Par contre comme je ne vois pas bien ce qu'on peut faire avec un portail à part l'ouvrir et le fermer j'ai bien du mal à comprendre l'utilité d'une interface web.

Ouvrir et fermet peut effectivement se faire avec une shield wifi ou bluetooth et les librairies existantes.

Peux tu préciser ce que permettra l'interface web : A part ouvrir et fermer le portail depuis n'importe quel endroit du monde je ne vois pas bien...

JLB

jihelbi

Si le web est destiné à résoudre le problème d'écriture d'un soft sur le téléphone il y a la possibilité d'utiliser un des nombreux logiciels de télécommande par bluetooth disponibles sur le net. Ainsi rien à écrire sur le téléphone.

JLB

Go Up