...
 
Commits (2)
......@@ -6,7 +6,7 @@ Objectif: Concevoir, commander et évaluer un système embarqué.
Les systèmes embarqués sont présents partout au quotidien
(robots, drones, box internet, bornes wifi, routeurs, smartphones, appareils médicaux, automates industriels, domotique, IoT, ...)
(robots, drones, box internet, bornes wifi, routeurs, smartphones, appareils médicaux, automates industriels, domotique, contrôle d'accès, IoT, ...)
Leurs caractéristiques communes:
......@@ -27,11 +27,14 @@ Sujets 2018-2019:
* TP [Raspberry Pi](docs/tp-raspi.md)
* Révision: TP [Arduino](tp-arduino.md)
* Asservissement de moteur à courant continu avec [encodeur à quadrature v2](docs/moteur_cc_encodeur_quadrature_2.md)
* [tracking visuel](docs/tracking_visuel.md) avec tourelle.
* Robot de téléprésence: depuis un navigateur, on veut piloter le robot, voir ce que filme sa caméra, visualiser la vitesse de rotation de roues (BONUS: et le courant qui traverse chaque moteur).
* Pilotage de moteur à courant continu avec [encodeur à quadrature v2](docs/moteur_cc_encodeur_quadrature_2.md)
* serveur streaming video [reefwingrobotics](http://reefwingrobotics.blogspot.com/2017/03/streaming-video-from-raspberry-pi-camera.html), serveur streaming + commande [reefwingrobotics](http://reefwingrobotics.blogspot.com/2017/03/controlling-raspberry-pi-via-web-browser.html), [blog.miguelgrinberg](https://blog.miguelgrinberg.com/post/stream-video-from-the-raspberry-pi-camera-to-web-browsers-even-on-ios-and-android). BONUS: [real-time-object-detection](https://hackernoon.com/tensorflow-js-real-time-object-detection-in-10-lines-of-code-baf15dfb95b2)
Sujets 2017-2018:
* [tracking visuel](docs/tracking_visuel.md) avec tourelle.
* Interface [web](docs/interface-web.md) CGI (à remplacer par node.js)
* IHM [android](docs/tp_UI_android.md)
......@@ -49,10 +52,11 @@ TODO
* (gpio commande directe: vieux sujet TP MCTR ; [gertboard](https://fr.farnell.com/gertboard/gertboard/carte-gertboard-assemblee/dp/2250034))
* mini projets:
* quadrature encoder
* robot: instrumentation: quadrature encoder, capteur de courant. Réseau: trames iRobot.
* linux+uC: arduino Yun
* IoT: esp8266
* Android + ML (voice, yolo): tensoflow lite+ bluetooth+ arduino: [youtube](https://www.youtube.com/watch?v=FKoxqZ7R7Ec), [create.arduino.cc](https://create.arduino.cc/projecthub/joechen/jrobot-self-drive-powered-by-tensorflow-lite-94c82f)
* vision: in-browser Yolo ; third-party yolo
* vision, voir [tp-vision-advanced](tp-vision-advanced.md)
......
Asservissement de moteur à courant continu avec encodeur à quadrature v2
Pilotage de moteur à courant continu avec encodeur à quadrature v2
======
NOTE: les projets et TP sont réalisés avec des [logiciels libres](https://fr.wikipedia.org/wiki/Logiciel_libre)!
Pré-requis: TP arduino et TP Python.
!!!!!! TODO : recentrer raspi+ard. remplacer pmod par transistor. ajouter UI. ajouter file output.
ajouter retour camera
Nous souhaitons réaliser l'asservissement en position d'un moteur à courant continu.
Nous souhaitons:
* commander un moteur à courant continu branché à un arduino depuis un PC avec un script Python.
* mesurer la vitesse de rotation d'un MCC sur l'arduino.
* récupérer sur le PC sous Python la valeur de la vitesse de rotation.
Pour cela nous utiliserons:
* un moteur à courant continu [IG220053](notices_techniques/moteur_DC_ig220053x00085r_ds.pdf) de tension d'alimentation 6V et de courant max 200mA
* un Transistor mosfet "logic level" STP55NF06L
* un encodeur à quadrature composé de deux détecteurs à effet Hall, et d'un aimant.
* nous programmerons la partie C sur arduino uno, la raspberry exposera un serveur permettant de commander le moteur et d'afficher son état.
* nous programmerons la partie C sur arduino uno.
* la partie Python sera codée sur les PC de bureau. Elle sera copiée sur la raspberry dans un second temps.
> **Question**: faites les tp de révisions arduino et python.
Puis lisez entièrement les documents techniques avant de passer à la suite.
> **Question**: cabler le transisitor sur l'arduino comme dans [TP hacheur série](tp-motor.md)
> **Question**: cabler le transistor sur l'arduino comme dans [TP hacheur série](tp-motor.md) et le commander.
> **Question**: cabler les capteurs à effet hall sur les pins 2 et 3. Demander à l'enseignant avant d'alimenter.
......@@ -57,84 +63,12 @@ Le moteur n'est pas alimenté dans cette partie.
Répeter ce que vous avez fait ci-dessus, mais cette fois en utilisant deux interruptions, une pour chaque encodeur, comme dans cet [exemple](http://playground.arduino.cc/Main/RotaryEncoders#Example3)
## Commande du moteur à courant continu avec le pont en H
On va alimenter le moteur dans cette partie.
La commande du pont en H sera effectué à l'aide d'un signal PWM, dont le rapport cyclique est variable entre 0 (0 %) et 255 (100 %).
Pour cela on va utiliser les commandes:
#define analogOutPin 9 // à mettre au début
analogWrite(analogOutPin, x); // à mettre dans loop()
Commande en vitesse avec un potentiomètre, en boucle ouverte
------
On a vu ci-dessus comment commander en vitesse le pont en H avec un signal pwm.
Maintenant on veut lire la tension aux bornes d'un potentiomètre pour commander le moteur en vitesse.
On lit l'état du pin analogique A0. Quand on lui applique une tension comprise entre 0 et 5v, le pin renvoie une valeur entière située entre 0 (pour 0V) et 1023 (pour 5V).
Enfin, on transforme cet entier en une valeur comprise entre 0 et 255 pour commander le PWM qui commande le pont en H.
> **Question**: cabler le potentiomètre sur le pin A0, et commander le moteur en vitesse comme expliqué ci-dessus.
Astuce: utiliser la fonction arduino [map](https://www.arduino.cc/en/Reference/Map)
Remarque: on n'a pas utilisé les encodeurs dans cette partie, on est en boucle ouverte.
Commande en position avec vitesse positive
------
Choisir une position cible pos_target (par exemple un ou deux tours complets du moteur, côté réducteur).
Soit l'algorithme suivant:
```C
while(True){
pos=lire_position();
if(pos<pos_target)
speed = s;
else
speed = 0;
}
```
> **Question**: programmer cet algorithme. Avec le moniteur série, affichez la position actuelle. Constatez-vous un dépassement ? Quel est le problème avec cet algorithme ?
Asservissement en position depuis un PC
------
Commander le moteur en position:
* depuis python. envoyer un octet. puis saisie au clavier.
* avec une interface graphique: Tkinter, ou matplotlib.widget, si disponible
* récupérer sur le port série la valeur de consigne et la valeur effective du compteur, tracer un graphe avec votre interface graphique.
## Commande du moteur à courant continu depuis le PC de bureau
> **Question**: utiliser la partie dialogue série dans [TP Arduino](tp-arduino.ino) pour commander le moteur à la vitesse souhaitée.
Asservissement en position avec interface web
------
* interface web :
* avec python + jquery [exemple1](http://stackoverflow.com/questions/18226565/how-to-pass-values-to-python-from-a-jquerymobile-slider), [exemple 2](http://stackoverflow.com/questions/14996414/running-python-cgi-scripts-from-javascript-and-jquery-mobile-ui)
* (serveur web python [exemple](http://apprendre-python.com/page-python-serveur-web-creer-rapidement) )
* esp httpd https://github.com/mathew-hall/esp8266-dht http://harizanov.com/2015/03/diy-internet-connected-smart-humidifier/ https://github.com/mathew-hall/esp8266-dht
* tornado http://archive.fabacademy.org/archives/2016/doc/WebSocketConsole.html http://www.instructables.com/id/Use-ESP8266-to-Internet-enabled-AC-Appliances/?ALLSTEPS
* interface web embarquée :
* wifi: esp8266: transposer le cas python+jquery avec micropython. (exemple [rgb led lua](http://randomnerdtutorials.com/10-diy-wifi-rgb-led-mood-light-with-esp8266-step-by-step/) )
* arduino yun http://www.fabiobiondi.com/blog/2014/02/html5-arduino-yun-and-angularjs-build-a-mobile-servo-controller/ http://www.tecnomacs.com/2016/12/03/lets-do-a-simple-webserver-ui-for-arduino-yun-using-bootstrap/
* raspberry pi + écran LCD (tactile ?)
## BONUS: intensité
LIENS
------
A l'aide d'une résistance de valeur connue, et des ports analogiques, calculer le courant traversant le moteur et l'envoyer côté Python.
* programmation: http://playground.arduino.cc/Main/RotaryEncoders , http://forum.arduino.cc/index.php?topic=355245.0 (interruptions)
* théorie: "sampled-data feedback systems" (willsky 11.2.4)
* asservissement en vitesse et position avec arduino et pmodhb5 sous [scilab](https://scilab.developpez.com/tutoriels/apprendre-xcos/#LIV-B-3-c)
* asservissement en courant ? cf [forum hd17](http://hackaday.com/2015/04/20/driving-a-brushless-dc-motor-sloooooooowly/)
* conception de circuit (avec pont en H L298N): fritzing + L298 + magnetic/optical encoder
* PID+dcservo [misan](https://github.com/misan/dcservo)
[vhdl]:https://fr.wikiversity.org/wiki/Very_High_Speed_Integrated_Circuit_Hardware_Description_Language/Commande_de_robot_mobile_et_p%C3%A9riph%C3%A9riques_associ%C3%A9s#Interface_des_pmodHB5_avec_l.27ATMega16
NILM: non-intrusive load monitoring
======
https://hackaday.io/project/79848-grid-2-audio
* mooc "Socle en Electricité" arts et métiers https://www.fun-mooc.fr/courses/course-v1:ensam+022005+session03/about
* hi-freq mains sampling: [hackaday.io](https://hackaday.io/project/79848-grid-2-audio)
* zac pajol [tpline.eu](http://www.tpline.eu/fr/cours/livres/ZAC%20Pajol/Bulletin_01_2019.php)
* def elec: puissance: http://www.epsic.ch/cours/electrotechnique/theorie/puialt/340.html, https://fr.wikipedia.org/wiki/Puissance_r%C3%A9active
* smart meter online: hd18 grid-2-audio
* NILM,NIALM (non intrusive load monitoring): http://nilmworkshop.org/2016/proceedings/Poster_ID17.pdf, https://www.researchgate.net/publication/261082558_Smart_meter_systems_measurements_for_the_verification_of_the_detection_classification_algorithms,
* https://www.ijcaonline.org/archives/volume180/number6/zemene-2017-ijca-916052.pdf, https://rd.springer.com/article/10.1007%2Fs10044-015-0487-x
* openenergymonitor.org
* hardware: Yomo researchgate, Yay https://www.researchgate.net/publication/282539462_YoMo_the_Arduino-based_smart_metering_board https://www.researchgate.net/publication/318664197_Yay_-_an_open-hardware_energy_measurement_system_for_feedback_and_appliance_detection_based_on_the_arduino_platform https://www.researchgate.net/publication/324459175_Design_and_implementation_of_a_low-cost_arduino-based_high-frequency_AC_waveform_meter_board_for_the_raspberry_pi
* quintanas https://www.researchgate.net/publication/324459175_Design_and_implementation_of_a_low-cost_arduino-based_high-frequency_AC_waveform_meter_board_for_the_raspberry_pi
* Makonin: http://makonin.com/, researchgate piNILM, https://github.com/smakonin/APMR
* HI-FREQ: low cost hardware [[medal|https://www.researchgate.net/publication/317051078_MEDAL_A_Cost-Effective_High-Frequency_Energy_Data_Acquisition_System_for_Electrical_Appliances]] usb sound card + pince ampermétrique ; clustering [[RG|https://www.researchgate.net/publication/324609389_Appliance_classification_across_multiple_high_frequency_energy_datasets]]
* NILM [wikipedia](https://en.wikipedia.org/wiki/Nonintrusive_load_monitoring), [[nilmtk| https://github.com/nilmtk/nilmtk/tree/master/docs/manual/user_guide]], https://scipy.in/2017/downloads/ankitmahato/attachment/ABSTRACT/Smart_Meter_Data_Analytics_using_Orange_ankitmahato..pdf, https://github.com/ConvergenceDA/visdom-web,https://github.com/Logimethods/smart-meter
......@@ -119,6 +119,7 @@ Pour cela il faut récupérer la description de l'objet reconnu. Pour cela on ut
* raspi zero+ vision chip: [google AI vision](https://aiyprojects.withgoogle.com/vision)
* raspi 3 + intel movidus stick https://github.com/leswright1977/RPi3_NCS2
* camera cmucam pixy
# Crédits
......