Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier. Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer. Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens). Les pages seront ajoutées ou modifiées petit à petit. Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater. Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr . Tout message reçoit une réponse Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche Pour laisser un message, allez dans le "LIVRE D'OR" Bonne visite
Le GPS de Mazda Rx8
Sur Futura Sciences, le forumeur Ghashog Delta cherchait une solution pour commander son GPS escamotable. L'intégratité de cette discussion assez longue est ICI Le cahier des charges est le suivant: Il y a deux poussoirs de commande, un pour ouvrir et fermer le volet, un second pour régler le tilt (inclinaison) du volet. Le système doit garder en mémoire la dernière position du volet, s'ouvrir à cette position à la mise du contact et se fermer automatiquement à la fermeture du contact. La position du volet est mesurée par un potentiomètre. On ajoute un arret du fonctionnement en cas de blocage du volet.
Le shéma proposé se compose essentiellement d'un picaxe 14M2 et d'un driver L293 pour le moteur:
Remarques:
Les quatre amplis du L293D sont en parallèle deux à deux La broche B.0 est utilisée pour la programmation et le reset du L293D Il devrait y avoir une résistance de pulldown sur l'entrée C.3 (alimentation contact). Mais si le contact est ouvert, tous les équipements non alimentés relient cette entrée au 0v, sans risque de tension aléatoire.
Le second schéma proposé est dans le lien de la discussion originale.
Le code correspondant à ce schéma:
;mazda MM 14/12/2017 #picaxe 14M2 symbol tilt=pinC.0 ;poussoir tilt symbol onoff=pinC.1 ;poussoir on/off symbol contact=pinC.3 ;entrée contact symbol protect=B.1 ;entrée courant lu symbol potar=C.4 ;entrée ADC capteur symbol leve=B.2 ;sortie moteur lever symbol baisse=B.5 ;sortie moteur baisser symbol flag=bit0 ;flag enregistrement on/off symbol pos=b1 ;position sélectionnée,0=entré , 1=pos1, 2=pos2, 3=pos3 symbol memopos=b2 ;mémo position pour onoff symbol autopos=b3 ;position actuelle symbol courmax=b4 ;seuil courant max symbol courant=b5 ;valeur lue symbol posact=w13 ;valeur actuelle capteur symbol posoff=w12 ;valeur capteur rentré symbol pos1=w11 symbol pos2=w10 symbol pos3=w9 symbol posfin=w8 ;valeur recherchée
posoff=20 ;pos rentré valeur ADC pour essais pos1=400 ;pos1 (valeurs réelles) pos2=500 ;pos2 (à recalculer) pos3=600 ;pos3 courmax= 50 ;(1v -> 255/5) memopos=1 autopos=0 dirsB=%11111101 ;portsB en sorties sauf B.1 low leve :low baisse ;confirmation arrêt moteur do ;en sommeil env 140µA sleep 2 ;réveil toutes le env 4,5 s loop while contact=0 ;tant que contact off setfreq M16 ;fréquence à 16MHz pullup %11100000000 ;pullup sur C.0 à C.2 read 0,pos ;lecture position mémorisée if pos <>0 then gosub mouv ;si pos non rentrée, on bouge setint or %00, %11 ;interruption sur onpff et tilt (C.0 ou C.1) ;****** boucle principale ************ do if pos<>autopos then gosub mouv ;suite interupt, si nouvelle pos différente, on bouge if flag=1 then gosub M_A ;demande OFF par interrupt if contact=0 then gosub repos ;détection coupure contact loop ; ******************************************** M_A: ;sub poussoir onoff if pos=0 then ;il est rentré,on le sort pos=memopos else ;il est sorti memopos=pos pos=0 ;on le rentre endif gosub mouv: ;activation moteur flag=0 ;raz flag return
repos: ;arret sur coupure contact pause 5000 ;délai 1,25 s if contact=1 then ;confirmation (test inutile?) return ;non confirmé endif write 0,pos ;mémo position pos=0 ;position rentré readadc10 potar,posact ;si non rentré if posact > posoff then gosub mouv ;on le rentre reset ;réinitialisation -> sleep
mouv: ;sub mouvement lookup pos,(posoff,pos1,pos2,pos3),posfin ;valeur capteur ft position if posact>posfin then ; on est au dessus, high baisse ;on baisse do readadc protect, courant if courant>courmax then blocage readadc10 potar,posact ;valeurs de 0 à 1023 loop while posact > posfin ;jusqu'à position finale low baisse ;arrêt moteur goto fin ;on sort elseif posact < posfin then ;on est en dessous, on lève high leve do readadc protect, courant if courant>courmax then blocage readadc10 potar,posact loop while posact < posfin low leve else ;autres cas, low leve : low baisse ; tout arrêt (on sait jamais...) endif fin: autopos=pos ;mémorisation nouvelle position return
interrupt: ;sub interruption sur C.O ou C.1 if tilt=0 and pos<>0 then ;action sur tilt inc pos ;incrémentation position if pos>=4 then ;boucle sur 3 positions pos=1 endif endif if onoff=0 then ;action sur onoff flag=1 ;marque passage endif do loop while tilt=0 or onoff=0 ;attente fin de condition interruption setint or %00, %11 ;réarmement interruption return
Le résultat.... avec les commentaires de Ghashog Delta (merci à lui)